Перейти к содержанию
Fire Monkey от А до Я

Yarik

Пользователи
  • Постов

    4
  • Зарегистрирован

  • Посещение

Сообщения, опубликованные Yarik

  1. Код закоментирован просто чтоб показать какие варианты испробовал.

     

    KeyChar in set - не работает на юникодных версиях, всегда будет возвращать False.

    Как уже писал в комментариях  if not (KeyChar in ['1'..'9']) then   keychar:=#0; , как и просто проверка символа с помощью if работает для цифр. В вашем коде таже проверка символов. Попробовал сейчас

    Ch := TFormatSettings.Create.DecimalSeparator;
       if  keychar=ch
        then
         keychar:=#0; все равно не отлавливает ни точку ни запятую

    Еще так  сделал

    procedure TForm1.Edit1ChangeTracking(Sender: TObject);
    var s: string;
    begin
        s:=Edit1.Text;
        Edit2.Text:=Edit1.Text;
        if (pos('.',s)<>0) or (pos(',',s)<>0) or (pos(',',s)<>0) or (pos('.',s)<>0) or (pos(',',s)<>0) or (pos('.',s)<>0)
           or (pos('-',s)<>0) or (pos('-',s)<>0) or (pos('-',s)<>0) or (pos('-',s)<>0)or (pos('0',s)<>0) or (pos('0',s)<>0)
           or (pos('0',s)<>0) or (pos('0',s)<>0)then
         begin
           delete(s,pos('.',s),1);
           Edit1.Text:=s;
         end;
    
    end;
    

    повторяющиеся точки и запятые это просто вводил из интереса при русской и английской раскладке клавиатуры откоплилировал для виндовс чтоб побыстрее так вот из всего выражения проверяются только точки , хоть в анг. хоть в русской раскладке. И не какой реакции на остальные символы и даже на ноль :wacko: . Просто хочется разобраться покоя не дает когда что то не понятно. К сожалению недавно перешел на XE7 с Delphi7 очень много изменений. И спасибо за участие буду дальше копать.

  2. Приведите код из OnKeyDown. Буквально вчера реализовывал TEdit для беззнаковых/знаковых целых/дробных чисел - никаких проблем не было.

    procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word; var KeyChar: Char;
      Shift: TShiftState);
      var s:string;
    begin
     {  if not (KeyChar in ['1'..'9']) then
         keychar:=#0;         // c цифрой 0 работает она не печатается
                              // с '.' , ',' , '-' не работает
    
        case KeyChar of       // с '.' , ',' , '-' не работает
          '0'..'9': ;
          else
           KeyChar:=#0;
    
        end;
         s:=Edit1.Text;
        Edit2.Text:=Edit1.Text;
        if pos('.',s)<>0 then
         begin
           delete(s,pos('.',s),1);
           Edit1.Text:=s;
           Edit2.Text:=s;
         end; }
    end;
    
    procedure TForm1.Edit1KeyUp(Sender: TObject; var Key: Word; var KeyChar: Char;
      Shift: TShiftState);
      var s:string;
    begin
      {     if not (KeyChar in ['1'..'9']) then    // c цифрой 0 работает она не печатается
                keychar:=#0;                       // с '.' , ',' , '-' не работает
    
        case KeyChar of                         // с '.' , ',' , '-' не работает
          '0'..'9': ;
          else
           KeyChar:=#0;
    
        end;  }
         s:=Edit1.Text;                // цифры сразу выводятся и в Edit1.Text и в Edit2.Text
                                       // точки сразу выводятся в Edit1.Text, а удаляться и в Edit2.Text  только после нажатия цифровой клавиши
        Edit2.Text:=Edit1.Text;        // не пойму как  KeyDown и KeyUp реагирует на нажатие не цифровых кнопок
        if pos('.',s)<>0 then
         begin
           delete(s,pos('.',s),1);
           Edit1.Text:=s;
           Edit2.Text:=s;
         end;
    end;
    
  3. В OnKeyDown проверять и менять KeyChar

    Key используется только для непечатаемых символов.

    Не отслеживаются символы точки,запятой и минуса в onkeydown ни через if ни через case в этом и проблема.Попрабовал выводить параллельно текст первого edit в другой с проверкой и удалением этих символов они все равно печатаются и во втором причём удаляется только точка и то если только после ввода этих символов нажимать на клавишу какой нибудь цифры.
  4. Нужна помощь. Есть компонент Edit для него выбрана цифровая клавиатура нужно чтобы вводились только цифры и больше ничего.При нажатии на точку, запятую и  ' - '  они отображаются пробовал через  case  of  и с помощью FilterChar , а так же OnChange  ничего не помогло . По событию OnKeyDown хотел узнать значение Key кнопок . На цифровых кнопках это значение равно 0 на всех цифрах. На точке, запятой и ' - ' вообще значение Key не выводится. Цифры же легко фильтруются FilterChar. Подскажите пожалуйста что можно сделать очень надо.

×
×
  • Создать...