Thema: Delphi ControlID --> Handle

Einzelnen Beitrag anzeigen

Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#8
  Alt 8. Aug 2002, 19:19
Moin Frankle,

ist jetzt zwar nicht getestet, sollte es aber tun:

Code:
[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];
EDIT:
Source anders aufgebaut
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat