Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.01.09;
Скачать: [xml.tar.bz2];

Вниз

Поиск по 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.59 MB
Время: 0.04 c
1-24862
SaperXL
2002-12-27 22:13
2003.01.09
TMemo


1-24918
kla
2002-12-26 07:41
2003.01.09
компонент


3-24821
Roki
2002-12-17 09:43
2003.01.09
Преобразование даты!


1-24945
bkv
2002-12-26 16:12
2003.01.09
Как программно зарегистрировать билиотеку типов?


14-25082
Артем
2002-12-20 17:19
2003.01.09
Написание сниффера





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский