Главная страница
    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.051 c
3-1197297073
Fregl
2007-12-10 17:31
2008.05.18
Ошибка добавления lookup поля в TADOTable


3-1197374036
em240
2007-12-11 14:53
2008.05.18
Оповещение+mssql2000


4-1188899278
Cj
2007-09-04 13:47
2008.05.18
Regedit DDE


2-1208339540
DFT
2008-04-16 13:52
2008.05.18
DoMouseWheel


2-1208926830
net send
2008-04-23 09:00
2008.05.18
Передать звуковое сообщение





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