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

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

TMenuItem.Click -> any.dll\procedure


Страницы:   1 2 3 4 5 6 7 8

Dennis I. Komarov ©   (2009-05-22 10:38:00) 

Вопрос - не вопрос но:

Есть: некое приложение, интерфейс которого грузим из некой БД согласно правам пользователя, который запустил это приложение. В частности, возьмем ситуацию с TMainMenu. Согласно правам загрузилось дерево меню и подменюшек. Есть некая "ссылка" (int) на то, что должно выполнится при вызове соответствующего пункта. Процедура сего действия, а так же все интерфейсы и т.п. вынесены в библиотеку (dll).

Вопрос такой: Какая (а точнее, кто придумает лучшую) логика должна быть, чтобы связать конечный пункт менюшки с соответствующей процедурой в библиотеке, при том чтобы выполнялось условие: в приложении описана только логика а конкретные данные вынесены из него, т.е. при добавлении нового пункта (в БД) не изменялось само приложение, а только библиотека (или добавлялась новая)


clickmaker   (2009-05-26 14:18:00) [61]

кстати, вместо фрейма можно вполне и TForm юзать

она менее придирчива )

procedure TCustomForm.CreateParams(var Params: TCreateParams);

if (Parent = nil) and (ParentWindow = 0) then
   begin
     WndParent := Application.Handle;


Сергей М.   (2009-05-26 14:17:00) [62]


> нету у нас УмбаЮмба-приложения


А как же "кроссплатформенность", на которую ты пальцем кажешь ?)
Сегодня нет, а завтра найдется  ..
Ты же сам же сказал - "Есть: некоеприложение".
Почему этому "некому" не быть тем самым УмбаЮмба-приложением, пытающимся использовать твою суперпуперкроссплатформенную дельфийскую DLL, которая у тебя сейчас пытается в муках родиться ?)


> "главное окно У-Ю приложения" все равно должно иметь некий
> идентификатор


Ты не понял: УмбаЮмба-приложение может вообще не иметь "главного окна", в том смысле и с той спецификой, как оно трактуется и используется в дельфийском VCL-приложении


Dennis I. Komarov   (2009-05-26 14:13:00) [63]

И то, по идее, хендла окно (от MDIChild) Должно быть в принципе достаточно, т.к. через него можно найти хендл  Win-Application, но это уже другая песня...


Dennis I. Komarov   (2009-05-26 14:07:00) [64]

нету у нас УмбаЮмба-приложения. Могут быть только библиотеки, которые соответственно могут распоряжаться двумя параметрами: хендл Win-Application и хендл окна куда она должна поместить свое УмбаЮмба windiws-окно
???

ЗЫ
  А "главное окно У-Ю приложения" все равно должно иметь некий идентификатор, если оно конечно как-то связано с Windows :)


Сергей М.   (2009-05-26 13:59:00) [65]


> App.Handle приложение должно вернуть хендл главного окна
> приложения


Так точно.

И тут же вопрос: а что есть "главное окно" УмбаЮмба-приложения ?)


Dennis I. Komarov   (2009-05-26 13:57:00) [66]

Возможно и не прав, но
App.Handle приложение должно вернуть хендл главного окна приложения (не MainForm)


Сергей М.   (2009-05-26 13:51:00) [67]

Так у тебя библиотека-то твоя не на УмбаЮмба писана, а на Делфи)
А УмбаЮмба знать не знает ни про какие Делфи и уж тем более про объект Application и специфику использования его свойства Handle)


Dennis I. Komarov   (2009-05-26 13:48:00) [68]

Так вроде у нас библиотеки могут разрабатываются на таком класном IDE :)


Сергей М.   (2009-05-26 13:42:00) [69]


> AHandle передает Application.Handle приложения


Угу.

А что, по твоему, должно передать в кач-ве Application.Handle хост-приложение, разработанное в каком-нить УмбаЮмбаIDE ?)


Dennis I. Komarov   (2009-05-26 13:36:00) [70]


> Кто же хэндл формы использует в кач-ве хендла глоб.объекта
> Application ?

Да ни в коем разе...
хендел формы передавался параметром AParent, AHandle передает Application.Handle приложения :)


Сергей М.   (2009-05-26 13:26:00) [71]


> после
>  Application.Handle:=AHandle;


Ну ты и додумался)

Кто же хэндл формы использует в кач-ве хендла глоб.объекта Application ?


Dennis I. Komarov   (2009-05-26 13:15:00) [72]

Из копания в генофонде нашел:
procedure TCustomFrame.CreateParams(var Params: TCreateParams);
begin
 inherited;
 if Parent = nil then
   Params.WndParent := Application.Handle;
end;


т.е.
после
 Application.Handle:=AHandle;
ошибку победили, но фрэйм так и не появился :(


clickmaker   (2009-05-26 12:43:00) [73]

> [79] Dennis I. Komarov ©   (26.05.09 11:16)
> Да, я не пойму почему...

в методе CreateParams FParentWindow чему равно?


Dennis I. Komarov   (2009-05-26 11:16:00) [74]

Да, я не пойму почему...


Сергей М.   (2009-05-26 11:04:00) [75]


> TForm.Handle не есть хендл окна?


Есть.
Ну так ты убедился что Params.WndParent = 0 ?


Dennis I. Komarov   (2009-05-26 10:58:00) [76]

да спросил конечно, чего его спрашивать то если и так видно :)
Тока вот почему... *SCRATCH*

TForm.Handle не есть хендл окна?


Сергей М.   (2009-05-26 10:45:00) [77]


> Отладчик молчит по поводу значения WndParent


Так ты спроси у него конкретно - чему, мол, равно Params.WndParent)

Он же "бестолковый" - не понимает что ид-р WndParent имеет отношение к структуре Params)


Dennis I. Komarov   (2009-05-26 10:36:00) [78]


> Dennis I. Komarov ©   (26.05.09 10:31) [74]

нет, обманул, не то окно пробежал, действительно попадаем внутрь :(


Dennis I. Komarov   (2009-05-26 10:31:00) [79]

procedure TWinControl.CreateWnd;
var
 Params: TCreateParams;
 TempClass: TWndClass;
 ClassRegistered: Boolean;
begin
 CreateParams(Params);
 with Params do
 begin
   if (WndParent = 0) and (Style and WS_CHILD <> 0) then
     if (Owner <> nil) and (csReading in Owner.ComponentState) and
       (Owner is TWinControl) then
       WndParent := TWinControl(Owner).Handle
     else
       raise EInvalidOperation.CreateFmt(SParentRequired, [Name]);
    FDefWndProc := WindowClass.lpfnWndProc;


Отладчик молчит по поводу значения WndParent, но после 1-го if идем на выделенную строку, значит WndParent <> 0 (ну или Style and WS_CHILD = 0) :) Так что не тут ошибочка ...


KSergey   (2009-05-26 10:29:00) [80]

мне вот интересно
Идет обсуждение тех. реализации...
а может посмотреть на готовое? ну вот в винамп очень даже гибко встраивается
или есть еще микрософтовский API для mmc.

Может поизучать как и что люди делают?


Страницы:   1 2 3 4 5 6 7 8

Наверх

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