Einzelnen Beitrag anzeigen

Benutzerbild von DGL-luke
DGL-luke

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

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

  Alt 16. Mai 2007, 16:33
Hallo,

alle Events in Delphi sind von der form "TSomeEvent = procedure(param: TXYZ) of object;".
TNotifyEvent ist das, womit alle OnClick-Ereignisse verarbeitet werden. der ist als "procedure(sender: TObject) of object;" definiert.

Indem du nun den out-Parameter (out heißt, er wird vom Callee zugewiesen) "OnCLickEvent" zuweist, gibst du dem caller diese referenz, die er dann aufrufen kann. z.B. so:

Delphi-Quellcode:
//implementation der funktion in der dll
function GetOption(NOption: Integer; out OnClickEvent: TNotifyEvent): PChar;
begin
  Result := PChar(TEventDispatcherSingleton.GetInstance.MenuCaptions[NOption]);
  OnClickEvent := TEventDispatcherSingleton.GetInstance.MenuEvents[NOption]);
end;

//aufruf
with TMenuItem.Create(Mainmenu1) do
begin
  Parent := TopItem;
  Caption := GetOption(5, OnClickEvent); //onclickevent muss als variable deklariert worden sein
  OnClick := OnClickEvent;
end;
Wie ich mit meinem "TEventDispatcherSingleton" oben schon angedeutet habe, müssen diese Events dann auch auf einen richtigen Event , also die Implementation des Events als Klassenmethode, zugewiesen werden. (Man kann das auch auf freie prozeduren zuweisen, aber das wird dann tricky)

Das TEventDispatcherSingleton sieht dann vielleicht so aus:

Delphi-Quellcode:
type
  TEventDispatcherSingleton = class
  private
    Instance: TEventDispatcherSingleton;
    constructor Create;
  public
    MenuCaptions: array of string;
    MenuEvents: array of TNotifyEvent;

    procedure OnMenuItemXClick(Sender: TObject); //das muss man dann implementieren

    class function GetInstance: TEventDispatcherSingleton; // dort wird geschaut, ob instance belegt ist, wenn ja zurückgegeben, wenn nicht zuerst erzeugt
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