AGB  ·  Datenschutz  ·  Impressum  







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

Vererbung von Events

Ein Thema von hanselmansel · begonnen am 23. Jul 2005 · letzter Beitrag vom 23. Jul 2005
Antwort Antwort
Benutzerbild von hanselmansel
hanselmansel

Registriert seit: 23. Feb 2005
Ort: Kaiserslautern
279 Beiträge
 
Delphi 2009 Enterprise
 
#1

Vererbung von Events

  Alt 23. Jul 2005, 09:28
HiHo,

ich versuche folgendes:
  • Die als "protected" deklarierte Eigenschaft OnMouseDown der Komponente TCustomControl soll in meiner abgeleiteten Komponente (TWechselButton) "published" sein, also im OI bearbeitbar.
  • Eben zu jenem Event OnMouseDown soll eine boolsche Variable der Komponente (TWechselButton.b_MouseDown) komponenten-intern verändert werden. (Damit die komponente bei erneutem Paint ihr Aussehen ändert!)

Die Einfache Vererbung einer "protected"-Eigenschaft habe ich mit OnClick ziemlich einfach hinbekommen. Die Sache mit OnMouseDown gestaltet sich komplizierter...

Aus den Beiträgen von Helmi (Beitrag) und shmia (Beitrag) habe ich mir (mehr schlecht als Recht) etwas zusammengebastelt. Er zeigt mir zwar keine Fehlermeldungen an, und zur Design-Zeit kann ich über den OI das Ereignis OnMouseDown auswählen, aber zur Laufzeit tut sich beim Maus-button-drücken rein gar nichts.

Hier kommt die Cource:
Delphi-Quellcode:
type
  Wechselbutton = class(TCustomControl)
  private
    FOnMouseDown :TMouseEvent;
    b_MouseDown :Boolean;
  protected
    procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); dynamic;
  published
    Property OnMouseDown: TMouseEvent read FOnMouseDown write FOnMouseDown;
    Property OnClick;
  end;

implementation

Procedure Wechselbutton.MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
if Assigned(FOnMouseDown) then
  Begin
  FOnMouseDown(Self, Button, Shift, X, Y);
  b_MouseDown := True;
  End;
end;
An der Stelle wie immer herzlichen Dank für's lesen, und ich freue mich auf eure Antworten.

MfG,

hanselmansel
Es gibt nur sehr wenige Probleme auf dieser Welt, die sich nicht mit einigen hundert Gramm Sprengstoff lösen ließen.
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#2

Re: Vererbung von Events

  Alt 23. Jul 2005, 09:35
Ich würde sagen, du solltest das Event in Ruhe lassen, und einfach auf die Message reagieren, das sähe so ähnlich aus:
Delphi-Quellcode:
   TMyClass = class (TCustomControl)
   protected
      procedure MouseDown (var Msg: TWMLButtonDown); message WM_LBUTTONDOWN;
      procedure MouseUp (var Msg: TWMLButtonUp); message WM_LBUTTONUP;
   published
      property OnMouseDown;
   end;

{ TMyClass }

procedure TMyClass.MouseDown(var Msg: TWMLButtonDown);
begin
   Windows.Beep(440, 100);
end;

procedure TMyClass.MouseUp(var Msg: TWMLButtonUp);
begin
   Windows.Beep(880, 100);
end;
(Dieses Control piepst jetzt einfach nur beim anklicken )
  Mit Zitat antworten Zitat
Benutzerbild von hanselmansel
hanselmansel

Registriert seit: 23. Feb 2005
Ort: Kaiserslautern
279 Beiträge
 
Delphi 2009 Enterprise
 
#3

Re: Vererbung von Events

  Alt 23. Jul 2005, 09:55
HiHo,

riesen Dank! Es klappt nun!

Der Vollständigkeit halber (wir wollen ja, dass der Thread auch späteren Lesern was bringt) sei gesagt, dass man die Unit Messages in die Uses-Klausel schreiben sollte, und der Prozedur einen Parameter übergeben muss.
procedure MouseDown(var Msg: TWMChar); message WM_LBUTTONDOWN; Damit funktioniert schon mal ziemlich gut!

vielen Dank für die schnelle Antwort!

hanselmansel
Es gibt nur sehr wenige Probleme auf dieser Welt, die sich nicht mit einigen hundert Gramm Sprengstoff lösen ließen.
  Mit Zitat antworten Zitat
Benutzerbild von Jens Schumann
Jens Schumann

Registriert seit: 27. Apr 2003
Ort: Bad Honnef
1.644 Beiträge
 
Delphi 2009 Professional
 
#4

Re: Vererbung von Events

  Alt 23. Jul 2005, 10:10
Hallo,
das müsste ausreichen.
Delphi-Quellcode:
type
  Wechselbutton = class(TCustomControl)
  published
    Property OnMouseDown;
    Property OnClick;
  end;
OnMouseDown wird durch TControl eingeführt. In deiner Komponente musst Du lediglich OnMouseDown
veröffentlichen.

Wenn Du da Verhalten von OnMouseDown erweitern o. verändern willst kannst Du MouseDown überschreiben.
Delphi-Quellcode:
type
  Wechselbutton = class(TCustomControl)
  protected
    procedure MouseDown(Button: TMouseButton; Shift: TShiftState;
       X, Y: Integer); override;
  published
    Property OnMouseDown;
    Property OnClick;
  end;
I come from outer space to save the human race
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#5

Re: Vererbung von Events

  Alt 23. Jul 2005, 10:11
Du hättest einfach nur die Property in den published Teil schieben müssen.
So hast du einen *neuen* Event dklariert und somit den des Vorfahren versteckt!
Delphi-Quellcode:
published
  property OnMouseMove;
  Mit Zitat antworten Zitat
xaromz

Registriert seit: 18. Mär 2005
1.682 Beiträge
 
Delphi 2006 Enterprise
 
#6

Re: Vererbung von Events

  Alt 23. Jul 2005, 10:14
Hallo,

Zitat von hanselmansel:
Delphi-Quellcode:
type
  Wechselbutton = class(TCustomControl)
  private
    FOnMouseDown :TMouseEvent;
    b_MouseDown :Boolean;
  protected
    procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); dynamic;
  published
    Property OnMouseDown: TMouseEvent read FOnMouseDown write FOnMouseDown;
    Property OnClick;
  end;
Wenn Du das einfach haben willst, dann mach das so:
Delphi-Quellcode:
type
  TWechselbutton = class(TCustomControl)
  private
    b_MouseDown :Boolean;
  protected
    procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override; // <--
  published
    Property OnMouseDown;
    Property OnClick;
  end;

implementation

TWechselButton.MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  b_MouseDown := True;
  inherited;
end;
Damit überschreibst Du die originale MouseDown-Methode (die ist nicht umsonst as dynamic deklariert). So spart Du Dir die Sache mit den Events und machst es gleichzeitig so, wie die VCL das vorsieht.

Gruß
xaromz

//Edit: ja, ja, der rote Kasten...
  Mit Zitat antworten Zitat
Benutzerbild von hanselmansel
hanselmansel

Registriert seit: 23. Feb 2005
Ort: Kaiserslautern
279 Beiträge
 
Delphi 2009 Enterprise
 
#7

Re: Vererbung von Events

  Alt 23. Jul 2005, 10:31
HiHo alle zusammen!

Ich habe es jetzt nach den Anweisungen von xaromz geschrieben, und es funktioniert wunderbar! (Sogar noch besser als vorher, denn jetzt funktionieren auch OnClick und OnMouseDown zusammen fehlerfrei )Danke für die vielen, schnellen und ausführlichen Antworten!

Love you all,

hanselmansel

P.S.:
Es gibt nur sehr wenige Probleme auf dieser Welt, die sich nicht mit einigen hundert Gramm Sprengstoff lösen ließen.
  Mit Zitat antworten Zitat
Antwort Antwort


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 02:40 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