Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi popupmenu item hinzufügen und onClick ereignis definieren! (https://www.delphipraxis.net/11866-popupmenu-item-hinzufuegen-und-onclick-ereignis-definieren.html)

Christian Seehase 15. Nov 2003 21:07

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:
type
  TNotifyEvent = procedure(Sender: TObject) of object;
Durch dieses of object hat es einen unsichtbaren Parameter self, so dass eigentlich

Delphi-Quellcode:
procedure ButtonClick(self: TComponent;Sender: TObject);
aufgerufen wird, wenn das OnClick Event aufgerufen wird.

Jetzt vergleich das mal mit Deiner "KlickMich" Prozedur.

ixtreme 16. Nov 2003 14:35

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

Christian Seehase 16. Nov 2003 14:35

Re: popupmenu item hinzufügen und onClick ereignis definiere
 
Moin ixtreme,

Zitat:

Zitat von ixtreme
ja aber ich kann die prcedure doch aus einer dll nicht so deklarieren?

und warum nicht?

[EDIT]
Besser gesagt: Was spricht dagegen?
[/EDIT]

ixtreme 16. Nov 2003 15:16

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!

ixtreme 16. Nov 2003 15:21

Re: popupmenu item hinzufügen und onClick ereignis definiere
 
oder es kommt beim aufruf die meldung:

calling conventions differ

scp 16. Nov 2003 16:46

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;

Christian Seehase 16. Nov 2003 17:35

Re: popupmenu item hinzufügen und onClick ereignis definiere
 
Moin ixtreme,

Zitat:

Zitat von ixtreme
fehler: prcedure klickmich in datei.dll nicht vorhanden/gefunden!

Das dürfte daran liegen, dass man beim Import exakt auf die Gross-/Kleinschreibung achten muss.
Wenn die Prozedur als KlickMich exportiert wird, und Du beim Import klickmich angibst, geht das schief.

Zitat:

Zitat von ixtreme
calling conventions differ

Beim Import gibst Du als Aufrufkonvention stdcall an, in der DLL nicht.
Also entweder immer oder gar nicht.

Alter Mann 16. Nov 2003 18:19

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.
Seite 2 von 2     12   

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