MaskEdit i masakra

0

Witam

kiedy wpiszemy do pola EditMask kontrolki MaskEdit coś takiego: 99,99
ograniczymy wprowadzanie danych do rozmiaru: dwa miejsca przed przecinkiem i dwa za przecinkiem
działa to badzo sprawnie

Problem pojawia się gdy zrobimy coś takiego:

procedure TForm1.Button1Click(Sender: TObject);
begin
     Maskedit1.Text:='2,33';
end;

Teraz na ekranie w MaskEdit1 widzimy koszmarny efekt formatowania:

coś takiego: 1_,23 a powinno być chyba tak: _1,23

czy da sie temu jakoś zaradzić ?
albo czy da się to tak formatować aby nawet znak _ nie był wstawiany?

0

jeśli chcesz żeby użytkownik miał maskę
ale sam chcesz wpisywać bez maski
utwórz dwa elementy
niech aplikacja wpisuje do zwykłego edita
a użytkownik do maski
oba elementy mogą się zamieniać widocznością
efekt będzie taki jak chcesz a user się nie połapie ;)

0

Po latach opisany kiedyś problem MaskEdita wraca jak bumerang czy naprawde nikt nie wie jak sie formatuje te znaki tak aby kursor w MaskEdit pozycjonował znaki do prawej a nie lewj strony? Czy nikt nie stosuje MaskEdita?

0

Dodaj ! (wykrzyknik) na początku maski

0

Tak pisze w helpie ale to nie działa
efekt dalej jest taki: 9,9 po wprowadzeniu trzech znaków tzn. 9,9
Dodatkowo chce uzyskać taki efekt: uaktywnienie kursorem myszy kontrolki MaskEdit w dowolnym miejscu ustawia zawsze kursor na pozycji zerowej jeśli oczywiście w MaskEdit jest pusty i nie ma w nim wprowadzonych znaków.

Jak to zrobić?
Czy jest to realne a może jakoś inaczej rozwiązać taki problem?

0

a nie możesz tam po prostu wpisać '02,33' ?

0

Widzę ,że coś tak prostego jak odpowiednie sformatowanie cyfr w MaskEdit jest wielkim problemem dla tego komponentu. Oznacza to chyba rezygnacje z MaskEdita jako pola maski liczb zmiennoprzecinkowych chyba ,ze tolerujemy na ekranie coś takiego: 9__,3 jako poprawny zapis cyfr w polu maski.

0

Nie lepiej zastosować subclassing z WinAPI, albo stworzyć własną kontrolkę?

0

A nie ma w delphi czegoś takiego jak double spin box z Qt? Można tam ustawić maksymalną liczbę oraz ilość miejsc po przecinku, coś w sam raz do takiego zadania.

user image

0

Znalazłem takie rozwiązanie:

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if not (Key in ['0'..'9',#8,'-', DecimalSeparator]) then Key := #0;
end;

Tylko trzeba dopisać, aby nie dało się dać kilku minusów i kropek.

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0