Всем экспертам привет! Большая просьба не пропускать этот вопрос. А то я смотрю, все любят отвечать на однострочные. Вопрос большой, по-другому нельзя, вот такой я. Пишу сразу и в рассылку Delphi и в Pascal, т.к. вопрос не по конкретным компиляторам, а по языку, в общем. Занимаюсь в основном алгоритмикой, по этому не привязан к конкретному компилятору. А тут собрались мы(узкий круг программеров) год назад и решили сделать проект, чтоб всем заняться было чем-то. Ну решили написать мощную игровую платформу в жанре пошаговой тактической стратегии, только не для людей, а для искусственных интеллектов(ИИ), которые будут писать все желающие программеры на Земле;) Первый блин комом – писали на QBasic’e 4.5, хотя проект дошёл до конца, дал опыту, поучил на ошибках. Вторая часть – позор нам как программерам %( Писали на TPascel'e 7.0. О боже!
10 сегментов памяти, все берём о минимуму, графика уже VESA 800*600*8bpp, а математика глючит, структура связи интеллектов и модулей платформы трещит по швам… Так и бросили. И решили сразу писать под 32-х битную платформу, пока только WIN32 на Delphi 5,6,7,>7. Для WIN32 решили сделать такую структуру связи: ИИ в виде *.DLL юзаются ГЛАВНОЙ_ПРОГРАММОЙ.DLL от куда вызываются по очереди главные процедуры ИИ.DLL, а ИИ.DLL юзают процедуры, функции и открытые переменные ЯДРА.DLL. Изначально проект был задуман так, что даже начинающий программист сможет дополнять проект и писать ИИ на любом языке. Статистика показывает, что по использованию программистами лидирует Дельфи, вот почему не С++. Я придерживаюсь политики независимости от программных продуктов, поэтому ядро проекта изначально писалось в консольном виде. Для понятной структуры мира решили использовать объектное программирование. И
видим мы здесь Object и Class. Class рулит, но по любому наследует потроха TObject. Конечно можно извратиться и попробовать перекомпилировать модуль System. Object ничего не наследует если надо, но трудней с выделением памяти да и вообще использование динамически распределённых объектных переменных. Что думают по этому поводу господа эксперты? Нигде не могу найти толковую документацию в электронном виде по объектам и классам, везде тоже самое - фигня. Не поверите, сколько лет программирую до сих пор не знаю нафиг надо виртуальные и невиртуальные методы в объектах и классах? Мне надо чтоб по-нашенски мне объяснили на толковых примерах зачем, как, для чего. Хотя бы ссылками поможИте. Да, вот ещё вопросик, без проблем ли будет использование в ИИ.DLL переменных классов описанных в ЯДРЕ.DLL? Учитывается, то, что ИИ.DLL может писаться на языке отличном от Obj.Pascal, например VB или VС/C++. Заранее
благодарен тем, кто дочитал до этого места и еще больше тем, кто ответит.
Доброе время суток, KODer! Ухххх, дочитал! Объекты и класы - чтобы нам же, программистам, удобнее было, чтобы меньше ручками писать! А если и писать чего-то путное - то уж точно на С++, хотя бы и на С++Буилдере... Только не звать тех 12 обезьян, которые своими лапами, прыгая на клаве, написали Винду:) Мы и без них всё сами сможем, если захотим! А работать будет нормально, если сделаешь так, чтобы какой-нибудь злой человек не взял и не написал вирус какой в дополнение к ИИ, и чтобы компилятор свой нормалный был и т.д., в общем дел много - и я вам завидую, если вы доведёте это нелёшкое дело до конца! Ответ отправлен: 20.05.2003, 18:58 Отправитель: Stein
Вопрос № 653
Уважаемые Эсперты, Скажите пожалуйста что такое экспертная система? Приведите пожалуйста пример экспертной системы. Может у кого нибудь есть исходники или инфа, то включите pls в приложении к ответу или вышлите на e-mail. Спасибо!!
Приветствую Вас, dude! Не понял, что ты имеешь ввиду!Если то, что представляет собой наш сайт, тогда тебе дорога к Олегу(mailto:admin@rusfaq.ru) - админ нашего сайта.Попроси может он тебе даст что-нибудь(сомневаюсь). Счастливо! Ответ отправлен: 20.05.2003, 18:05 Отправитель: BOLT
Вопрос № 654
Добрый день, эксперты. Посдкажите как сделать следующее: Имеется Listbox ... procedure Teditf.ListBox1Click(Sender: TObject); begin num:=strtoint(listbox1.Items.Strings[listbox1.itemindex]); Olecontainer1.CreateObjectFromFile(path,false); olecontainer1.Paste; end; ... В списке находятся номера вопросов.Щелкнув по которым, загружаю в Olecontainer1 для просмотра. Но как сделать процедуру добавления вопросов в список: Я делаю примерно следующее: procedure Teditf.Button1Click(Sender: TObject); begin listbox1.Items.Add(inttostr(listbox1.Items.Count+1)); end; Но мне нужно, чтобы одновременно с этим вызывался Microsoft Word для написания нового вопроса. P.S. Пытался делать через CreateOleObject - не получается.
Доброе время суток, Vova! Не могу почь с вызовом Microsoft Word'ом, но дам совет: используй TMemo, но если надо испльзовать rtf/doc-форматирование, то используй TRichEdit.Просто при добавление нового номера вопроса, передовай фокус полю ввода текста. Счастливо! Ответ отправлен: 20.05.2003, 17:14 Отправитель: BOLT
Приложение: Ответ отправлен: 20.05.2003, 18:58 Отправитель: Stein Отвечает BOLT
Здравствуйте, komrad! На дельфи - фу блин...Delphi!Нет таких процедур/функций для форматирования диска. Но все все-таки это можно сделать, но только на Assemble'е: mov ah, 1ah mod dl, 0 ;номер диска ;0,1,2,3...сколько дисков столько и цифр int 13h ;мое любимое прерывание Но перед кодом всавь дерективу кода Assembler'а и в конце(все это посмотри в справочнике). Есть еще прерывание форматирования по дорожке, но это геморой(простите).Я это не практиковал, т.к. не самоубийца :з)Писал чисто по теории, так что извени, если не будет работать Ответ отправлен: 20.05.2003, 16:50 Отправитель: BOLT Отвечает Lynx
Добрый день, komrad! Врядли тебя Вин пустит к винту. А уж тем более форматнуть. Можешь попробовать так: WinExe ('format C:', 0). :)))
Ответ отправлен: 20.05.2003, 17:53 Отправитель: Lynx
Вопрос № 656
Здравствуйте уважаемые эксперты ! Помогите советом. У меня при закрытии программы по кнопке вываливается сообщение Stack overflow. Программа не закрывается. Пробовал играть настройками компилятора типа {$MINSTACKSIZE $00004000} {$MAXSTACKSIZE $01000000} не помогает. Подскажите в чем может быть дело и как с этим бороться. Оболочка Delphi 3. OS - WinME,Win2K. Радик.
Приветствую Вас, Радик! Вообще-то Delphi 3.0 старовата для Windows ME/2k.Может даже ошибка возникать из-за несовместимости(тогда таких ОС даже в зачатии не было)!Мой совет: меняй на Delphi 7.0 Как здесь поступить: Stack overflow - это переполнение стека, значит попробуй уменьшать MAXSTACKSIZE аж до 1000, пока ошибка не исчезнит. Счастливо!
Ответ отправлен: 20.05.2003, 17:24 Отправитель: BOLT Отвечает Артём Шегеда
Доброе время суток, Радик!
Судя по всему, в обработчике события OnClose,OnCloseQuery,OnDestroy идёт рекурсивный вызов (явный или косвенный) какой-то процедуры. Ищи там. ...кто ищет, тот всегда найдёт... Ответ отправлен: 20.05.2003, 17:27 Отправитель: Артём Шегеда Отвечает Stein
Приветствую Вас, Радик! Может чего там выполняется при закрытии? А кусок кода где? Ответ отправлен: 20.05.2003, 19:07 Отправитель: Stein
Вопрос № 657
Здравствуйте уважаемые эксперты ! Это опять я. У меня на форме две кнопки, которые ее закрывают. По событию OnCloseQuery пишу: procedure TMainForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean); begin if (Sender is TButton) and (TButton(Sender).Name = 'Button1') then ShowMessage('Вы нажали Button1.'); if (Sender is TButton) and (TButton(Sender).Name = 'Button2') then ShowMessage('Вы нажали Button2.'); end; Таким образом хочу узнать по какой кнопке осуществляется выход. Но не работает. Просто выходит. Где ошибка ? Оболочка Delphi 3. OS - WinME,Win2K. Радик.
У тебя Sender никогда не будет кнопкой - не он генерирует это событие. Вообще-то проверку закрытия делают так:
Приложение: Ответ отправлен: 20.05.2003, 19:00 Отправитель: Артём Шегеда Отвечает Stein
Добрый день, Радик! А в обработчине на кнопке нельзя написать то же самое? А теоретичеки должно работать... Ответ отправлен: 20.05.2003, 19:08 Отправитель: Stein Отвечает baldr
Доброе время суток, Радик! Sender - это, скорее всего, будет форма. А проверять лучше из обработчиков кнопок. Пусть они у тебя какой-нибудь переменной что-нибудь присваивают... Тогда можно и в OnCloseQuery проверить эту переменную. Ответ отправлен: 21.05.2003, 08:43 Отправитель: baldr
Вопрос № 658
Здравствуйте уважаемые эксперты ! Это опять я. У меня на форме две кнопки, которые ее закрывают. По событию OnCloseQuery пишу: procedure TMainForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean); begin if (Sender is TButton) and (TButton(Sender).Name = 'Button1') then ShowMessage('Вы нажали Button1.'); if (Sender is TButton) and (TButton(Sender).Name = 'Button2') then ShowMessage('Вы нажали Button2.'); end; Таким образом хочу узнать по какой кнопке осуществляется выход. Но не работает. Просто выходит. Где ошибка ? Оболочка Delphi 3. OS - WinME,Win2K. Радик.
Приветствую Вас, Радик! Я же сказал ошибки нет: ты определяешь имя класса а не объекта.Имя объекта таким способом не определишь! Счастливо! Ответ отправлен: 22.05.2003, 14:07 Отправитель: BOLT Отвечает Stein
Добрый день, Радик!
Ответ отправлен: 20.05.2003, 19:04 Отправитель: Stein
Форма отправки вопроса
Внимание!
Мы рекомендуем открывать рассылку в программе Internet Explorer 5.0+
или отправлять вопросы с сайта по адресу:
http://rusfaq.ru/cgi-bin/Message.cgi.