AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Dynamisches Menü erstellt/gesteuert von DLL's
Thema durchsuchen
Ansicht
Themen-Optionen

Dynamisches Menü erstellt/gesteuert von DLL's

Ein Thema von Cyberaxx · begonnen am 16. Mai 2007 · letzter Beitrag vom 29. Jun 2007
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#11

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

  Alt 17. Mai 2007, 16:52
na womit denn nicht? Das Singleton-Pattern musst du natürlich nicht umsetzen. Wäre aber am sinnvollsten hier denke ich.
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
Benutzerbild von Cyberaxx
Cyberaxx

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

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

  Alt 17. Mai 2007, 17:21
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

procedure ClickEvent(Sender: TObject); und dann beim inizialisieren der DLL einfach

Delphi-Quellcode:
function InitPlugin(var PluginData: TPluginData): Boolean;
  var
    Item: TMenuItem;
begin
  [...]
  Item.Caption := 'test';
  Item.OnClick := ClickEvent;
  [...]
end;
Wenn ich das in normalen Anwedungen mache klappt das auch immer nur bei der DLL nicht.

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.
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
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
Benutzerbild von Cyberaxx
Cyberaxx

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

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

  Alt 29. Jun 2007, 10:26
Ein menüitem zu übergeben, das im Plugin erstellt worden ist, ist nicht sehr sinnig oder?
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
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#15

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

  Alt 29. Jun 2007, 10:39
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.
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
Benutzerbild von Cyberaxx
Cyberaxx

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

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

  Alt 29. Jun 2007, 10:58
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.
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
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:27 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz