Главная страница
    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.47 MB
Время: 0.06 c
2-1208526143
lewka-serdceed
2008-04-18 17:42
2008.05.18
Порядок форм


3-1197395663
DmitrichJ
2007-12-11 20:54
2008.05.18
MySQL, AnyDac Ошибка с max_allowed_packet


15-1207627627
TUser
2008-04-08 08:07
2008.05.18
Настоящий дистрибутив ХР влезает на дискету :)


2-1208841788
vajo
2008-04-22 09:23
2008.05.18
Можно ли сократить запись стороки


2-1208842288
Динис_ИС
2008-04-22 09:31
2008.05.18
Многострочный Label





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский