this slowpoke moves

Create TreeView Nodes

uses ComCtrls, ImgList

// Der ImageList müssen Bitmaps hinzugefügt werden

type
  TShowType = (online, away, dnd);

type
  TUser = packed record
    Username: string[255];
    ID: string[255];
    OnlineType: TShowType;
    Groups: TStringList;
  end;

  PUser = ^TUser;
  TUsers = array of PUser;
  
//

procedure TForm1.Button1Click(Sender: TObject);
var
  Users             : TUsers;
  i                 : Integer;
  j                 : Integer;
  cnt               : Integer;
  RootNode          : TTreeNode;
  ChildNode         : TTreeNode;
begin
  setlength(Users, 3);
  new(Users[0]);
  Users[0]^.Username := 'User1';
  Users[0]^.ID := '123';
  Users[0]^.OnlineType := online;
  Users[0]^.Groups := TStringlist.Create;
  Users[0]^.Groups.Add('Name');
  Users[0]^.Groups.Add('Vorname');

  new(Users[1]);
  Users[1]^.Username := 'User2';
  Users[1]^.ID := '456';
  Users[1]^.OnlineType := away;
  Users[1]^.Groups := TStringlist.Create;
  Users[1]^.Groups.Add('Name');
  Users[1]^.Groups.Add('Vorname');

  new(Users[2]);
  Users[2]^.Username := 'User3';
  Users[2]^.ID := '789';
  Users[2]^.OnlineType := dnd;
  Users[2]^.Groups := TStringlist.Create;
  Users[2]^.Groups.Add('Name');
  Users[2]^.Groups.Add('Vorname');
  Users[2]^.Groups.Add('Addresse');

  for i := 0 to length(Users) - 1 do
  begin
    RootNode := Treeview1.Items.AddObject(nil, PUser(Users[i])^.Username, TObject(Users[i]));
    if PUser(Users[i])^.OnlineType = online then
    begin
      RootNode.ImageIndex := 0;
      RootNode.SelectedIndex := 0;
    end
    else if PUser(Users[i])^.OnlineType = away then
    begin
      RootNode.ImageIndex := 1;
      RootNode.SelectedIndex := 1;
    end
    else if PUser(Users[i])^.OnlineType = dnd then
    begin
      RootNode.ImageIndex := 2;
      RootNode.SelectedIndex := 2;
    end;
    cnt := PUser(Users[i])^.Groups.Count;
    for j := 0 to cnt - 1 do
    begin
      ChildNode := Treeview1.Items.AddChild(RootNode, PUser(Users[i])^.Groups.Strings[j]);
      ChildNode.ImageIndex := 3;
      ChildNode.SelectedIndex := 3;
    end;
  end;
end;

procedure TForm1.TreeView1Change(Sender: TObject; Node: TTreeNode);
var
  ID  : string;
begin
  if Assigned(PUser(Treeview1.Selected.Data)) then
    ID := PUser(Treeview1.Selected.Data)^.ID;
  Label1.Caption := ID;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  i                 : Integer;
begin
  if Treeview1.Items.Count > 0 then
    for i := Treeview1.Items.Count - 1 downto 0 do
    begin
      if Assigned(PUser(Treeview1.Items[i].Data)) then
      begin
        FreeAndNil(PUser(Treeview1.Items[i].Data).Groups);
        Dispose(PUser(Treeview1.Items[i].Data));
      end;
    end;
  Treeview1.Items.Clear;
end;

Keine Kommentare:

Kommentar veröffentlichen

Beliebte Posts

Translate