Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   TLabeledEdit ableiten (https://www.delphipraxis.net/168813-tlabelededit-ableiten.html)

Nic2012 12. Jun 2012 14:53

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.

DeddyH 12. Jun 2012 15:08

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.

Nic2012 12. Jun 2012 15:12

AW: TLabeledEdit ableiten
 
Verstehe, und danke.

Bummi 12. Jun 2012 15:25

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;

Nic2012 12. Jun 2012 15:40

AW: TLabeledEdit ableiten
 
Ja, ist was ich suche und klappt wunderbar, ich bedanke mich.


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:57 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