Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

работа с TEdit, формат числа 1.11


Konus ©   (2007-05-07 11:59:00) 

нужно поле (edit) для ввода дробного числа с двумя цифрами после запятой/точки, например: 14.32, 124.63...
как задать подобную маску и ограничить ввод букв?


Konus   (2007-05-08 06:51:00) [1]

спасибо, работает отлично :)


Anatoly Podgoretsky   (2007-05-07 22:20:00) [2]

> Konus  (07.05.2007 12:37:02)  [2]

Так у тебя строки, зачем же тогда числами называешь


SergeyIT   (2007-05-07 21:44:00) [3]

В эдите на OnChange вызываю
EditCheckValue(Self, _FloatChars);
Можно дополнить знаком (-/+), проверкой на количество (./,), сделать подмену (.)<->(,) и тд и тп.


type
 TLetters = #32..#255;
 TLetSet = set of TLetters;
var
  _FloatChars: TLetSet = ['0','1','2','3','4','5','6','7','8','9',
          '.', ','];
...........................................

function CheckString(var str: String; const let: TLetSet): Boolean;
var
  s: String;
  n, i: Integer;
begin
    Result := TRUE;
    s := '';
    n := Length(str);
    if n < 1 then exit;
    Result := FALSE;
    for i := 1 to n do
    begin
      if str[i] in let then s := s + str[i];
    end;
    if Length(s) = n then Result := TRUE else str := s;
end;

procedure EditCheckValue(Edit: TEdit; Let: TLetSet);
var
  i, n: Integer;
  s: String;
begin
 if NOT Edit.Focused then exit;
 i := Edit.SelStart;
 n := Length(Edit.Text);
 s := Edit.Text;
 if NOT CheckString(s, Let) then
 begin
   Edit.Text := s;
   i := i - (n - Length(s));
   if (i >= 0) AND (i <= Length(s)) then
        Edit.SelStart := i
   else Edit.SelStart := 0;
   if Edit.Focused then MessageBeep($FFFFFFFF);
 end;
end;


Konus   (2007-05-07 13:48:00) [4]

подскажите, пожалуйста


Konus   (2007-05-07 12:37:00) [5]

задал маску такого типа:
'!99999.99;1; '
во-первых, не известно, какое число какой длинны будет целой частью, т.е. если 1.83, то в маскедит нужно будет ставить курсор перед точкой, что не удобно
во-вторых, если не заполнена правая часть после запятой, придется каким-то образом обрабатывать вручную и добавлять 00, т.к. сохранять надо именно в таком формате

какие есть варианты?


Desdechado   (2007-05-07 12:02:00) [6]

MaskEdit
?


Наверх

Титульная страница Поиск, карта сайта Написать письмо