Недавно добавленные исходники

•  DeLiKaTeS Tetris (Тетрис)  166

•  TDictionary Custom Sort  3 340

•  Fast Watermark Sources  3 093

•  3D Designer  4 849

•  Sik Screen Capture  3 348

•  Patch Maker  3 554

•  Айболит (remote control)  3 664

•  ListBox Drag & Drop  3 016

•  Доска для игры Реверси  81 714

•  Графические эффекты  3 946

•  Рисование по маске  3 250

•  Перетаскивание изображений  2 631

•  Canvas Drawing  2 754

•  Рисование Луны  2 584

•  Поворот изображения  2 191

•  Рисование стержней  2 169

•  Paint on Shape  1 569

•  Генератор кроссвордов  2 238

•  Головоломка Paletto  1 767

•  Теорема Монжа об окружностях  2 232

•  Пазл Numbrix  1 685

•  Заборы и коммивояжеры  2 057

•  Игра HIP  1 282

•  Игра Go (Го)  1 230

•  Симулятор лифта  1 475

•  Программа укладки плитки  1 218

•  Генератор лабиринта  1 548

•  Проверка числового ввода  1 366

•  HEX View  1 497

•  Физический маятник  1 358

 
скрыть


Delphi FAQ - Часто задаваемые вопросы

| Базы данных | Графика и Игры | Интернет и Сети | Компоненты и Классы | Мультимедиа |
| ОС и Железо | Программа и Интерфейс | Рабочий стол | Синтаксис | Технологии | Файловая система |



Delphi Sources

Проверка на соответствие содержимого TEdit



// Пример нового языка программирования 
// разработанного Microsoft для новых русских 
// "Microsoft Visual Fenya". 

Program Vovan;
  Чиста В_натуре (блин);
  Мотаем_Цикл
  Икс:= Продал (обменял(купил(обналичил(перевел(занял)))));
  Отстегнул_долю (Крыша, 20%);
  Пока (Икс > $1000000)
  Рвем_когти (На_канары);
  Иначе (На_нары);
Game_over.

Как мне проверить на соответствие содержимое компонента TEdit?

Предположим, вы регулярно пользуетесь компонентами TEdit (в отличие от компонентов TDBEdit), и если так, то наилучшим местом для осуществления проверки на соответствие является обработчик события OnExit компонента TEdit. Данное событие наступает при каждом покидании фокуса компонента.

Обычно, при вводе неправильного текста в поле редактирования, у вас возникает желание послать предупреждение пользователю и вернуть фокус обратно. Тем не менее, в данном решении трудность подстерегает при попытке установить фокус в обработчике события OnExit. Поскольку Windows остается "посередине" при передаче фокуса от одного элемента управления другому в обработчике события OnExit, вы можете получить состояние нестабильного поведения компонентов, если попытаетесь в это время изменить фокус.

Решением в данной ситуации может служить попытка послать сообщение в обработчике события компонента TEdit OnExit вашей форме. Определенное пользователем и посланное сообщение может послужить отправной точкой для начала проверки содержимого поля редактирования. Поскольку посланное сообщение располагается в конце очереди сообщений, то это дает Windows возможность завершить изменение фокуса прежде, чем вы попытаетесь передать фокус другому элементу управления.

Помещенный ниже текст модуля и текстовое представление формы (DFM) призваны продемонстрировать эту технику:


{ *** НАЧАЛО КОДА МОДУЛЯ UNIT1.PAS *** }
unit Unit1;

interface

uses
  SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls, Forms,
    Dialogs, StdCtrls, Mask;

const
  { Определенное пользователем сообщение }
  um_ValidateInput = wm_User + 100;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    Button1: TButton;
    MaskEdit1: TMaskEdit;
    procedure Edit1Exit(Sender: TObject);
  private
    { обработчик определенного пользователем события }
    procedure ValidateInput(var M: TMessage); message um_ValidateInput;
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.ValidateInput(var M: TMessage);
begin
  { Следующая строка является строкой проверки. Я хочу убедиться в том, }
  { что первый символ является буквенным символом верхнего регистра. }
  { Помните о преобразовании типа lParam к TEdit. }
  if not (TEdit(M.lParam).Text[1] in ['a'..'z']) then
  begin
    ShowMessage('Содержимое не отвечает требованиям'); { Орем на пользователя }
    TEdit(M.lParam).SetFocus; { Снова устанавливаем фокус }
  end;
end;

procedure TForm1.Edit1Exit(Sender: TObject);
begin
  { Посылаем сообщение самому себе, говорящее о необходимости }
  { проверки содержимого. Передаем экземпляр TEdit (Self) как }
  { lParam сообщения. }
  PostMessage(Handle, um_ValidateInput, 0, longint(Sender));
end;

end.
{ *** КОНЕЦ КОДА МОДУЛЯ UNIT1.PAS *** }

{ *** НАЧАЛО КОДА ФАЙЛА UNIT1.DFM *** }
object Form1: TForm1
  Left = 200
    Top = 99
    Width = 318
    Height = 205
    Caption = 'Form1'
    Font.Color = clWindowText
    Font.Height = -13
    Font.Name = 'System'
    Font.Style = []
    PixelsPerInch = 96
    TextHeight = 16
    object Edit1: TEdit
    Left = 32
      Top = 32
      Width = 121
      Height = 24
      TabOrder = 0
      Text = 'Edit1'
      OnExit = Edit1Exit
  end
  object Edit2: TEdit
    Left = 160
      Top = 32
      Width = 121
      Height = 24
      TabOrder = 1
      Text = 'Edit2'
      OnExit = Edit1Exit
  end
  object Edit3: TEdit
    Left = 32
      Top = 64
      Width = 121
      Height = 24
      TabOrder = 2
      Text = 'Edit3'
      OnExit = Edit1Exit
  end
  object Edit4: TEdit
    Left = 160
      Top = 64
      Width = 121
      Height = 24
      TabOrder = 3
      Text = 'Edit4'
      OnExit = Edit1Exit
  end
  object Button1: TButton
    Left = 112
      Top = 136
      Width = 89
      Height = 33
      Caption = 'Button1'
      TabOrder = 4
  end
end
{ *** КОНЕЦ КОДА ФАЙЛА UNIT1.DFM *** }





Похожие по теме исходники

Проверка знаний Delphi

Проверка числового ввода

Расширение компонента TEdit




Copyright © 2004-2024 "Delphi Sources" by BrokenByte Software. Delphi World FAQ

Группа ВКонтакте