![]() |
Datenbank: Firebird • Version: 1.5 • Zugriff über: IBX
Displayformat "0," bei DBEdit
Delphi6:
Ich habe ein IntergerFeld bei dem ich im Displayformat "0," stehen habe. Das soll dann auch für das Edit-Fromat gelten, da dieses leer ist. Das habe ich so gemacht damit ich die Tausenderpunkte bekomme. In einem Formular habe ich eine DBEdit drauf gesetzt Jetzt kommt mir das DBEdit mit einem Umwandlungsfehler (EDatabaseError) wenn ich Zahlen mit Tausenderpunkt manuell ändere und einen schon vorhandenen Tausenderpunkt stehen lassse oder ich das Datenbankfeld auf einen Wert größer 1000 setze solange das DBEdit aktiv das es dann laut Diplaformat als z.b "1.200" dargestellt. Das Problem habe ich nicht nur bei dem Feld.... |
Re: Displayformat "0," bei DBEdit
Guten Morgen Michael ! :)
Die Eigenschaften DisplayFormat und EditMask sind IMHO Relikte aus der Zeit von TurboProfessional (TP4). Wesentlich flexibler sind die Erreignismethoden OnGetText und OnSetText. Hier kannst Du Daten umwandeln und überprüfen, wie es benötigt wird. Speziell für Datumseingaben super. Da kann dann auch das Komma als Trennzeichen verwendet werden, oder bei Zahlen ist es dann egal ob . oder , als Dezimaltrennzeichen verwendet wird. Du musst nur die entsprechenden Prüf- und Umwandlungsfunktionen schreiben. :mrgreen: Ich stöbere mal in meiner Bibliothek und hänge im Edit Umwandlungsfunktionen für Prozent, Datum, und Float an.
Delphi-Quellcode:
Anwendung:
unit YourName;
uses ...; interface function Bool2Str(v:Boolean):String; // Boolean -> X (= angekreuzt) function Str2Bool(S:String):Boolean; // irgendwas -> Boolean function Int2Str(v:Integer):String; // Integer -> String function Str2Int(S:String):Integer; // String -> Integer function Rab2Str(v:double):String; // Rabatt to String | 0.03 -> '3%' Nullwerte function Str2Rab(s:String):Double; // String to Rabatt | '3%' -> 0.03 werden NICHT angezeigt function Cur2Str(v:double):String; // currency to string | 2.5 -> '2,50' function Str2Cur(s:String):Double; // string to currency | '2,50' -> 2.5 function Dat2Str(v:TDateTime):String; function Str2Dat(S:String):TDateTime; implementation function Bool2Str(v:Boolean):String; begin if v then Result:='X' else Result:=''; end; function Str2Bool(S:String):Boolean; begin Result:=Trim(s)<>''; end; function Int2Str; begin if v=0 then Result:='' else Str(v,Result) end; function Str2Int; var c:Integer; begin s:=Trim(s); Val(s,Result,c) end; function Rab2Str(v:double):String; // rabatt to string | 0.03 -> '3%' begin if v=0.0 then Result:='' else begin Str(v*100.0:0:0, Result); Result:=Result+'%'; end end; function Str2Rab(s:String):Double; // string to rabatt | '3%' -> 0.03 begin s:=Trim(s); if s='' then Result:=0.0 else if s[Length(s)]='%' then Result:=Str2Prz(s) else Result:=Str2Cur(s)*0.01 end; function Str2Prz(s:String):Double; // string to prozent | '3%' -> 0.03 var c:Integer; begin s:=Trim(s); if s='' then Result:=0.0 else begin while (length(s)>0) and (s[Length(s)]='%') do Delete(s, length(s), 1); // % löschen Val(s, Result, c); Result:=Result*0.01; end; end; function Clean(s:String):String; var p:Integer; begin Result:=Trim(s); if Result='' then exit; while Instr(Result, '.', p) do Delete(Result, p, 1); if InStr(Result, ',', p) then Result[p]:='.'; end; function Cur2Str(v:double):String; // currency to string | 2.5 -> '2,50' begin if v=0.0 then Result:='' else Result:=FloatToStrF(v, ffNumber, 15, 2) end; function Str2Cur(s:String):Double; // string to currency | '2,50' -> 2.5 var c:Integer; begin s:=Clean(s); if s='' then result:=0.0 else Val(s, Result,c); end; function Dat2Str(v:TDateTime):String; begin Result:=DateToStr(v) end; function Str2Dat(S:String):TDateTime; begin Result:=stod(s); end; function stod; var p:Integer; begin p:=pos(',', s); while p>0 do begin s[p]:='.'; p:=pos(',', s); end; s:=trim(s); if s='' then Result:=0 else Result:=StrToDate(S) end; end.
Delphi-Quellcode:
Ist mehr geworden als ich eigentlich vorhatte :stupid:
procedure TForm1.Table1DatumGetText(Sender: TField; var Text: String; DisplayText: Boolean);
begin Text:=Dat2Str(Sender.AsDateTime); end; procedure TForm1.Table1DatumSetText(Sender: TField; const Text: String); begin Sender.AsDateTime:=Str2date(Text); end; |
Re: Displayformat "0," bei DBEdit
Vielen Dank werde ich dann wohl so machen müssen.
Ist ja echt krass dass man sich darum selber kümmern muss. Ich dachte das Delphi in der Ecke schon fertig wäre. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:54 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