![]() |
Tastenkombination über VK_xxxxx abfragen
Hallo zusammen,
ich überprüfe mit folgenden Code die gedrückten Tasten bei einer Komponente :
Delphi-Quellcode:
Wie kann ich hier nun noch die Tastenkombinationen STRG+C, STRG+X, STRG+V abfragen ?
procedure TForm16.OnAppMsg(var Msg: TMsg; var Handled: Boolean);
begin Handled := False; if Msg.message = WM_KEYDOWN then begin if (TV_1.IsEditing) and (TV_1.Tag = 0) then begin case Msg.wParam of VK_BACK, VK_SHIFT, VK_INSERT, VK_DELETE, 47..91, 96..109 : begin Handled := True; EditedTxt := EditedTxt + chr(Msg.wParam); NodeEdit := True; end; else if (Msg.wParam = VK_RETURN) and (Msg.lParam <> TVN_ITEMCHANGED) and (not NodeEdit) then begin ShowMessage('Bitte vergeben Sie einen Namen'); NodeEdit := False; tmpNode.EditText; end; end; Handled := False; end; end; end; |
Re: Tastenkombination über VK_xxxxx abfragen
Hier eine Kurzanleitung:
1. Msg.message = WM_KEYDOWN prüfen 2. mit ![]() 3. falls Strg gedrükt ist, wParam nach deinen gewünschten Keys in Verbindung mit Strg abfragen |
Re: Tastenkombination über VK_xxxxx abfragen
Hallo mleyen,
danke für Deine Antwort. Einzeln bekomme ich das hin mit Deiner Kurzanleitung. Ich habe nur Probleme es in meine Struktur zu übernehmen, da ich mit der Procedure alle Tasten und Tastenkombinationen innerhalb des TreeView's selber behandeln muss. Die Procedure funktioniert auch soweit ganz gut, nur dass ich halt die Tastenkombinationen für die Zwischenablage immer noch ausgesperrt habe. Mein letzter Versuch sieht so aus :
Delphi-Quellcode:
Er springt mir auch in die untere IF-Abfrage rein, nur im TreeView wird es nicht angezeigt. Habe ich da noch einen Denkfehler drin ?
procedure TForm16.OnAppMsg(var Msg: TMsg; var Handled: Boolean);
begin Handled := False; if (TV_1.IsEditing) and (TV_1.Tag = 0) then begin if (Msg.message = WM_KEYDOWN) and (GetKeyState(VK_CONTROL) > 0) then begin case Msg.wParam of VK_BACK, VK_SHIFT, VK_INSERT, VK_DELETE, 47..91, 96..109 : begin Handled := True; EditedTxt := EditedTxt + chr(Msg.wParam); NodeEdit := True; end; else if (Msg.wParam = VK_RETURN) and (Msg.lParam <> TVN_ITEMCHANGED) and (not NodeEdit) then begin ShowMessage('Bitte vergeben Sie einen Namen'); NodeEdit := False; tmpNode.EditText; end; end; Handled := False; end else begin if (Msg.wParam = Ord('V')) and (Clipboard.HasFormat(CF_TEXT)) then begin Handled := True; EditedTxt := EditedTxt + Clipboard.AsText; NodeEdit := True; end; end; end; end; |
Re: Tastenkombination über VK_xxxxx abfragen
Moin,
Zitat:
Ich hab jetzt deinen Code nicht so ganz verstanden, aber hier nochmal ein Code-Beispiel zum Abfragen der Tastenkombinationen STRG+C, STRG+X, STRG+V:
Delphi-Quellcode:
procedure TForm16.OnAppMsg(var Msg: TMsg; var Handled: Boolean);
begin if Msg.message = WM_KEYDOWN then begin // Die KeyDown-Msg brauchen wir if GetKeyState(VK_CONTROL) < 0 then begin // Wenn Strg gedrückt ist case Msg.wParam of 67, 99: ShowMessage('Strg + c gedrückt'); 86, 118: ShowMessage('Strg + v gedrückt'); 88, 120: ShowMessage('Strg + x gedrückt'); end; end; end; end; |
Re: Tastenkombination über VK_xxxxx abfragen
Zitat:
![]() Deine Case-Anweisung funktioniert soweit schonmal ganz gut. Danke. Nur habe ich leider ein Problem dabei, es wird kein Text aus der Zwischenablage in das Editfeld des TreeViews eingefügt. Mit den einzelnen Buchstaben funktioniert es ohne weiteres. Warum ? |
Re: Tastenkombination über VK_xxxxx abfragen
*push* Hat niemand eine Idee ? *push*
|
Re: Tastenkombination über VK_xxxxx abfragen
warum verwendest du eigentlich nicht das OnKeyDown bzw. OnKeyUp? Da bekommst du die Tasten und den Shiftstate gleich mit dazu
|
Re: Tastenkombination über VK_xxxxx abfragen
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Im Anhang mal ein kleine Beispiel inkl. Source. Über ein Kontextmenü kann eine neue Node hinzugefügt werden. |
Re: Tastenkombination über VK_xxxxx abfragen
Zitat:
Füg mal den uses die Unit "Clipbrd" hinzu und kopier folgenden Code mal in deine OnAppMsg Prozedur:
Delphi-Quellcode:
Ich hoffe das hilft jetzt. :?
var
Clpbrd: TClipboard; begin if Msg.message = WM_KEYDOWN then begin // Die KeyDown-Msg brauchen wir if GetKeyState(VK_CONTROL) < 0 then begin // Wenn Strg gedrückt ist case Msg.wParam of 67, 99: ShowMessage('Strg + c gedrückt'); // Das musst du schon selber implementieren ;) 88, 120: ShowMessage('Strg + x gedrückt'); // " 86, 118: begin // Strg+v | Zwichenablage in EditedTxt haun Clpbrd := TClipboard.Create; if Clpbrd.HasFormat(CF_TEXT) then EditedTxt := EditedTxt + Clpbrd.AsText; Clpbrd.Free; end; end; end; end; end; |
Re: Tastenkombination über VK_xxxxx abfragen
Moin Rolf,
alternativ auf den integrierten inplace-editor verzichten und ein eigenes Editierfenster verwenden - wenn gewünscht, kannst du es ja von allem 'drumherum befreien, dass es in der Optik dem inplace-editor entspricht. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:29 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