Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   XML (https://www.delphipraxis.net/46-xml/)
-   -   Delphi XML Menu dynamisch erstellen - Events (https://www.delphipraxis.net/191449-xml-menu-dynamisch-erstellen-events.html)

Sequitar 17. Jan 2017 20:05

XML Menu dynamisch erstellen - Events
 
Hallo.
Im fortgang an den Beitrag von hier http://www.delphipraxis.net/190764-i...emoryleak.html würde ich gerne dynamische menus erstellen, die als xml beschrieben sein sollten.
Für ein paar kleine plugins würde ich quasi die benötigte menustructure an die Hauptanwendung übergeben und dann die jeweiligen events dort anbinden.

Ersteres - die Erstellung der Menus - ist ja soweit kein problem. XML gibt die structure ja schon vor, die muss nur noch rekursiv abgearbeitet werden.
Allerdings kann ich im XML ja nur OLE variablen speichern (texte, integers etc), wie realisiere ich hier am besten die zuweisung zu den richtigen events / procedures, die die plugins an die hauptanwendung liefern sollen.

Im moment fragt die HA einfach bei den Plugins nach den jeweiligen menu voraussetzungen und erstellt diese dann nach dem übergebenen XML schema..

Die frage ist jetzt wie kommt zur GUI auch noch die richtige Funktionalität (i.e. onclick events) an die richtige Stelle?

Idee: Würde mir die Eigentschaft Tag irgendwas bringen, um eine solche verknüfung zu erzielen? ich weiss nur noch nicht wie...

nahpets 17. Jan 2017 20:42

AW: XML Menu dynamisch erstellen - Events
 
Zum Zeitpunkt des Menüaufbaus kennst Du doch das Plugin und kannst auf seine Funktionen zugreifen?

Würde Dir sowas (jetzt mal so dahingesponnenens) helfen?

'ne Routine im Plugin:
Delphi-Quellcode:
function tMeinPlugin.Ereigniszuweisung(Menu : TMenuItem) : boolean;
begin
  case Menu.Tag of
    0 : Menu.OnClick := OnClickRoutine0;
    1 : Menu.OnClick := OnClickRoutine1;
    2 : Menu.OnClick := OnClickRoutine2;
    3 : Menu.OnClick := OnClickRoutine3;
  end;
  Result := Assigend(Menu.OnClick);
end;
Und sowas in der Art in Deinem Programm (das Menü ist bereits fertig aufgebaut):
Delphi-Quellcode:
for i := 0 to Application.Mainmenu.Items.Count - 1 do begin
  if not MeinPlugin.Ereigniszuweisung(Application.Mainmenu.Items[i]) then begin
    // Fehlermeldung?
    Application.Mainmenu.Items[i].Visible := False;
    Application.Mainmenu.Items[i].Enabled := False;
    // oder was auch immer ...
  end;
end;
Oder:
Delphi-Quellcode:
// Hier wird irgendwie aus der XML das Menü aufgebaut
AktuellesMenueItem.Caption := Wert aus der XML;
AktuellesMenueItem.Tag    := Wert aus der XML;
MeinPlugin.Ereigniszuweisung(AktuellesMenueItem);
Keine Ahnung, ob das auch nur ansatzweise funktioniert.

Sequitar 17. Jan 2017 21:43

AW: XML Menu dynamisch erstellen - Events
 
Ok super, der Anstoss hat gewirkt. Funktioniert wie gewünscht.

Danke.

Jetzt noch eine frage: gibts ne möglichkeit, eine vorerstellte XML als resource einzubinden und drauf zuzugreifen, um die nicht "manuell" per code erstellen zu müssen?

nahpets 17. Jan 2017 21:53

AW: XML Menu dynamisch erstellen - Events
 
Tutorial für das Einbinden von SQL-Dateien: http://www.delphipraxis.net/49505-sq...einbinden.html

Sollte analog auch mit XML und sonstigem "Textdateigedöns" funktionieren.

Oder so? http://www.delphipraxis.net/59835-re...einbinden.html

Sequitar 17. Jan 2017 22:15

AW: XML Menu dynamisch erstellen - Events
 
merci


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:51 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