Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Namen der virtuellen Tastencodes (https://www.delphipraxis.net/74525-namen-der-virtuellen-tastencodes.html)

Mazel 4. Aug 2006 14:53


Namen der virtuellen Tastencodes
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,

ich möchte die Namen der virtuellen Tastencodes ermitteln, also wenn ich die Bild nach oben Taste drücke, soll in einem Editfeld BILD-NACH-OBEN stehen.

Mir ist in Winamp aufgefallen, dass es trotz seiner englischen Sprache, die deutschen Namen der Tasten anzeigt. Das heißt für mich, dass es da eine Funktion geben muss um diese Namen zu ermitteln. Wie kann ich dies unter Delphi erreichen?

Im Anhang mal ein Bild von Winamp (Hotkeys).

Gruß
Mazel

cruiser 4. Aug 2006 15:02

Re: Namen der virtuellen Tastencodes
 
MSDN-Library durchsuchenGetKeyNameText sieht doch gut aus, oder?

Mazel 4. Aug 2006 15:11

Re: Namen der virtuellen Tastencodes
 
Danke,

aber wie wende ich dei Funktion nun an?

himitsu 4. Aug 2006 15:14

Re: Namen der virtuellen Tastencodes
 
na so wie jede aus der WinAPI?

erstma gucken, ob sie bei dir definiert is (eventuell in der Windows.pas), wenn ncith dann woanders gucken, oder halt selber definieren ... steht ja alles wichtige da
und dann entsprechend den angaben aus'm MSDN/PSDK aufrufen.

Mazel 4. Aug 2006 15:21

Re: Namen der virtuellen Tastencodes
 
Definiert ist sie, nur kommt bei mir kein Name am Ende heraus: (habe ich beim suchen gefunden)
Delphi-Quellcode:
procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
  var p: PChar;
begin
  p:=StrAlloc(150);
  If GetKeyNameText(16, p, SizeOf(p)) > 0 then Edit1.Text:=StrPas(p);
end;

Mazel 4. Aug 2006 21:10

Re: Namen der virtuellen Tastencodes
 
Liste der Anhänge anzeigen (Anzahl: 1)
HI,

ich habe jetzt eine andere Lösung, nur gibt es dabei noch ein Problem, siehe Anhang:
Delphi-Quellcode:
procedure TForm1.EditHotkeyKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
var
  TempShortCut: TShortCut;

begin
  TempShortCut:=ShortCut(Key, shift);
  EditHotkey.Text:=ShortCutToText(TempShortCut);
end;
Warum stehe bei einem Druck auf die STRG-Taste STRG 2 mal da und einmal davon klein?

Gruß
Mazel

SirThornberry 4. Aug 2006 22:16

Re: Namen der virtuellen Tastencodes
 
Zitat:

Zitat von Mazel
Definiert ist sie, nur kommt bei mir kein Name am Ende heraus: (habe ich beim suchen gefunden)
Delphi-Quellcode:
procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
  var p: PChar;
begin
  p:=StrAlloc(150);
  If GetKeyNameText(16, p, SizeOf(p)) > 0 then Edit1.Text:=StrPas(p);
end;

Als Dritter Parameter wird die verfügbare Länge erwartet. Du übergibst aber die Größe von PChar. Und PChar ist nur ein Pointer womit die Größe bei dir nur 4 wäre. Wenn du mit StrAlloc, 150 zeischen reservierst schreib die 150 doch statich rein.

Robert Marquardt 5. Aug 2006 05:55

Re: Namen der virtuellen Tastencodes
 
Besser gleich einen Puffer verwenden, denn sonst gibt es ein Speicherleck.
Delphi-Quellcode:
procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
  var
    Buffer: array [0..255] of Char;
begin
  if GetKeyNameText(16, @Buffer[0], SizeOf(Buffer)) > 0 then
    Edit1.Text := Buffer;
end;
Wenn man sich allerdings ernsthaft mit den Tastencodes beschaeftigen will, dann ist WM_KEYDOWN bzw WM_SYSKEYDOWN abzufangen der bessere Ansatz.

Mazel 5. Aug 2006 08:21

Re: Namen der virtuellen Tastencodes
 
Hi,

ich habe jetzt die letzen beiden Version probiert, leider ohne Erfolg. Es kommt kein Zeichen (ALT, STRG, etc.) in das Editfeld.
Delphi-Quellcode:
//Version 1
procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
var
  Buffer: array [0..255] of Char;
 
begin
  If GetKeyNameText(16, @Buffer[0], SizeOf(Buffer)) > 0 then Edit1.Text:=Buffer;
end;

//Version 2
procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
var
  p: PChar;
 
begin
  p:=StrAlloc(150);
  If GetKeyNameText(16, p, 150)) > 0 then Edit1.Text:=StrPas(p);
end;
Nur bei folgender Version bekomme ich die Namen in das Editfeld mit dem Problem das es doppelt hinein geschrieben wird:
Delphi-Quellcode:
procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
var
  TempShortCut: TShortCut;

begin
  TempShortCut:=ShortCut(Key, Shift);
  EditHotkey.Text:=ShortCutToText(TempShortCut);
end;
Weis jemand wo die Fehler liegen?

Gruß
Mazel

xaromz 5. Aug 2006 08:43

Re: Namen der virtuellen Tastencodes
 
Hallo,

hast Du schon mal den ErrorCode der Funktion ausgelesen? Der ist nämlich genau dazu da, um Fehler einzugrenzen :zwinker: .

[Edit]
Ich habe gerade bemerkt, LastError ist einfach Null. Das Problem ist, das KeyDown-Event liefert keinen gültigen KeyCode für diese Funktion. So funktioniert's:
Delphi-Quellcode:
type
  TForm1 = class(TForm)
    Label1: TLabel;
  protected
    procedure DoKeyDown(var Msg: TWMKeyDown); message WM_KEYDOWN;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.DoKeyDown(var Msg: TWMKeyDown);
var
  Buffer: array [0..50] of Char;
begin
  if GetKeyNameText(Msg.KeyData, @Buffer[0], 50) > 0 then
    Label1.Caption := Buffer;
end;
Blöderweise mag mich allerdings die Alt-Taste nicht. Die Methode wird gar nicht ausgeführt. Das liegt daran, dass Alt das System-Menü aktiviert (drück danach mal "Nach Unten").
[/Edit]

Gruß
xaromz


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:54 Uhr.
Seite 1 von 3  1 23      

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