gpt4 book ai didi

delphi - 将文本拖放到 SynEdit 控件中

转载 作者:行者123 更新时间:2023-12-03 15:55:04 25 4
gpt4 key购买 nike

我在表单上有一个 TSynEdit 控件,我想从 TVirtualStringTree 中拖放焦点节点文本。我希望它的行为方式与您在 TSynEdit 控件中拖放突出显示的文本时的行为方式相同:

  • 当您在 TSynEdit 上拖动时,插入符号应标记当前放置位置。
  • 当文本被删除时,它应该替换当前突出显示的任何文本。
  • 放置位置应正确处理选项卡。

我查看了 TSynEdit DragOver 事件中的代码,但它使用了几个我无法在声明的后代类中访问的变量和过程私有(private)

我已检查了所有 TSynEdit 演示,但找不到满足我需求的演示。

有人成功做到这一点吗?

最佳答案

AZ01的回答并没有完全符合我的要求,但它确实为我指明了正确的方向。这是我最终使用的代码:

procedure TfrmTemplateEdit.memTemplateDragDrop(Sender, Source: TObject; X,
Y: Integer);
var
InsertText: String;
ASynEdit: TSynEdit;
OldSelStart, DropIndex: Integer;
LCoord: TBufferCoord;
begin
// Set the Insert Text
InsertText := 'The text to insert';

// Set the SynEdit memo
ASynEdit := TSynEdit(Sender);

// Get the position on the mouse
ASynEdit.GetPositionOfMouse(LCoord);

// Find the index of the mouse position
DropIndex := ASynEdit.RowColToCharIndex(LCoord);

// Delete any selected text
If (ASynEdit.SelAvail) and
(DropIndex >= ASynEdit.SelStart) and
(DropIndex <= ASynEdit.SelEnd) then
begin
// Store the old selection start
OldSelStart := ASynEdit.SelStart;

// Delete the text
ASynEdit.ExecuteCommand(ecDeleteChar, #0, Nil);

// Move the caret
ASynEdit.SelStart := OldSelStart;
end
else
begin
// Position the caret at the mouse location
ASynEdit.CaretXY := LCoord;
end;

// Insert the text into the memo
ASynEdit.ExecuteCommand(ecImeStr, #0, PWideChar(InsertText));

// Set the selection start and end points to selected the dropped text
ASynEdit.SelStart := ASynEdit.SelStart - length(InsertText);
ASynEdit.SelEnd := ASynEdit.SelStart + length(InsertText);

// Set the focus to the SynEdit
ASynEdit.SetFocus;
end;

该代码似乎可以正确地处理选择、选项卡和撤消操作。

关于delphi - 将文本拖放到 SynEdit 控件中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11098596/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com