Lazarus 3.2 (2024.02.28.)
Letöltés

  • Oldal:
  • 1

TÉMA:

MaskEdit float 2015 dec. 01 19:53 #1626

  • makgab
  • makgab profilkép Témaindító
  • Törzsgárda tag
  • Törzsgárda tag
  • Hozzászólások: 280
  • Köszönetek: 1
Köszönöm! Közben én is erre jutottam, csak a te mintád szebb lett.
:)
Köszi még1x!

MaskEdit float 2015 dec. 01 19:38 #1625

  • Gábor
  • Gábor profilkép
  • Adminisztrátor
  • Adminisztrátor
  • Hozzászólások: 506
  • Köszönetek: 86
Felejtsd el a TMaskEdit-et (legalábbis erre az alkalomra és használj sima TEdit-et.
A TEdit.Aligment legyen taRightJustify és a TEdit.OnKeyPress eseményhez pedig ezt add meg:
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: char);
begin
  if Key in ['0'..'9', #8, #9] then {semmi tennivaló}
  else
  if (Key = DefaultFormatSettings.DecimalSeparator) then
  begin
    if (Pos(DefaultFormatSettings.DecimalSeparator, Edit1.Text) = 0) then {nincs tennivaló}
    else
      Key := #0;
  end
  else
    Key := #0;
end;
Azt hiszem elsőre félreértettem a problémát... :)
Hogyan kérdezzünk okosan? / Mit kell tennünk kérdezés előtt? -- Lazarus 3.0 -- FPC 3.2-- GNU/Linux 5.15.0 x86_64

MaskEdit float 2015 dec. 01 18:24 #1624

  • makgab
  • makgab profilkép Témaindító
  • Törzsgárda tag
  • Törzsgárda tag
  • Hozzászólások: 280
  • Köszönetek: 1
Köszönöm az instrukciókat, de nekem azt hiszem nem a locale beállítással van gondom.
Szerintem nem tudom megadni, hogy a tizedes vessző előtt és után levő számok (digitek) száma bármennyi lehet.
Tehát a formátumban nem tudom megadni a digitek tetszőleges számát(?).

Egy demo:
Formon MaskEdit1, Button1
// MaskEdit1.EditMask:='###.##;1;_'
 
procedure TForm1.Button1Click(Sender: TObject);
var f: double;
begin
  // show
  ShowMessage( 'DEBUG string: ' + MaskEdit1.Text );
  f:= StrToFloat( MaskEdit1.Text );
  ShowMessage( 'DEBUG float: ' + FloatToStr( f ) );
end; 

Szépen működik is, pl. a user beírja, hogy:
123.12
12.12

De ha pl. így írja be ('1' majd pont és tizedesjegyek):
1__.23
akkor nem tudja az StrToFloat() lebegőpontossá alakítani (EConvertError). Csak felhasználóbaráttá szeretném tenni.
Szóval a fix digitek miatt nem tudja a "1__.23" floattá konvertálni (érthető módon).
Kicsit barátságosabbá szeretném tenni a bevitelt.

MaskEdit float 2015 dec. 01 16:25 #1623

  • Gábor
  • Gábor profilkép
  • Adminisztrátor
  • Adminisztrátor
  • Hozzászólások: 506
  • Köszönetek: 86
Valószínűleg segíteni fog a megoldásban ha elolvasod a wiki-n a Format_settings és a Locale_differences című írásokat.
Hogyan kérdezzünk okosan? / Mit kell tennünk kérdezés előtt? -- Lazarus 3.0 -- FPC 3.2-- GNU/Linux 5.15.0 x86_64

MaskEdit float 2015 dec. 01 15:27 #1622

  • makgab
  • makgab profilkép Témaindító
  • Törzsgárda tag
  • Törzsgárda tag
  • Hozzászólások: 280
  • Köszönetek: 1
Ez majdnem jó: '####.##;1;_'
Csak nem tudom átalakítani floattá ( StrToFloat(MaskEdit.Text) ). Ez kerül bele pl.: _______12.01
Szóval ez sem az igazi.

Ez se jó, nem lehet floattá alakítani: '###.##;1; '
Ilyen lesz pl.: 10 .12
és EConverError.

MaskEdit float 2015 dec. 01 15:12 #1621

  • makgab
  • makgab profilkép Témaindító
  • Törzsgárda tag
  • Törzsgárda tag
  • Hozzászólások: 280
  • Köszönetek: 1
Üdv!
Nem lelem a megoldást az EditMask beállítására, hogy csak float értékeket tudjon a user beírni.
Pl.:
12.4
159.9
145.65

Mi lenne a helyes mask?

(Ez nem egészen jó, valami még hiányzik: '999.9' )

  • Oldal:
  • 1