Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Key Preview / Ctrl+Q abfragen (https://www.delphipraxis.net/199275-key-preview-ctrl-q-abfragen.html)

rokli 11. Jan 2019 09:12

Key Preview / Ctrl+Q abfragen
 
Moin zusammen!

Ich habe auf meiner Form 4 Panels positioniert und auf den Panels DBGrids, die in Abhängigkeit diverser Parameter gefüllt werden.
Desweiteren schreibe ich mir in eine Variable (sLastQry) den Namen der letzen Query und in sLastSQL mein letztes ausgeführtes SQL Statement.

Mit der Tastenkombination Ctrl+Q wollte ich mir nun mit einem ShowMessage AN BELIEBIGER STELLE anzeigen lassen, was in den beiden Variablen drin steht:

Delphi-Quellcode:
procedure TfrmReklaGr.FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
   if ssCtrl IN Shift then begin
      if Key = ORD('Q') then begin
         ShowMessage('SQL ' + sLastQry + #13 + #13 +
                     'Statement ' + #13 + #13 +
                     sLastSQL);
      end;
   end;
end;
Das Problem: Leider funktioniert die Abfrage auf die Tastenkombination nicht stabil. Mal geht, mal geht nicht....

Liegt das am "Q"? Hat Ctrl+Q Besonderheiten, wir z. B. in einer DOS-Box? Aber ein Test mit beispielsweise Ctrl+R wird auch nicht wirklich regelmäßig erkannt. Oder liegt das an der Reihenfolge <FORM><PANEL><GRID>? Aber das ist ja eigentlich normal.

Hat das schon mal jemand so gemacht und habt Ihr die Probleme auch gehabt? Danke für Eure Kommentare.


Nachtrag:

Delphi-Quellcode:
   if ssCtrl IN Shift then begin
      if Key = VK_F3 then begin
scheint viel besser zu funktionieren!

Delphi.Narium 11. Jan 2019 09:48

AW: Key Preview / Ctrl+Q abfragen
 
Für sowas nehme ich 'ne TActionList.

Der 'ne Action zuweisen.

Die hat ein Attribut ShortCut.

Dort Strg+Q eingeben und den Quelltext ShowMessage(...) dort eingeben.

Der von Dir zu erstellende Quelltext reduziert sich dann auf
Delphi-Quellcode:
 ShowMessage('SQL ' + sLastQry + #13 + #13 +
                     'Statement ' + #13 + #13 +
                     sLastSQL);
Funktioniert eigentlich immer stabil und ist im Quelltext deutlich übersichtlicher, wenn man mal mehrere ShortCuts für diverse Aktionen hat. Das wird im FormKeyUp schnell ziemlich unübersichtlich durch seine (meist) geschachtelten If-Kaskaden durch diverse if ssCtrl IN then if Key then.

Außerdem kann man die Actions auch noch Buttons und/oder Menüs zuordnen, so dass man damit schnell und flexibel viele Funktionalitäten programmieren kann und es im Quelltext trotzdem sehr übersichtlich bleibt.

Aviator 11. Jan 2019 09:56

AW: Key Preview / Ctrl+Q abfragen
 
Ich habe es nicht getestet, aber vmtl. funktioniert deine Abfrage nur deshalb nicht, weil du auf Q und nicht auf q prüfst. In dem Moment in dem du die Q-Taste auf der Tastatur drückst, hast du ja SHIFT nicht auch noch gedrückt.

Kannst es ja mal testen sofern dir die Lösung mit der ActionList nicht gefallen sollte. Aber zur Verwaltung ist die eigentlich schon besser.

rokli 11. Jan 2019 10:13

AW: Key Preview / Ctrl+Q abfragen
 
Zitat:

Zitat von Aviator (Beitrag 1423112)
Q-Taste auf der Tastatur drückst, hast du ja SHIFT nicht auch noch gedrückt.

... doch schon, ich drücke immer "gemeinsam" ... also Ctrl, festhalten und dann die nächste Taste.

Aber das mit der ActionList muss ich mal probieren.... vielen Dank für die Infos!

Delphi.Narium 11. Jan 2019 10:19

AW: Key Preview / Ctrl+Q abfragen
 
Ja, aber dur drückst das kleine q und fragst mit Ord das große Q ab. Wird's mit
Delphi-Quellcode:
procedure TfrmReklaGr.FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
   if ssCtrl IN Shift then begin
      if Key = 113 then begin // 113 = Ascii für q
         ShowMessage('SQL ' + sLastQry + #13 + #13 +
                     'Statement ' + #13 + #13 +
                     sLastSQL);
      end;
   end;
end;
bzw.
Delphi-Quellcode:
procedure TfrmReklaGr.FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
   if ssCtrl IN Shift then begin
      if Key = Ord('q') then begin
         ShowMessage('SQL ' + sLastQry + #13 + #13 +
                     'Statement ' + #13 + #13 +
                     sLastSQL);
      end;
   end;
end;
besser?

p80286 11. Jan 2019 10:20

AW: Key Preview / Ctrl+Q abfragen
 
das testen auf "q" oder "Q" halte ich nicht für sinnvoll. VKQ sollte die Taste besser repräsentieren.
Wenn es mal funktioniert und mal nicht, was ist mit Keypressed oder KeyDown ??

Gruß
K-H

Delphi.Narium 11. Jan 2019 10:30

AW: Key Preview / Ctrl+Q abfragen
 
Stimmt auch wieder, wenn einmal VK_F3 für die Taste F3 genutzt wird und funktioniert, warum eigentlich nicht für die Taste q analog VK_Q nutzen. Ist doch eigentlich so naheliegend.

rokli 11. Jan 2019 10:44

AW: Key Preview / Ctrl+Q abfragen
 
Tja...

Zitat:

Zitat von Delphi.Narium (Beitrag 1423117)
analog VK_Q nutzen. Ist doch eigentlich so naheliegend.

VK_Q und VKQ wird nicht kompiliert (undeklarierter Bezeichner). Der Kleinbuchstabe funzt ebenfalls nicht.

Nun frag ich mit ORD('q') und ORD('Q') beide Werte ab.

Im Moment hab ich das Gefühl, als wenn die Abfrage erst beim 2. mal, wenn die Tastenkombination kommt, funktioniert. Aber ich will ja noch das mit der ActionList testen.

Amateurprofi 11. Jan 2019 12:07

AW: Key Preview / Ctrl+Q abfragen
 
Zitat:

Zitat von rokli (Beitrag 1423120)
Tja...

Zitat:

Zitat von Delphi.Narium (Beitrag 1423117)
analog VK_Q nutzen. Ist doch eigentlich so naheliegend.

VK_Q und VKQ wird nicht kompiliert (undeklarierter Bezeichner). Der Kleinbuchstabe funzt ebenfalls nicht.

Nun frag ich mit ORD('q') und ORD('Q') beide Werte ab.

Im Moment hab ich das Gefühl, als wenn die Abfrage erst beim 2. mal, wenn die Tastenkombination kommt, funktioniert. Aber ich will ja noch das mit der ActionList testen.

Im FormKeyUp wird NICHT der Code eines Zeichens sondern der Code einer Taste übergeben. Bei den "Buchstaben-Tasten" wird, gleichgültig ob die Shift-Taste gedrückt ist oder nicht, der Code des Versals übergeben. Auf Ord('q') zu prüfen macht also im KeyUp keinen Sinn.

Delphi.Narium 11. Jan 2019 12:43

AW: Key Preview / Ctrl+Q abfragen
 
Stimmt auch wieder, das Zeichen der Taste bekommt man hier ja garnicht.

Das q müsste hier als 81 erscheinen demnach sollte nun aber dashier funktionieren:
Delphi-Quellcode:
procedure TfrmReklaGr.FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
   if ssCtrl IN Shift then begin
      if Key = 81 then begin
         ShowMessage('SQL ' + sLastQry + #13 + #13 +
                     'Statement ' + #13 + #13 +
                     sLastSQL);
      end;
   end;
end;
Um zu sehen, was in FormKeyUp abgefragt werden muss hilft eventuell sowas:
Delphi-Quellcode:
procedure TfrmReklaGr.FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
  ShowMessage(Format('Abfragewert für die gerade gedrückte Taste: Key = %d',[key]));
end;


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