Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Runtime Objekt & Event (https://www.delphipraxis.net/36486-runtime-objekt-event.html)

theomega 20. Dez 2004 19:30


Runtime Objekt & Event
 
Hallo Leute,
ich hab folgenden Code in einer zweiten Unit:
Delphi-Quellcode:
var WinAmpCtr1: TWinAmpCtr;

procedure TrackChange(Sender: TObject);
begin;

end;

procedure init;
begin;
WinAmpCtr1 := TWinAmpCtr.create(nil);
WinAmpCtr1.OnPlayChange:=TrackChange;


end;
init wird von der haupt-unit aus aufgerufen. Dummerweise wird die Unit nicht kompliert, weil er das mit der Zuweisung der Funktion zu dem Event nicht mag. Die Ausführung stimmt auf jeden Fall, was komisch ist, ist, dass OnPlayChange vom Typ TNotifyEvent ist, wie wandel ich eine Procedure darin um?

Danke für ein bischen Hilfe
TO

Dax 20. Dez 2004 19:46

Re: Runtime Objekt & Event
 
Delphi-Referenz durchsuchenTNotifyEvent ist doch als
Delphi-Quellcode:
procedure(Sender: TObject) OF OBJECT
deklariert, das bedeutet: Du musst deine Prozedur in eine Klasse einbauen, ansonsten ist es kein TNotifyEvent.

Beispiel:
Delphi-Quellcode:
type
  TProcContainer = class
  private
    fProc1: TNotifyEvent:
  published
    property TrackChange: TNotifyEvent read fProc1 write fProc1;
  end;

theomega 20. Dez 2004 19:50

Re: Runtime Objekt & Event
 
danke erstmal, aber geht das nicht simpler?

Dax 20. Dez 2004 19:54

Re: Runtime Objekt & Event
 
Wenn du sauberen Code produzieren willst leider nicht.
TNotifyEvent braucht eine Klasse, um funktionieren zu können.

Sanchez 20. Dez 2004 20:19

Re: Runtime Objekt & Event
 
Zitat:

Zitat von theomega
danke erstmal, aber geht das nicht simpler?

Doch geht es. Du könntest eine Klasse von TWinAmpCtr ableiten und auf dein gewünschtes Ereignis entsprechend reagieren.
Das wäre IMHO sauberer. Weil du dein Objekt ohnehin dynamisch erzeugst hast du damit 0 Mehraufwand.

Was dir allerdings an der Lösung ohne Klasse gut gefällt, versteh ich nicht.

grüße, daniel

theomega 20. Dez 2004 20:23

Re: Runtime Objekt & Event
 
ich hab jetzt mal folgendes konstruiert:
Delphi-Quellcode:
type
  TProcContainer = class
  private
    fProc1: TNotifyEvent;
  published
    property TrackChange: TNotifyEvent read fProc1 write fProc1;
  end;


implementation

var WinAmpCtr1: TWinAmpCtr;

procedure fProc1;
begin;
showmessage('Test');
end;

procedure init;
begin;
WinAmpCtr1 := TWinAmpCtr.create(nil);
WinAmpCtr1.OnPlayChange:=TProcContainer.TrackChange;


end;
wieso geht das jetzt nicht? Compiler mault rum mit "Methodenbezeichner Erweartet");

Sanchez 20. Dez 2004 20:51

Re: Runtime Objekt & Event
 
TrackChange ist ja auch keine Methode, sondern eine Property.
Außerdem erzeugst du keine Instanz von TProcContainer. Deswegen kannst der Property auch niemals einen Wert zuweisen,
ohne das es kracht.

Warum leitest du nicht einfach von TWinAmpCtr ab?


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