Autor Beitrag
Petersen
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Do 26.07.12 13:51 
Hallo!

Bei folgender Problemstellung stehe ich irgendwie auf dem Schlauch :(


Angenommen, in einem Projekt gibt es ein Formular (frmMain) - dieses besitzt einen TActionManager, eine TActionList (actlstMain) und eine TToolBar (tlbMain).

In frmMain.actlstMain sei eine TAction "actTest" definiert (ohne "OnExcecute" Event -> also sozusagen inaktiv) zu sehen auf frmMain.tlbMain.


frmMain lädt nun zur Laufzeit verschieden Frames (fraXYZ) - jeweils eines zur Zeit.


Einige dieser fraXYZ besitzen eine TActionList (actlstClient) - ebenfalls mit einer TAction actTest.


Wird so ein Frame geladen, so soll frmMain.actlstMain.actTest eigentlich auf fraXYZ.actlstClient.actTest zeigen.



Nun dachte ich, eine simple Zuweisung a la frmMain.actlstMain.actTest := fraXYZ.actlstClient.actTest und anschließendes frmMain.tlbMain.RecreateControls funktioniert - tut es aber nicht :shock:


Bitte sagt mir, wo mein Denkfehler liegt :oops:

Petersen


Moderiert von user profile iconNarses: Topic aus Delphi Language (Object-Pascal) / CLX verschoben am Do 26.07.2012 um 13:53
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Do 26.07.12 17:05 
Nun ja, du änderst ja nur die Speicheradresse in frmMain.actlstMain.actTest. Wenn dieser Wert danach aber nirgends verwendet wird, bringt das nichts.
Wenn die Komponenten neu erzeugt werden, wird sicher auch die Action neu erzeugt, insofern bringt das nichts.

Wie wäre es, wenn du einfach das OnExecute aus der zweiten Action dem Event in der ersten zuweist?
Petersen Threadstarter
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Do 26.07.12 17:37 
Das "reinen Ausführen" der Aktion klappt so - da hast Du recht.

Allerdings muss ich irgendwie TActionLink ins Spiel bringen, damit der entsprechende ActionClient (also z.B. der ToolBarButton der frmMain.tblbarMain) auf Änderungen wie z.B. fraXYZ.actTest.Enabled := False reagieren kann.

Was soweit ganz vielversprechend aussieht, ist eine Zuweisung wie frmMain.acttlbMain.ActionClient.Items[x].Action := fraXYZ.actTest.

Hier scheitere ich noch am Image, welches weiterhin von einer TImageList aus frmMain gelesen werden soll ...

Und ob das da oben wirklich der "sauberste" Weg ist?!

Bin weiterhin für Ideen sehr dankbar!

Gruß
Sybok Factor
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 50
Erhaltene Danke: 5

Win XP, Win Vista
Delphi 2010 Professional
BeitragVerfasst: Fr 27.07.12 10:22 
Also, irgendwie verstehe ich noch nicht so ganz, warum du es dir so komplizert machst. Der Actionmanager deaktiviert Items, die aus einer nicht vorhandenen Actionlist stammen, automatisch. Es wäre also eine Möglichkeit Formulare statt Frame zu nutzen (Docking z.B.), ist das Formular nicht erzeugt, gibt es auch die Aktion nicht.
Falls es nur um Buttons geht: Warum legst du auf den Frames nicht eine Toolbar mit den Aktionen und dockst die im Hauptformular an, wenn sie benötigt werden.
Bei mir habe ich das z.B. so gebaut, dass ich Dropdownmenüs habe, die auf den "Clients" liegen und dem jeweiligen Button auf dem Hauptformular zugeordnet werden, wenn der CLient aktiviert (oder bei Deaktivierung entfernt) wird.

_________________
Jetzte michse verstehen dein Problem.