Auch wenn es schon was her ist...
Hab es nun etwas anders gelöst, naja zumindest teilweise.
Zitat von
DGL-luke:
Hallo, warum nicht so:
Delphi-Quellcode:
function NumOptions: Integer;
function GetOption(NOption: Integer; out OnClickEvent: TNotifyEvent): PChar;
function NumSubOptions(NOption: Integer): Integer;
function GetSubOption(NOption, NSubOption: Integer; out OnClickEvent: TNotifyEvent): PChar;
Die relativ triviale Implementierung verschweige ich da jetzt mal. wie du das ganze in deine hauptanwendung dann importierst, sollte klar sein.
Jede
DLL soll genau nur einen wirklichen Menüeintrag haben. Also auch nur einen Menüclick.
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:
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;
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.
Delphi-Quellcode:
Frachtenverwaltung
- Lager
- Planung
- Listen
- Beladelist