Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.05.18;
Скачать: CL | DM;

Вниз

EnumChildWindows   Найти похожие ветки 

 
aleko   (2008-04-18 13:56) [0]

Доброго времени суток...
Подскажите что не так, не обращайте внимания на sleep и showmessage, пытался выяснить где прокол:


...
function EnumProc(WD: HWnd; Param: LongInt): Boolean; stdcall;
...

function TForm1.EnumProc(WD: HWnd; Param: LongInt): Boolean;
begin
Sleep(1000);
ShowMessage(IntToStr(WD));
Result:=true;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
Parent: HWND;

begin
Parent := FindWindow(nil,"Подключение");
ShowMessage(IntToStr(Parent));
if Parent <> 0 then EnumChildWindows(Parent,@TForm1.EnumProc, 0)
else ShowMessage("Нет такого окна");
end;



проблема - находит родительское окно - первый шоу показывает его дескриптор, запускает EnumChildWindows и все... все ожидаемые дочерние  дескрипторы равны нулю... почему, что не так? и через некоторое время, для этого окна через 10 вызовов вылетает с ошибкой доступа...

и к тому же, когда в EnumChildWindows(ParentHWND,@TForm1.EnumProc, 0)
пишу не @TForm1.EnumProc, а просто @EnumProc, как вроде бы надо - пишет "требуется переменная" (Variable required)

... извините за легкий хаос... ))


 
Сергей М. ©   (2008-04-18 13:57) [1]


> @TForm1.EnumProc


Это еще что за шняга ?


 
Palladin ©   (2008-04-18 14:01) [2]


> aleko   (18.04.08 13:56) 

метод класса - это не процедура
процедура - это не метод класса

EnumChildWindows требует на входе процедуру (а точнее адрес ее тела), а ты чего ей суешь?


 
aleko   (2008-04-18 14:11) [3]


> Сергей М. ©   (18.04.08 13:57) [1]


если пишу не @TForm1.EnumProc, а просто @EnumProc, как вроде
бы надо - то пишется ошибка "требуется переменная" (Variable required)


> Palladin ©   (18.04.08 14:01) [2]


строго по книжкам делал так:

EnumChildWindows(ParentHWND,@EnumProc, 0) - разве не правильно?


> Palladin ©   (18.04.08 14:01) [2]



> Сергей М. ©   (18.04.08 13:57) [1]


@TForm1.EnumProc - это от отчаяния


 
Palladin ©   (2008-04-18 14:14) [4]


> aleko   (18.04.08 14:11) [3]

так ты хоть понимашь чего происходит то? ты создал отдельную функцию EnumProc, и метод формы EnumProc, при компиляции компилятор конечно отдает предпочтение методу формы, и конечно ругается, что ему фуфло тут подсовывают, как исправить догадаешься сам то?


 
aleko   (2008-04-18 14:15) [5]


> Palladin ©   (18.04.08 14:01) [2]


опечатался

строго по книжкам делал так:

EnumChildWindows(Parent,@EnumProc, 0) - разве не правильно?


 
Palladin ©   (2008-04-18 14:17) [6]

да и с типом результатом EnumProc накосячил


 
easy ©   (2008-04-18 14:18) [7]

function EnumProc(wnd: HWND; Lines: TStrings): BOOL; stdcall;
var
 buf, Caption: array[0..255] of char;
begin
 Result := True;
 GetClassName(wnd, buf, SizeOf(buf) - 1);
 SendMessage(wnd, WM_GETTEXT, 256, Integer(@Caption));
 Lines.Add(Format("ID: %d, ClassName: %s, Caption: %s",
          [GetDlgCtrlID(wnd), buf, Caption]));
end;

procedure TForm1.PrintDialog1Show(Sender: TObject);
begin
 Memo1.Clear;
 EnumChildWindows(printdialog1.Handle, @EnumProc, Integer(memo1.Lines));
end;

http://www.swissdelphicenter.ch/torry/showcode.php?id=327


 
Сергей М. ©   (2008-04-18 14:20) [8]


> строго по книжкам делал так:
>
> EnumChildWindows(Parent,@EnumProc, 0) - разве не правильно?
>
>


Правильно.
Но ты в [2] вник ?


 
aleko   (2008-04-18 14:20) [9]


> Palladin ©   (18.04.08 14:14) [4]


...все... понял..... )))))
..извините за бред...

..удалил объявление метода, заработало, еще раз спасибо....


 
ZENsan ©   (2008-04-18 17:26) [10]

Удалено модератором


 
ZENsan ©   (2008-04-18 17:28) [11]

@TForm1.EnumProc - eto ot neznanija. prosto..
TForm.EnumProc - eto TMethod, 8 baitov adres Self i smeshenie nachala koda
Poetomu i ne rabotalo. obichnaja funkcija ne ravna metodu klassa.. Hotja mozhno i eto nakolotj..



Страницы: 1 вся ветка

Текущий архив: 2008.05.18;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.025 c
2-1208512575
aleko
2008-04-18 13:56
2008.05.18
EnumChildWindows


3-1197527318
abhtr
2007-12-13 09:28
2008.05.18
Как восстановить удаленные записи в таблице Firebird


15-1207358206
Tirael
2008-04-05 05:16
2008.05.18
реклама линукса


6-1186750392
Любитель
2007-08-10 16:53
2008.05.18
"Кто" куда лазает?


11-1189173120
MTsv DN
2007-09-07 17:52
2008.05.18
Вопрос по прозрачности, вероятно автору - homm у...