Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Action zur Laufzeit mit Shortcut versehen (https://www.delphipraxis.net/63022-action-zur-laufzeit-mit-shortcut-versehen.html)

sir-archimedes 12. Feb 2006 21:29


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:
  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;
Weiß jemand, wie ich die ActionList/Action dazu bewegen kann, auch auf die Shortcuts zu reagieren?

Gruß und danke,
Dominik

Sharky 13. Feb 2006 05:28

Re: Action zur Laufzeit mit Shortcut versehen
 
Hai dominik.boehm,

ist jezt ungetestet. Aber musst Du der Eigenschaft .ShortCut nicht über die Function Delphi-Referenz durchsuchenShortCur etwas zuweisen?

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;

sir-archimedes 13. Feb 2006 08:03

Re: Action zur Laufzeit mit Shortcut versehen
 
Leider hat das nicht funktioniert. Die Funktion ShortCut erzeugt auch nur eine neue Integerzahl:

Delphi-Quellcode:
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;
Da wird nichts registriert :-( Hat sonst noch jemand einen Tipp?

Gruß,

teebee 13. Feb 2006 08:40

Re: Action zur Laufzeit mit Shortcut versehen
 
Owner der ActionList muss das Formular sein, dann geht es (auch ohne Funktionsaufruf ShortCut()).

Gruß, teebee

sir-archimedes 13. Feb 2006 08:49

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...

teebee 13. Feb 2006 08:53

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.

sir-archimedes 13. Feb 2006 08:57

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.

teebee 13. Feb 2006 09:11

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.

teebee 13. Feb 2006 09:16

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.

sir-archimedes 13. Feb 2006 09:55

Re: Action zur Laufzeit mit Shortcut versehen
 
Zitat:

Zitat von teebee
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.

Dazu sag ich nur eins: super Idee!!! Klappt wie gewünscht :dancer:

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 02:17 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