Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Проблема с TMaskEdit


Автор: Kesh 19.9.2004, 21:21
В программе происходит редактирование текста в компоненте TMaskEdit с маской !00:00.00;1;0
После этого считывается значение TMaskEdit.EditText
После этого при клике мышкой на другом компоненте выскакивает Ошибка!!! Просит нажать ESCAPE, чтобы обнулить значение, при нажатии Escape значения обнуляются и фокус переводится нормально...

Как избавиться от этой ошибки...

Заранее спасибо...

Автор: Pakshin A. S. 19.9.2004, 21:32
OK, понятно. Тупой компонент, если увидит символ "0" в записи, то щитает, что данные не врны, поэтому нужно найти замену "0". Скажем, если поставить простой пробел вместо нуля, то желаемый результат будет достигнут.

А! Вот ещё: большая буква "О" смахивает на ноль...

Автор: Kesh 19.9.2004, 21:38
Так фишка в том, что там и должны быть нули... И EditText должно быть с нулями... Ну вроде как для таймера...

Автор: Pakshin A. S. 19.9.2004, 21:42
А если самостоятельно сделать маску в TEdit через OnKeyPress?

Автор: Kesh 19.9.2004, 21:45
Щас будем пробовать...
Добавлено @ 21:52
Проблема решена, просто символом заполнения поставил пробел, соотв. маска стала такой !00:00.00;1; ; Потом просто заполняется нулями текст... И вуаля... Все работает...

Автор: Pakshin A. S. 19.9.2004, 22:02
Ну, если заикнулся про Edit, то выложу (для чего же писал)
Код

var
CurPos: integer;
EText: array [1..8] of char;

procedure TForm1.FormCreate(Sender: TObject);
var
i:integer;
begin
for i:=1 to 8 do
 EText[i]:='0';
EText[3]:=':';
EText[6]:='.';
CurPos:=0;
Edit1.Text:='';
for i:=1 to 8 do
 Edit1.Text:=Edit1.Text + EText[i];
end;

procedure TForm1.Edit1Change(Sender: TObject);
begin
CurPos:=Edit1.SelStart;
end;

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
var
i:integer;
begin
i:=CurPos + 1;
if (i > 0) and (i < 9)
 then
  begin
   case Key of
    '0'..'9': if (EText[i] <> ':') and (EText[i] <> '.')
               then
                EText[i]:=Key
               else
                EText[i+1]:=Key;
    #8: {Надо бы сделать переход курсора на один или два символа назад. Просто времени сейчас нет...}
        if i > 1
         then
          if (Etext[i-1] <> ':') and (EText[i-1] <> '.')
           then
            EText[i-1]:='0'
           else
            EText[i-2]:='0';
   end;
  end;
(Sender as TEdit).Text:='';
for i:=1 to 8 do
 (Sender as TEdit).Text:=(Sender as TEdit).Text + EText[i];
Key:=#0;
end;

procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
 Shift: TShiftState);
begin
if (key = VK_Left) and (CurPos <> 0)
 then
  dec(CurPos);
if (Key = VK_Right) and (CurPos) <= Length(Text))
 then
  inc(curPos);
end;

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)