2

我有一个带有可编辑项目的 TreeView。当我在选择后按 F2 或单击任何项​​目时,会出现就地编辑器。

如何在显示之前更改该编辑器中显示的文本?例如,我的树项目的文本是Point 1 (300, 450),但我希望我的就地编辑器只显示Point 1

我试图捕捉OnEditing这样的事件:

procedure TForm1.TreeViewEditing(Sender: TObject; Node: TTreeNode; 
  var AllowEdit: Boolean);
begin
  AllowEdit := True;
  Node.Text := 'text to edit';
end;

但是,就地编辑器的文本没有改变,树项的文本只有在取消编辑后才会更新。如何正确执行此操作?

4

2 回答 2

7

试试以下是否适合您:

uses
  Winapi.CommCtrl;

procedure TForm1.TreeView1Editing(Sender: TObject; Node: TTreeNode; var AllowEdit: Boolean);
var
  EditHandle: THandle;
  S: string;
begin
  AllowEdit := True;
  S := 'text to edit';
  EditHandle := TreeView_GetEditControl((Sender as TTreeView).Handle);
  SendMessage(EditHandle, WM_SETTEXT, 0, LParam(PChar(S)));
end;
于 2012-11-08T08:20:56.853 回答
1

来到这里寻找相同问题的解决方案,但使用 C++。Ondrej Kelle 用 C++ 翻译的答案是这样的:

TTreeView* tree;
std::string str;
HWND EditHandle = TreeView_GetEditControl(tree->Handle);
::SendMessage(EditHandle, WM_SETTEXT, 0, (LPARAM)(str.c_str()));
于 2019-11-06T13:51:07.483 回答