Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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
2-1243581095
texx
2009-05-29 11:11
2009.07.26
Как создать большой файл


2-1243948042
jz
2009-06-02 17:07
2009.07.26
изменялся ли checkbox


11-1204051967
andreil
2008-02-26 21:52
2009.07.26
Как перебрать на форме все контролы?


9-1181478232
Eugewik
2007-06-10 16:23
2009.07.26
При условии несколько действий


15-1243110603
Юрий
2009-05-24 00:30
2009.07.26
С днем рождения ! 24 мая 2009 воскресенье