[color=#000080]// p_hMAIN =
Handle des Hauptfensters[/color]
[color=#000080]// p_iID = ID des Controls, von dem das
Handle gesucht wird[/color]
[color=#000080]// Result =
Handle, INVALID_HANDLE_VALUE => konnte nicht gefunden werden[/color]
[b]function[/b] HandleFromID([b]const[/b] p_hMAIN : DWORD;[b]const[/b] p_iID : integer) : DWORD;
[color=#000080]// Typ, um mehrere Daten austauschen zu können[/color]
[b]type[/b]
PrResultRec = ^TrResultRec;
TrResultRec =
[b]packed[/b] [b]record[/b]
hControl : DWORD;
iID : integer;
[b]end[/b];
[color=#000080]// Die EnumChildProc[/color]
[color=#000080]// Wie sie heisst spielt keine Rolle, hauptsache die Struktur stimmt[/color]
[color=#000080]// Besonders wichtig: stdcall[/color]
[b]function[/b] FindControlHandle([b]const[/b] p_hChild : DWord; [b]const[/b] p_pParameter : PrResultRec) : Boolean; stdcall;
[b]begin[/b]
[color=#000080]// Davon ausgehen, dass das nächste Child auch noch verarbeitet werden soll[/color]
Result := true;
[b]if[/b] GetWindowLong(p_hChild,GWL_ID) = p_pParameter^.iID [b]then[/b]
[b]begin[/b] [color=#000080]// Die ID stimmt mit der gesuchten überein[/color]
[color=#000080]// Das
Handle übergeben[/color]
p_pParameter.hControl := p_hChild;
[color=#000080]// Nicht weitersuchen, da Control gefunden[/color]
Result := false;
[b]end[/b];
[b]end[/b];
[b]var[/b]
rWork : TrResultRec;
[b]begin[/b]
rWork.hControl := INVALID_HANDLE_VALUE;
rWork.iID := p_iID;
EnumChildWindows(p_hMAIN,@FindControlHandle,integer(@rWork));
Result := rWork.hControl;
[b]end[/b];