Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

### Понимание Логических и Экранных Строк в Multiline Edit Control Windows ###

Delphi , Синтаксис , Справочник по API-функциям

Вопрос пользователя касается работы стандартного многострочного текстового контрола Windows, который ведет себя необычно при запросе строк. Когда активирована переноска слов, контролл принимает логические строки, но возвращает экранные строки при запросе EM_GETLINE. Однако при изменении размера окна и пересчете текста, контролл корректно распределяет текст, основываясь на исходных символах перевода строки (CR-LF).

Проблема заключается в том, что строки, запрошенные через EM_GETLINE, не содержат символов перевода строки. Кажется, что контролл хранит их внутри, но не возвращает при запросе EM_GETLINE. Получить эти символы можно, запросив весь текст контрола через WM_GETTEXT.

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

Подтвержденный ответ

Для получения оригинальных логических строк в многострочном текстовом контроле Windows, необходимо использовать функцию WM_GETTEXT, которая возвращает весь текст контрола, включая символы перевода строк. Функция EM_GETLINE предназначена для получения экранных строк и не включает символы перевода строк, если включена переноска слов.

Альтернативный ответ

Альтернативных способов запроса текста между логическими строками, кроме получения всего текста и его последующего разделения, в стандартном многострочном текстовом контроле Windows не существует.

Пример кода

program WindowsEditControl;
uses
  Winapi.Windows, Winapi.Messages, System.SysUtils;

const
  IDM_EXIT = 100;
  GAP = 10;

var
  hEdit: HWND;
  hFnt: HFONT;

function GetTxt(hEdit: HWND): string;
var
  Len: Integer;
begin
  Len := SendMessage(hEdit, WM_GETTEXTLENGTH, 0, 0);
  SetLength(Result, Len + 1); // +1 для символа перевода строки
  if Len > 0 then
    SendMessage(hEdit, WM_GETTEXT, Length(Result), LPARAM(PChar(Result)));
end;

function WndFunc(h: HWND; iMessage: UINT; w: WPARAM; l: LPARAM): LRESULT; stdcall;
var
  nWidth, nHeight: NativeUInt;
  i, j: Integer;
  s: string;
begin
  case iMessage of
    WM_CREATE: begin
      // Инициализация контрола и добавление текста
      // ...
      // Вывод всего текста, включая логические строки
      MessageBox(h, PWideChar(GetTxt(hEdit)), 'Whole text', 0);
    end;
    // Обработка других сообщений
    // ...
  end;
end;

begin
  // Инициализация класса окна
  // ...
  // Создание и отображение окна
  // ...
  // Основной цикл обработки сообщений
  // ...
end.

Приведенный выше код демонстрирует, как получить текст из многострочного текстового контрола Windows, включая переводы строк, с помощью функции WM_GETTEXT.

Создано по материалам из источника по ссылке.

Описание Context: Пользователь столкнулся с проблемой в стандартном многострочном текстовом контроле Windows, где функция `EM_GETLINE` не возвращает символы перевода строк, в отличие от функции `WM_GETTEXT`, которая включает их в возвращаемый текст, и ищ


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Справочник по API-функциям ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2024-12-26 14:45:45/0.0032761096954346/0