[ dogriz @ 12.01.2005. 13:37 ] @
WinXP, Regional Settings je podešen na Serbian (Latin), kao i non-unicode programs...
Delphi 7 sp1

Kod unosa decimalnih vrednosti na numeričkoj tastaturi Delphi-ev DBEdit nije u stanju da pravilno prepozna decimalni separator. Mislim da je ovo generalno problem u Delphi-u, tj. da se ne odnosi samo na DBEdit. Ima li rešenja?

Treba da funkcioniše isto kao kod npr. MS Calculator-a.
[ _v!rus_ @ 12.01.2005. 14:01 ] @
Probaj sa EditFormat property-em TField objekta. Postavi ga 0.00 since edit format string je region independant. U stvari stavi i EditFormat i DisplayFormat na 0.00, a ako ne uspe probaj 0,00 , nisam nikad radio sa non-us regional settingom, zna da pravi GOMILU problema svuda, pogotovu sa starijim programima.
[ dogriz @ 12.01.2005. 19:22 ] @
Ako npr. unosim vrednost u običan EditBox, prikazuje mi . umesto , pa se javlja greška kad konvertujem - StrToFloat.
Mogu da na OnKeyPress za EditBox uradim sledeće
Code:

if Key='.' then
  Key=','

ali mi to ne rešava problem nekog drugog Locale setovanja, tj. Decimal/Currency simbola.

Kako pomoću GetNumberFormat f-je mogu da izvučem parametar lpDecimalSep? Kad bih to mogao (znao) da uradim, mogao bih umesto one sporne tačke u OnKeyPress da ubacim uvek odgovarajući separator.
[ Riste Pejov @ 12.01.2005. 23:47 ] @
Mozes da na pocetku programa postavis globalnu varijablu DecimalSeparator na koju zelis vrednost. Znaci pokusaj nesto kao:

DecimalSeparator := ',';
[ dogriz @ 13.01.2005. 01:14 ] @
To i hoću da uradim, ali ne da ja određujem koji je to separator (",") već da iskoristim Windowsov Number/Currency decimal separator.
Ono što ne znam je da upotrebim GetNumberFormat funkciju da bi dobio željeni znak.

(ili možda postoji neki drugi način za čitanje vrednosti iz Control Panel/Regional and Language Options/Customize/Decimal Symbol?)
[ _v!rus_ @ 13.01.2005. 01:52 ] @
Delphi Help za format string FormatFloat f-je:
Code:

.            Decimal point. The first '.' character in the format 
             string determines the location of the decimal 
             separator in the formatted value; any additional 
             '.' characters are ignored. The actual character 
             used as a the decimal separator in the output 
             string is determined by the DecimalSeparator global 
             variable.


Ako ti FormatFloat('0.00', 1) daje [,] a ne [.] vadi sa copy, mozda nije najbolje resenje al' je neko resenje..

Btw., ako ti neko odgovori a to ti ne pomogne, ili si vec probao ili onaj koji ti je odgovorio nema pojma sta prica, bar odgovoris na post, valjda je to neka opsta kultura...
[ dogriz @ 13.01.2005. 07:40 ] @
Citat:
Ako ti FormatFloat('0.00', 1) daje [,] a ne [.] vadi sa copy, mozda nije najbolje resenje al' je neko resenje..

Btw., ako ti neko odgovori a to ti ne pomogne, ili si vec probao ili onaj koji ti je odgovorio nema pojma sta prica, bar odgovoris na post, valjda je to neka opsta kultura...


Sorry, evo odgovora - na konto ovoga:

Citat:
_v!rus_: Probaj sa EditFormat property-em TField objekta. Postavi ga 0.00 since edit format string je region independant. U stvari stavi i EditFormat i DisplayFormat na 0.00, a ako ne uspe probaj 0,00 , nisam nikad radio sa non-us regional settingom, zna da pravi GOMILU problema svuda, pogotovu sa starijim programima.


DisplayFormat i EditFormat ne pomažu, inače kao decimalni separator se kod ovih property-a uvek koristi '.', kako i piše u
Citat:
Delphi Help za format string FormatFloat f-je:
Code:

.            Decimal point. The first '.' character in the format 
             string determines the location of the decimal 
             separator in the formatted value; any additional 
             '.' characters are ignored. The actual character 
             used as a the decimal separator in the output 
             string is determined by the DecimalSeparator global 
             variable.


ali to lepo ne radi. ',' se koristi kao Thousand separator.

Ako nekog interesuje kako efikasno koristiti DisplayFormat za prikaz numeričkih vrednosti, evo nekih primera:
,0.00 prikazuje broj 123456789 u obliku 123.456.789,00
,0.## u obliku 123.456.789 a ako iza decimalnog separatora nije nula, prikazuje do dve decimalne cifre, npr. 123456.78 -> 123.456,78 ili 123456.50 -> 123.456,5
[ dogriz @ 13.01.2005. 07:55 ] @
Citat:
_v!rus_: Ako ti FormatFloat('0.00', 1) daje [,] a ne [.] vadi sa copy, mozda nije najbolje resenje al' je neko resenje..



Daje mi ',' što mi i treba.

Zahvaljujem


ps. I dalje me interesuje kako da to izvučem iz GetNumberFormat f-je
[ dogriz @ 13.01.2005. 08:44 ] @
EVO REŠENJA!

ovako:
Code:

procedure TForm1.DBEdit1KeyPress(Sender: TObject; var Key: Char);
begin
  if Key='.' then
    Key:=DecimalSeparator;
end;


Sasvim slučajno sam nabasao na DecimalSeparator. Ima ga u SysUtils.
Za to mi je trebalo 3 (slovima: TRI) dana lupanja glavom u zid...

no comment