Советы по Delphi. Версия 1.4.3 от 1.1.2001
Шрифт:
Memo
Получение данных из компонента Memo
Delphi 1
Для получения содержимого буфера используйте метод GetTextBuf,
Предупреждение! Данный код был написан в среде WinNT/D2 с использованием элемента управления richedit. Я тестировал то же самое, но с компонентом Memo и в D1, но этот код я забыл дома. Код выше написан по памяти и не тестировался, но я думаю он должен работать. Если вы переберетесь на D2, измените вызов sendmessage на следующий:
Изменение поведения Delete в компоненте Memo
Delphi 1
Просто меняю обработчик Memo OnKeyDown следующим образом:
Вероятно, лучшим решением было бы использование конструкции CASE, но я не уверен, что она поймет как нужно VK_??. Возможно, после обработки нужно вызвать унаследованный обработчик, т.е. дать поработать обработчику верхнего уровня, у которого мы стырили управление. Не хотите подумать над этим?
Чтобы понять, где мы сейчас находимся, используйте SelStart, например, так:
Ответ: поскольку vk_? имеет целочисленный тип, то это будет работать:
Вставка текста в TMemo II
Delphi 1
Используйте сообщение Windows API EM_REPLACESEL:
Для замены текущего выбранного текста в поле редактирования, приложение должно послать сообщение EM_REPLACESEL, где параметр lpszReplace содержит новый текст.
Параметр | Описание |
---|---|
lpszReplace | Значение lParam. Указатель на терминированную нулем строку, содержащую замещающий текст. { Указатель на строку } |
Возвращаемое значение
Данное сообщение значение не возвращает.
Комментарии
Используйте сообщение EM_REPLACESEL, если вы хотите изменять только часть текста поля редактирования. Если вам нужно заменить весь текст, используйте сообщение WM_SETTEXT.
В случае отсутствия выбранного текста, замещающий текст вставляется в текущую позицию курсора.
Сделайте список с вашими стандартными фразами, и используйте события "OnClick" или "OnMouseDown" в комбинации с "Alt", "Shift" или "Ctrl". Пример: Когда пользователь нажимает клавишу "Alt" в комбинации с правой кнопкой мыши, выводится список заранее подготовленных фраз и выбранная вставляется в ваш TMemo-компонент.
Для вставки строки в Memo:
Для вставки строки и замены некоторого существующего текста:
Поместите текст, который вы хотите вставить, в переменную PChar, затем вставьте текст в Memo, используя команду SetSelTextBuf, где SelStart устанавливается в позицию курсора TMemo. Это классно работает.
Другая полезность: вы можете обхойти предел TMemo в 32K в случае, если вы загружаете в него текст, пользуясь методом/командой Lines.LoadfromFile. Компонент имеет внутренний предел в 32K. Если вы загружаете нужный файл в указатель, и используете команду/метод SetTexBuf, то в этом случае в TMemo можно загрузить текста вплоть до 64K.