![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
TMenuItem.Click -> any.dll\procedure
Dennis I. Komarov © (2009-05-22 10:38:00)Вопрос - не вопрос но:
Есть: некое приложение, интерфейс которого грузим из некой БД согласно правам пользователя, который запустил это приложение. В частности, возьмем ситуацию с TMainMenu. Согласно правам загрузилось дерево меню и подменюшек. Есть некая "ссылка" (int) на то, что должно выполнится при вызове соответствующего пункта. Процедура сего действия, а так же все интерфейсы и т.п. вынесены в библиотеку (dll).
Вопрос такой: Какая (а точнее, кто придумает лучшую) логика должна быть, чтобы связать конечный пункт менюшки с соответствующей процедурой в библиотеке, при том чтобы выполнялось условие: в приложении описана только логика а конкретные данные вынесены из него, т.е. при добавлении нового пункта (в БД) не изменялось само приложение, а только библиотека (или добавлялась новая)
Сергей М. (2009-05-26 10:16:00) [81]
> AParent <> 0
А вот фрагмент "генофонда" говорит об ином..
Ты вникни в него, я же не зря привел его ..
Сергей М. (2009-05-26 10:09:00) [82]Это ты где смотришь ?
Значение фактическипереданного хэндла нужно смотреть уже в теле конструктора, а не в коде, вызывающем конструктор ..
Dennis I. Komarov (2009-05-26 10:09:00) [83]
function CreateIUsers;
begin
ShowMessage(InttoStr(AParent));
if AParent <> 0 then
with TFrameUsers.CreateParented(AParent) do begin
Result:=Handle;
end;
end;
AParent <> 0
Dennis I. Komarov (2009-05-26 10:04:00) [84]
> if (WndParent = 0) and (Style and WS_CHILD <> 0) then
>
> WndParent у тебя равен нулю.
>
> А говоришь "передается")
но x.Handle <> 0 :(
Сергей М. (2009-05-26 09:59:00) [85]
> кто-нить объяснит почему нету Parent-окна?
Потому что ты непередаешь его (факт.параметром в конструктор передается нуль), что еще не понятно ?)
Сергей М. (2009-05-26 09:58:00) [86]
> где в коде намек на MDIParent?
А мне почем знать, что в идентификаторе TFormMDIBase Chпостфикс у тебя означает сокращение именно от "Child", а не что-то иное ?)
Dennis I. Komarov (2009-05-26 09:55:00) [87]Так, ну кто-нить объяснит почему нету Parent-окна?
> Это ты что же, хочешь сделать parent'ом окно MDIParent-формы ?)
> Нет, против окна MDIChild-формы я ничего не имею)
И где в коде намек на MDIParent?
Сергей М. (2009-05-26 09:51:00) [88]
if (WndParent = 0) and (Style and WS_CHILD <> 0) then
WndParent у тебя равен нулю.
А говоришь "передается")
Сергей М. (2009-05-26 09:42:00) [89]
> Dennis I. Komarov © (25.05.09 17:40) [62]
> Где Parent-окно потерялось?
А вот где:
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]); // <--здесь
..
Slym (2009-05-26 06:15:00) [90]Сергей М. © (25.05.09 17:24) [61]
проще свой простенький фреймворк напесадь
Dennis I. Komarov (2009-05-25 17:40:00) [91]
> Так ведь в самую пору выходить из лесу, коль скоро "кроссплатформенностью"
> озаботился ..
Выйду, выйду... :) Где Parent-окно потерялось?
Сергей М. (2009-05-25 17:24:00) [92]
> не создавал я ActiveX ни разу. Ну темный лес
Так ведь в самую пору выходить из лесу, коль скоро "кроссплатформенностью" озаботился ..
Dennis I. Komarov (2009-05-25 17:07:00) [93]
> а ничего, что сразу после ShowUserI(x.Handle); делается
> FreeLibrary(LibHandle); ?
Ну дас, косяк :) но на ошибку сие не влияет, т.к. она происходит до этого.
> Да все оттуда же)
>
> То у тебя "прокатывает", то "не прокатывает" - метод научного
> тыка осваиваешь ?)
>
> Взял бы да оформил свой фрейм как ActiveX-контрол - вот
> тебе и готовый "кроссплатформенный интерфейс"... Я ж тебе
> не зря про COM/OLE намекал, а ты все про воробьев да про
> пушки) ..
Ну опять 25... Ну не создавал я ActiveX ни разу. Ну темный лес... Регистрация всякая, COM/OLE ...
Сергей М. (2009-05-25 16:53:00) [94]
> clickmaker © (25.05.09 16:48) [57]
К 57-му посту маразм только крепчает)
Сергей М. (2009-05-25 16:51:00) [95]
> откуда возникают такие вопросы?
Да все оттуда же)
То у тебя "прокатывает", то "не прокатывает" - метод научного тыка осваиваешь ?)
Взял бы да оформил свой фрейм как ActiveX-контрол - вот тебе и готовый "кроссплатформенный интерфейс"... Я ж тебе не зря про COM/OLE намекал, а ты все про воробьев да про пушки) ..
clickmaker (2009-05-25 16:48:00) [96]а ничего, что сразу после ShowUserI(x.Handle); делается FreeLibrary(LibHandle); ?
Dennis I. Komarov (2009-05-25 16:43:00) [97]
> а зачем владельцем MDIChild-формы выбран объект Application
Собственно, а почему бы и нет? Форма создается без проблем, откуда возникают такие вопросы? :)
Сергей М. (2009-05-25 16:31:00) [98]
> окно MDIChild-формы, а что - не окно?
Нет, против окна MDI Child-формы я ничего не имею)
Впрочем, и тут возникает тот же вопрос - а зачем владельцем MDIChild-формы выбран объект Application ?
Dennis I. Komarov (2009-05-25 16:20:00) [99]
> окно MDIParent-формы
окно MDIChild-формы, а что - не окно? :(
Сергей М. (2009-05-25 16:15:00) [100]Это ты что же, хочешь сделать parent'ом окно MDIParent-формы ?)