Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - 1000er Trennzeichen mit Komma statt Punkt ???


lexmy3 - Mi 08.03.06 10:36
Titel: 1000er Trennzeichen mit Komma statt Punkt ???
Hallo,

ich habe einen Code für 1000er Terennzeichen, jedoch mit Punkt als Trennzeichen.

Jetzt muss ich diesen auf den englischen Format ( Komma als Trennzeichen) umschreiben!
Kann ich diesen Code umschreiben??
Kann mir einer dabei helfen?

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
//////////////////////////////////Geht nur bis  10 Stellen 1.000.000.000////////////////
  Function ThousandsToInt (Const aString : String) : Integer;
Begin
  Result := StrToIntDef (StringReplace (aString,ThousandSeparator,'', [rfReplaceAll]), 0);
End;

Function IntToThousands (Const aValue : Integer) : String;
Begin
  Result := FormatFloat (',0',aValue);
End;

procedure TForm1.Edit7Enter(Sender: TObject);
begin
  With Sender as TEdit Do Text := IntToStr (ThousandsToInt (Text));
end;

procedure TForm1.Edit7Exit(Sender: TObject);
begin
  With Sender as TEdit Do Text := IntToThousands (StrToIntDef (Text,0));
end;

procedure TForm1.Edit7Change(Sender: TObject);
  function Filter(const S: String): String;
    const
      OK: Set of Char = ['0'..'9'] ; // Komma kann auch drin bleiben ['0'..'9',',']
    var
      i: Integer;
  begin
    Result := '';
    for i := 1 to Length(S) do
      if (S[i] in OK) then
        Result :=  Result +S[i];
  end;

begin
  if (Edit7.Modified) then 
    Edit7.Text := Filter(Edit7.Text); // Eingabe bereinigen
    Edit7.SelStart := Length(Edit7.Text); // Cursor ans Textende stellen
    end;

end.


mfg lexmy3


aim65 - Mi 08.03.06 10:50

Auf die Kürze,
vielleicht hilft Dir das weiter:

http://www.delphibasics.co.uk/RTL.asp?Name=ThousandSeparator

MfG Horst


lexmy3 - Mi 08.03.06 11:52
Titel: Komma statt Punkt???
Hey, Danke für deine Reaktion

Aber dieser Code funktioniert gar nicht so wie vorgegeben!

Also es handelt sich hier, wenn ich es als Anfänger richtig verstehe um Systemeinstellungen von Windows. Und diese muss ich irgendwie umgehen oder kurzfristig umschreiben.

Habe aber davon nicht viel Ahnung.

So please help me!!!


PS: Dies funzt also nicht!!!



Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
Example code : Changing the thousands separator character 
var
  amount : Currency;
begin
  amount := 1234567.89;    // 1,234,567 pounds 89 pence

  // Display with the default thousands separator
  ShowMessage('Amount = '+FloatToStrF(amount, ffCurrency, 102));

  // Display with a new thousands separator
  ThousandSeparator := ' ';
  ShowMessage('Amount = '+FloatToStrF(amount, ffCurrency, 102));
end;


Ergebnis:
Amount = £1,234,567.89
Amount = £1 234 567.89


MSCH - Mi 08.03.06 12:40

Zitat:
Bei allen Gleitkommaformaten wird das Zeichen für das Dezimal- bzw. das Tausendertrennzeichen aus den globalen Variablen DecimalSeparator und ThousandSeparator bzw. deren TFormatSettings-Entsprechungen ausgelesen.




Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
var  
  amount : Currency;  
begin  
  amount := 1234567.89;
  // Anzeige der Werte nach den Systemeinstellungen 
  // bei einem deutschen BS als 1.234.567,89 
  ShowMessage('Amount = '+FloatToStrF(amount, ffCurrency, 102));  

  // nu ändern wir dat mal nach ENG
  ThousandSeparator := ',';  
  DecimalSeparator  :='.';
  ShowMessage('Amount = '+FloatToStrF(amount, ffCurrency, 102));  
  // --> 1,234,567.89


alles Klar?
grez
msch


aim65 - Mi 08.03.06 12:57

MSCH ist mir da zuvorgekommen... 8)
In dem angegebenen Beispiel wurde ein Leerzeichen verwendet, was ja dann auch richtigerweise zu dem von Dir gezeigten Ergebnis geführt hat. Hier hättest Du natürlich ein Zeichen Deiner Wahl eingeben müssen.
So, jetzt ist ja wohl alles geklärt. Viel Erfolg.
Horst


lexmy3 - Mi 08.03.06 13:42
Titel: Statt Punkt ein Komma
Also liebe Delphi Freunde,

Dieser Code funzt nicht so wie erwünscht (wie oben schon erwähnt), denn hier wird aus einem Komma ein Punkt aber nicht aus Punkt ein Komma!!! :gruebel:

Habe hier gelesen dass Delphi Problemme hat punkte/Kommas umzuwandeln!

Also mit den Tausender Schritten gibt es wohl Diskrepanz oder was???

Ich suche und finde keine Hilfe zu diesem Problem. :cry:


aim65 - Mi 08.03.06 15:00

Komisch, bei mir funktioniert es mit folgendem Code einwandfrei in beiden Richtungen (hab's mal auf die Schnelle mit 'nem ButtonClck gemacht:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
var
  Form1: TForm1;
  amount : Currency;
implementation

{$R *.DFM}

procedure Zeige;
begin
  amount := 1234567.89;    // 1,234,567 pounds 89 pence
// Display with a new thousands separator
  ThousandSeparator := ',';
  DecimalSeparator :='.';
  ShowMessage('Amount = '+FloatToStrF(amount, ffCurrency, 102));
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
Zeige;
end;

Je nachdem ich Komma und Punkt für ThSep und DecSep einsetze, krieg ich das richtig im Display gezeigt - für oben eben 1,234,567.89. Umgekehrt dann 1.234.567,89.
Hast Du die Probleme evtl. bei der Eingabe? (Delphi verwendet intern wohl immer den Punkt als DecSeparator).


lexmy3 - Mi 08.03.06 16:26

Hey ahbe gerade in einer neuen Anwendung ausprobiert es geht doch !!!

Na ja muss jetzt nur gucken, dass ich es in meinen Code irgendwie einbaue.


Danke

mfg

Lexmy3