AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi Sendmessage und onChange, onKeypress
Thema durchsuchen
Ansicht
Themen-Optionen

Sendmessage und onChange, onKeypress

Ein Thema von whiteF · begonnen am 31. Okt 2016 · letzter Beitrag vom 2. Nov 2016
 
whiteF

Registriert seit: 14. Okt 2008
45 Beiträge
 
#7

AW: Sendmessage und onChange, onKeypress

  Alt 2. Nov 2016, 19:48
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;
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:43 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz