Einzelnen Beitrag anzeigen

Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Ereigniss in DLL auslagern

  Alt 2. Feb 2008, 12:41
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.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat