Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > TTreeView


Автор: fics 14.3.2008, 20:17
Здравствуйте уважаемые, подзабыл чуток уже Delphi, мне нужно следующее:

Есть TTreeView в нем строю в РанТайме дерево (удаляю, редактирую, добавляю), затем нужно по этому дереву сделать что то типа приметивной експертной системы то есть 

появляются RadioBattonы (Option:=TRadioButton.Create(WorkPanel);) начиная от самого верхнего левела дерева и так взависимости от выбора идем в глубину дерева,
 
Нет ничего погожего в нете, никто не видел?
Дерево строить умею, добавлять удалять компоненты в рантайме тоже,

Как циклом "проциклить" поуровнево дерево (что бы создатвать нужные RadioButtonы)?

Автор: MetalFan 14.3.2008, 20:36
ничо не понял. чего автор "цыклить" то собрался?  в чем вопрос заключается?!

Автор: fics 14.3.2008, 20:41
Выбрал какой то пункт в RadioButtonaх который соответсвует узлу дерева, кликнул далее, создалитсь RadioButtonы (чаилды выбранного узла) Выбрал опять какой то пункт из вновь созданных
кликнул далее, появились опять RadioButtonы и тд.

Добавлено через 11 минут и 17 секунд
Вопрос задам пока чуть иначе- как получить список Чаилдов определенного узла?

Автор: fics 15.3.2008, 01:55
Вот, может быть кому было интересно

1--
   |--2
   |--3
4-
 |--5
 |--6

вот построил я такое дерево, кликаю на кнопке "старт" появляется(крэейтятся в рабочей области) два RadioButtonа с значениями 1 и 4, выбрал пункт 4 - создаются опять два Radio c значениями 5 и 6



Не включил в код редактирование TreeViewa, код и без того помоему ужасный

Код


unit main;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, ComCtrls, ExtCtrls, Buttons, StdCtrls;

type
 Tmainf = class(TForm)
   MenuPanel: TPanel;
   TreeViewPanel: TPanel;
   FooterPanel: TPanel;
   WorkPanel: TPanel;
   Splitter: TSplitter;
   TreeView: TTreeView;
   StartBtn: TSpeedButton;
   NextBtn: TSpeedButton;
   procedure StartBtnClick(Sender: TObject);
   procedure WorkAreaClear();
   procedure NextBtnClick(Sender: TObject);
   procedure RadioPrint(Nname:String);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 mainf: Tmainf;
 Option: TRadioButton;
implementation

uses Math;

{$R *.dfm}

procedure Tmainf.WorkAreaClear();
begin

 while WorkPanel.ComponentCount > 0 do
   WorkPanel.Components[WorkPanel.ComponentCount-1].Free;

end;

procedure Tmainf.RadioPrint(Nname:String);
var
i,n,j,step: Integer;
begin
step:=0;
n:=TreeView.Items.Count;

for i:=0 to n-1 do
if TreeView.Items[i].Text = Nname then
 begin
  WorkAreaClear;

   for j:=0 to TreeView.Items[i].Count-1 do
    begin
     step:=step+20;
     Option:=TRadioButton.Create(WorkPanel);

        with Option do
         begin
          Parent:=WorkPanel;
          Name:=TreeView.Items[i].Item[j].Text;
          Left:=10;
          Top:=step;
          Caption:=TreeView.Items[i].Item[j].Text;
         end;
    end;

 end;

end;

procedure Tmainf.StartBtnClick(Sender: TObject);
var
i,n,step: Integer;
begin

WorkAreaClear;
step:=0;
n:=TreeView.Items.Count;

 for i:=0 to n-1 do
   begin

    if TreeView.Items[i].Level = 0 then
      begin
       step:=step+20;
       Option:=TRadioButton.Create(WorkPanel);

        with Option do
         begin
          Parent:=WorkPanel;
          Name:=TreeView.Items[i].Text;
          Left:=10;
          Top:=step;
          Caption:=TreeView.Items[i].Text;
         end;

      end;

   end;

end;

procedure Tmainf.NextBtnClick(Sender: TObject);
var
i: Integer;
begin

for i:=0 to WorkPanel.ComponentCount-1 do
  if (WorkPanel.Components[i] is TRadioButton) and
     (((WorkPanel.Components[i])as TRadioButton).Checked)
      then begin
       RadioPrint(((WorkPanel.Components[i])as TRadioButton).Caption);
       Exit;
      end;
end;

end.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)