На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! ПРАВИЛА РАЗДЕЛА · FAQ раздела Delphi · Книги по Delphi
Пожалуйста, выделяйте текст программы тегом [сode=pas] ... [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.
Следующие вопросы задаются очень часто, подробно разобраны в FAQ и, поэтому, будут безжалостно удаляться:
1. Преобразовать переменную типа String в тип PChar (PAnsiChar)
2. Как "свернуть" программу в трей.
3. Как "скрыться" от Ctrl + Alt + Del (заблокировать их и т.п.)
4. Как прочитать список файлов, поддиректорий в директории?
5. Как запустить программу/файл?
... (продолжение следует) ...

Вопросы, подробно описанные во встроенной справочной системе Delphi, не несут полезной тематической нагрузки, поэтому будут удаляться.
Запрещается создавать темы с просьбой выполнить какую-то работу за автора темы. Форум является средством общения и общего поиска решения. Вашу работу за Вас никто выполнять не будет.


Внимание
Попытки открытия обсуждений реализации вредоносного ПО, включая различные интерпретации спам-ботов, наказывается предупреждением на 30 дней.
Повторная попытка - 60 дней. Последующие попытки бан.
Мат в разделе - бан на три месяца...
Модераторы: jack128, D[u]fa, Shaggy, Rouse_
Страницы: (3) 1 [2] 3  все  ( Перейти к последнему сообщению )  
> Проверка ввода символов в Edit (edit-oв много)
    Цитата and85 @
    Есть маленькое замечание. Нигде не обрабатывается вставка из буфера винды. Тоесть, если у меня в буфере белиберда 'алдывраывлоарыдлаорывдлаорыва', то нажав Shift+Insert, я смогу эту бяку к себе в эдит вставить:)

    Не сможешь.

    Цитата subsonic @
    как сделать, чтоб в определенное количество едитов. можно было вводить только цифры, и стирать кнопкой backspace???

    ExpandedWrap disabled
      procedure TForm1.Edit1KeyPress(Sender:TObject;var Key:Char);
      begin
        if not (Key in [#8, '-','0'..'9']) or
           (Key = '-') and (Length((Sender as TEdit).Text) <> 0) then
          Key:=#0;
      end;
      Цитата subsonic @
      можно было вводить только цифры, и стирать кнопкой backspace???

      Просто добавить символ бэкспейса (#8) в число разрешенных
      ExpandedWrap disabled
        if not (Key in [#8,'-','0'..'9'])


      Добавлено
      Цитата and85 @
      Есть маленькое замечание. Нигде не обрабатывается вставка из буфера винды. Тоесть, если у меня в буфере белиберда 'алдывраывлоарыдлаорывдлаорыва', то нажав Shift+Insert, я смогу эту бяку к себе в эдит вставить:)

      P.S. У andrew.virus это похоже учитывается:)

      Проще добавить обработчик OnChange, чем городить спец.контрол, да еще и "с нуля" ;)
      PS: Кстати виндовый стиль эдита ES_NUMBER также не отслеживает вставку "белиберды" из буфера обмена :(
        Backspace - символ #8. Просто допусти и его
          Цитата
          Просто добавить символ бэкспейса (#8)

          а как узнать символы каждой кнопки на клаве?
            Цитата subsonic @
            а как узнать символы каждой кнопки на клаве?

            Поставь брейкпойнт в обработчике, запусти прогу, и смотри, чему равен Key :)
              Символы - то, что написано. Плюс #7 - табуляция.
              Остальные по кодам идут, это OnKeyUp обычно контролирует. VK_F1 и остальные
                Цитата Continental @
                Есть какой-нибудь способ, чтобы сократить данный код?

                цикл сделать по коллекции ParControl.Controls, где ParControl - контрол на котором лежат Едиты (форма или панель, что там у вас)
                ParControl.ControlCount - кол-во дочерних контролов
                  Цитата Romkin @
                  Плюс #7 - табуляция

                  Вообще-то табуляция VK_TAB = #9 ;)
                    Цитата leo @
                    Вообще-то табуляция VK_TAB = #9

                    Ой. Точно. А 7 - это бип :)
                      вообще то проще посмотреть в ASCII таблице :)
                        Вот, как раз только что делал такую штуку. Подумал-подумал, и решил, что для цифрового поля должны вводиться
                        1)Цифры
                        2)Backspase
                        3)Ну и стрелки назад-вперед, видимо - иначе представляю, как юзверь будет материться, вогнав длинную строку, и поняв, что сделал ошибку.

                        И тогда то, что здесь описывалось, будет выглядеть так.

                        ExpandedWrap disabled
                          unit klavishi;
                           
                          interface
                          procedure klavishi1(var key:char);
                          implementation
                          procedure klavishi1 (var key:char);
                             begin
                              case key of
                               '0'..'9':;
                               chr(8),chr(37),chr(39):;
                              else key:=Chr(0);
                             end;
                          end;
                          end.


                        До того, чтобы компонент писать, я вот пока не дошел. Но модуль отдельный как раз сделал - подключаешь его, и пишешь в событие поля ввода на OnKeyPress

                        ExpandedWrap disabled
                          klavishi;
                          Цитата inmast @
                          chr(8),chr(37),chr(39):;

                          А при чем тут chr(37) - знак процента %, и chr(39) - одиночный апостроф '

                          Цитата inmast @
                          3)Ну и стрелки назад-вперед,

                          Стрелки назад-вперед это не символы, а управляющие клавиши. Поэтому в OnKeyPress они не попадают, только в OnKeyDown\OnKeyUp
                            Еще вариант до кучи по мотивам темы
                            ExpandedWrap disabled
                              procedure TForm1.FormCreate(Sender: TObject);
                              var J: Integer;
                              begin
                                for J := 0 to ComponentCount-1 do
                                  if Components[J] is TEdit then
                                    TEdit(Components[J]).OnKeyPress  := klavishi1;
                              end;
                               
                              procedure TForm1.klavishi1(Sender: TObject; var Key: Char);
                              begin
                                if not (Key in [#8 ,'-', '0'..'9', Chr(VK_DELETE), Chr(VK_LEFT), Chr(VK_UP), Chr(VK_RIGHT), Chr(VK_DOWN)]) then
                                  Key := #0;
                              end;
                            Сообщение отредактировано: SourceUser -
                              А не проще ли глобально для всех контролов что лежат на форме обрабатывать.
                              У формы на которой лежат контролы делаем KeyPreview := True и вешаем обработчик на OnKeyPress

                              ExpandedWrap disabled
                                procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
                                begin
                                  if not (Key in [#8 ,'-', '0'..'9', Chr(VK_DELETE), Chr(VK_LEFT), Chr(VK_UP), Chr(VK_RIGHT), Chr(VK_DOWN)]) then
                                    Key := #0;
                                end;


                              и не заморачеваемся с перебором класов и т.д.
                              Хотя это от ситуации зависит.
                                Цитата SourceUser @
                                if not (Key in [#8 ,'-', '0'..'9', Chr(VK_DELETE), Chr(VK_LEFT), Chr(VK_UP), Chr(VK_RIGHT), Chr(VK_DOWN)])

                                Угу, прежде чем ерунду писать сначала попробовал бы вывести все эти символы VK_.. в едит
                                ExpandedWrap disabled
                                  Etit1.Text:=Chr(VK_DELETE)+Chr(VK_LEFT)+Chr(VK_UP)+Chr(VK_RIGHT)+Chr(VK_DOWN);

                                тогда бы сразу увидел что они означают: .%&'(
                                Повторяю для непонятливых:
                                Цитата leo @
                                Стрелки назад-вперед это не символы, а управляющие клавиши. Поэтому в OnKeyPress они не попадают, только в OnKeyDown\OnKeyUp

                                а VK_... это не коды символов, а виртуальные коды клавиш клавиатуры
                                Сообщение отредактировано: leo -
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (3) 1 [2] 3  все


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0412 ]   [ 16 queries used ]   [ Generated: 17.06.24, 16:28 GMT ]