Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - eigenes Ereignis schreiben


delphisual - Fr 30.01.04 23:35
Titel: eigenes Ereignis schreiben
Hallo zusammen,

wie kann man für ein Objekt der von Klasse TObject abgeleitet wurde ein Ereignis schreiben? :?:
z.B.: onClick-Ereignis.

Mit freundlichen Grüßen
delphisual


derDoc - Sa 31.01.04 10:02

Du musst in der Typdeklaration ein published einfügen. Dann benötigst du folgende Zeilen:

Delphi-Quelltext
1:
property OnCustomBtnsClick : TButtonClickEvent read GetOnBtnClick write SetOnBtnClick;                    

und unter private musst du dann noch das hier schreiben

Delphi-Quelltext
1:
2:
function GetOnBtnClick() : TButtonClickEvent;
procedure SetOnBtnClick(const Value : TButtonClickEvent);


Ich hoffe, dass es kein TButtonClickEvent gibt, denn das musst du dann noch definieren.

Das machst du dann so

Delphi-Quelltext
1:
TButtonClickEvent = procedure (Sender : TObject; ButtonIndex : Integer) of object;                    


Das hier war nur ein Beispiel, damit du weißt, was du machen musst. Ich gehe nicht davon aus, dass es bei dir mit meinen Auszügen funktioniert.

Wenn du die normalen Ereignisse benutzen willst kannst du auch einfach unter published property OnClick; einfügen.


delphisual - So 01.02.04 19:30

danke derDoc,
ist ein hartes Stück Brot ich versuche mich da durchzubeißen.

Wenn jemand etwas dazu beitragen möchte würde ich mich freuen.
Am besten wäre ein kleines funktionales Beispiel anhand einer abgeleiteter Klasse von TObject.

gruß an Alle
delphisual


Alexander F - So 01.02.04 21:07

Hallo,
ich kann dir zwar nicht direkt helfen, aber da du eine Professional-Version, kannst du in die Sourcen der Komponente (ab)kucken ;-)
Einfach mal in den Source-Ordner im Delphi-Verzeichnis schauen.


Motzi - Mo 02.02.04 13:02

Du könntest dir mal meine OOP-Ausarbeitung anschaun ob dir die vielleicht ein bisschen weiterhilft: http://www.x-spy.net/personal bzw falls die Domain bei dir nicht funktioniert probier die Subdomain http://motzi.fs-tools.de/personal


delphisual - Mo 02.02.04 23:00

Vielen Dank an Alle,
ich hoffe dass mein Ergebnis das widerspiegelt was Ihr versucht habt mir zu erklären.
Die auf dem Punkt gebrachte Ausarbeitung von Motzi hat mir den entscheidenden Anstoß gegeben den Code zu vollenden.
Hier die Gesamtcode die zumindest schon mal funktional ist:

Unit des Objektes:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
unit myObject; 

interface
uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls;

type
  // selbst deklariertes Ereignis
  TEreignisstruktur=procedure(Sender:TObject) of object;

  TMyObject=class
   private
     fEreignis: TEreignisstruktur;
     procedure DoEreignis;
   public
     property  OnEreignis:TEreignisstruktur read fEreignis write fEreignis;
end// TMyObject

implementation

procedure TMyObject.DoEreignis;
begin
  if Assigned(fEreignis) then fEreignis(Self);
end;


Haupt-Unit:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls,myObject ;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure FormCreate(Sender: TObject);
    procedure tuwas(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  TestObject: TmyObject;
  Form1: TForm1;


implementation

{$R *.DFM}



procedure TForm1.tuwas(Sender: TObject);
begin
ShowMessage('Na endlich!');
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
TestObject:=TmyObject.Create;
with TestObject do
  begin
    OnEreignis:=tuwas;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
TestObject.OnEreignis(self);
end;

end.


Wenn jemand einen Fehler sehen sollte hoffe ich dass der mir mitgeteilt wird.
Mit freundlichen Grüßen
delphisual

Moderiert von user profile iconUGrohne: Code- durch Delphi-Tags ersetzt


Motzi - Di 03.02.04 13:37

Abgesehen von einer für mich etwas ungewohnten Vergabe von Variablen-/Klassennamen und Code-Formatierung... stimmt alles! 8)