AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Tastenkombination über VK_xxxxx abfragen
Thema durchsuchen
Ansicht
Themen-Optionen

Tastenkombination über VK_xxxxx abfragen

Ein Thema von RWarnecke · begonnen am 2. Apr 2009 · letzter Beitrag vom 29. Apr 2009
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#1

Tastenkombination über VK_xxxxx abfragen

  Alt 2. Apr 2009, 22:29
Hallo zusammen,

ich überprüfe mit folgenden Code die gedrückten Tasten bei einer Komponente :
Delphi-Quellcode:
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;
Wie kann ich hier nun noch die Tastenkombinationen STRG+C, STRG+X, STRG+V abfragen ?
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat
Benutzerbild von mleyen
mleyen

Registriert seit: 10. Aug 2007
609 Beiträge
 
FreePascal / Lazarus
 
#2

Re: Tastenkombination über VK_xxxxx abfragen

  Alt 2. Apr 2009, 22:50
Hier eine Kurzanleitung:
1. Msg.message = WM_KEYDOWN prüfen
2. mit Hier im Forum suchenGetKeyState Strg abfragen
3. falls Strg gedrükt ist, wParam nach deinen gewünschten Keys in Verbindung mit Strg abfragen
  Mit Zitat antworten Zitat
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#3

Re: Tastenkombination über VK_xxxxx abfragen

  Alt 3. Apr 2009, 07:27
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:
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;
Er springt mir auch in die untere IF-Abfrage rein, nur im TreeView wird es nicht angezeigt. Habe ich da noch einen Denkfehler drin ?
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat
Benutzerbild von mleyen
mleyen

Registriert seit: 10. Aug 2007
609 Beiträge
 
FreePascal / Lazarus
 
#4

Re: Tastenkombination über VK_xxxxx abfragen

  Alt 3. Apr 2009, 08:47
Moin,
Zitat von RWarnecke:
Er springt mir auch in die untere IF-Abfrage rein, nur im TreeView wird es nicht angezeigt. Habe ich da noch einen Denkfehler drin ?
Wenn TV_1 dein TreeView ist, liegt das daran, dass es nur in der IF-Abfrage verwendet wird.

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;
  Mit Zitat antworten Zitat
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#5

Re: Tastenkombination über VK_xxxxx abfragen

  Alt 4. Apr 2009, 11:08
Zitat von mleyen:
Wenn TV_1 dein TreeView ist, liegt das daran, dass es nur in der IF-Abfrage verwendet wird.
Ja, das ist mein TreeView. Die Procedure entstand aus diesem Beitrag.

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 ?
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#6

Re: Tastenkombination über VK_xxxxx abfragen

  Alt 18. Apr 2009, 10:46
*push* Hat niemand eine Idee ? *push*
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#7

Re: Tastenkombination über VK_xxxxx abfragen

  Alt 18. Apr 2009, 11:00
warum verwendest du eigentlich nicht das OnKeyDown bzw. OnKeyUp? Da bekommst du die Tasten und den Shiftstate gleich mit dazu
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#8

Re: Tastenkombination über VK_xxxxx abfragen

  Alt 18. Apr 2009, 11:53
Zitat von SirThornberry:
warum verwendest du eigentlich nicht das OnKeyDown bzw. OnKeyUp? Da bekommst du die Tasten und den Shiftstate gleich mit dazu
Das OnKeyDown-Ereignis greift nur innerhalb des TreeViews. Wenn sich eine Node im Editiermodus befindet, dann greift das Ereignis nicht. Deshalb diese Procedure womit ich die Messages abfange. Denn mit dieser Procedure fange ich die Enter-Taste ab und gebe eine entsprechende Meldung aus, wenn immer noch ein vordefinierter Wert in der Node stehen sollte.

Im Anhang mal ein kleine Beispiel inkl. Source. Über ein Kontextmenü kann eine neue Node hinzugefügt werden.
Angehängte Dateien
Dateityp: zip testtreeview_117.zip (266,0 KB, 2x aufgerufen)
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat
Benutzerbild von mleyen
mleyen

Registriert seit: 10. Aug 2007
609 Beiträge
 
FreePascal / Lazarus
 
#9

Re: Tastenkombination über VK_xxxxx abfragen

  Alt 18. Apr 2009, 13:04
Zitat:
EditedTxt := EditedTxt + chr(Msg.wParam);
Ähm in wParam steht doch nur die zuletzt gedrückte Taste.

Füg mal den uses die Unit "Clipbrd" hinzu und kopier folgenden Code mal in deine OnAppMsg Prozedur:
Delphi-Quellcode:
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;
Ich hoffe das hilft jetzt.
  Mit Zitat antworten Zitat
taaktaak

Registriert seit: 25. Okt 2007
Ort: Radbruch
1.990 Beiträge
 
Delphi 7 Professional
 
#10

Re: Tastenkombination über VK_xxxxx abfragen

  Alt 18. Apr 2009, 13:46
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.
Ralph
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:24 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