Свойства компонентов Memo, Edit, LabelEdit | Delphi-FAQ

Свойства компонентов Memo, Edit, LabelEdit

Компоненты, используемые для редактирования информации, похожи друг на друга и, соответственно, имеют много общих свойств, событий и методов.



Cобытие OnChange

При любых изменениях в содержимом редактора возникает событие OnChange типа TNotifyEvent, которое можно использовать для проверки текста, содержащегося в поле ввода, например, для оперативного контроля правильности набора данных.

Свойство Modified

Кроме того, при изменении содержимого редактора свойство Modified типа Boolean принимает значение True. Это свойство можно использовать, в частности, для проверки того, сохранена ли редактируемая информация на диске:

  1. if Memo1.Modified then
  2. begin
  3. // Инструкции выдачи предупреждения и сохранения информации
  4. end;

Cвойство MaxLength

Для указания максимального количества символов, которые допускается вводить в поле редактирования, можно использовать свойство MaxLength типа Integer. При этом ограничение на длину текста относится к вводу со стороны пользователя, программно можно ввести количество символов большее, чем задано в свойстве MaxLength. По умолчанию длина вводимого пользователем текста не ограничена (MaxLength = о).

Свойства AutoSelect, SelStart, SelLength и SelText

Свойства AutoSelect, SelStart, SelLength и SelText позволяют работать с выделенным фрагментом текста. Эти свойства доступны не только для чтения, например, в случае анализа текста, выделенного пользователем, но и для записи, когда фрагмент выделяется программно, скажем, в процессе поиска или замены текста.

Свойство AutoSelect типа Boolean определяет, будет ли автоматически выделен текст в поле редактирования, при получении последним фокуса ввода (по умолчанию имеет значение True).

Значение свойства SelText типа String определяет выделенный фрагмент. При отсутствии выделенного текста значением свойства является пустая строка.

Свойства SelStart и SelLength типа Integer задают начальную позицию в строке (отсчет символов в строке начинается с нуля) и длину выделенного фрагмента соответственно.

Свойства SelStart и SelLength взаимозависимы, поэтому при выделении фрагмента программным способом сначала необходимо установить значение свойства SelStart, а затем определять длину выделенного текста, задавая значение свойства SelLength.

Свойство HideSelection

Если фрагмент выделяется программно, например, в случае поиска строки, и должен быть выделен цветом, то свойству HideSelection типа Boolean следует установить значение False. Это свойство определяет, будет ли отображаться выделенный текст при потере компонентом фокуса ввода.

Если свойство HideSelection имеет значение True (по умолчанию), то текст не будет выглядеть выделенным при переходе фокуса на другой элемент управления.

Рассмотрим несколько операций с выделенным текстом:

  1. Memo1.SelStart := 19;
  2. Memo1.SelLength := 6;
  3. Memo1.SelText := 'abcdefgh';
  4. if pos('qwerty', Edit1.Text) <> 0 then
  5. begin
  6. Edit1.HideSelection := False;
  7. Edit1.SelStart := pos ('qwerty', Edit1.Text) &minus;1;
  8. Edit1.SelLength := length('qwerty');
  9. end;

В компоненте Memo1 6 символов, начиная с 19-го, заменяются строкой abcdefgh. В компоненте Edit1 осуществляется поиск строки qwerty. В случае удачного поиска найденный фрагмент выделяется.

Методы SelectAll, CopyToClipBoard и CutToClipBoard

Кроме свойств, для операций с выделенным фрагментом текста используются также методы SelectAll, CopyToClipBoard и CutToClipBoard.

Метод SelectAll выделяет весь текст в элементе редактирования.

Метод CopyToClipBoard копирует, a CutToClipBoard вырезает в буфер обмена выделенный фрагмент текста. Например, инструкция Memo1.CutToClipBoard — вырезает выделенный фрагмент и помещает его в буфер обмена.

Метод PasteFromcСlipBoard

Для работы с буфером обмена имеется также метод PasteFromcСlipBoard, вставляющий текст из буфера обмена в текущую позицию курсора в поле редактирования. Если имеется выделенный фрагмент, то вставляемый текст заменяет его.

Событие OnExit

Для проверки текста, введенного в поле редактирования, можно использовать событие OnExit, возникающее при окончании ввода, т. е. при потере этим элементом фокуса ввода. В качестве примера рассмотрим следующую процедуру:

  1. procedure TForm1.Edit1Exit(Sender: TObject);
  2. begin
  3. if (Edit1.Text = '123') or (Edit1.Text = '456') then
  4. begin
  5. MessageDlg('Артикул ' + Edit1.Text +'неправильный'+#13#10 'Повторите ввод.', mtError, [mbOK], 0);
  6. Edit1.SetFocus;
  7. Edit1.SelectAll;
  8. end;
  9. end;

Здесь для нового товара в редактор Edit1 вводится артикул, который не должен быть равен 123 или 456 (в реальных приложениях проверку реализовать сложнее, т. к. артикул должен отвечать более сложным требованиям, например, быть уникальным и отличаться от уже имеющихся). При окончании ввода в обработчике события OnExit выполняется проверка артикула. Если он набран неверно, то выдается предупреждение, а редактор Edit1 снова получает фокус.

Cвойства ReadOnly и Enabled

Основное назначение полей редактирования — ввод и изменение текста, однако их можно использовать и для отображения нередактируемого текста, например, при выводе справочной информации. С этой целью нужно установить соответствующие значения свойств ReadOnly или Enabled. Оба способа обеспечивают отображение нередактируемого текста, однако имеют свои недостатки.

В случае использования свойства ReadOnly, например, следующим образом:

  1. Memo1.ReadOnly := True;
  2. Memo1.Alignment := taCenter;
  3. Memo1.Clear;
  4. Memo1.Lines.Add('Пример');
  5. Memo1.Lines.Add('cправочной');
  6. Memo1.Lines.Add('информации');

компонент Memo при выполнении программы может получать фокус. Здесь выполняется очистка поля ввода и добавление трех отдельных строк текста, выровненных по центру. При этом в поле ввода отображается курсор, который можно перемещать, что создает у пользователя иллюзию доступности текста для редактирования.

Курсор не отображается, если свойство Enabled используется так:

  1. Memo1.Enabled := False;
  2. Memo1.Alignment := taCenter;
  3. Memo1.Clear;
  4. Memo1.Lines.Add('Пример');
  5. Memo1.Lines.Add('справочной');
  6. Memo1.Lines.Add('информации');

Однако в этом случае поле редактирования становится неактивным, и находящийся в нем текст отображается бледным цветом, что не слишком удобно для чтения. Кроме того, отключаются полосы прокрутки (при их наличии).

Поэтому на практике для отображения нередактируемого текста чаще используется свойство ReadOnly.

Метки: , , ,
Если Вам интересна эта запись, Вы можете следить за ее обсуждением, подписавшись на RSS 2.0 .

Оставить комментарий или два

*