![]() |
Neue Komponente von bestehender ableiten
Wir hatten ja gerade das problem, dass da jemand ein IntegerEdit haben wollte. Nun wollte ich das mal probieren und ein TIntEdit von TEdit ableiten.
Mein Ansatz:
Delphi-Quellcode:
Nur sagt er mir da:
type
TIntEdit = class(TCustomEdit) private FValue: Integer; procedure SetText(Value: Integer); override; function GetText: Integer; property Text: Integer read GetText write SetText; end; procedure TIntEdit.SetText(Text: Integer); begin FText := Value; end; function TIntEdit.GetText: Integer; begin Result := Value; end; Zitat:
Und zweitens: kann mein Ansatz zum Erfolg führen? |
Re: Neue Komponente von bestehender ableiten
Hallo Luckie,
veruchs mal indem Du override bei SetText wegläßt. bye Claus [EDIT]die OH gibt Audkunft über die Klasse TCustomEdit[/EDIT] |
Re: Neue Komponente von bestehender ableiten
Gerade das will ich ja überschreiben. Ich sehe gerade da ist wohl noch ein Denkfehler drin.
Aber in der OH stehen nur die öffentlichen Eigenschaften und Ereignisse. Ich will aber eine anscheinend protected Methode überschreiben. |
Re: Neue Komponente von bestehender ableiten
Hallo Luckie,
die Eigenschaft heißt IMO GetTextBuf und SetTextBuf. bye Claus |
Re: Neue Komponente von bestehender ableiten
Moin!
Wieso willst du sie überhaupt überschreiben ? Weil durch die neue Definition der Property mit deinen eigenen SetText/GetText (auch wenn sie nun gleich heissen mögen) überschreibst du doch schon die Property itself. Und selbst wenn, die Property Methoden sind nicht als virtuelle oder dynamische Methoden gekennzeichnet, somit hast du da wenig Chancen, schon alleine, da die Property Methoden alle im private - Abschnitt definiert werden... MfG Muetze1 |
Re: Neue Komponente von bestehender ableiten
Zitat:
|
Re: Neue Komponente von bestehender ableiten
Danke. Aber woher weiß man das, wenn man die Sourcen nicht hat?
Jetzt bin ich schon ein Schritt weiter, stehe aber vor dem nächsten Problem:
Delphi-Quellcode:
type
TIntEdit = class(TCustomEdit) private FValue: Integer; procedure SetTextBuf(Value: Integer); override; function GetTextBuf: Integer; override; property Text: Integer read GetTextBuf write SetTextBuf; end; Zitat:
Zitat:
|
Re: Neue Komponente von bestehender ableiten
also ich würde das ganze so lösen:
Delphi-Quellcode:
Wobei diese Variante kein "Strg + V" mehr zulässt
TIntEdit = class(TEdit)
private fAllowed: String; fNewOnChange: TNotifyEvent; fNewOnKeyPress: TKeyPressEvent; function fGetText: String; procedure fSetText(AValue: String); procedure fOnKeyPressproc(Sender: TObject; var Key: Char); procedure fOnChangeProc(Sender: TObject); public constructor Create(AOwner: TComponent); override; published property Text: String read fGetText write fSetText; property OnChange: TNotifyEvent read fNewOnChange write fNewOnChange; property OnKeyPress: TKeyPressEvent read fNewOnKeyPress write fNewOnKeyPress; end; [...] constructor TIntEdit.Create(AOwner: TComponent); begin inherited Create(AOwner); fAllowed := '0123456789'; inherited OnKeyPress := fOnKeyPressproc; inherited OnChange := fOnChangeProc; end; function TIntEdit.fGetText: String; begin result := inherited Text; end; procedure TIntEdit.fSetText(AValue: String); var LCount: Integer; begin for LCount := 1 to length(AValue) do begin if pos(AValue[LCount], fAllowed) > 0 then Exit; end; inherited Text := AValue; end; procedure TIntEdit.fOnKeyPressproc(Sender: TObject; var Key: Char); begin if pos(key, fAllowed) < 1 then key := #0 else if Assigned(fNewOnKeyPress) then fNewOnKeyPress(Sender, Key); end; procedure TIntEdit.fOnChangeProc(Sender: TObject); var LCount: Integer; Lnew: String; begin LNew := ''; for LCount := 1 to length(Text) do begin if pos(Text[LCount], fAllowed) > 0 then LNew := LNew + Text[LCount]; end; if LNew <> Text then Text := LNew; if Assigned(fNewOnChange) then fNewOnChange(Sender); end; |
Re: Neue Komponente von bestehender ableiten
Zitat:
hallo luckie, override funktioniert nicht wenn bei dem vorgänger die funktion/prozedur kein virtual;/dynamic; hat. ach... bernhard hatte schon geantwortet....leute ohne avatar übersieht man leicht. |
Re: Neue Komponente von bestehender ableiten
Finger weg von der Text property. Die hier zu ueberschreiben ist unnoetig.
Besser bei OnChange ansetzen bzw Changing (wenn das die ueberschreibbare Methode zu OnChange ist). Dort pruefst due den aktuellen Text und korrigierst ihn. Nicht vergessen das das Aendern von Text ein OnChange ausloest das du ignorieren solltest. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:09 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