Autor |
Beitrag |
henny
      
Beiträge: 126
|
Verfasst: Di 16.06.09 17:14
Wie programmiere ich einen hotkey so das wenn man eine bestimmte Tastenkombination auf der Tastatur eingibt, das irgendwas durchgefürt wird.
Moderiert von Narses: Überflüssige Zeilenumbrüche/Leerzeilen entfernt.
|
|
Dude566
      
Beiträge: 1592
Erhaltene Danke: 79
W8, W7 (Chrome, FF, IE)
Delphi XE2 Pro, Eclipse Juno, VS2012
|
Verfasst: Di 16.06.09 17:22
Global oder nur wenn dein Programm aktiviert ist?
_________________ Es gibt 10 Gruppen von Menschen: diejenigen, die das Binärsystem verstehen, und die anderen.
|
|
Xentar
      
Beiträge: 2077
Erhaltene Danke: 2
Win XP
Delphi 5 Ent., Delphi 2007 Prof
|
Verfasst: Di 16.06.09 17:25
Wenn es global sein soll: Schonmal Hotkey in die Suche eingetippt?
_________________ PROGRAMMER: A device for converting coffee into software.
|
|
henny 
      
Beiträge: 126
|
Verfasst: Mi 17.06.09 16:00
Nur wnn mein Programm aktiviert ist!
|
|
Dude566
      
Beiträge: 1592
Erhaltene Danke: 79
W8, W7 (Chrome, FF, IE)
Delphi XE2 Pro, Eclipse Juno, VS2012
|
Verfasst: Mi 17.06.09 17:27
Das kannst du ganz simpel mit OnKeyPress machen, außerdem geht auch noch GetASyncKeyState.
_________________ Es gibt 10 Gruppen von Menschen: diejenigen, die das Binärsystem verstehen, und die anderen.
|
|
Popov
      
Beiträge: 1655
Erhaltene Danke: 13
WinXP Prof.
Bei Kleinigkeiten D3Pro, bei größeren Sachen D6Pro oder D7
|
Verfasst: Mi 17.06.09 17:52
Hast du ein Menü? Wenn ja, dann kannst du es zu jedem Menüpunkt direkt eingeben.
_________________ Popov
|
|
henny 
      
Beiträge: 126
|
Verfasst: Sa 20.06.09 13:26
und wie programmiere ich dann das in OnKeyPress wenn man eine Tastenkombination drückt
z.B. eine showmessage erscheint?
|
|
Popov
      
Beiträge: 1655
Erhaltene Danke: 13
WinXP Prof.
Bei Kleinigkeiten D3Pro, bei größeren Sachen D6Pro oder D7
|
Verfasst: Sa 20.06.09 13:41
Nichts dagegen, daß du fragst, aber die Art wie du das machst ist irgendwie zum ignorieren. Du kommst irgendwie so rüber als ob die anderen es für dich programmieren sollten. Du fragst - wie programmiere ich das? Hier fehlt das Gefühl, daß du es selbst versucht hast und es nicht klappt und du deshalb fragst.
Wenn du die OnKeyPress Prozedur durch klicken im Objektinspektor erstellst, dann erstellt Delphi automatisch diese Prozedur:
Delphi-Quelltext 1: 2: 3: 4:
| procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char); begin
end; |
Geht es noch einfacher? Was für Parameter hast du da? Wie wäre es mit Key? Was könnten wir damit anfangen? Es ist ein Char-Typ. Was glaubst du was uns Delphi über den Parameter übergibt? Nochmal zur Erinnerung, das Ereignis ist OnKeyPress. Genau, die Taste die gedrückt wurde.
Delphi-Quelltext 1: 2: 3: 4:
| procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char); begin if Key = 'a' then ShowMessage('Noch einfacher geht es nicht.'); end; |
_________________ Popov
|
|
Dude566
      
Beiträge: 1592
Erhaltene Danke: 79
W8, W7 (Chrome, FF, IE)
Delphi XE2 Pro, Eclipse Juno, VS2012
|
Verfasst: Sa 20.06.09 13:42
Also so habe ich es mal in meinem Pong gemacht:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| procedure TForm1.Timer1Timer(Sender: TObject); begin if GetAsyncKeyState(VK_UP) <> 0 then ShowMessage('Hoch');
if GetAsyncKeyState(VK_Down) <> 0 then ShowMessage('Runter'); end; |
Den Timer dann dementsprechend einstellen wie intensiv er nachmisst, wenn du z.B. ein Intervall von 2 hast dann schaut er in dem moment wo du drückst so oft nach, dass die ShowMessage mehrfach ausgegeben wird.
_________________ Es gibt 10 Gruppen von Menschen: diejenigen, die das Binärsystem verstehen, und die anderen.
|
|
henny 
      
Beiträge: 126
|
Verfasst: Sa 20.06.09 14:28
Danke "dovov" das hat geklappt und wie mache ich das wenn ich nicht nur a drücke sonern strg+a?
|
|
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Sa 20.06.09 14:38
Dann schau mal unter OnKeyDown.
|
|
ffgorcky
      
Beiträge: 573
WIN XP/2000 & 7Prof (Familie:Win95,Win98)
|
Verfasst: Mo 06.07.09 20:51
Also, wenn Du solche Tastenkombinationen (mit Alt oder Strg) als HotKeys haben möchtest, dann ließe sich das wirklich am einfachsten - und zumindest für mich auch am übersichtlichsten - mit (evtl. versteckten) MainMenü-Einträgen machen.
Man braucht ja gar nicht sehen, dass das Programm solch ein MainMenu besitzt (indem Du einfach alle Eintäge auf Visible:=false setzt), aber so klappt das!
|
|
elundril
      
Beiträge: 3747
Erhaltene Danke: 123
Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
|
Verfasst: Mo 06.07.09 21:09
ffgorcky hat folgendes geschrieben : | Man braucht ja gar nicht sehen, dass das Programm solch ein MainMenu besitzt (indem Du einfach alle Eintäge auf Visible:=false setzt), aber so klappt das! |
is aber schlechter programmierstil  und es verbraucht mehr speicherplatz im ram, so wie jede eigentlich sichtbare komponente.
lg elundril
_________________ This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
|
|
ffgorcky
      
Beiträge: 573
WIN XP/2000 & 7Prof (Familie:Win95,Win98)
|
Verfasst: Di 07.07.09 14:28
elundril hat folgendes geschrieben : | is aber schlechter programmierstil und es verbraucht mehr speicherplatz im ram, so wie jede eigentlich sichtbare komponente. |
Na gut, dann müsstest Du nach meinen jetzigen Informationen das ganze dann einfach so machen, dass Du Dir bei FormKeyDown merkst, welche Taste gerade gedrückt wurde (also so: Delphi-Quelltext 1: 2: 3: 4: 5: 6:
| procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if not gedrueckteTaste=nil then gedrueckteTaste:=Key; end; | )
und natürlich bei FormKeyUp dann das ganze wieder so machst: Delphi-Quelltext 1: 2: 3: 4: 5:
| procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); begin if Key=gedrueckteTaste then gedrueckteTaste:=nil; end; |
Und wenn Du bei OnKeyDown noch eine zweite Taste sendest, dann könnte es ja die richtige sein:
Delphi-Quelltext 1: 2:
| if gedrueckteTaste=VK_CTRL and Key='a' then ShowMessage('Richtige Tastenkombination!'); |
Ich hoffe nur, dass ich mich da jetzt nicht irgendwo vertan habe...
|
|
elundril
      
Beiträge: 3747
Erhaltene Danke: 123
Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
|
Verfasst: Di 07.07.09 17:25
hat du leider:
man könnte mit TShiftState arbeiten. ich denkte da sollte ssCrtl dabei sein.
also:
Delphi-Quelltext 1: 2: 3: 4: 5: 6:
| procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if (Key = Ord('a') and (ssCtrl in Shift) then machDasWasGemachtWerdenSoll; end; |
lg elundril
_________________ This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
|
|
Critter
      
Beiträge: 328
Erhaltene Danke: 3
Windows 7
Delphi 7 Pro.
|
Verfasst: Di 07.07.09 17:43
Hallo,
ich denke die Interessanteste Möglichkeit so etwas unter Delphi zu machen liegt in einer ActionList. Einfach eine AL auf das Formular und doppelt Klicken dann eine neue Aktion hinzufügen, unter Hotkey im Objektinspektor deine Tastenkombination eintragen und doppelt auf die Action in der Liste Klicken um aus zu Programmieren, was bei ihrem auslösen geschehen soll.
Das schöne ist, dass du bei bedarf auch gleich die Actions an Menüpunkte und Buttons hängen kannst, wo diese dann mit Caption, Icon (sofern du eine Imagelist hinterlegt hast) und auch der Anzeige des HotKeys erscheinen. Als Sahnehäubchen kannst du dann alle Menüs und Buttons die mit einer Action verknüpft sind auf einen Schlag Disablen oder Unsichtbar machen - einfacher geht das nun wirklich nicht mehr.
Ich sicher du findest zu dem Thema auch was in DER LIB.
_________________ Diejenigen, die grundlegende Freiheiten aufgeben, um ein wenig mehr vorrübergehende Sicherheit zu erkaufen, verdienen weder Freiheit noch Sicherheit.
(Benjamin Franklin;"The Papers of Benjamin Franklin", Vol. 6, Apr. 1, 1755, through Sep. 30, 1756)
Zuletzt bearbeitet von Critter am Di 07.07.09 17:45, insgesamt 1-mal bearbeitet
|
|