Форум: "Начинающим";
Текущий архив: 2008.05.18;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.033 c