Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.01.09;
Скачать: CL | DM;

Вниз

Поиск по TreeView типо как по базе (FindKey, Locate)   Найти похожие ветки 

 
ЮРИЙ_К ©   (2002-12-27 12:58) [0]

Коллеги, нет-ли такой возможности как САБЖ, шоб без перелопачивания всего дерева в поисках DATA?


 
Дмитрий К.К. ©   (2002-12-27 13:08) [1]


> ЮРИЙ_К © (27.12.02 12:58)


Смотря, как ты заполняешь сей TreeView.


 
Song ©   (2002-12-27 13:11) [2]

Нет. Только цикл.


 
Дмитрий К.К. ©   (2002-12-27 13:15) [3]


> Song © (27.12.02 13:11)


А если он заполняет дерево, параллельно делая указатели?


 
mrcat ©   (2002-12-27 13:21) [4]

>>А если он заполняет дерево, параллельно делая указатели?
И как он будет искать эти указатели?


 
Дмитрий К.К. ©   (2002-12-27 13:33) [5]


> mrcat © (27.12.02 13:21)
> >>А если он заполняет дерево, параллельно делая указатели?
> И как он будет искать эти указатели?


Добавил узел в дерево, запомнил TTreeNode c какой-нибудь характеристикой (описанием узла), а потом искать по ХАРАКТЕРИСТИКЕ и возвращать пресловутый TTreeNode.


 
mrcat ©   (2002-12-27 13:46) [6]

>>Дмитрий К.К. © (27.12.02 13:33)
Например, пользователь хочет найти какой-либо указатель в TTreeView, для чего задает в форме поиска его ХАРАКТЕРИСТИКУ. Как поиск будет проходить дальше?


 
Дмитрий К.К. ©   (2002-12-27 14:11) [7]

Погодь, ща тестовый пример сделаю.


 
Дмитрий К.К. ©   (2002-12-27 14:22) [8]

unit Unit1;

interface

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

type
TTreeForm = class(TForm)
TreeView1: TTreeView;
AddButton: TButton;
AddEdit: TEdit;
SearchButton: TButton;
SearchEdit: TEdit;
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure SearchButtonClick(Sender: TObject);
procedure AddButtonClick(Sender: TObject);
private
public
end;

var
TreeForm: TTreeForm;
StringList: TStringList;

implementation

{$R *.DFM}

function GiveTreeNodeEspeciallyForMrCat(StrForSearch: string): TTreeNode;
var
IndexNode: Integer;
begin
Result := nil;
IndexNode := StringList.IndexOf(StrForSearch);
if IndexNode > -1 then Result := (StringList.Objects[IndexNode] as TTreeNode);
end;

procedure TTreeForm.FormCreate(Sender: TObject);
begin
StringList := TStringList.Create;
end;

procedure TTreeForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
StringList.Free;
end;

procedure TTreeForm.SearchButtonClick(Sender: TObject);
var
SelTreeNode: TTreeNode;
begin
SelTreeNode := GiveTreeNodeEspeciallyForMrCat(SearchEdit.Text);
if SelTreeNode <> nil then
TreeView1.Selected := SelTreeNode else ShowMessage("Нетуть!");
TreeView1.SetFocus;
end;

procedure TTreeForm.AddButtonClick(Sender: TObject);
var
AddTreeNode: TTreeNode;
begin
AddTreeNode := TreeView1.Items.Add(nil, AddEdit.Text);
StringList.AddObject(AddEdit.Text, AddTreeNode);
AddEdit.Clear;
end;

end.


 
ЮРИЙ_К ©   (2002-12-27 14:52) [9]

А ведь можно использовать и DAta, типа Pointer. Вся фишка в том, что я формирую дерево из базы, и DAta присваиваю ID, затем открывая эту форму, смотрю, в каком режиме база, если Edit, то хочу дерево позиционировать на енто самое ID, а не по названию ветки.


 
Дмитрий К.К. ©   (2002-12-27 14:55) [10]


> ЮРИЙ_К © (27.12.02 14:52)


Ну дык значит, главная работа будет происходить при формировании дерева.


 
mrcat ©   (2002-12-27 14:59) [11]

ну....,млин, согласен =)))
З.Ы. c небольшой оговоркой: TStringList.IndexOf есть не что иное как обычный:
function TStrings.IndexOf(const S: string): Integer;
begin
for Result := 0 to GetCount - 1 do
if CompareStrings(Get(Result), S) = 0 then Exit;
Result := -1;
end;

что в данном контексте не есть решение =)


 
Дмитрий К.К. ©   (2002-12-27 15:46) [12]


> mrcat © (27.12.02 14:59)


Дык, батенька, вы, наверняка, в курсях, какие возникают тормоза при прохождении через узлы TreeView ;)


 
murzikN   (2002-12-27 15:57) [13]

Попробуй свою базу закачать в TList или TSortList, добавив в записи элемент Node - ссылку на узел дерева и поиск осуществляй по List-у или SortList-у, а затем уже становись на нужный узел.


 
ЮРИЙ_К ©   (2002-12-27 16:37) [14]

Могет я чего не въезжаю, дык зачема мне TList??, если я знаю конкретно значение узла, т.е. его Data. Я думал, может есть чегость, типо TreeView1.Selected.Data.Раскройся 8-(((



Страницы: 1 вся ветка

Текущий архив: 2003.01.09;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.014 c
8-24987
Sergey V. Shadrin
2002-09-24 08:41
2003.01.09
переход цвета


3-24795
Berg
2002-12-15 16:48
2003.01.09
Ошибка


1-24876
smok_er
2002-12-27 19:24
2003.01.09
Чтение информации о файле по HTTP-протоколу


14-25053
vuk
2002-12-20 15:10
2003.01.09
Software Development


14-25073
gsu
2002-12-20 18:56
2003.01.09
А зачем форум тормозит