我有一个带有可编辑项目的TreeView。当我按F2或在选择后单击任何项目时,就会出现内部编辑器。
如何在显示之前更改该编辑器中显示的文本?例如,我的树项目文本为Point 1 (300, 450)
,但我希望我的inplace编辑器仅显示Point 1
。
我试图抓住OnEditing
这样的事件:
procedure TForm1.TreeViewEditing(Sender: TObject; Node: TTreeNode;
var AllowEdit: Boolean);
begin
AllowEdit := True;
Node.Text := 'text to edit';
end;
但是,inplace编辑器的文本没有改变,只有在取消编辑后才更新树项的文本。如何正确地做到这一点?
答案 0 :(得分: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;
答案 1 :(得分:1)
在这里寻求针对C ++的相同问题的解决方案。用C ++翻译的Ondrej Kelle的答案是这样的:
TTreeView* tree;
std::string str;
HWND EditHandle = TreeView_GetEditControl(tree->Handle);
::SendMessage(EditHandle, WM_SETTEXT, 0, (LPARAM)(str.c_str()));