Autor Beitrag
lexmy3
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 140

WIN 2000 Prof. + Office 2000
Delphi 5 Enterprise
BeitragVerfasst: Mi 08.03.06 10:36 
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?
ausblenden volle Höhe 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 312

Win 9x, Win XP
Delphi 3pro, 7PE
BeitragVerfasst: Mi 08.03.06 10:50 
Auf die Kürze,
vielleicht hilft Dir das weiter:

www.delphibasics.co....me=ThousandSeparator

MfG Horst
lexmy3 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 140

WIN 2000 Prof. + Office 2000
Delphi 5 Enterprise
BeitragVerfasst: 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!!!


ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1448
Erhaltene Danke: 3

W7 64
XE2, SQL, DevExpress, DevArt, Oracle, SQLServer
BeitragVerfasst: 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.



ausblenden 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

_________________
ist das politisch, wenn ich linksdrehenden Joghurt haben möchte?
aim65
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 312

Win 9x, Win XP
Delphi 3pro, 7PE
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 140

WIN 2000 Prof. + Office 2000
Delphi 5 Enterprise
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 312

Win 9x, Win XP
Delphi 3pro, 7PE
BeitragVerfasst: 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:
ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 140

WIN 2000 Prof. + Office 2000
Delphi 5 Enterprise
BeitragVerfasst: 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