![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Action из DLL [D7, WinXP]
AlexG © (2004-06-22 16:02:00)Как мне присвоить экшн элементу меню, если экшн находится в DLL?
AlexG (2004-06-23 17:22:00) [1]WondeRu
Не было никакого версуса. evvcom © мне помог разобраться.
WondeRu (2004-06-23 17:14:00) [2]evvcom © versusAlexG ©
Who wins?
AlexG (2004-06-23 16:57:00) [3]Эта та форма, которую я понял. Спасибо большое.
evvcom (2004-06-23 16:51:00) [4]Ответ в том, что
> Вообще я бы не стал хранить объекты VCL в разных модулях.
> А уж если очень хочется, то включи использование runtime
> пакетов. Но учти, что эта dll сможет работать только с exe,
> откомпиленным в той же версии Delphi и с ее runtime bpl-ками.
Хорошо, поясню. Если не использовать runtime-пакеты (*.bpl), то код методов одного и того же класса дублируется и в exe, и в dll, и по сути эти классы становятся двумя разными классами! Хотя и с полностью идентичным кодом. Когда работаешь c объектом одного класса в коде другого класса могут происходить абсолютно непредсказуемые вещи и практически всегда натыкаешься на полную неработоспособность кода.
Выход:
1. Не хранить никакие сложные объекты (в том числе и VCL) в разных модулях.
или
2. Использовать runtime библиотеки. Тогда дублирование кода класса исключается. Весь код хранится и корректно отрабатывает в runtime package.
AlexG (2004-06-23 16:40:00) [5]Там нет ответа на мой вопрос.
evvcom (2004-06-23 16:32:00) [6]Тогда читай мои предыдущие посты!
AlexG (2004-06-23 16:08:00) [7]Да.
evvcom (2004-06-23 15:52:00) [8]Еще раз.
> Так вот, все элементы для одного окна хранятся в одной DLL.
> Проблема возникает при операции Merge меню дочернего окна
> с главной формой.
А главная форма где? В другом модуле exe-файле?
AlexG (2004-06-23 15:37:00) [9]>evvcom
То, о чем вы рассуждаете, меня не интересует, т.к. я это знаю. Как описать метод, чтобы потом его подключить к событию - не проблема. У меня другой вопрос: AlexG © (22.06.04 20:44) [7]Там дальше первой строки нужно почитать. Так вот, все элементы для одного окна хранятся в одной DLL. Проблема возникает при операции Merge меню дочернего окна с главной формой. Пункты меню теряют привязанные им обработчики событий.
evvcom (2004-06-23 14:43:00) [10]
> TNotifyEvent - к методу класса не какого отношения не имеет.
Вот именно, что имеет.
> На самом деле TNotifyEven - это ничто иное как указатель
> на метод. Т.е. надо объявлять как указатель на метод
Вот это правильно.
> procedure MyAction(Sender: TObject);
А это не есть метод. Методом будет procedure TMyClass.MyAction(Sender: TObject);
> Не оффтопте, пожалуйста.
Прошу прощения. Но эти советы относились к Вам.
> Я работаю без BPL.
Ну а с dll работаете? Судя по
> Action из DLL
должны работать. BPL в принципе те же dll. Если с dll всё же работаете, то я уже писал:
> Вообще я бы не стал хранить объекты VCL в разных модулях.
> А уж если очень хочется, то включи использование runtime
> пакетов. Но учти, что эта dll сможет работать только с exe,
> откомпиленным в той же версии Delphi и с ее runtime bpl-ками.
AlexG (2004-06-23 12:35:00) [11]Если эта грабля, то кто-то должен знать. Но никто мне не ответил до сих пор. Значит - это не грабля.
Amoeba (2004-06-23 12:23:00) [12]Ох уж эта любовь к формам в DLL! И сколько граблей в результате!
AlexG (2004-06-23 12:20:00) [13]Не оффтопте, пожалуйста.
Arnold (2004-06-22 21:14:00) [14]>Не так. OnClick объявлен как TNotifyEvent, а TNotifyEvent = >procedure(Sender: TObject) of object! Т.е. как метод класса, а >это разные вещи.
Не так. TNotifyEvent - к методу класса не какого отношения не имеет. На самом деле TNotifyEven - это ничто иное как указатель на метод. Т.е. надо объявлять как указатель на метод
AlexG (2004-06-22 20:44:00) [15]Я работаю без BPL. Похоже нужно получше объяснить ситуацию.
Я создал MDI-окно дочернее. Из главной формы загружаю его. В дочерней форме у меня есть определенные опреации, подцепленные ActionList'ом. В дочернюю форму я добавил MainMenu. Теперь, при открытии дочернего окна, к меню главной формы присоединяются элементы меню дочернего окна, но операции, связанные с этими пунктами меню, теряются, хотя в design-time все прописано как надо. Вот мне и интересно как все-таки заставить работать эти пункты меню по моим правилам?
evvcom (2004-06-22 17:53:00) [16]
> тока MyAction должен быть объявлен также как и OnClick,
> т.е.
> procedure MyAction(Sender: TObject);
Не так. OnClick объявлен как TNotifyEvent, а TNotifyEvent = procedure(Sender: TObject) of object! Т.е. как метод класса, а это разные вещи.
Вообще я бы не стал хранить объекты VCL в разных модулях. А уж если очень хочется, то включи использование runtime пакетов. Но учти, что эта dll сможет работать только с exe, откомпиленным в той же версии Delphi и с ее runtime bpl-ками.
WondeRu (2004-06-22 17:51:00) [17]муть какая-то ничего не понял! причем тут длл тогда
AlexG (2004-06-22 17:25:00) [18]Он и присвоин, только после merge теряется. Да, форма тоже в ДЛЛ и это меню - ее.
wisekaa (2004-06-22 17:03:00) [19]
> [2] AlexG © (22.06.04 16:49)
> Угу.... А если у меня элемент добавился путем автоматического
> Merge? Как у MDI-окон?
Так присваивать надо до Merge!
AlexG (2004-06-22 16:49:00) [20]Угу.... А если у меня элемент добавился путем автоматического Merge? Как у MDI-окон?