![]() |
Re: popupmenu item hinzufügen und onClick ereignis definiere
Moin ixtreme,
dann noch einmal in Kurzfassung: Das OnClick Event ist vom Typ TNotifyEvent. Diese ist folgendermassen deklariert:
Delphi-Quellcode:
Durch dieses of object hat es einen unsichtbaren Parameter self, so dass eigentlich
type
TNotifyEvent = procedure(Sender: TObject) of object;
Delphi-Quellcode:
aufgerufen wird, wenn das OnClick Event aufgerufen wird.
procedure ButtonClick(self: TComponent;Sender: TObject);
Jetzt vergleich das mal mit Deiner "KlickMich" Prozedur. |
Re: popupmenu item hinzufügen und onClick ereignis definiere
ja aber ich kann die prcedure doch aus einer dll nicht so deklarieren?
Gruß ixtreme.de |
Re: popupmenu item hinzufügen und onClick ereignis definiere
Moin ixtreme,
Zitat:
[EDIT] Besser gesagt: Was spricht dagegen? [/EDIT] |
Re: popupmenu item hinzufügen und onClick ereignis definiere
ok, habs versucht, dann findet er die procedure nicht mehr....
fehler: prcedure klickmich in datei.dll nicht vorhanden/gefunden! |
Re: popupmenu item hinzufügen und onClick ereignis definiere
oder es kommt beim aufruf die meldung:
calling conventions differ |
Re: popupmenu item hinzufügen und onClick ereignis definiere
Das hier geht, ist aber nicht sehr elegant:
Delphi-Quellcode:
type
TNotifyEventMP = record Proc : procedure(self : TComponent; Sender: TObject); self : TComponent; end; procedure KlickMich(self : TComponent; Sender: TObject); // Diese hier kann external, also in der DLL sein begin ShowMessage('Sender: ' + Sender.ClassName); end; const KlickMichMP : TNotifyEventMP = ( Proc : KlickMich; self : nil; ); procedure TForm1.Button2Click(Sender: TObject); begin MenuItem1.OnClick := TNotifyEvent(KlickMichMP); end; |
Re: popupmenu item hinzufügen und onClick ereignis definiere
Moin ixtreme,
Zitat:
Wenn die Prozedur als KlickMich exportiert wird, und Du beim Import klickmich angibst, geht das schief. Zitat:
Also entweder immer oder gar nicht. |
Re: popupmenu item hinzufügen und onClick ereignis definiere
Hallo,
ich würde die sichere Art und Weise bevorzugen, etwa in der Art:
Code:
implementation
{$R *.dfm} var _DynButton : function(): TMenuItem; stdcall; procedure TMainForm.FormCreate(Sender: TObject); begin LH := LoadLibrary('test.dll'); if LH <> 0 then begin @_GetDynButton := GetProcAddress(LH, 'CreateButton'); PopupMenu.Items.Insert(PopupMenu.Items.Count, _GetDynButton); end else MessageDlg('Fehler-Nr.: ' + IntToStr(GetLastError), mtError, [mbOk], 0); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:05 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