Einzelnen Beitrag anzeigen

Ferber

Registriert seit: 9. Mär 2005
Ort: Wien Umgebung
155 Beiträge
 
Delphi 2006 Architect
 
#2

Re: Displayformat "0," bei DBEdit

  Alt 5. Feb 2006, 08:46
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.

Ich stöbere mal in meiner Bibliothek und hänge im Edit Umwandlungsfunktionen für Prozent, Datum, und Float an.

Delphi-Quellcode:
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.
Anwendung:
Delphi-Quellcode:
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;
Ist mehr geworden als ich eigentlich vorhatte
Otto
  Mit Zitat antworten Zitat