Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi TMessage, welche Taste wurde gedrückt? (https://www.delphipraxis.net/173444-tmessage-welche-taste-wurde-gedrueckt.html)

tofse 25. Feb 2013 14:55

TMessage, welche Taste wurde gedrückt?
 
Hallo,

wie bekomme ich bei
Code:
procedure WmMenuChar(var m : TMessage); message WM_MENUCHAR;
heraus, welche Taste gedrückt wurde?
In
Code:
var m : TMessage
muss doch irgendwo, irgendwie die Taste als Code enthalten sein :?

Danke
Gruss
Christof

Bernhard Geyer 25. Feb 2013 14:57

AW: TMessage, welche Taste wurde gedrückt?
 
Microsoft erklärt in der MSDN wo welche Infos zu finden sind:

tofse 25. Feb 2013 15:09

AW: TMessage, welche Taste wurde gedrückt?
 
Hallo,
danke!
Da steht:
Zitat:

wParam
The low-order word specifies the character code that corresponds to the key the user pressed.
Also verwende ich: m.WParamLo

Außerdem habe ich diese Funktion gefunden:
Code:
function GetCharFromVKey(vkey: Word): string;
var
  keystate: TKeyboardState;
  retcode: Integer;
begin
  Win32Check(GetKeyboardState(keystate));
  SetLength(Result, 2);
  retcode := ToAscii(vkey,
    MapVirtualKey(vkey, 0),
    keystate, @Result[1],
    0);
  case retcode of
    0: Result := ''; // no character
    1: SetLength(Result, 1);
    2:;
    else
      Result := ''; // retcode < 0 indicates a dead key
  end;
end;
Verwende ich nun
Code:
GetCharFromVKey(m.WParamLo)
dann funktioniert es bei den Zahlen, aber wenn ich eine Buchstabentaste drücke, dann kommt meistens nichts zurück

Gruss
Christof

uligerhardt 25. Feb 2013 15:12

AW: TMessage, welche Taste wurde gedrückt?
 
Zitat:

Zitat von tofse (Beitrag 1205007)
Code:
procedure WmMenuChar(var m : TMessage); message WM_MENUCHAR;

Nimm doch
Delphi-Quellcode:
TWMMenuChar
statt
Delphi-Quellcode:
TMessage
. Dann brauchst du weniger Casts.

Morphie 25. Feb 2013 15:15

AW: TMessage, welche Taste wurde gedrückt?
 
Wozu GetCharFromVKey?

Code:
procedure TForm1.WmMenuChar(var m: TMessage);
var
  s: string;
begin
  s := chr(m.WParamLo);
  ShowMessage(s);
end;

tofse 26. Feb 2013 06:28

AW: TMessage, welche Taste wurde gedrückt?
 
Danke
Zitat:

Zitat von morphie (Beitrag 1205015)
wozu getcharfromvkey?

Code:
procedure tform1.wmmenuchar(var m: Tmessage);
var
  s: String;
begin
  s := chr(m.wparamlo);
  showmessage(s);
end;


uligerhardt 26. Feb 2013 07:04

AW: TMessage, welche Taste wurde gedrückt?
 
Zitat:

Zitat von tofse (Beitrag 1205088)
Danke
Zitat:

Zitat von morphie (Beitrag 1205015)
wozu getcharfromvkey?

Code:
procedure tform1.wmmenuchar(var m: Tmessage);
var
  s: String;
begin
  s := chr(m.wparamlo);
  showmessage(s);
end;


Obwohl mein erster Post irgendwie keinen interessiert hat, probier ich's nochmal. Die VCL bietet ja vorgefertigte "Message-Cracker". Damit kann man mit sinnvollen Namen und ohne Casten auf die Message-Parameter zugreifen:
Delphi-Quellcode:
procedure TForm1.WMMenuChar(var m: TWMMenuChar);
var
  s: string;
begin
  s := m.User;
  ShowMessage(s);
end;
(OK, "User" ist jetzt kein soooo sinnvoller Name... :mrgreen:)

tofse 26. Feb 2013 07:10

AW: TMessage, welche Taste wurde gedrückt?
 
ok, funktioniert auch, habe dann diese Variante eingebaut :thumb:

SirThornberry 26. Feb 2013 12:21

AW: TMessage, welche Taste wurde gedrückt?
 
Das ist aber nicht ganz das was du gefragt hast, oder? ;-) Die Message liefert dir nicht die Taste welche gedrückt wurde sondern nur das Zeichen welches daraus resultiert.
Nimmt man zum Beispiel die Zifferntasten weißt du dann nicht ob die Ziffer auf dem Nummernblock getippt wurde oder die andere Taste.

tofse 26. Feb 2013 12:23

AW: TMessage, welche Taste wurde gedrückt?
 
Das stimmt natürlich, aber eigentlich ging es mir auch nur um's Zeichen....:o


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:53 Uhr.

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