Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Großbuchstaben (Shift) bei WM_KEYUP (https://www.delphipraxis.net/134228-grossbuchstaben-shift-bei-wm_keyup.html)

TheMiller 18. Mai 2009 08:32


Großbuchstaben (Shift) bei WM_KEYUP
 
Hallo,

ich muss eine Eingabe in meinem Programm automatisieren - es soll später unbeaufsichtigt laufen.

Ich ein Terminal-Fenster muss ich Befehle reinschreiben. Das lasse ich mit Postmessage-WM_KEYUP machen. Doch leider müssen es Großbuchstaben sein.

Nun weiß ich nicht, wie man Großbuchstaben sendet. Vorher ein PostMessage-WM_KEYDOWN VK_Shift funktioniert nicht. Es wird trotzdem ein kleiner Buchstabe gesendet.

Das Terminal befindet sich in meinem Programm.

Habe im Forum schon gesucht und einige gefunden, die das gleiche Problem haben / hatten, aber es stand keine Lösung dabei.

Vielen Dank im Voraus

BAMatze 18. Mai 2009 08:41

Re: Großbuchstaben (Shift) bei WM_KEYUP
 
Vieleicht hilft dir ja die Uppercase Funktion aus der SysUtils. Habe sie aber auch noch nicht selber verwendet. aber in der Beschreibung der Hilfe zu Delphi steht drin, dass sie dein String in Goßbuchstaben umwandelt.

MfG
BAMatze

quendolineDD 18. Mai 2009 08:42

Re: Großbuchstaben (Shift) bei WM_KEYUP
 
Jap. Uppercase ist deine Lösung.

TheMiller 18. Mai 2009 08:47

Re: Großbuchstaben (Shift) bei WM_KEYUP
 
Hm.. wie soll das Funktionieren :gruebel:

Ich sende mit PostMessage eine Nachricht, die als in Frage kommende Argumente jeweils einen Integer erwartet. Ein "r" würde dann so aussehen:

Delphi-Quellcode:
PostMessage(Memo1.Handle, WM_KEYUP, 82, 0)
Wo soll den da die Uppercase-Umwandlung hin?

BAMatze 18. Mai 2009 08:49

Re: Großbuchstaben (Shift) bei WM_KEYUP
 
Zitat:

Zitat von DJ-SPM
Hm.. wie soll das Funktionieren :gruebel:

Ich sende mit PostMessage eine Nachricht, die als in Frage kommende Argumente jeweils einen Integer erwartet. Ein "r" würde dann so aussehen:

Delphi-Quellcode:
PostMessage(Memo1.Handle, WM_KEYUP, 82, 0)
Wo soll den da die Uppercase-Umwandlung hin?

Naja bis jetzt dachte ich, du versendest einen String, aber so kannst du doch eine einfache Char-umwandlung selber kreieren, da zwischen Groß- und Kleinbuchstaben immer ein konstanter Abstand ist.

TheMiller 18. Mai 2009 08:55

Re: Großbuchstaben (Shift) bei WM_KEYUP
 
Oh ehrlich?

Also ich benutze diese Liste, da stehen aber nur Großbuchstaben drin, die aber in Wirklichkeit Kleinbuchstaben sind, wenn ich die Dezimalzahl so übertrage.

Falls mein Post vorhin etwas "böse" klang: Ist nicht so gemeint. Bin nur noch etwas müde von der Nacht :wink:

BAMatze 18. Mai 2009 09:05

Re: Großbuchstaben (Shift) bei WM_KEYUP
 
Naja sind ja eigentlich nur Überlegungen gewesen. Die Frage ist ja, ob du nicht irgendwie das ganze so machen kannst:

Delphi-Quellcode:
if key = 114 then PostMessage(Memo1.Handle, WM_KEYUP, 82, 0);

TheMiller 18. Mai 2009 09:08

Re: Großbuchstaben (Shift) bei WM_KEYUP
 
Ne, irgendwie nicht. Ich finde auch keine Tabelle, in die mich (in der Hinsicht) weiterbringt...

BAMatze 18. Mai 2009 09:17

Re: Großbuchstaben (Shift) bei WM_KEYUP
 
Muss es eigentlich direkt eine Postmessage sein?

Habe das in meinem aktuellen Projet für ganze Strings wie folgt gelöst:

in Sendender Unit:
Delphi-Quellcode:
with Datenaustausch do
    begin
      dwData := 0;
      cdData := Length(result) + 1;
      lpData := result;
    end;
  SendMessage(LoaderForm.Handle, WM_COPYDATA, Longint(Handle),
              Longint(@Datenaustausch));
und in Empfangender Unit:
Delphi-Quellcode:

const Nachricht_erhalten = WM_COPYDATA;
...
procedure Nachricht_anzeigen(var MSG: TWMCopyData);message Nachricht_erhalten;
...
procedure TLoaderForm.Nachricht_anzeigen(var MSG: TWMCopyData);
var Datenaustausch: TDatenaustausch;
begin
  // Die Anzeige der einzelnen Mitteilungen soll jetzt in mehreren Zeilen
  // unter dem Label "Bitte warte, ..." angezeigt werden. Dies soll in
  // einer neuen Klasse geschehen, die dynamisch eine bestimmte Anzahl
  // an Labels erstellt, diese auf der Form Plaziert und wenn mehr Nachrichten
  // erscheinen, als dynamisch erzeugbare Labels auf der Form dargestellt werden
  // können, sollen sie chronologisch wieder gelöscht werden.
  HilfsLabel.Caption := String(PChar(Msg.CopyDataStruct.lpData));
  AnzeigeLabel.Left := round((LoaderForm.Width-HilfsLabel.Width)/2);
  AnzeigeLabel.Caption := HilfsLabel.Caption;
  Self.Refresh;
  sleep(200);
end;
könnte das eventuell helfen?

MfG
BAMatze

PS.: Ist natürlich nicht auf meinem Mist gewachsen sondern von einem Threat hier aus der DP, leider kenne ich den Namen des ursprünglichen Autors der Antwort nicht, also lasse ich den hier mal weg. :dp:

TheMiller 18. Mai 2009 09:26

Re: Großbuchstaben (Shift) bei WM_KEYUP
 
So, da bin ich wieder.

Ich habe jetzt mal noch Keybd_Event geschaut, da dies öfter im Zusammenhang mit den WM_KEY*-Messages steht. Hier habe ich dann in der CodeLibrary diesen Beitrag gefunden, der genau das macht, was ich möchte. Ich muss ihn allerdings nochmal studieren ;)

Tut mir leid, für die Mühe, die du dir so früh morgens schon gemacht hast. Ich bedanke mich trotzdem recht herzlich bei dir.


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:48 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz