![]() |
TEdit Text "überschreiben"
moin
Kann man nur die Read-Eigenschaft Text von einem TEdit überschreiben, wenn man sich eine Komponente von TEdit ableitet?
Delphi-Quellcode:
habs so probiert bekomme aber einen Stackoverflow.
type
TTemperatureEdit = class(TEdit) private { Private declarations } procedure SetText(Value : String); function ReadText : String; protected { Protected declarations } public { Public declarations } published { Published declarations } property Text : String Read ReadText Write SetText; end; procedure Register; implementation procedure TTemperatureEdit.SetText(Value : String); begin inherited Text := Value; end; function TTemperatureEdit.ReadText : String; begin Result := 'mein text'; end; end. |
Re: TEdit Text "überschreiben"
Zitat:
Versuch mal, die Getter-proc GetText oder so zu überschreiben ... ;) |
Re: TEdit Text "überschreiben"
Hai LoL,
durch dein
Delphi-Quellcode:
rufst Du deine Setter-Methode (SetText) ja immer wieder selber auf.
procedure TTemperatureEdit.SetText(Value : String);
begin inherited Text := Value; end; |
Re: TEdit Text "überschreiben"
Erstmal vielen dank für eure schnelle Antwort
Folgendes: @sharky: Wie muss ich das dann schreiben das die Write procedure die geerbten Sachen ausführt? ich dachte das geht mit inherited :gruebel: @jfheins: Ich hab probiert die Function GetText zu überschreiben=> not found in base class. In der Beschreibung von GetText steht auch drin das diese Protected ist. Kann man sie trotzdem irgend überschreiben? |
Re: TEdit Text "überschreiben"
Hai LoL,
was genau möchtest Du denn machen? Wenn Du immer den selben String beim lesen von .Text haben möchtest brauchst Du überhaupt keinen Setter zu schreiben. Dann reicht auch das
Delphi-Quellcode:
Aber das dir das bringen soll kann ich nicht erkennen ;-)
type
TTemperatureEdit = class(TEdit) private { Private declarations } function ReadText : String; protected { Protected declarations } public { Public declarations } published { Published declarations } property Text : String Read ReadText; end; implementation function TTemperatureEdit.ReadText : String; begin Result := 'mein text'; end; |
Re: TEdit Text "überschreiben"
Ähm Sharky...
Du versteckst dort Control.Text. D.h: diese Klasse wird sich nicht so verhalten wie es der Nutzer erwarten würde. ;) TEdit(DeinEdit).Text wird ohne die Logik aus deinem Setter sein... (Es würde Text von TControl nehmen...) Es ist IMHO nicht möglich einem TControl Nachfahren eine brauchbare eigene Implementierung von Text zu verpassen. Weder setter noch getter sind virtual protected. Also lässt sich da nicht viel auf eine zumutbare Art machen... :wall: |
Re: TEdit Text "überschreiben"
Zitat:
Aber was würde er denn erwarten? Wenn beim auslesen von .Text etwas anderes kommen soll als in dem Edit steht wird der Nutzer doch sicherlich auch sehr seltsam schauen? |
Re: TEdit Text "überschreiben"
Du erzeugst eine NEUE Property.
TEdit(DeinEdit).Text -> "normales" Text DeinEdit.Text -> das neue Text Das Problem dabei ist, dass das "polymorphisch betrachtet" inkonsistent ist. Schließlich ist es keine readonly Property, da eine Verwendung als Vorgänger dir wieder Schreibrechte gibt. ;) Man müsste also auch noch Change überschrieben um auf Änderungen zu reagieren... |
Re: TEdit Text "überschreiben"
Du kannst die Fenstermeldungen WM_GETTEXT und WM_GETTEXTLEN abfangen und dort jeweils deinen konstanten String einsetzen. Musst aber aufpassen, dass du bei WM_GETTEXT nicht den Puffer überschreibst.
|
Re: TEdit Text "überschreiben"
Ihr habt das jetzt in den falschen Hals bekommen :)
Natürlich ist der String nicht Konstant wäre sonst ja auch einfach. Eher sowas:
Delphi-Quellcode:
Ist wie gesagt nur ein Beispiel. Also ist die Ausgabe nicht konstant.
ReadText
begin if bedingung then Result := IntToStr(StrToInt(Text) *2) else Result := Text; end; Hintergedanke ist folgende: In diesem Edit sollen Temperaturen eingegeben werden. Die Temperatur die aber gelsesen werden soll, soll immer °C sein gleichzeitig aber soll im Edit die Temperatur stehen die der Benutzer auch eigegeben hat. Da ich immer die Temperatur über "Text" auslesen will, hab ich mir eben das überlegt das meine Frage war um mir die Arbeit zu erleichtern. Oder hat jemand eine bessere Lösung? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04: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 by Thomas Breitkreuz