ShortCuts aus TActionList in anderern Forms verwenden

Rund um die LCL und andere Komponenten
Antworten
RuhrPotto
Beiträge: 39
Registriert: Mi 6. Mai 2015, 12:52

ShortCuts aus TActionList in anderern Forms verwenden

Beitrag von RuhrPotto »

Ich hab mal wieder ein Brett vorm Kopf.

Im Hauptformular ist eine TActionList mit eigenen Funktionen - Zuweisung an TToolButtons.
Funktioniert prima auch mit den hinterlegten Shortcuts (zB. Strg+P)

Im aufgerufenen Unterformular sind TSpeedButtons vorhanden, denen die Action des Hauptformulares zugewiesen wurde.
Beschriftung und Grafik werden übernommen und bei Click auch die Action ausgeführt.
Die entsprechenden Shortcuts funktionieren allerdings nicht!
Ist auch nicht abhängig vom SpeedButton - BitButtons gehen auch nicht.

Hat jemand eine Lösung für das Problem oder muss ich in jeder Form die gleiche ActionList hinterlegen?

Danke
Jeder macht Fehler - viele Fehler brauchen EDV!

Socke
Lazarusforum e. V.
Beiträge: 3178
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: ShortCuts aus TActionList in anderern Forms verwenden

Beitrag von Socke »

RuhrPotto hat geschrieben:Hat jemand eine Lösung für das Problem oder muss ich in jeder Form die gleiche ActionList hinterlegen?
Du kannst mehrfach verwendete Aktionen auf einem Datenmodul hinterlegen.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

RuhrPotto
Beiträge: 39
Registriert: Mi 6. Mai 2015, 12:52

Re: ShortCuts aus TActionList in anderern Forms verwenden

Beitrag von RuhrPotto »

Danke für die Rückmeldung auf meine Frage!
Ich hab die ActionList aus dem Hauptformular in ein neues Datenmodul verlagert. In diesem ist nur die ActionList vorhanden.

Ich habe aber kein anderes Ergebnis! Bei Click auf die Buttons werden die Aktionen ausgeführt.
Die ShortCuts wie Strg+P funktionieren jetzt aber gar nicht mehr. Weder im Hauptformular noch in den Unterformularen.

Eingebuden und eingestellt ist folgendes am Beispiel eines SpeedButtons

Code: Alles auswählen

 
implementation
uses FormMain, UnitDMAction;  
...
SpeedButtonPause.Action := DMAction.ActionCallPauseScreen;
 
Das Datenmodul hat folgende Eintrage:

Code: Alles auswählen

 
object DMAction: TDMAction
  OldCreateOrder = False
  Height = 150
  HorizontalOffset = 342
  VerticalOffset = 256
  Width = 150
  object ActionList1: TActionList
    Images = FrmMain.ImageList26
    left = 32
    top = 24
    object ActionCallPauseScreen: TAction
      Caption = 'Pause'
      ImageIndex = 8
      OnExecute = ActionCallPauseScreenExecute
      ShortCut = 16464   // gleich Strg + P
    end
  end
end
 
 
procedure TDMAction.ActionCallPauseScreenExecute(Sender: TObject);
begin
  FrmPause.ShowModal;
end; 
 
Hab ich was übersehen / vergessen?
Jeder macht Fehler - viele Fehler brauchen EDV!

wp_xyz
Beiträge: 5143
Registriert: Fr 8. Apr 2011, 09:01

Re: ShortCuts aus TActionList in anderern Forms verwenden

Beitrag von wp_xyz »

Ich hab das noch nie gemacht, daher eben ausprobiert (siehe beigefügte Demo): Also in dieser einfachen Demo geht es wunderbar.
Dateianhänge
Action-HotKeys.zip
(2.55 KiB) 54-mal heruntergeladen

RuhrPotto
Beiträge: 39
Registriert: Mi 6. Mai 2015, 12:52

Re: ShortCuts aus TActionList in anderern Forms verwenden

Beitrag von RuhrPotto »

Hallo und Danke für die Demo!

Aber leider nur ein Teilerfolg - zumindest nähert man sich dem Problem:

In der Demo erfolgt der Call auf Form2 wie folgt:

Code: Alles auswählen

Form2.Show;
Dabei funktioniert auch der zugehörige ShortCut - super!

In meinem Programm - und ich habs in der Demo mal kurz geändert - erfolgt der Call

Code: Alles auswählen

Form2.ShowModal;
Und schon klappt es nicht mehr mit dem ShortCut! Ziemlich madig ..
:?: Es scheint also daran zu liegen, wie der Call auf das Formular erfolgt und nicht daran, wo die Actionlist hinterlegt ist!?
Jeder macht Fehler - viele Fehler brauchen EDV!

wp_xyz
Beiträge: 5143
Registriert: Fr 8. Apr 2011, 09:01

Re: ShortCuts aus TActionList in anderern Forms verwenden

Beitrag von wp_xyz »

Ich denke, bei ShowModal gehen werden die Tastaturereignisse vom Hauptformular gleich ans modale Fenster weitergeleitet. Du musst versuchen, die Tastatur-Events abzufangen, bevor sie ans modale Fenster weitergeliefert wird. Aber ehrlich gesagt - das ist ziemlich widersinning, denn dann ist das Fenster ja nicht mehr modal. Warum kann dein Programm nicht mit "Form.Show" auskommen?

Socke
Lazarusforum e. V.
Beiträge: 3178
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: ShortCuts aus TActionList in anderern Forms verwenden

Beitrag von Socke »

RuhrPotto hat geschrieben:Und schon klappt es nicht mehr mit dem ShortCut! Ziemlich madig ..
:?: Es scheint also daran zu liegen, wie der Call auf das Formular erfolgt und nicht daran, wo die Actionlist hinterlegt ist!?
ShowModal hat einige Besonderheiten was die Nachrichtenverarbeitung (Maus, Tastatur etc.) anbelangt.
Wenn du das Problem nicht lösen kannst, darfst du gernen einen Fehler melden: http://bugs.freepascal.org/
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

Antworten