![]() |
Problem mit Eigenschaft Enabled
Hallo zusammen,
ich habe mir eine Button-Component erstellt, abgleitet von TAdvGlowButton. In dieser Component möchte ich das setzen von Enabled kontrollieren. Mein Code sieht wie folgt aus:
Delphi-Quellcode:
Wenn ich nun Enbaled setze hat das keine Auswirkungen mehr (Component wird nicht ausgegraut). Was mach ich falsch?
unit MyButton;
interface uses SysUtils, Classes, Controls, AdvGlowButton, graphics; type TMyButton = class(TAdvGlowButton) private fEnabled : Boolean; fNewEnabled : Boolean; procedure SetEnabled( Value : Boolean ); procedure SetNewEnabled( Value : Boolean ); { Private declarations } protected { Protected declarations } public constructor Create(AOwner: TComponent); override; destructor Destroy; override; { Public declarations } published property Enabled : Boolean read fEnabled write SetEnabled; property NewEnabled : Boolean read fNewEnabled write SetNewEnabled; { Published declarations } end; procedure Register; implementation uses Dialogs; procedure Register; begin RegisterComponents('MYC', [TMyButton]); end; { TMyButton } constructor TMyButton.Create(AOwner: TComponent); begin inherited; fNewEnabled := True; end; destructor TMyButton.Destroy; begin inherited; end; procedure TMyButton.SetNewEnabled( Value : Boolean ); begin fNewEnabled := Value; end; procedure TMyButton.SetEnabled( Value : Boolean ); begin If fNewEnabled then fEnabled := value else fEnabled := False; end; end. |
AW: Problem mit Eigenschaft Enabled
Du setzt nirgendwo die ursprüngliche Enabled-Eigenschaft sondern lediglich deine eigene neue Variable.
|
AW: Problem mit Eigenschaft Enabled
wie meinst du das?
|
AW: Problem mit Eigenschaft Enabled
Du musst den orginal Setter (der hoffentlich virtual deklariert ist) überschreiben.
Stattdessen verdeckst du nur die alte Enabled-Eigenschaft. Das bringt nichts ;) |
AW: Problem mit Eigenschaft Enabled
Ist TAdvGlowButton nicht von TControl abgeleitet?
|
AW: Problem mit Eigenschaft Enabled
kann mir jemand sagen was ich im Code ändern müsstedas es stimmt?
|
AW: Problem mit Eigenschaft Enabled
Du musst entweder die Methode zum setzen von Enabled überschreiben oder du rufst setzt die ursprüngliche Enabled-Eigenschaft in deiner neuen Set-Methode. Denn derzeit machst du nichts anderes als neue Eigenschaften zu definieren die zufällig "Enabled" heißen.
mit
Delphi-Quellcode:
kannst du den ursprünglichen Enabled Wert setzen.
inherited Enabled := NeuerWert;
Aber die richtige Variante ist eben das überschreiben der Methode zum setzen. Am besten du schaust dir dafür mal Tutorials zur Vererbung an wo es um überschreiben, überladen etc. geht. Ohne diese Grundlagen wirst du sonst recht bald wieder bei diesem Thema scheitern. |
AW: Problem mit Eigenschaft Enabled
inherited hat mir gefehlt, danke!
|
AW: Problem mit Eigenschaft Enabled
Aber wie gesagt ist das der falsche Weg. Denn wenn jemand deine Komponente verwendet und diese auf TControl castet um Enabled zu setzen, wird deine Set-Methode niemals aufgerufen und derjenige wundert sich dann was da los ist.
|
AW: Problem mit Eigenschaft Enabled
Du musst die Methoden GetEnabled und/oder SetEnabled überschreiben:
Delphi-Quellcode:
type
TMyButton = class(TAdvGlowButton) private ... protected function GetEnabled: Boolean; override; procedure SetEnabled(Value: Boolean); override; ... procedure TMyButton.SetEnabled(Value: Boolean); override; begin // eigener Code vorher Hier inherited SetEnabled(Value); // eigener Code nachher Hier end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:00 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