Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Action из DLL [D7, WinXP]


Страницы:   1 2

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-окон?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо