Сообщения Win32 EM (поля ввода)

=== Сообщения полей ввода (EM_) ===
==== EM_CanUndo - Определяет, может ли поле ввода ответить на сообщение EM_Undo. ====
* WParam: Не используется.
* LParam: Не используется.
* Возвращаемое значение: Если поле ввода может ответить на сообщение EM_Undo, возвращается ненулевое значение; иначе возвращается 0.
==== EM_EmptyUndoBuffer - Очищает буфер отмены поля ввода. ====
Посылка полю ввода сообщения WM_SetText или EM_SetHandle вызывает автоматическую очистку буфера отмены.
* WParam: Не используется.
* LParam: Не используется.
* Возвращаемое значение: Не используется.
==== EM_FmtLines - Добавление "мягкого" переноса строк в поле ввода при переносе слов. ====
Это сообщение не влияет на обычную последовательность конца строки CR/LF (возврат каретки, смена строки). В случае ненулевого возвращаемого значения размер текста изменился. Это сообщение относится только к многострочным полям ввода.
* WParam <> 0: строки текста с переносом слов заканчиваются символами CR/CR/LF;
* WParam = 0: любая последовательность CR/CR/LF удаляется из текста.
* LParam: Не используется.
* Возвращаемое значение: Если текст был изменен, возвращается ненулевое значение; иначе возвращается нуль.
==== EM_GetHandle - Возвращает дескриптор буфера содержимого поля ввода. ====
Это сообщение может посылаться только полю ввода, которое было создано со стилем DS_LocalEdit.
* WParam: Не используется.
* LParam: Не используется. 
* Возвращаемое значение: Дескриптор буфера памяти содержимого (текста) поля ввода.
==== EM_GetLine - Возвращает одну стpоку из поля ввода. ====
* WParam: Номеp строки. Нумерация строк в поле ввода начинается с нуля. Для однострочного поля ввода не используется.
* LParam: Указатель на буфер для приема строки. Два байта в начале буфера должны содержать размер буфера (тип WORD). Для ANSI это число байтов, для Unicode это число знаков. Байты в начале буфера будут перезаписаны содержимым строки. Символ конца строки (#0) не добавляется. 
* Возвращаемое значение: Фактически переданное в буфер число знаков.
==== EM_GetLineCount - Возвращает число строк текста в поле ввода. ====
* WParam: Не используется.
* LParam: Не используется.
* Возвращаемое значение: Число строк текста. Если текст пустой, будет возвращать 1.
==== EM_GetModify - Возвращает признак модификации поля ввода. ====
Признак модификации устанавливается, когда текст поля ввода изменен путем ввода нового текста или редактированием существующего, или когда полю ввода посылается сообщение EM_SetModify.
* WParam: Не используется.
* LParam: Не используется.
* Возвращаемое значение: Возвращается признак модификации поля ввода. Ненулевое значение означает, что текст поля ввода изменился, а нуль - нет.
==== EM_GetPasswordChar - Определяет код символа, скрывающего текст в строке редактирования. ====
* WParam: Не используется.
* LParam: Не используется.
* Возвращаемое значение: Код символа, если код равен 0, то скрывающего символа нет. Обычно равен 42 - звездочка "*".
==== EM_GetRect - Получает границы отрисовки поля ввода. ====
* WParam: Не используется.
* LParam: Указатель на TRect, который примет значения границ.
* Возвращаемое значение: Не используется.
==== EM_GetSel - Возвращает начальный и конечный индексы выделения текста в поле ввода. ====
* WParam: Не используется.
* LParam: Не используется.
* Возвращаемое значение: в LoWord - индекс начала, в HiWord - индекс конца.
==== EM_LimitText - Установка максимальной длины текста в поле ввода. ====
* WParam: Задает новое максимальное число символов. В случае нулевого значения длина почти не ограничена.
* LParam: Не используется.
* Возвращаемое значение: В случае ошибки возвращается нуль.
==== EM_LineFromChar - Возвращает индекс строки поля ввода, для указанного индекса в тексте. ====
* WParam: Индекс символа в тексте поля ввода (начиная с 0) или -1.
* LParam: Не используется.
* Возвращаемое значение: Если WParam = -1, возвращает индекс строки, содержащей начало выделения текста. Иначе возвращает индекс строки, содержащей индекс символа, указанный в WParam. Индекс строки начинается с 0.
==== EM_LineIndex - Возвращает индекс начала строки в тексте для указанного индекса строки поля ввода. ====
* WParam: Индекс строки строки, начиная с 0. Если WParam = -1, то стpока, на которой находится курсор.
* LParam: Не используется.
* Возвращаемое значение: Индекс символа в начале строки многострочного текста.
==== EM_LineLength - Возвращает длину строки поля ввода, по индексу в тексте. ====
* WParam: Индекс символа в тексте поля ввода, или -1.
* LParam: Не используется.
* Возвращаемое значение: Если WParam = -1, то возвращается длина строки, на которой в находится курсор. Иначе возвращается длина строки, содержащей символ по индексу из WParam. Длина строки для ANSI в байтах, для Unicode в знаках.
==== EM_LineScroll - Прокручивает строки поле ввода. ====
* WParam: Число знаков, прокручиваемых по горизонтали.
* LParam: Число строк, прокручиваемых по вертикали.
* Возвращаемое значение: 0 - однострочное поле ввода, иначе многострочное.
==== EM_ReplaceSel - Заменяет выделенный текст в поле ввода. ====
* WParam: 0 - отмена невозможна, иначе допускается отмена.
* LParam: Указатель на строку с завершающим нулем, которая заменит выделенный текст.
* Возвращаемое значение: Не используется.
==== EM_SetHandle - Устанавливает дескриптор буфера текста поля ввода. ====
Пеpед установкой нового дескриптора, прежний дескриптор должен быть прочитан с помощью сообщения EM_GetHandle, а затем освобожден с помощью функции LocalFree. После установки дескриптора буфер отмены очищается и признак наличия изменений сбрасывается.
* WParam: Дескриптор буфера памяти, содержащего текст для поля ввода. При необходимости, память перераспределяется автоматически.
* LParam: Не используется.
* Возвращаемое значение: Не используется.
==== EM_SetModify - Устанавливает признак модификации поля ввода. ====
* WParam: новое значение признака модификации.
* LParam: Не используется.
* Возвращаемое значение: Не используется.
==== EM_SetPasswordChar - Устанавливает символ, скрывающий текст в поле ввода. ====
Для поля ввода, созданного со стилем ES_Password.
* WParam: Код символа, отображаемого вместо текста. Если 0, то текст отображается как есть.
* LParam: Не используется.
* Возвращаемое значение: Не используется.
==== EM_SetRect - Устанавливает границы отрисовки поля ввода. ====
Для многострочного поля ввода. Текст будет переформатирован и перерисован.
* WParam: Не используется.
* LParam: Указатель на TRect, содержащий границы отрисовки.
* Возвращаемое значение: Не используется.
==== EM_SetRectNP - Устанавливает границы отрисовки поля ввода (без перерисовки). ====
Для многострочного поля ввода. Используйте вместо EM_SetRect, когда текст должен быть отрисован позднее.
* WParam: Не используется.
* LParam: Указатель на TRect, содержащий границы отрисовки.
* Возвращаемое значение: Не используется.
==== EM_SetSel - Задает границы выделения текста поля ввода. ====
* WParam: Индекс символа начала выделения.
* LParam: Индекс символа конца выделения.
* Возвращаемое значение: Не используется.
==== EM_SetTabStops - Устанавливает позиции табуляции поля ввода. ====
Позиция составляет одну четвертую от текущей базовой единицы ширины диалога, которая может быть получена с помощью функции GetDialogBaseUnits. Это сообщение относится только к многострочным полям ввода.
* WParam: См. описание LParam.
* LParam: 
** Если WParam = 0, то позиция табуляции устанавливается через каждые 32 позиции.
** Если WParam = 1, то позиция табуляции устанавливается в каждой кратной LParam позиции.
** В других случаях LParam указывает на целочисленный массив, состоящий из WParam элементов, каждый из которых больше предыдущего и является позицией табуляции.
* Возвращаемое значение: Если были установлены все позиции табуляции, возвращается ненулевое значение. Иначе возвращается 0. 
==== EM_SetWordBreakProc - Задает функцию переноса слов поля ввода. ====
Стандартная функция переноса слов Windows определяет начало следующего слова как первый непустой символ после ряда пробелов. Это сообщение относится только к многострочным полям ввода.
Функция переноса слов будет описываться следующим обpазом:
 function WordBreakFunction(EditText: PChar; CurrentWord: Integer; EditTextCount: Integer): PChar;
Имя WordBreakFunction не является литеpалом, функция может иметь другое имя. Параметры:
* EditText - указывает на текст поля ввода.
* CurrentWord - индекс начала текущего слова в тексте.
* EditTextCount - суммарное число символов в тексте.
Функция переноса слов должна возвращать указатель на символ в начале следующего слова в тексте. Если текущее слово является последним, функция должна возвращать указатель на символ, находящийся сpазу же за последним символом в стpоке. 
* WParam: Не используется.
* LParam: Адрес функции переноса слов.
* Возвращаемое значение: Не используется.
==== EM_Undo - Отменяет последнюю модификацию текста в поле ввода. ====
Каждое изменение текста в поле ввода записывается в буфер отмены. При нехватке памяти для создания буфера отмены будет возвращена ошибка.
* WParam: Не используется.
* LParam: Не используется.
* Возвращаемое значение: В случае успешного завершения возвращается ненулевое значение. Иначе возвращается 0 и текст в поле ввода не изменяется.