![]() |
TLabeledEdit ableiten
Möchte ein TLabeledEdit ableiten, um ähnlich wie z.B. bei einem SpinEdit nur numerische Werte mit Angabe von Min und Max zu verwalten.
Wie bekomme ich es aber hin, wenn in das Text-Property ein Wert eingetragen wird, das neue Value-Prop auch aktualisiert wird. Gibt es ein SetText im Vorfahr, den ich überschreiben könnte ? Alternativ könnte man das Text-Property auch ganz ausblenden, wie macht man das in der Ableitung ?
Code:
unit LabeledEditNumeric;
interface uses SysUtils, Classes, Controls, StdCtrls, ExtCtrls; type TLabeledEditNumeric = class(TLabeledEdit) private protected FValue: Integer; FMin: Integer; FMax: Integer; FInc: Integer; procedure SetValue(value: Integer); procedure SetText(value: String); public published property Value: Integer read FValue write SetValue; property Min: Integer read FMin write FMin; property Max: Integer read FMax write FMax; property Increment: Integer read FInc write FInc; end; procedure Register; implementation uses dialogs; procedure Register; begin RegisterComponents('LabeledEditNumeric', [TLabeledEditNumeric]); end; procedure TLabeledEditNumeric.SetText(value: String); begin Text := value; FValue := StrToInt(value); end; procedure TLabeledEditNumeric.SetValue(value: Integer); begin FValue := value; Text := IntToStr(FValue); end; end. |
AW: TLabeledEdit ableiten
Setter sind normalerweise private, da ist nix mit Überschreiben. Und einmal veröffentlichte Properties bleiben auch in Ableitungen veröffentlicht. Dafür gibt es die "TCustomXXX"-Klassen, in denen alle oder zumindest die meisten Properties noch protected sind und erst die Ableitungen festlegen, welche veröffentlicht werden. Um also Dein Vorhaben "sauber" umzusetzen, wirst Du höher in der Klassenhierarchie ansetzen müssen.
|
AW: TLabeledEdit ableiten
Verstehe, und danke.
|
AW: TLabeledEdit ableiten
versuch mal ob das das ist was Du suchst ...
Delphi-Quellcode:
TLabeledEditNumeric = class(TLabeledEdit)
private function GetText: TCaption; reintroduce; protected FValue: Integer; FMin: Integer; FMax: Integer; FInc: Integer; procedure SetValue(value: Integer); procedure SetText(const Value: TCaption); reintroduce; public published property Value: Integer read FValue write SetValue; property Min: Integer read FMin write FMin; property Max: Integer read FMax write FMax; property Increment: Integer read FInc write FInc; Property Text:TCaption read GetText Write SetText; end; TForm5 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form5: TForm5; implementation {$R *.dfm} function TLabeledEditNumeric.GetText: TCaption; begin Result := inherited text; end; procedure TLabeledEditNumeric.SetText(const Value: TCaption); var i:Integer; begin if TryStrToInt(Value,i) then begin inherited Text := value; FValue := i; end; end; procedure TLabeledEditNumeric.SetValue(value: Integer); begin FValue := value; Text := IntToStr(FValue); end; procedure TForm5.Button1Click(Sender: TObject); begin With TLabeledEditNumeric.Create(self) do begin Text:='Haus'; Showmessage(Text); Text:='1'; Showmessage(Text); Text:='Haus'; Showmessage(Text); end; end; |
AW: TLabeledEdit ableiten
Ja, ist was ich suche und klappt wunderbar, ich bedanke mich.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:27 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