ShortCuts

W-Stefan

Mitglied
Hi Leute,

ich habe zwei fragen, die sich aber eigentlich um das selbe problem drehen.

1. Ich möchte auf einen Speed-Button einen ShortCut also ein Tastenkürzel legen, wie zum Beispiel: STRG + P. Kann ich das machen und wie?

2. Ich habe bei meinem Formular dem FormKeyDown-Ereignis etwas zugewiesen. Hab das hier mal als Code:

Code:
procedure TRechner.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
  case key of
    48,96: Rechner.but_0.Click;           // 0 gedrückt
    49,97: Rechner.but_1.Click;           // 1 gedrückt
    50,98: Rechner.but_2.Click;           // 2 gedrückt
    51,99: Rechner.but_3.Click;           // 3 gedrückt
    52,100: Rechner.but_4.Click;          // 4 gedrückt
    53,101: Rechner.but_5.Click;          // 5 gedrückt
    54,102: Rechner.but_6.Click;          // 6 gedrückt
    55,103: Rechner.but_7.Click;          // 7 gedrückt
    56,104: Rechner.but_8.Click;          // 8 gedrückt
    57,105: Rechner.but_9.Click;          // 9 gedrückt
end;

Ich möchte nun aber auch hier ein Tastenkürzel einbauen (Vielleicht kann ich das von oben auch dort einbauen).

Danke für eure hilfe
 
Hallo Stefan,
habe mit ShortCuts auch noch nicht so viel gemacht, also bin ich mal eben durch die Eigenschaften der Standard Komponenten gebutschert und keine Eigenschaft ShortCut oder HotKey gefunden, was also bedeutet, wenn du diese Komponenten nicht selber erweiterst, keine solche Funktionalität erwarten kannst. :(
Da man als Coder jedoch sehr faul ist, würde ich die Komponente auch nicht erst erweitern, sondern auf einen kleinen Trick zurückgreifen. Wenn du dir mal die Eigenschaften von TMenu oder TMenuItem anguckst, wirst du feststellen, dass du für diese Komponenten ShortCuts definieren kannst. Was du jetzt machst, ist folgendes. Du erstellst dir so viele MenuItems, wie du Shortcuts benötigst. Dann weißt du deren OnClick Ereignis z.B das OnClick Ereignis deines Speedbuttons zu und fertig ist der HotKey. Wenn du dann noch dein Menu auf "Visible = false" stellst, bekommt keiner was davon mit. ;)

Gruß Patrick
 
Hi Patrick,

is ne echt tolle idee, habe ich auch sofort ausprobiert, nur macht das meinen quelltext, der sowieso schon so lang ist, nur noch viel länger. Ich hab da selbs noch so ein bisschen rumprobiert und es funktioniert so zur hälfte. Ich habe einfach zu meinem Code (der von oben) noch folgendes dazugeschrieben:

Code:
    17 and 76: Rechner.but_mc.Click;      // MC (zwischenspeicher löschen) 
    17 and 82: Rechner.but_mr.Click;      // MR (zwischenspeicher einfügen) 
    17 and 77: Rechner.but_ms.Click;      // MS (in den zwischenspeicher legen)
    17 and 80: Rechner.but_mplus.Click;   // M+ (zum zwischenspeicher hinzufügen)

Jetzt bringt er mir aber fehlermeldungen, und zwar schreibt er bei der zweiten zeile und bei der letzten zeile als Fehlermeldung: Doppeltes Case-Label.
Ich nehme mal an, der will mir damit sagen, dass ich diese Taste schon verwendet habe :( . Aber das habe ich nicht.

Kannst du dir vorstellen, warum er das macht?
 
Benutz ein Komma, anstatt dem "and".

Um Platz zu sparen, könntest du dein Ereignis auch gleich in den Ereignis-Inspektor beim Erstellen eintragen, dann brauchst du gar keinen Code mehr zu schreiben.

Gruß Patrick
 
Hi Patrick,

Benutz ein Komma, anstatt dem "and".

Ich kann kein Komma verwenden, weil mein Programm dann die Tasten einzeln nimmt. Also: 17 Steht für STRG und die andere Zahl jeweils für einen buchstaben. Wenn ich jetzt ein komma schreibe, wird die Funktion benutzt wenn ich 'nur' auf STRG oder 'nur' auf den Buchstaben drücke. Bischen kompliziert, aber ich glaub es is verständlich.

Und das andere was du geschrieben hast verstehe ich nicht ganz. Könntest du es vielleicht ein wenig erklären?

Danke
 
Du kannst im Objekt-Inspektor bestimmte Ereignisse festlegen, bzw. welche Funktion aufgerufen werden soll, wenn dieses Ereignis ausgelöst wird. Wenn du nun im OnClick Ereignis des Menüs, die Funktion TSpeedButtonOnClick oder wie auch immer du sie genannt hast, einträgst, wird, wenn du einen ShortKey definiert hast, gleich der SpeedButton betätigt.

Gruß Patrick
 
Du musst dir auch schon meine Beiträge durchlesen, sonst kann ich dir nicht behilflich sein.
Habe dir ein kleines Projekt angehängt, ich hoffe, dadurch wird einiges klarer.

Patrick
 

Anhänge

  • test.zip
    2,6 KB · Aufrufe: 72
Sorry aber ich kann das nicht öffnen. bin hier in der Arbeit und ich habe nicht das recht, mir etwas herunterzuladen.
 
Hi Leute,

wollte nur mitteilen, dass ich auf die Methode mit dem Menü zurückgegriffen habe. Hat meinen Code zwar verlängert, aber nicht allzusehr.

Danke.
 

Neue Beiträge

Zurück