![]() |
Re: Dynamisches Menü erstellt/gesteuert von DLL's
na womit denn nicht? Das
![]() |
Re: Dynamisches Menü erstellt/gesteuert von DLL's
Der erste Teil klappt ja schon. also das erstellen des Menüs, dazu erstmal danke und im nachhinein hätte ich auf so eine Funktion selber kommen müssen.
Dann hatte ich anfangs versucht, wie bei meinen sonstigen Anwendungen einfach in der Deklaration
Delphi-Quellcode:
und dann beim inizialisieren der DLL einfach
procedure ClickEvent(Sender: TObject);
Delphi-Quellcode:
Wenn ich das in normalen Anwedungen mache klappt das auch immer nur bei der DLL nicht.
function InitPlugin(var PluginData: TPluginData): Boolean;
var Item: TMenuItem; begin [...] Item.Caption := 'test'; Item.OnClick := ClickEvent; [...] end; Bin dann auf Sakuras Tutorial gestossen und dort macht er es einfach über eine Liste in der er die Plugins setzt und im Menuitem den Tag benutz. Beim drücken eines Items wird der Tag abgefragt und einfach die DLL aufgerufen. Da war mir das aber noch nicht klar wie ich eben das Menü so hinbekomme wie ich es haben wollte und oben beschrieben. Ich programmiere zwar nicht seit gestern und hab meiner Meinung nach auch schon einges gemacht aber mit deinem Post(#6) komme ich einfach nicht klar. Ich bin bei sowas auch hartnäckig und möchte auch wenn ich nachher dumm da steh das gerne komplett erklährt haben :) Aus einfacheit halber hätte ich anfangs eben Sakuras Methode genutzt und eben zum MenuItem Item noch eine Property hinzugefügt um den Tag nicht nutzen zu müssen. Da es aber hier noch einen anderen Lösungsvorschlag gab würde ich ihn eben gerne verstehen. Ich glaub ich hab mich zu oft wiederholt, ich setz das erstmal ab. ;) |
Re: Dynamisches Menü erstellt/gesteuert von DLL's
Auch wenn es schon was her ist...
Hab es nun etwas anders gelöst, naja zumindest teilweise. Zitat:
Ist hier noch nicht in einer DLL, ist ja nur zum test.
Delphi-Quellcode:
type
TPlugin = class(TObject) private procedure Click(Sender: TObject); public function NumOptions: Integer; function NumSubMainOptions: Integer; function GetOption(out OnClickEvent: TNotifyEvent): PChar; end;
Delphi-Quellcode:
Damit bekomme ich die Anzahl der Menüeinträge und das dazugehörige Untermenü aber wie könnte man das ganze denn noch variabler gestallten, wenn ich dazu noch ein Untermenü habe oder gar noch einge Untermenüs. Sprich ich kenne die Anzahl der Untermenüs und deren Untermenüs nicht.
procedure TForm1.FormCreate(Sender: TObject);
var OnClickEvent: TNotifyEvent; MainItems: Integer; MainSubItems: Integer; MainItemCount: Integer; I: Integer; TmpItem: TMenuItem; TmpSubItem: TMenuItem; MenuItem: TMenuItem; begin Plugin := TPlugin.Create; // Plugin Erstellen MainItems := Plugin.NumOptions; // Anzahl der Hauptelemente holen MainSubItems := Plugin.NumSubMainOptions; // Anzahl der Elemente unter dem Hauptelement while JvMainMenu1.Items.Count <= MainItems do // Weniger Hauptelemente vorhanden, Elemente hinzufüge begin TmpItem := TMenuItem.Create(JvMainMenu1); TmpItem.Caption := 'Main'; Tmpitem.Enabled := False; JvMainMenu1.Items.Insert(JvMainMenu1.Items.Count, TmpItem); end; TmpItem := JvMainMenu1.Items[MainItems]; TmpItem.Enabled := True; while TmpItem.Count <= MainSubItems do begin TmpSubItem := TMenuItem.Create(Self); TmpSubitem.Caption := 'MainSub'; TmpSubItem.Enabled := False; Tmpitem.Insert(TmpItem.Count, TmpSubItem); end; TmpSubItem := TmpItem.Items[MainSubItems]; TmpSubItem.Enabled := True; MenuItem := TMenuitem.Create(Self); MenuItem.Caption := Plugin.GetOption(OnClickEvent); MenuItem.OnClick := OnClickEvent; TmpSubItem.Insert(TmpSubitem.Count, MenuItem); end;
Delphi-Quellcode:
Frachtenverwaltung
- Lager - Planung - Listen - Beladelist |
Re: Dynamisches Menü erstellt/gesteuert von DLL's
Ein menüitem zu übergeben, das im Plugin erstellt worden ist, ist nicht sehr sinnig oder?
|
Re: Dynamisches Menü erstellt/gesteuert von DLL's
Hm. Ich hatte bereits HMENU erwähnt. Du solltest auf jeden Fall nicht VCL-Klassen zwischen den Modulen hin und her reichen.
Aber du kannst - vielleicht, ich hab mich damit noch nicht beschäftigt - in der DLL dein eigenes TMainMenu instanziieren und darauf das HMENU deines TMainMenu zuweisen. Siehe auch ein Post weiter oben von mir. |
Re: Dynamisches Menü erstellt/gesteuert von DLL's
Ich habe es gerade testweise mit TMainMenu versucht aber dann müsste ich im Hauptprogramm das Menü auseinander nehmen, das nicht Einträge doppelt sind oder vllt dann eben nicht mehr da sind.
Irgendwie kompliziert. Will ja auch nicht xmal ne Funktion schreiben um diverse Untermenüs zu erstellen und prüfen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12: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