hi,
freut mich dass ihr euch da mit reindenkt...
Der text der mittels SendMessage an das Edit-Feld gesendet wird ist optisch kontrastreich.
Das mit dem verschwindenen Text verhält sich so:
- Wenn ich mittels SendMessage etwas in das Edit-Feld sende, und dann mit der Maus real in das Edit-Feld klicke verschwindet der Text.
- Wenn ich etwas real in das Edit-Feld eintippe, den Fokus real ändere und mit der Maus real wieder in das Edit-Feld klicke bleibt der Text bestehen.
(Bei dem Fenster handelt es sich lediglich um 1x Edit Feld, 1x Button und ein paar RichEdits (text) und diehnt lediglich als hinweisfenster...)
Ich habe nun eine Lösung, die für mich funktioniert, aber eleganter wäre es natürlich mit SendMessage.
Das Lösungswort lautet hier
SendString.
Mit
SetForegroundWindow(wndMain); hole ich mir das komplette Fenster in den Vordergrund (nachdem ich geprüft habe ob es existiert).
Dann suche ich nach dem Edit-Feld
wndChild := FindWindowEx(wndChild, 0, 'Edit', nil); und nach dessen Existenzprüfung sende ich mittels
FormMain.SendString('Dies ist der Text'); den Text.
Danach suche ich nach dem OK-Button
wndChild := FindWindowEx(wndChild, 0, 'Button', nil); und nach dessen Existenzprüfung klicke ich ihn an
SendMessage(wndChild, BM_Click, 0, 0);
Ist zwar nicht 100% sicher, da der Benutzer selbst den Fokus ändern kann und der Text dann in irgendeinem anderen Fenster (bzw. Control) fliegen könnte, aber besser als wenn es gar nicht geht.
Der Text, den ich mit SendString an das Edit-Feld sende, bleibt auch bestehen, wenn ich mit der Maus real in das Edit-Feld klicke.
Delphi-Quellcode:
procedure TFormMain.SendString(AText: String);
var lCount : Integer;
lScanCode : Smallint;
lWithAlt,
lWithCtrl,
lWithShift : Boolean;
begin
for lCount := 1 To Length(AText) Do
begin
lScanCode := VkKeyScan(AText[lCount]);
//Ermitteln ob Shift gedrückt wurde
lWithShift := lScanCode and (1 shl 8) <> 0;
//Ermitteln ob Strg gedrückt wurde
lWithCtrl := lScanCode and (1 shl 9) <> 0;
//Ermitteln ob Alt gedrückt wurde
lWithAlt := lScanCode and (1 shl 10) <> 0;
if lWithShift then
keybd_event(VK_SHIFT, 0, 0, 0);
if lWithCtrl then
keybd_event(VK_CONTROL, 0, 0, 0);
if lWithAlt then
keybd_event(VK_MENU, 0, 0, 0);
keybd_event(lScanCode, 0, 0, 0);
keybd_event(lScanCode, 0, KEYEVENTF_KEYUP, 0);
if lWithAlt then
keybd_event(VK_MENU, 0, KEYEVENTF_KEYUP, 0);
if lWithCtrl then
keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP, 0);
if lWithShift then
keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP, 0);
end;
end;