![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
TreeView [D7, XP]
fics © (2008-03-14 22:27:00)Здравствуйте уважаемые, подзабыл чуток уже Delphi, мне нужно следующее:
Есть TTreeView в нем строю в РанТайме дерево (удаляю, редактирую, добавляю), затем нужно по этому дереву сделать что то типа приметивной експертной системы то есть
появляются RadioBattonы (Option:=TRadioButton.Create(WorkPanel);) начиная от самого верхнего левела дерева и так взависимости от выбора идем в глубину дерева,
Нет ничего погожего в нете, никто не видел?
Дерево строить умею, добавлять удалять компоненты в рантайме тоже,
Выбрал какой то пункт в RadioButtonaх который соответсвует узлу дерева, кликнул далее, создалитсь RadioButtonы (чаилды выбранного узла) Выбрал опять какой то пункт из вновь созданных
кликнул далее, появились опять RadioButtonы и тд.
fics (2008-03-15 01:37:00) [1]Конечно нельзя что бы были одинаковые имена у узлов, но в инстик покатит
fics (2008-03-15 01:35:00) [2]Все всем спасибо, было очень страшно думал не зделаю
Нужно было следующее, вот кому интересно:
P.S Не включил в код редактирование 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.
Германн (2008-03-15 00:18:00) [3]
> блин не охота создавать компонент с отним стринговым полем
А компонент и не надо. Достаточно просто класс.
DVM (2008-03-15 00:13:00) [4]
> поидее же говорят что в таг можно писать все что уходно
указатель на что угодно - это целое число.
fics (2008-03-14 23:50:00) [5]поидее же говорят что в таг можно писать все что уходно, но пишутся только цифры
fics (2008-03-14 23:48:00) [6]
> {RASkov} © (14.03.08 22:56) [12]
Нет, спасибо ото чуток не то, нужно чтобы пользователь вообще не видел дерева,
Во а как же быть во вновь созданный Radio в tag cтрока не пишеться, в Name можно правда записать но тогда нужно чтобы узел на содержал начальных цифр, блин не охота создавать компонент с отним стринговым полем
{RASkov} (2008-03-14 22:56:00) [7]а может и такой вариант сгодится?
procedure TForm1.TreeView1Click(Sender: TObject);
var N: Integer;
begin
RadioGroup1.Items.Clear;
for N:=0 to TreeView1.Selected.Count-1 do RadioGroup1.Items.Add(TreeView1.Selected.Item[N].Text);
end;
fics (2008-03-14 22:54:00) [8]
> DVM ©
Cпасибо буду пробовать
DVM (2008-03-14 22:49:00) [9]
> Нужно еще связь как то установить между созданным Radio
> и узлом дерева
Свойство Data у узлов - положи туда указатель на радиобатон. А у радиобатона в свою очередь есть Tag
DVM (2008-03-14 22:47:00) [10]
> Чаилдов выбранного узла
TreeView1.Selected.getFirstChild ... getNextChild можно. Можно еще перебрать в цикле все узлы и выбрать те у которых Parent выделенныйузел.
fics (2008-03-14 22:41:00) [11]Нужно еще связь как то установить между созданным Radio и узлом дерева
fics (2008-03-14 22:40:00) [12]
> Ну пока в том как получить список чаилдов, а потом еще может
> задам )
Чаилдов выбранного узла
fics (2008-03-14 22:40:00) [13]Да и вообще Дельфи подзабросил, скачал бы где то и все
fics (2008-03-14 22:39:00) [14]Ну пока в том как получить список чаилдов, а потом еще может задам )
DVM (2008-03-14 22:38:00) [15]
> fics © (14.03.08 22:35) [3]
вопрос то в чем?
fics (2008-03-14 22:35:00) [16]C начала побробую, есть дерево ну скажем такое:
1--
|--2
|--3
4-
|--5
|--6
вот построил я такое дерево, кликаю на кнопке "старт" появляется(крэейтятся в рабочей области) два RadioButtonа с значениями 1 и 4, выбрал пункт 4 - создаются опять два Radio c значениями 5 и 6
DVM (2008-03-14 22:31:00) [17]я понял лишь то, что радиобатонов будет дофига.
{RASkov} (2008-03-14 22:30:00) [18]Да уж... я что-то вообще ничего не понял :(