Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi TEdit Text "überschreiben" (https://www.delphipraxis.net/48161-tedit-text-ueberschreiben.html)

LoL 21. Jun 2005 15:11


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:
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.
habs so probiert bekomme aber einen Stackoverflow.

jfheins 21. Jun 2005 15:16

Re: TEdit Text "überschreiben"
 
Zitat:

Zitat von LoL
habs so probiert bekomme aber einen Stackoverflow.

Weil du in eriner Setterroutine die Property änderst.

Versuch mal, die Getter-proc GetText oder so zu überschreiben ... ;)

Sharky 21. Jun 2005 15:16

Re: TEdit Text "überschreiben"
 
Hai LoL,

durch dein
Delphi-Quellcode:
procedure TTemperatureEdit.SetText(Value : String);
begin
  inherited Text := Value;
end;
rufst Du deine Setter-Methode (SetText) ja immer wieder selber auf.

LoL 21. Jun 2005 15:29

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?

Sharky 21. Jun 2005 15:45

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:
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;
Aber das dir das bringen soll kann ich nicht erkennen ;-)

Robert_G 21. Jun 2005 16:04

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:

Sharky 21. Jun 2005 16:11

Re: TEdit Text "überschreiben"
 
Zitat:

Zitat von Robert_G
... D.h: diese Klasse wird sich nicht so verhalten wie es der Nutzer erwarten würde....

Was meinst Du mit "verstecken"? .Text wird doch einfach zu einer ReadOnly Eigenschaft.

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?

Robert_G 21. Jun 2005 16:19

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...

Flocke 21. Jun 2005 16:34

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.

LoL 21. Jun 2005 20:00

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:
ReadText
begin
  if bedingung then
    Result := IntToStr(StrToInt(Text) *2)
  else
    Result := Text;
end;
Ist wie gesagt nur ein Beispiel. Also ist die Ausgabe nicht konstant.

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 01:42 Uhr.
Seite 1 von 2  1 2      

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