AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

"inherited" für umgeleitetes Event

Ein Thema von Guido Eisenbeis · begonnen am 14. Mär 2007 · letzter Beitrag vom 20. Mär 2007
 
Benutzerbild von Kedariodakon
Kedariodakon

Registriert seit: 10. Sep 2004
Ort: Mönchengladbach
833 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: "inherited" für umgeleitetes Event

  Alt 15. Mär 2007, 00:24
Nunja, falls da nochmehr OnClick-Events dazu kommen sollten, heißt das Unwort des Jahres "Observer"...
Sprich, leite den TButton ab und versehe diesen dann mit "Observer" Eigenschaften, am Besten natürlich mit hilfe von Interfaces (geht aber auch ohne)...
Als Ergebniss hast du dann einen Button der soviele OnClick-Events hat wie du magst...

Alles andere wär auch nur wildes rumgeflicke...
Beispiel wär, dass du die Klasse "TMyEventReceiver" mit einer Methode versiehst, die das OnClick-Event bespielt und sich den alten Wert merkt und ihn entsprechend ausführt...

Da mal so ein Flickwerk:

Delphi-Quellcode:
Unit Unit2;

Interface

Uses StdCtrls, Classes;

Type
  TMyEventReceiver = Class
  Private
    { Private-Deklaration }
    FOwnerButton: TButton; // Von wo kommt das Event?
    FOldOnClick: TNotifyEvent; // Speichern des alten Events
    Procedure SetOwnerButton( Const Value: TButton );
  Protected
    { Protected-Deklaration }
    Procedure InternOnClick( Sender: TObject );
    Property OwnerButton: TButton Read FOwnerButton Write SetOwnerButton;
    Property OldOnClick: TNotifyEvent Read FOldOnClick Write FOldOnClick;
    { ... }
    Procedure MyOwnButton1Click( Sender: TObject );
  Public
    { Public-Deklaration }
    Destructor Destroy; Override;
    Procedure SetButtonOnClick( Const aButton: TButton );
    Procedure Reset;
  End;

Var MyEventReceiver: TMyEventReceiver;

Implementation

Uses Dialogs;

Destructor TMyEventReceiver.Destroy;
Begin
  Reset; // Vor dem freigeben reseten...
  Inherited;
End;

Procedure TMyEventReceiver.SetButtonOnClick( Const aButton: TButton );
Begin
  OwnerButton := aButton; // initialisieren mit dem neuen Button...
End;

Procedure TMyEventReceiver.Reset;
Begin
  If Assigned( OwnerButton ) Then Begin // Wenn schonmal initialisiert, dann zurücksetzen
    OwnerButton.OnClick := OldOnClick; // Alter Click
    FOwnerButton := Nil; // Owner nil'en
  End;
  OldOnClick := Nil; // OldOnClick Speicher nil'en
End;

Procedure TMyEventReceiver.SetOwnerButton( Const Value: TButton );
Begin
  Reset; // Vor einem neubespielen reseten...
  If Assigned( Value ) Then Begin // Werte setzen nur, wenn auch was übergeben wurde...
    FOwnerButton := Value;
    OldOnClick := Value.OnClick;
    Value.OnClick := InternOnClick;
  End;
End;

Procedure TMyEventReceiver.InternOnClick( Sender: TObject );
Begin
  If Assigned( OldOnClick ) Then OldOnClick( Sender ); // Altes Event auslösen, falls es belegt war
  MyOwnButton1Click( Sender ); // Deine Funktion...
End;

Procedure TMyEventReceiver.MyOwnButton1Click( Sender: TObject );
Begin
  ShowMessage( 'Ich bin im umgeleiteten Event.' );
End;

end.
Der Aufruf in Unit1 sieht das so aus:
Delphi-Quellcode:
unit Unit1; // Enthält einen Button, dessen Click-Event
            // und das FormCreate-Event.
...

implementation

{$R *.dfm} 

uses
  Unit2;


procedure TForm1.Button1Click(Sender: TObject);
begin
  ShowMessage('Ich bin im Original-Event.');
end;


procedure TForm1.FormCreate(Sender: TObject);
begin
  Unit2.MyEventReceiver.SetButtonOnClick( Button1 );
end;
end.
Hoffe es funktioniert (ist ungetestet...)...

Bye Christian
Christian
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:40 Uhr.
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