Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Ereigniss in DLL auslagern (https://www.delphipraxis.net/107552-ereigniss-dll-auslagern.html)

Christian18 29. Jan 2008 17:33


Ereigniss in DLL auslagern
 
Hallo,

kann man ein Ereigniss in einer DLL auslagern? Ich meine Zum Beispiel:
Delphi-Quellcode:
procedure Edit(Sender: TObject);
begin
  if TEdit(Sender).Color = clBlack then
    begin
      TEdit(Sender).Color:=clGreen;
    end
  else
    begin
      TEdit(Sender).Color:=clBlack;
    end;
end;
Aufruf:
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
  Edit1.OnEnter:=Edit;
  Edit1.OnExit:=Edit;
end;

Christian18 2. Feb 2008 11:37

Re: Ereigniss in DLL auslagern
 
push

Apollonius 2. Feb 2008 11:41

Re: Ereigniss in DLL auslagern
 
Ereignisse müssen gewöhnlich Methoden sein. Wenn du nichts gegen eine schmutzige Variante hast...
Delphi-Quellcode:
procedure Edit(Self: TObject; Sender: TObject); //Methoden haben den impliziten Parameter Self
begin
  if TEdit(Sender).Color = clBlack then
    begin
      TEdit(Sender).Color:=clGreen;
    end
  else
    begin
      TEdit(Sender).Color:=clBlack;
    end;
end;

procedure TForm1.FormCreate(Sender: TObject);
var Event: TNotifyEvent; //Das ist der Type des Events (procedure(Sender: TObject) of object)
begin
  TMethod(Event).Data:=nil; //Als Self wird nil übergeben, sonst eben was anderes eintraagen
  TMethod(Event).Code:=@Edit;
  Edit1.OnEnter:=Event;
  Edit1.OnExit:=Event;
end;
Der Punkt ist, dass Methodenzeiger aus einem Zeiger auf Self und einem Zeiger auf den Code bestehen, daher ist die Zuweisung etwas komplizierter.


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