![]() |
Blank im Edit-Control für Integer/Float-Werte
Hallo,
das ist meine erste Frage hier... Ich schaffe es nicht in Edit-Controls ein Blank (nicht 0) für Integer- oder Float-Werte einzugeben bzw. anzuzeigen. Zusätzlich soll der Wert auch noch formatiert sein (Tausenderpunkt und Dezimalstellen, maximale Länge). Ich habe schom mit RxCalcEdit und JvCalcEdit herumexperimentiert, aber ich schaffe nur korrekte Formatierungen. Ein Blank kann ich immer nicht anzeigen bzw. eingeben. Kann mir jemand helfen? :gruebel: |
Re: Blank im Edit-Control für Integer/Float-Werte
Hallo, willkommen in der Delphi-Praxis!
was meinst du mit Blank? Ein Leerzeichen? Wo liegt denn dann das Problem? wenn du eine Edit-Komponente mit Sonderfunktionen schreiben willst, kannst du dich an diesem Code orientieren (Edit zum Eingeben eines Geldbetrags):
Delphi-Quellcode:
unit MyMoneyEdit;
interface uses SysUtils, Classes, Controls, StdCtrls; type TMoneyEdit = class(TEdit) private { Private-Deklarationen } reactonc:boolean; protected { Protected-Deklarationen } procedure setmoney(money:real); function getmoney:real; public { Public-Deklarationen } published { Published-Deklarationen } procedure keypress(var key:char); override; property money:real read getmoney write setmoney; procedure change; override; constructor create(aOwner:tcomponent); override; end; procedure Register; implementation procedure Register; begin RegisterComponents('Beispiele', [TMoneyEdit]); end; constructor tmoneyedit.create(aOwner:tcomponent); begin inherited create(aOwner); reactonc:=true; end; procedure tmoneyedit.setmoney(money:real); begin if not (((text='') or (text='-')) and (money=0)) then self.text:=floattostr(money); end; function tmoneyedit.getmoney:real; begin if (text='') or (text='-') then result:=0 else try result:=strtofloat(text); except result:=0; text:=''; end; end; procedure tmoneyedit.Change; var curpos,i,commavalues:integer; commaexists:boolean; s:string; begin if not reactonc then exit; reactonc:=false; curpos:=self.GetSelStart; if not((text='') or (text='-') or (text[length(text)]=',')) then begin commaexists:=false; commavalues:=0; for i:=1 to length(text) do begin if commaexists then inc(commavalues); if commavalues>2 then begin s:=text; delete(s,i,length(text)); text:=s; break; end; if text[i]=',' then begin if commaexists then begin s:=text; delete(s,i,length(text)); text:=s; break; end; commaexists:=true; end; end; end; setselstart(curpos); reactonc:=true; inherited change; end; procedure tmoneyedit.KeyPress(var key:char); begin if Key = '.' then Key := ','; If not (Key in [#43..#45, #48..#57, #8, #13]) then Key := #0; If (Pos(',', Text) <> 0) then if Key = ',' then Key := #0; inherited keypress(key); end; end. |
Re: Blank im Edit-Control für Integer/Float-Werte
Mit Blank meine ich ein Leerzeichen.
Ich schaffe bei den mir bekannten Controls immer nur eine vernünftige Formatierung aber nie die Eingabe/Anzeige eines Leerzeichens, wenn kein Wert vorhanden ist. Ich muss unterscheiden zwischen 0 und Leerzeichen. Die Eigenschaften wie DisplayFormat:='0.00' oder ZeroIsEmpty:=True oder MaskEdit:='0.00' helfen mir da nicht weiter. |
Re: Blank im Edit-Control für Integer/Float-Werte
Hallo Alex,
die Geschichte mit dem Leerzeichen ist mysteriös. Mir scheint, du suchst nach einer Möglichkeit die Eingabe von Festkommazahlen sicher zu gestalten, wobei eine Eingabe auch ganz unterbleiben kann. Da gibt es mehrere Strategien:
Delphi-Quellcode:
Freundliche Grüße vom marabu
procedure TDemoForm.EditChange(Sender: TObject);
var fTest: Extended; begin with Sender as TEdit do if Focused then begin if (Text = '') or TryStrToFloat(Text, fTest) then begin Color := clWhite; Font.Color := clBlack; end else begin Color := clRed; Font.Color := clWhite; end; end; end; procedure TDemoForm.EditExit(Sender: TObject); begin with Sender as TEdit do Text := Format('%.2n', [StrToFloat(Text)]); end; procedure TDemoForm.EditEnter(Sender: TObject); begin with Sender as TEdit do begin Text := StringReplace(Text, ThousandSeparator, '', []); SelectAll; end; end; |
Re: Blank im Edit-Control für Integer/Float-Werte
Hallo marabu,
vielen Dank für deine Antwort, du hast mein Problem richtig erkannt. Ich habe es gleich ausprobiert und es hat funktioniert bis auf das Problem, dass ich kein Leerzeichen ohne Fehlermeldung eingeben konnte. Dazu musste ich die Exit-Routine noch erweitern:
Delphi-Quellcode:
Vielen Dank procedure TDemoForm.EditExit(Sender: TObject); var fTest: Extended; begin with Sender as TEdit do begin if (trim(text)<>'') then begin if (TryStrToFloat(Text, fTest)) then Text := Format('%.2n', [StrToFloat(Text)]) else ActiveControl:=TEdit(sender); end; end; end; Alex |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:56 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