Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Problem mit GetKeyNameText (https://www.delphipraxis.net/21998-problem-mit-getkeynametext.html)

Chris P 11. Mai 2004 08:05


Problem mit GetKeyNameText
 
Delphi-Quellcode:
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
var   c: array[byte] of char;
begin
   getkeynametext(24, c, Sizeof(c));
   Label1.Caption := c;
Liegt es an der 24?

Chris P 11. Mai 2004 08:08

Re: Problem mit GetKeyNameText
 
Denn das Label ist nach einem Tastendruck leer.
Wo liegt der Fehler???

Jens Schumann 11. Mai 2004 08:21

Re: Problem mit GetKeyNameText
 
Zitat:

Zitat von Chris P
Denn das Label ist nach einem Tastendruck leer.
Wo liegt der Fehler???

Ja - es liegt an der 24. In der Win32-Referenz steht auch warum. Hier ein Auszug
Code:
lParam

Specifies the second parameter of the keyboard message (such as WM_KEYDOWN) to be processed. The function interprets the following portions of lParam:

Bits   Meaning
16-23   Scan code.
24   Extended-key flag. Distinguishes some keys on an enhanced keyboard.
25   "Don't care" bit. The application calling this function sets this bit to indicate that the function should not distinguish between left and right CTRL and SHIFT keys, for example.
D.h. Bit 16-23 müssen den Wert von Key bekommen.

sakura 11. Mai 2004 08:24

Re: Problem mit GetKeyNameText
 
Zwei grundlegende Probleme.
  • Du setzt die Funktion falsch ein.
  • Der erste Wert ist abhängig von der genutzten Tastatur und kann variieren

Vom ersten Wert interessieren die Bits 16 - 23, 24 und 25.

Der Wert der Bits 16 - 23 ist wie folgend
MS Help :: WM_KEYDOWN
16-23 Specifies the scan code. The value depends on the original equipment manufacturer (OEM).
24 Specifies whether the key is an extended key, such as the right-hand ALT and CTRL keys that appear on an enhanced 101- or 102-key keyboard. The value is 1 if it is an extended key; otherwise, it is 0.


Und hier die Hilfe zu GetKeyNameText
MS Help :: GetKeyNameText
lParam

Specifies the second parameter of the keyboard message (such as WM_KEYDOWN) to be processed. The function interprets the following portions of lParam:

Bits Meaning
16-23 Scan code.
24 Extended-key flag. Distinguishes some keys on an enhanced keyboard.
25 "Don't care" bit. The application calling this function sets this bit to indicate that the function should not distinguish between left and right CTRL and SHIFT keys, for example.


Kurz, mit festen Werten zu arbeiten macht in keinem Fall Sinn ;)

...:cat:...

Chris P 11. Mai 2004 08:36

Re: Problem mit GetKeyNameText
 
Diese Funktion liefert doch den Shortcut einer Taste, oder?

Könntest du mir anhand eines Quelltextes zeigen wie man es richtig macht?

Danke schon mal!

sakura 11. Mai 2004 08:42

Re: Problem mit GetKeyNameText
 
Hier mal ein Beispiel:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  SC: TShortCut;
begin
  SC := ShortCut( Ord('A'), [ssAlt] );
  Edit1.Text := ShortCutToText( SC );
end;
...:cat:...

Chris P 11. Mai 2004 08:46

Re: Problem mit GetKeyNameText
 
Danke, so hab ich mit das vorgestellt :-D

Aber ich hab auch gehört es lässt sich auch mit GetKeyNameText machen?

Wo liegt der Unterschied?

sakura 11. Mai 2004 08:48

Re: Problem mit GetKeyNameText
 
Zitat:

Zitat von Chris P
Wo liegt der Unterschied?

GetKeyNameText setzt Du ein, wenn Du den Code, welcher durch Windowsbotschaften versandt wird "entschlüsseln" willst. GetKeyNameText arbeitet direkt mit dem Hardwaretreiber, da die Zahlen für die gleichen Tasten von Tastatur zu Tastur unterschiedlich sind.

Obiges Beispiel arbeitet bereits mit den allgemeinen Windows (bzw. Linuxwerte bei QMenus), welche herstellerunabhängig sind.

...:cat:...

Chris P 11. Mai 2004 08:56

Re: Problem mit GetKeyNameText
 
Ok, dankeschön :-D

Chris P 11. Mai 2004 09:05

Re: Problem mit GetKeyNameText
 
Aber nun stellt sich schon die nächste Frage:

Wie macht man das, wenn zB. die Eingabetaste gedrückt wird und man möchte den Namen dieses
Steuerelements bekommen? In diesem Falle: CARRIAGE RETURN

oder für Esc den Wert ESCAPE?


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:26 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