![]() |
Re: Änderung einer Deklarartion integer <-> double mög
Zitat:
Gruss Reinhard |
Re: Änderung einer Deklarartion integer <-> double mög
Zitat:
Delphi-Quellcode:
Das ist schon beinahe Visual Basic :D
var
a: Variant; begin a := 5; ShowMessage(IntToStr(a * 5)); a := a / 2; ShowMessage(FloatToStr(a)); a := 'a ist = ' + FloatToStr(a); ShowMessage(a); end; |
Re: Änderung einer Deklarartion integer <-> double mög
Man könnte den Typ auswerten und entsprechend versuchen umzuwandeln, aber in meinem aktuellen Fall ist dieses nicht so.
Die Originaldefinition sieht eigentlich nur so aus (aus himXMLi.pas) und diehnt eigentlich nur der Möglichkeit einer Funktion unterschiedliche Parameter zu übergeben (da keine überladenen Properties möglich sind ... außer in neueren Delphiversionen und da auch nur bei den Default-Properties)
Delphi-Quellcode:
Intern wird da der übergebene Wert direkt entsprechend behandelt.
TIndex = Record
ValueType: (vtIntValue, vtStringValue); IntValue: Integer; StringValue: String; Class Operator Implicit( Value: Integer): TIndex; Class Operator Implicit(Const Value: String): TIndex; End; Also es kommt dann auf die Interne Behandlung an, also ob der Typ sich auch mal ändern kann und man eventuell sogar eine Typumwandlug mit integriert hat, oder ob der Typ danach Fest ist. |
Re: Änderung einer Deklarartion integer <-> double mög
Also habe das jetzt erstmal wie folgt gelöst:
Delphi-Quellcode:
Könnt ihr euch ja vieleicht mal anschauen, ob ich da jetzt einen Denkfehler drin hab oder ob das ok ist. Danke euch auf jeden Fall für eure Anregungen.
type TZahltyp = (ZtGanzzahl, ZtposGanzzahl, ZtGleitkommazahl, ZtposGleitkommazahl);
Type TLabZahlEdit = Class(TWinControl) private ... FvValue: Variant; ... procedure SetValue(vWert: Variant); function GetValue: Variant; protected ... published ... property Value: Variant read GetValue write SetValue; public ... end; procedure TLabZahlEdit.SetValue(vWert: Variant); var sTemp: string; dTemp: double; iTemp: integer; begin // es muss bei der Konvertierung darauf geachtet werden, dass ein int auch in // ein double umgewandelt werden kann und somit muss anhand des eingestellten // Zahlentyps die richtige Konvertierung durchgeführt werden. sTemp := vartostr(vWert); if sTemp <> Null then begin case FEdEingabe.Zahlart of Ganzzahl: if trystrtoint(sTemp, iTemp) then begin FvValue := vWert; SetText(sTemp); end; posGanzzahl: if trystrtoint(sTemp, iTemp) then begin FvValue := vWert; SetText(sTemp); end; Gleitkommazahl: if trystrtofloat(sTemp, dTemp) then begin FvValue := vWert; SetText(sTemp); end; posGleitkommazahl: if trystrtofloat(sTemp, dTemp) then begin FvValue := vWert; SetText(sTemp); end; end; end; end; function TLabZahlEdit.GetValue: Variant; var sTemp: string; iTemp: integer; dTemp: double; begin sTemp := vartostr(FvValue); case FEdEingabe.Zahlart of Ganzzahl: if trystrtoint(sTemp, iTemp) then result := strtoint(sTemp); posGanzzahl: if trystrtoint(sTemp, iTemp) then result := strtoint(sTemp); Gleitkommazahl: if trystrtofloat(sTemp, dTemp) then result := strtofloat(sTemp); posGleitkommazahl: if trystrtofloat(sTemp, dTemp) then FvValue := strtofloat(sTemp); end; end; MfG BAMatze |
Re: Änderung einer Deklarartion integer <-> double mög
Zitat:
Wenn schon, dann solltest du vWert auf NULL prüfen. |
Re: Änderung einer Deklarartion integer <-> double mög
Zitat:
|
Re: Änderung einer Deklarartion integer <-> double mög
Ebenso könnte man den Quelltext etwas verschlanken. In dem Case machst du nach dem TryStrToXXX immer das gleiche.
|
Re: Änderung einer Deklarartion integer <-> double mög
Zitat:
|
Re: Änderung einer Deklarartion integer <-> double mög
Das scheint mir doch alles etwas zu aufwändig zu sein.
In einem TEdit (und alles was davon abgeleitet ist), steht in erster Linie ein Text. Möchte man sich das Leben etwas einfacher machen, dann kann man zusätzliche Properties aufnehmen:
Delphi-Quellcode:
Der Anwender der Komponente hat doch fast immer eine genaue Vorstellung was in dem Control drinsteckt (ganzzahl, float, Text) und wählt das passende Property.
Property Text:String;
property AsFloat:Extended read ... write ...; property AsInteger:Integer read ... write ...; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:24 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