Einzelnen Beitrag anzeigen

Benutzerbild von Cyberaxx
Cyberaxx

Registriert seit: 15. Jul 2005
311 Beiträge
 
Delphi XE5 Professional
 
#13

Re: Dynamisches Menü erstellt/gesteuert von DLL's

  Alt 29. Jun 2007, 10:06
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
Daniel
Das Aufwachen aus einem boesen Traum muss einen nicht erleichtern. Es kann einen auch erst richtig gewahr werden lassen, was man Furchtbares getraeumt hat, vielleicht sogar welcher furchtbaren Wahrheit man im Traum begegnet ist!
  Mit Zitat antworten Zitat