![]() |
Action zur Laufzeit mit Shortcut versehen
Hallo,
ich möchte eigentlich nur ein Shortcut für meine Form registrieren (per Code). Dazu habe ich mir gedacht, dass ich einfach eine ActionList/Action dynamisch erzeuge und den Shortcut eintrage. Das funktioniert aber nicht: die Action kann nicht per Shortcut aufgerufen werden. Ich habe das so probiert:
Delphi-Quellcode:
Weiß jemand, wie ich die ActionList/Action dazu bewegen kann, auch auf die Shortcuts zu reagieren?
InternalActionList := TActionList.Create(NIL);
InternalActionList.Name := 'InternalActionList'; with TAction.Create(InternalActionList) do begin ShortCut := VK_F5; ActionList := InternalActionList; Name := 'actRefreshData'; Caption := 'Daten Refreshen'; OnExecute := RefreshDataOnExecute; end; Gruß und danke, Dominik |
Re: Action zur Laufzeit mit Shortcut versehen
Hai dominik.boehm,
ist jezt ungetestet. Aber musst Du der Eigenschaft .ShortCut nicht über die Function ![]()
Delphi-Quellcode:
InternalActionList := TActionList.Create(NIL);
InternalActionList.Name := 'InternalActionList'; with TAction.Create(InternalActionList) do begin ShortCut := ShortCut(VK_F5, []); ActionList := InternalActionList; Name := 'actRefreshData'; Caption := 'Daten Refreshen'; OnExecute := RefreshDataOnExecute; end; |
Re: Action zur Laufzeit mit Shortcut versehen
Leider hat das nicht funktioniert. Die Funktion ShortCut erzeugt auch nur eine neue Integerzahl:
Delphi-Quellcode:
Da wird nichts registriert :-( Hat sonst noch jemand einen Tipp?
function ShortCut(Key: Word; Shift: TShiftState): TShortCut;
begin Result := 0; if WordRec(Key).Hi <> 0 then Exit; Result := Key; if ssShift in Shift then Inc(Result, scShift); if ssCtrl in Shift then Inc(Result, scCtrl); if ssAlt in Shift then Inc(Result, scAlt); end; Gruß, |
Re: Action zur Laufzeit mit Shortcut versehen
Owner der ActionList muss das Formular sein, dann geht es (auch ohne Funktionsaufruf ShortCut()).
Gruß, teebee |
Re: Action zur Laufzeit mit Shortcut versehen
Danke. Das möchte ich aber gerade nicht. Denn die Actionlist soll "unsichtbar" bleiben. Wenn ich die Action mit Owner=self(=Formular) erstelle, dann klappt es auch nicht...
Prinzipiell dreht es sich mir eigentlich nur darum, einen Shortcut für das Fenster (und nur das Fenster) zu erstellen... |
Re: Action zur Laufzeit mit Shortcut versehen
Inwiefern wird die ActionList denn 'sichtbar', wenn Du als Owner das Formular angibst? Nach außen ändert sich doch nichts.
|
Re: Action zur Laufzeit mit Shortcut versehen
Das Formular soll quasi ein Basis-Formular sein. Es wird also von ihm vererbt. Die Kinder sehen die Actionlist im Formulareditor, sobald ich den Owner=Formular setze. Aber genau das möchte ich verhindern.
Die ActionList soll also unsichtbar im Formulareditor bleiben. |
Re: Action zur Laufzeit mit Shortcut versehen
Dann wird es mit einer ActionList nicht funktionieren. OnShortCut des Formulars kommt dann wohl auch nicht in Frage. Also müsstest Du in der Fensterprozedur Deinen ShortCut direkt abfangen.
|
Re: Action zur Laufzeit mit Shortcut versehen
Eine Idee noch: Vielleicht hilft 'csDesigning in ComponentState' ja weiter, indem Du den Owner nur dann seztzt, wenn die Applikation nicht im Formular-Editor bearbeitet wird.
|
Re: Action zur Laufzeit mit Shortcut versehen
Zitat:
Mensch mensch mensch, hätte ich diese Idee früher gehabt, dann hätte ich mir ne Menge Arbeit erspart ;-) Danke! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:06 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz