将文本从TRichEdit拖放到ListBox而不影响文本选择

时间:2014-02-17 14:00:02

标签: delphi drag-and-drop richedit

我有一个richedit(richedit1)和一个listbox(listbox1),
我想拖动richedit1.text而不影响其文本选择。这里有一些代码:

procedure TForm1.ListBox1DragOver(Sender, Source: TObject; X, Y: Integer;State: TDragState; var Accept: Boolean);
begin
     Accept := (Source is TRichEdit) ;
end;     

procedure TForm1.ListBox1DragDrop(Sender, Source: TObject; X, Y: Integer);
begin
    if Source is TRichEdit then ListBox1.Items.Add(RichEdit1.SelText);
end;

当我将RichEdit1.DragMode设置为dmAutomatic时,拖动工作正常,但我无法通过鼠标选择richedit中的文本。
我知道一个解决方案是这样的:

procedure TForm1.RichEdit1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  if (Sender is TCustomRichEdit) and (ssCtrl in Shift) then
       TCustomRichEdit(Sender).BeginDrag(False);
end;  

但是我不想通过按住ctrl键来拖动;
你有更好的主意吗?

1 个答案:

答案 0 :(得分:0)

OnMouseDown事件中,您可以检测是否在大小超过1个字符的现有选择内部单击鼠标,如果是,则开始拖动。查看EM_CHARFROMPOSEM_GETSEL消息。