Acryte
Acryte

Reputation: 71

TTreeViewItem deselection

I am new to Delphi (and Firemonkey) and I have it to where I can deselect a TTreeViewItem by clicking on it again if it is already selected. The only problem I'm seeing with it, is that I only know how to create events for items that are already created in the developer window and aren't created later by the user.

I know it can be cleaned up a bit but here's where I create the TTreeViewItems. I have Button1 when clicked create a node item with the text from ClearingEdit2 in TreeView1 and if no nodes/children are selected it creates a new root node, otherwise it creates it as a child of the parent selected node:

    procedure TForm3.Button1Click(Sender: TObject);
    var
      Item1 : TTreeViewItem;
    begin
      if NodeSelected = 'DeSelected' then
        begin
          Item1 := TTreeViewItem.Create(Self);
          Item1.Text := ClearingEdit2.Text;
          Item1.Parent := TreeView1;
        end
      else
        if NodeSelected = 'Selected' then
          begin
            Item1 := TTreeViewItem.Create(Self);
            Item1.Text := ClearingEdit2.Text;
            Item1.Parent := TreeView1.Selected;
            TreeView1.Selected.Deselect;
            TreeView1.Selected.Expand;
            NodeSelected := 'DeSelected';
            ClearingEdit2.SetFocus;
            ClearingEdit2.SelectAll;
         end;
      end;

Later on in the program I'm using this for the event:

    procedure TForm3.TreeViewItem1Click(Sender: TObject);
      begin
        if ((NodeSelected = 'Selected')= false) then
          begin
            NodeSelected := 'Selected';
            Label1.Text := 'Selected';
          end
        else
        if (NodeSelected = 'Selected') then
          begin
            TreeView1.Selected.Deselect;
            NodeSelected := 'DeSelected';
            ClearingEdit2.SetFocus;
          end
        else
      end;

So far, because of the way it's structured, I can get it to deselect the already made item, but not TreeViewItems in general which is what I need. I just don't know how I should be phrasing it to work dynamically regardless of the name, but just using all TreeViewItems from TreeView1.

Upvotes: 0

Views: 477

Answers (1)

Acryte
Acryte

Reputation: 71

Nevermind, I figured it out.

To fix it, first I used:

   type
     TForm3 = class(TForm)
     procedure Button1Click(Sender: TObject);
     procedure Item1Click(Sender: TObject);

then I used:

    procedure TForm3.Button1Click(Sender: TObject);
    var        
      Item1 : TTreeViewItem;
    begin
      if NodeSelected = 'DeSelected' then
        begin
          Item1 := TTreeViewItem.Create(Self);
          Item1.Text := ClearingEdit2.Text;
          Item1.Parent := TreeView1;
          Item1.OnClick := Item1Click;
        end
      else
      if NodeSelected = 'Selected' then
        begin
         Item1 := TTreeViewItem.Create(Self);
         Item1.Text := ClearingEdit2.Text;
         Item1.Parent := TreeView1.Selected;
         Item1.OnClick := Item1Click;
         TreeView1.Selected.Deselect;
         TreeView1.Selected.Expand;
         NodeSelected := 'DeSelected';
         ClearingEdit2.SetFocus;
         ClearingEdit2.SelectAll;
       end;
    end;

and lastly for the Click event I used:

    procedure TForm3.Item1Click(Sender: TObject);
      begin
        if ((NodeSelected = 'Selected')= false) then
          begin
            NodeSelected := 'Selected';
          end
        else
      if (NodeSelected = 'Selected') then
        begin
          TreeView1.Selected.Deselect;
          NodeSelected := 'DeSelected';
          ClearingEdit2.SetFocus;
        end
      else
    end;

Upvotes: 1

Related Questions