Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.036 c
15-1207300558
legandr
2008-04-04 13:15
2008.05.18
Уравнение у пагодообразной крыши...


2-1208333700
webpauk
2008-04-16 12:15
2008.05.18
MdiChild (Close, Count)


2-1208420154
Igor M.
2008-04-17 12:15
2008.05.18
Gif Animation


15-1207119287
Ega23
2008-04-02 10:54
2008.05.18
А вот как сделано: регистрируешься на каком-нибудь сайте,


15-1207136742
lead-in
2008-04-02 15:45
2008.05.18
dell





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский