Autor Beitrag
Stephan.Woebbeking
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 97



BeitragVerfasst: Mo 06.06.11 17:01 
Hallo *,

kleine prinzipielle Frage:

Ich habe eine Anwendung die aus mehreren Formularen besteht. Jedes Formular stellt eine bestimmte, weitestgehend in sich geschlossene, Funktionalität bereit. Buttons stellen einige aber nicht alle möglichen Kreuzverbindungen dar.
Über ein Menü möchte ich aber aus jedem Formular jedes der anderen erreichen (ausgenommen das aktuelle, das macht wenig Sinn). Weiterhin habe ich wenig Lust - und denke auch das wäre unschön - 5, 6 Mal dasselbe durchzuprogrammieren.

Wie kann ich eine Wiederverwendung - inclusive der Behandlungsroutinge - realisieren? Klar ist, dass die Behandlungsroutine einheitlich sein muss - eine globale Funktion z.B. wäre m.E. für ein Schalten der Formulare ganz geeignet und auch nicht zu schmutzig.

Kann ich das TMenu von Formular zu Formular zur Laufzeit kopieren? Ich würde Problem mit dem "Ownership" erwarten?

Danke schon mal für Eure Beiträge!
Stephan
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: Mo 06.06.11 17:16 
Du brauchst das doch nur an die Eigenschaft Menu des Formulars zuzuweisen. Natürlich musst du es vorher bei dem anderen Formular dort entfernen.

Das geht sogar zur Designzeit formularübergreifend zuzuweisen, wenn die andere Unit mit dem Menü in der uses steht.
Stephan.Woebbeking Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 97



BeitragVerfasst: Di 07.06.11 16:48 
Hmm, ja, da bin ich grad am rumbasteln. Ich dachte jemand hätte das evt. schon mal gemacht und könnte Tips hinsichtlich Ausprägung geben. Ich bin halt jetzt grad am probieren, wie wird das initialisiert, den Owner kann ich nicht neu zuweisen, wo können die Callbacks hingelegt werden, die Methoden und das Menü, sind die besser global oder in einer gekapselten Klasse? Solche Dinge halt...
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: Mi 08.06.11 10:19 
Hallo!

ich löse solche Sache mit der ActionList, bzw. dem Actionmanager. Den gibt es zumindest seit Delphi 7, das Ganze funktioniert auch sehr gut.
Die Actionlisten lassen sich auch von anderen Formularen aus ansprechen. Der Actionmanager kann nicht "vererbt" werden, dafür besteht die Möglichkeit externe Actionlisten dem Manager zuzuordnen. Meiner Ansicht nach tolles Konzept.

Die Actions lassen sich sehr einfach den Menüs, Buttons oder anderen Eingabeelementen zuordnen.

Viele Grüße

Sybok

_________________
Jetzte michse verstehen dein Problem.
Stephan.Woebbeking Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 97



BeitragVerfasst: Mi 22.06.11 17:50 
Ich habe mittlerweile ein globales Menü aufgebaut, welches ich per "Merge" einbinde. Die GroupIds müssen passen, dann klappt das Ganze ganz gut.

Bloß ein Dingen, ich hab wohl wieder 'nen Knick in der Optik?!? Oder es liegt an dem langen Tag. Warum kann ich so kein MenuItem einfügen?

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
  MnuMain.Merge( globalMenu );
  Application.ProcessMessages;
  item := TMenuItem.Create( MnuMain.Items[ 1 ] );
  item.Caption := 'Modulation Analyzer with Marker 3 freq';
  item.OnClick := MnuModulationAnalyzerClick;
  MnuMain.Items[ 1 ].Insert( 1, item );


Beim "Insert" bekomme ich immer einen verletzten Listenindex. Und zwar mit 1! Wenn ich stattdessen "Add" verwende, läuft er durch, aber dafür taucht das MenuItem nirgendwo auf??? Wenn ich "Insert( 0, item );" mache, läuft er auch durch, das Item ist aber ebenfalls nicht auffindbar. Definitiv gibt es etliche MenuItems im "MnuMain"...

Was mache ich falsch?
Stephan
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 23.06.11 06:14 
Wie wäre es dann mit etwas Fehlerbehandlung? Anzahl der Einträge abfragen bevor du darauf zugreifst, ...
Stephan.Woebbeking Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 97



BeitragVerfasst: Do 23.06.11 09:37 
Grundsätzlich gebe ich dir absolut recht; aber im speziellen Fall hilft mir das nicht wirklich, im Formular SEHE ich die Einträge ja, aber ich bekomme eben die genannte Fehlermeldung. Nur, das WARUM bekomme ich doch auch mit der Fehlerbehandlung nicht heraus, oder? Das ist ja grad das Ding; wie ich schon schrieb, wenn ich bei "0" einfüge, dann klappt's, bloß der Eintrag ist nicht sichtbar. Wo ist er dann hin?

Stephan
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Do 23.06.11 10:22 
Moin!

Der Code wird ja nicht flach sein, ich tippe mal, dass da mindestens eine Schleife drum ist. ;) Und dann ist Fehlerbehandlung und Debuggen schon der richtige Ansatz. :idea:

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.