我有一个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键来拖动;
你有更好的主意吗?
答案 0 :(得分:0)
在OnMouseDown
事件中,您可以检测是否在大小超过1个字符的现有选择内部单击鼠标,如果是,则开始拖动。查看EM_CHARFROMPOS
和EM_GETSEL
消息。