Moin DelphiUser,
die Routine, die von EnumChildWindows aufgerufen wird (in Deinem Falle HandlePrint) wird für alle ChildWindows von iWindow aufgerufen, und erhält im Parameter
Handle das
Handle des jeweiligen Controls.
Dies geschieht solange, bis entweder alle ChildWindows durchgegangen wurden, oder bis die Funktion False zurückliefert.
Mit dem übergebenen
Handle, kannst Du nun prüfen, ob es die richtige Klasse hat.
Delphi-Quellcode:
// Das müsste in Dein HandlePrint eingebaut werden.
const
_sClass = '
RichEdit20W';
var
pcClass : PChar;
iLen : integer;
begin
iLen := length(_sClass)+1;
pcClass := AllocMem(iLen);
try
if GetClassName(
Handle,pcClass,iLen) > 0
then begin
if trim(pcClass) = _sClass
then begin
// Der Text kann ausgelesen werden, da die Klasse stimmt.
Result := false;
end;
end;
finally
FreeMem(pcClass,iLen);
end;
end;
(ich hoffe das stimmt so, ich habe es hier direkt reingetippt).
Das Auslesen des Textes müsste allerdings auch etwas anders vonstatten gehen, als Du es geschrieben hast:
Du weisst ja gar nicht, wieviel in dem Richedit steht.
Hierzu müsstest Du erst einmal ermitteln wie lang der Inhalt ist (WM_GETTEXTLENTH), bevor Du den Inhalt auslesen kannst
Delphi-Quellcode:
var
iTextLen : integer;
pcBuf : PChar;
begin
iTextLen := SendMessage(
Handle,WM_GETTEXTLENGTH,0,0) + 1;
// +1 für die abschliessende #00
pcBuf := AllocMem(iTextLen);
try
SendMessage(
Handle,WM_GETTEXT,iTextLen,lParam(pcBuf));
RichEdit.Text := trim(pcBuf);
finally
FreeMem(pcBuf,iTextLen);
end;
end;