Cześć,
mam problem, ponieważ od pewnego czasu działała u mnie pewna funkcja, która zwracała mi rodzica okna na którym leży kontrolka innego okna np. TEdit:
function TfrmMenu.GetWindowClass(pt: TPoint): string;
var
Wind, Target: HWND;
i: Integer;
ClassName: array[0..256] of Char;
begin
Wind := WindowFromPoint(pt);
Target := Wind;
// jadę w pętli (ze 40 razy zakładając, że np button nie będzie miał pod sobą 40 innych komponentów
// na których został położony
for I := 0 to 40 -1 do
begin
Target := GetParent(Wind);
GetClassName(Target, @ClassName, 257); // tylko dla podglądu w debugerze
if Target = 0 then
break;
Wind := Target;
end;
GetClassName(Wind, @ClassName, 257);
Result := Copy(StringReplace(string(Trim(ClassName)), '#0', '', [rfReplaceAll]), 1, 120);
end;
Co się okazało...
Funkcja działała dobrze do czasu, gdy szukałem parenta komponentu innego okna:
Założenie:
- TfrmMenu -> Panel -> Panel1 -> Panel2 -> Groupbox -> Button (Pokaż TfrmOkno)
- TfrmOkno -> Panel -> Groupbox -> Edit
Gdy korzystam z pętli podstawiając pod PT współrzędne Edit z okna TfrmOkno to pętla w pewnym momencie pokazuje na parenta TfrmOkno, ale leci dalej aż do TfrmMenu.
W jaki sposób można pobrać parenta okna kontrolki na której leży?
Zaznaczę iż nie wiem ile parentów znajduje się pod wybraną przeze mnie kontrolką.