![]() |
Neue TPanel-Klasse
Hi! Ich leite eine Klasse von TPanel ab, die beim Resizen etwas bestimmtes machen soll. Zusätzlich soll der Programmierer immer noch das "normale" OnResize behandeln können, ohne dass dabei das vorherige überschrieben wird. Ich hoffe es war einigermaßen verständlich. Kann mir bitte jemand weiterhelfen?
Greetz alcaeus |
Re: Neue TPanel-Klasse
Kannst du nicht per inherited das alte OnReszise übernehmen und dahinter schreiben, was ausserdem noch gemacht werden soll?
|
Re: Neue TPanel-Klasse
das einfachste ist "SetBounds" zu überschreiben und wenn sich "width" oder "height" ändert dann kannst du ja reagieren...
Delphi-Quellcode:
TYourpanel = class(TPanel)
protected procedure SetBounds(ALeft, ATop, AWidth, AHeight: Integer); override; [...] procedure TYourpanel.SetBounds(ALeft, ATop, AWidth, AHeight: Integer); var Sizechanged: Boolean; begin sizechanged := (AWidht <> Width) or (AHeight <> AHeight); inherited SetBounds(ALeft, ATop, AWidth, AHeight); if sizechanged then begin //do something you want todo onResize end; end; |
Re: Neue TPanel-Klasse
Wenn ich dein Problem richtig verstanden habe, dann ist das folgendes:
du hast 'ne klasse, abbgeleitet von TPanel Du selbst möchtest das OnResize verwenden, d.h. in der Klasse drinnen. Trotzdem sollte es dem User möglich sein, sein OnResize zu verwenden. Das Eigentliche Problem ist dann halt ein Namenproblem, z.B. das Resize-Event des benutzers könnte dann OnNewResize heißen, dann könntest du folgendes machen:
Delphi-Quellcode:
hab aber keine garantie, dass alles funzt, müsst aber ein lösungsansatz sein...
type
TMyPanel = class(TPanel) protected FOnNewResize: TNotifyEvent; property OnResize; procedure InternResize(Sender: TObject); public constructor Create(AOwner: TComponent); override; published property OnNewResize read FOnNewResize write FOnNewResize; end; implementation constructor TMyPanel.Create(AOwner: TComponent); begin inherited; OnResize := InternResize; end; procedure TMyPanel.InternResize(Sender: TObject); begin if Assigned(OnNewResize) then FOnNewResize(Sender); end; [Edit] Zu langsam.... [/Edit] |
Re: Neue TPanel-Klasse
@Skyron: das mit dem namen ist nicht so ein problem, auf deine art und weise kann man das so lösen
Delphi-Quellcode:
man überschreibt im prinzip das orginale "OnResize" und weißt dem orginalen OnResize mit inherited die procedure zu
TMyPanel = class(TPanel)
private FOnResize: TNotifyEvent; procedure FOnResizeProc(Sender: TObject); public constructor Create(AOwner: TComponent); override; published property OnResize read FOnResize write FOnResize; end; implementation constructor TMyPanel.Create(AOwner: TComponent); begin inherited; inherited OnResize := FOnResizeProc; end; procedure TMyPanel.FOnResizeProc(Sender: TObject); begin if Assigned(FOnResize) then FOnResize(Self); //do something you want.... end; |
Re: Neue TPanel-Klasse
Das versteh ich jetzt nicht...
Sind da dann 2 OnResize? wird beim überschreiben das alte nicht überschrieben? |
Re: Neue TPanel-Klasse
das alte wird schon überschrieben aber ich kann ja auf das alte noch mit "inherited" zugreifen. Wenn du in den Constructor schaust wirst du sehen das ich dem "inherited OnResize" die Procedure zuweise..
|
Re: Neue TPanel-Klasse
Also, kann ich jetzt davon ausgehen dass der Code von SirThornberry funktioniert? Wenn ja, heißt das für den Programmierer sichtbare Ereignis immer noch OnResize? Das heißt ich kann im Benutzer-Resize ganz normalen Code schreiben, ohne lang ein inherited davor setztn zu müssen, oder? Bitte sagt mir was richtig ist, ich kenne mich bei den Sachen noch nicht so richtig aus.
Greetz alcaeus |
Re: Neue TPanel-Klasse
Dankeschön SirT, dein Code hat funktioniert. Füge ich nun die Behandlungsroutine für das neue Panel ein, so erscheint automatisch das Wort inherited. Gute Arbeit, danke nochmals :thumb:
Greetz alcaeus |
Re: Neue TPanel-Klasse
Das einfachste ist, das Standard-Resize zu überschreiben, darin wird nämlich OnResize aufgerufen, falls es nicht Nil ist.
Delphi-Quellcode:
Gruß, teebee
...
Procedure Resize; override; ... Procedure TMyPanel.Resize; Begin // alles tun, was zu tun ist // dann das Original-Resize inherited; End; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:45 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