Search code examples
delphivirtualtreeviewtvirtualstringtree

TVirtualStringTree: How to get edited text?


I'm editing the 2nd column of a displayed node in the TVirtualStringTree. However after the edit is complete it I'm unable to retrieve the text using Sender.GetNodeData(Node) - it contains no text.

How can I get the text in the OnEdited event? Is there some other way to get the edited text? I've read the first few FAQ pages of the Virtual Treeview CHM help documentation and also refered to the answer in this SO question but could not find the answer.

Here is the present code:

  TTherapData = record
    TherapID: Integer;
    TherapName: String[120];
    TherapInstr: String[120];
    Selected: Byte;
  end;

  PTherapData = ^TTherapData;

procedure TfmPatient_Conslt.vstRxList_AsgEdited(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex);
var
  TherapData: PTherapData;
begin
  TherapData := Sender.GetNodeData(Node);
  if Assigned(TherapData) then
  begin
    TherapData^.TherapInstr := vstRxList_Asg.Text[Node, 1];
    showmessage(TherapData^.TherapInstr);
  end;

  FTherapDataListAsg_Iter := 0;
  vstRxList_Asg.NodeDataSize := SizeOf(TTherapData);
  vstRxList_Asg.RootNodeCount := 0;
  vstRxList_Asg.RootNodeCount := TherapDataList_CountSelectedItems;

end;

Solution

  • Thanks to hint from TLama, the answer is to handle the OnNewText event:

    procedure TfmPatient_Conslt.vstRxList_AsgNewText(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex;
      NewText: string);
    var
      TherapData: PTherapData;
    begin
    
      if (Column = 1) then
      begin
        TherapData := Sender.GetNodeData(Node);
        if Assigned(TherapData) then
          TherapData^.TherapInstr := NewText;
      end;
    
    end;