TTreeView: Как изменить текст встроенного редактора элемента?

У меня есть 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;

Однако текст встроенного редактора не меняется, текст элемента дерева обновляется только после отмены редактирования. Как это сделать правильно?


person Andrew    schedule 08.11.2012    source источник


Ответы (2)


Попробуйте, если вам подходит следующее:

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;
person Ondrej Kelle    schedule 08.11.2012

Пришел сюда в поисках решения той же проблемы, но на C++. Ответ Ондрея Келле, переведенный на С++, выглядит следующим образом:

TTreeView* tree;
std::string str;
HWND EditHandle = TreeView_GetEditControl(tree->Handle);
::SendMessage(EditHandle, WM_SETTEXT, 0, (LPARAM)(str.c_str()));
person Fabrizio Benedetti    schedule 06.11.2019