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

Перенос строк из TListBox в TRichEdit

Delphi , Компоненты и Классы , Списки

Перенос строк из TListBox в TRichEdit

Оформил: DeeCo
Автор: http://www.swissdelphicenter.ch

function RECharIndexByPos(RichEdit: TRichEdit; X, Y: Integer): Integer;
 var
   P: TPoint;
 begin
   P := Point(X, Y);
   Result := SendMessage(RichEdit.Handle, EM_CHARFROMPOS, 0, Longint(@P));
 end;


 procedure TForm1.RichEdit1DragOver(Sender, Source: TObject; X, Y: Integer;
   State: TDragState; var Accept: Boolean);
 var
   P: TPoint;
 begin
   // Check, if Source is ListBox1 
  Accept := Source = ListBox1;
   if GetCursorPos(P) then
     with RichEdit1 do
     begin
       // Get the Index from Mouse Position 
      P := ScreenToClient(P);
       SelStart := RECharIndexByPos(RichEdit1, P.X, P.Y);
       SetFocus;
     end;
 end;

 procedure TForm1.RichEdit1DragDrop(Sender, Source: TObject; X, Y: Integer);
 begin
   // finally insert text at mouse position 
  RichEdit1.SelText := ListBox1.Items[ListBox1.ItemIndex];
 end;

Программный код на Delphi, предназначенный для переноса строк из контрола TListBox в контрол TRichEdit при перетаскивании элементов списка на редактор текста.

Обзор работы:

Процедура RECharIndexByPos Эта функция принимает два целочисленных параметра X и Y, представляющих позицию мыши, и возвращает целочисленное значение, указывающее индекс символа на этой позиции в контроле TRichEdit. Она делает это, отправив сообщение контролу с помощью сообщения EM_CHARFROMPOS, которое возвращает индекс символа, соответствующий указанной точке.

Процедура TForm1.RichEdit1DragOver Эта процедура вызывается при перетаскивании элемента из списка TListBox (ListBox1) над контролом TRichEdit (RichEdit1). Процедура проверяет, является ли источник перетаскивания действительно ListBox1. Если это так, она принимает перетаскивание и получает текущую позицию мыши с помощью GetCursorPos. Затем она конвертирует эту позицию в клиентские координаты с помощью ScreenToClient и вызывает функцию RECharIndexByPos, чтобы определить индекс символа на этой позиции в редакторе текста. Наконец, она устанавливает фокус на редактор текста.

Процедура TForm1.RichEdit1DragDrop Эта процедура вызывается при перетаскивании элемента из ListBox1 на RichEdit1. Она вставляет текст драггированного элемента (т.е., текущего выбранного элемента в ListBox1) на индекс символа, определенный предыдущим перетаскиванием.

Альтернативное решение Хотя это код работает, может быть более эффективно использовать прямой подход для получения индекса символа по позиции мыши. Вместо использования функции RECharIndexByPos и отправки сообщения контролу, можно использовать метод RichEdit1.PointToChar, который возвращает индекс символа на заданной точке в редакторе текста.

Вот обновленная версия кода, использующая это альтернативное решение:

procedure TForm1.RichEdit1DragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
var
  P: TPoint;
begin
   // Check if Source is ListBox1
  Accept := Source = ListBox1;
  if GetCursorPos(P) then
    with RichEdit1 do
      begin
         // Get the Index from Mouse Position
        P := ScreenToClient(P);
        SelStart := PointToChar(P.X, P.Y);
        SetFocus;
      end;
end;

procedure TForm1.RichEdit1DragDrop(Sender, Source: TObject; X, Y: Integer);
begin
   // finally insert text at mouse position
  RichEdit1.SelText := ListBox1.Items[ListBox1.ItemIndex];
end;

Этот код достигает того же результата, что и оригинальный код, но более эффективен и легче для чтения.

Программа на Delphi позволяет переносить строки из компонента TListBox в TRichEdit, используя функцию RECharIndexByPos для определения индекса символа по координатам мыши и процедуры DragDrop для вставки текста в RichEdit.


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

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




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


:: Главная :: Списки ::


реклама


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

Время компиляции файла: 2024-12-22 20:14:06
2025-01-13 16:43:51/0.0056800842285156/1