В данном разделе приведены различные приемы, используемые при программировании работы с текстами, содержащимися в окнах Memo и RichEdit. Большинство из них основаны на использовании сообщений Windows, относящихся к окнам редактирования. Полные списки этих сообщений, их синтаксис и примеры использования вы найдете в [4] и [12]. Передача сообщений в окна редактирования в большинстве рассмотренных ниже примеров осуществляется методом Perform.

5.8.1 Программное выполнение операций редактирования

В окна редактирования Memo, RichEdit и другие встроены операции редактирования: копирование и вырезание текста в буфер обмена, вставка текста из буфера обмена, отмена последней операции редактирования. Но иногда те же операции требуется выполнять программно. Это можно сделать с помощью ряда сообщений Windows, предусмотренных для работы с окнами редактирования.

Оператор

RichEditl.Perform(WM_COPY,0,0);

копирует выделенный текст в буфер обмена. Если выделения нет, ничего не происходит.

Оператор

RichEditl.Perform(WM_CUT,0,0);

вырезает выделенный текст в буфер обмена. Оператор

RichEditl.Perform(WM_PASTE,0,0);

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

RichEditl.Perform(EM_REPLACESEL, 1,longint(PChar(Edit1.Text))); в приложении VCL Win32 или оператор

RichEditl.Perform(EM_REPLACESEL, 1, Editl.Text);

в приложении VCL .NET заменяет выделенный текст строкой, введенной в окно Editl. Если выделенного текста нет, строка вставляется, начиная с позиции курсора. Иначе говоря, оператор работает так же, как предыдущий, но вставляется текст не из буфера обмена, а из строки. Значение wParam 0 или 1 определяет, может ли быть в дальнейшем отменена (при 1) эта операция.

Оператор

if RichEditl.Perform(EM_CANUNDO,0,0) О О then ShowMessage('Отмена возможна') else ShowMessage('Отмена невозможна');

сообщает о возможности или невозможности отменить последнюю операцию редактирования. А оператор

RichEditl.Perform(EMJJNDO,0,0);

или

RichEditl.Perform(WM_UNDO,0,0);

отменяет последнюю операцию, если это возможно.

Последние операторы совершенно по разному выполняются в приложениях VCL Win32 и VCL .NET. В VCL Win32 повторное выполнение такого оператора вернет текст в исходное состояние, т.е. выполнит операцию Redo. Иначе говоря, отменить можно только последнюю операцию редактирования. А в приложениях VCL .NET последовательное выполнение оператора отменяет поочередно все операции редактирования, проведенные в данном окне.

Оператор

RichEditl.Perform(EM_EMPTYUNDOBUFFER,0,0);

очищает буфер отмены последней операции редактирования, так что после выполнения этого оператора сообщение EM_CANUNDO будет возвращать 0 - отмена невозможна.

5.7.3 Пример перекодировки документов || Оглавление || 5.8.2 Программная прокрутка текста в окне редактирования


Приемы программирования в Delphi на основе VCL



Новости за месяц

  • Апрель
    2020
  • Пн
  • Вт
  • Ср
  • Чт
  • Пт
  • Сб
  • Вс
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31