AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi Key Preview / Ctrl+Q abfragen

Key Preview / Ctrl+Q abfragen

Ein Thema von rokli · begonnen am 11. Jan 2019 · letzter Beitrag vom 14. Jan 2019
Antwort Antwort
Seite 1 von 2  1 2   
rokli

Registriert seit: 21. Mär 2009
Ort: Rödinghausen
294 Beiträge
 
Delphi 10.4 Sydney
 
#1

Key Preview / Ctrl+Q abfragen

  Alt 11. Jan 2019, 10:12
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!
Rolf
wenn nicht anders angegeben, schreibe ich zu D7, XE2 und MS SQL - ansonsten fragen Sie ihren Administrator oder einen Operator. Update 06/2020: Delphi 10.4 Sydney

Geändert von rokli (11. Jan 2019 um 10:20 Uhr) Grund: Nachtrag Delphi Code
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.400 Beiträge
 
Delphi 7 Professional
 
#2

AW: Key Preview / Ctrl+Q abfragen

  Alt 11. Jan 2019, 10:48
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.
  Mit Zitat antworten Zitat
Aviator

Registriert seit: 3. Jun 2010
1.610 Beiträge
 
Delphi 10.3 Rio
 
#3

AW: Key Preview / Ctrl+Q abfragen

  Alt 11. Jan 2019, 10:56
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.
  Mit Zitat antworten Zitat
rokli

Registriert seit: 21. Mär 2009
Ort: Rödinghausen
294 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: Key Preview / Ctrl+Q abfragen

  Alt 11. Jan 2019, 11:13
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!
Rolf
wenn nicht anders angegeben, schreibe ich zu D7, XE2 und MS SQL - ansonsten fragen Sie ihren Administrator oder einen Operator. Update 06/2020: Delphi 10.4 Sydney
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.400 Beiträge
 
Delphi 7 Professional
 
#5

AW: Key Preview / Ctrl+Q abfragen

  Alt 11. Jan 2019, 11:19
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?
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#6

AW: Key Preview / Ctrl+Q abfragen

  Alt 11. Jan 2019, 11:20
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
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.400 Beiträge
 
Delphi 7 Professional
 
#7

AW: Key Preview / Ctrl+Q abfragen

  Alt 11. Jan 2019, 11:30
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.
  Mit Zitat antworten Zitat
rokli

Registriert seit: 21. Mär 2009
Ort: Rödinghausen
294 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: Key Preview / Ctrl+Q abfragen

  Alt 11. Jan 2019, 11:44
Tja...

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.
Rolf
wenn nicht anders angegeben, schreibe ich zu D7, XE2 und MS SQL - ansonsten fragen Sie ihren Administrator oder einen Operator. Update 06/2020: Delphi 10.4 Sydney
  Mit Zitat antworten Zitat
Amateurprofi

Registriert seit: 17. Nov 2005
Ort: Hamburg
1.039 Beiträge
 
Delphi XE2 Professional
 
#9

AW: Key Preview / Ctrl+Q abfragen

  Alt 11. Jan 2019, 13:07
Tja...

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.
Gruß, Klaus
Die Titanic wurde von Profis gebaut,
die Arche Noah von einem Amateur.
... Und dieser Beitrag vom Amateurprofi....
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.400 Beiträge
 
Delphi 7 Professional
 
#10

AW: Key Preview / Ctrl+Q abfragen

  Alt 11. Jan 2019, 13:43
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;
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 03:39 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