![]() |
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 |
Re: Namen der virtuellen Tastencodes
![]() |
Re: Namen der virtuellen Tastencodes
Danke,
aber wie wende ich dei Funktion nun an? |
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. |
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; |
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:
Warum stehe bei einem Druck auf die STRG-Taste STRG 2 mal da und einmal davon klein?
procedure TForm1.EditHotkeyKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
var TempShortCut: TShortCut; begin TempShortCut:=ShortCut(Key, shift); EditHotkey.Text:=ShortCutToText(TempShortCut); end; Gruß Mazel |
Re: Namen der virtuellen Tastencodes
Zitat:
|
Re: Namen der virtuellen Tastencodes
Besser gleich einen Puffer verwenden, denn sonst gibt es ein Speicherleck.
Delphi-Quellcode:
Wenn man sich allerdings ernsthaft mit den Tastencodes beschaeftigen will, dann ist WM_KEYDOWN bzw WM_SYSKEYDOWN abzufangen der bessere Ansatz.
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; |
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:
Nur bei folgender Version bekomme ich die Namen in das Editfeld mit dem Problem das es doppelt hinein geschrieben wird:
//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;
Delphi-Quellcode:
Weis jemand wo die Fehler liegen?
procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
var TempShortCut: TShortCut; begin TempShortCut:=ShortCut(Key, Shift); EditHotkey.Text:=ShortCutToText(TempShortCut); end; Gruß Mazel |
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:
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").
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; [/Edit] Gruß xaromz |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:20 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