Текущий архив: 2009.07.26;
Скачать: CL | DM;
Вниз
TMenuItem.Click -> any.dll procedure Найти похожие ветки
← →
clickmaker © (2009-05-25 13:44) [40]> Ловим "control "Frame" has no parent window
в какой момент?
← →
Сергей М. © (2009-05-25 14:11) [41]
> Хэндл в функцию передается
Значит не передается, если тебе черным по белому пишут, что "control .. has no parent window"
Подозреваю, что сейчас начнется свистопляска с соглашением о вызове)
← →
Dennis I. Komarov © (2009-05-25 14:11) [42]здесь:
with TFrameUsers.CreateParented(AParent) do begin
← →
Dennis I. Komarov © (2009-05-25 14:13) [43]
> Подозреваю, что сейчас начнется свистопляска с соглашением
> о вызове)
ctdcall виновытый?
← →
Сергей М. © (2009-05-25 14:14) [44]Виноватый тот кто его втыкает там где он совершенно не нужен и, напротив, не втыкает там где он действительно необходим)
← →
clickmaker © (2009-05-25 14:17) [45]> ctdcall виновытый?
если уж он есть, то и описание фунции в exe тоже должно быть с ним
> здесь:
> with TFrameUsers.CreateParented
прямо-таки здесь? а если отладчиком попробовать зайти в CreateParented?
← →
Dennis I. Komarov © (2009-05-25 14:47) [46]
> Виноватый тот кто его втыкает там где он совершенно не нужен
> и, напротив, не втыкает там где он действительно необходим)
Ну если учесть что пишем ядро для "кроссплатформенных интерфейсов", то так уж он и не нужен? Для эксперемента снял его (и там и там) результат не поменялся :(
> если уж он есть, то и описание фунции в exe тоже должно
> быть с ним
Разумеется и там и там есть:
type
TBaseFunction = function(AParent: HWND): HWND; stdcall;
> прямо-таки здесь? а если отладчиком попробовать зайти в
> CreateParented?
пробывал, он сразу (по F7) и отпревляет на ... Внутрь CreateParented не заходит :(
← →
Сергей М. © (2009-05-25 14:52) [47]
> и там и там есть:
>
А вот в [24] что-то не видать соглашения ..
← →
clickmaker © (2009-05-25 15:01) [48]> Внутрь CreateParented не заходит
[x] Use debug DCUs в настройках проекта + rebuild all
← →
Dennis I. Komarov © (2009-05-25 15:59) [49]
> А вот в [24] что-то не видать соглашения ..
[24] писал с чужого компа, просто не дописал...
← →
Сергей М. © (2009-05-25 16:02) [50]Тогда приводи код вызова этой ф-ции - что и как передаешь параметром ..
← →
Dennis I. Komarov © (2009-05-25 16:07) [51]Classes.pas
...
function InitInheritedComponent(Instance: TComponent; RootAncestor: TClass): Boolean;
function InitComponent(ClassType: TClass): Boolean;
...
Result := InternalReadComponentRes(ClassType.ClassName, FindResourceHInstance(
FindClassHInstance(ClassType)), Instance) or Result;
Вот в этой умерает где-то внутри, в асме запутался кто чего откуда
← →
Dennis I. Komarov © (2009-05-25 16:11) [52]
> Сергей М. © (25.05.09 16:02) [50]
procedure TFormMain.MenuItemClick(Sender: TObject);
var
LibHandle: THandle;
ShowUserI: TBaseFunction;
X: TFormMDIBaseCh;
begin
x:=TFormMDIBaseCh.Create(Application); begin
x.Caption := TMenuItem(Sender).Caption;
LibHandle:=LoadLibrary("users.dll");
try
if LibHandle <> 0 then begin
@ShowUserI:=GetProcAddress(LibHandle, "CreateIUsers");
if Addr(ShowUserI) <> nil then begin
x.Caption:= IntToStr(ShowUserI(x.Handle));
// или просто ShowUserI(x.Handle);
end;
end;
finally
FreeLibrary(LibHandle);
end;
end;
end;
← →
Сергей М. © (2009-05-25 16:15) [53]Это ты что же, хочешь сделать parent"ом окно MDIParent-формы ?)
← →
Dennis I. Komarov © (2009-05-25 16:20) [54]
> окно MDIParent-формы
окно MDIChild-формы, а что - не окно? :(
← →
Сергей М. © (2009-05-25 16:31) [55]
> окно MDIChild-формы, а что - не окно?
Нет, против окна MDIChild-формы я ничего не имею)
Впрочем, и тут возникает тот же вопрос - а зачем владельцем MDIChild-формы выбран объект Application ?
← →
Dennis I. Komarov © (2009-05-25 16:43) [56]
> а зачем владельцем MDIChild-формы выбран объект Application
Собственно, а почему бы и нет? Форма создается без проблем, откуда возникают такие вопросы? :)
← →
clickmaker © (2009-05-25 16:48) [57]а ничего, что сразу после ShowUserI(x.Handle); делается FreeLibrary(LibHandle); ?
← →
Сергей М. © (2009-05-25 16:51) [58]
> откуда возникают такие вопросы?
Да все оттуда же)
То у тебя "прокатывает", то "не прокатывает" - метод научного тыка осваиваешь ?)
Взял бы да оформил свой фрейм как ActiveX-контрол - вот тебе и готовый "кроссплатформенный интерфейс"... Я ж тебе не зря про COM/OLE намекал, а ты все про воробьев да про пушки) ..
← →
Сергей М. © (2009-05-25 16:53) [59]
> clickmaker © (25.05.09 16:48) [57]
К 57-му посту маразм только крепчает)
← →
Dennis I. Komarov © (2009-05-25 17:07) [60]
> а ничего, что сразу после ShowUserI(x.Handle); делается
> FreeLibrary(LibHandle); ?
Ну дас, косяк :) но на ошибку сие не влияет, т.к. она происходит до этого.
> Да все оттуда же)
>
> То у тебя "прокатывает", то "не прокатывает" - метод научного
> тыка осваиваешь ?)
>
> Взял бы да оформил свой фрейм как ActiveX-контрол - вот
> тебе и готовый "кроссплатформенный интерфейс"... Я ж тебе
> не зря про COM/OLE намекал, а ты все про воробьев да про
> пушки) ..
Ну опять 25... Ну не создавал я ActiveX ни разу. Ну темный лес... Регистрация всякая, COM/OLE ...
← →
Сергей М. © (2009-05-25 17:24) [61]
> не создавал я ActiveX ни разу. Ну темный лес
Так ведь в самую пору выходить из лесу, коль скоро "кроссплатформенностью" озаботился ..
← →
Dennis I. Komarov © (2009-05-25 17:40) [62]
> Так ведь в самую пору выходить из лесу, коль скоро "кроссплатформенностью"
> озаботился ..
Выйду, выйду... :) Где Parent-окно потерялось?
← →
Slym © (2009-05-26 06:15) [63]Сергей М. © (25.05.09 17:24) [61]
проще свой простенький фреймворк напесадь
← →
Сергей М. © (2009-05-26 09:42) [64]
> 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]); // <--здесь
..
← →
Сергей М. © (2009-05-26 09:51) [65]
if (WndParent = 0) and (Style and WS_CHILD <> 0) then
WndParent у тебя равен нулю.
А говоришь "передается")
← →
Dennis I. Komarov © (2009-05-26 09:55) [66]Так, ну кто-нить объяснит почему нету Parent-окна?
> Это ты что же, хочешь сделать parent"ом окно MDIParent-формы ?)
> Нет, против окна MDIChild-формы я ничего не имею)
И где в коде намек на MDIParent?
← →
Сергей М. © (2009-05-26 09:58) [67]
> где в коде намек на MDIParent?
А мне почем знать, что в идентификаторе TFormMDIBaseCh постфикс у тебя означает сокращение именно от "Child", а не что-то иное ?)
← →
Сергей М. © (2009-05-26 09:59) [68]
> кто-нить объяснит почему нету Parent-окна?
Потому что ты не передаешь его (факт.параметром в конструктор передается нуль), что еще не понятно ?)
← →
Dennis I. Komarov © (2009-05-26 10:04) [69]
> if (WndParent = 0) and (Style and WS_CHILD <> 0) then
>
> WndParent у тебя равен нулю.
>
> А говоришь "передается")
но x.Handle <> 0 :(
← →
Сергей М. © (2009-05-26 10:09) [70]Это ты где смотришь ?
Значение фактически переданного хэндла нужно смотреть уже в теле конструктора, а не в коде, вызывающем конструктор ..
← →
Dennis I. Komarov © (2009-05-26 10:09) [71]
function CreateIUsers;
begin
ShowMessage(InttoStr(AParent));
if AParent <> 0 then
with TFrameUsers.CreateParented(AParent) do begin
Result:=Handle;
end;
end;
AParent <> 0
← →
Сергей М. © (2009-05-26 10:16) [72]
> AParent <> 0
А вот фрагмент "генофонда" говорит об ином..
Ты вникни в него, я же не зря привел его ..
← →
KSergey © (2009-05-26 10:29) [73]мне вот интересно
Идет обсуждение тех. реализации...
а может посмотреть на готовое? ну вот в винамп очень даже гибко встраивается
или есть еще микрософтовский API для mmc.
Может поизучать как и что люди делают?
← →
Dennis I. Komarov © (2009-05-26 10:31) [74]
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) :) Так что не тут ошибочка ...
← →
Dennis I. Komarov © (2009-05-26 10:36) [75]
> Dennis I. Komarov © (26.05.09 10:31) [74]
нет, обманул, не то окно пробежал, действительно попадаем внутрь :(
← →
Сергей М. © (2009-05-26 10:45) [76]
> Отладчик молчит по поводу значения WndParent
Так ты спроси у него конкретно - чему, мол, равно Params.WndParent)
Он же "бестолковый" - не понимает что ид-р WndParent имеет отношение к структуре Params)
← →
Dennis I. Komarov © (2009-05-26 10:58) [77]да спросил конечно, чего его спрашивать то если и так видно :)
Тока вот почему... *SCRATCH*
TForm.Handle не есть хендл окна?
← →
Сергей М. © (2009-05-26 11:04) [78]
> TForm.Handle не есть хендл окна?
Есть.
Ну так ты убедился что Params.WndParent = 0 ?
← →
Dennis I. Komarov © (2009-05-26 11:16) [79]Да, я не пойму почему...
← →
clickmaker © (2009-05-26 12:43) [80]> [79] Dennis I. Komarov © (26.05.09 11:16)
> Да, я не пойму почему...
в методе CreateParams FParentWindow чему равно?
Страницы: 1 2 3 4 вся ветка
Текущий архив: 2009.07.26;
Скачать: CL | DM;
Память: 0.63 MB
Время: 0.018 c