Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> поиск в treeview используя finddialog, искать слово в названиях ветвей 
:(
    Опции темы
R0nin
  Дата 15.10.2005, 02:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 136
Регистрация: 31.7.2005
Где: Минск (Белоруссия )

Репутация: нет
Всего: нет



нужно организовать поиск по ветвям, задавая слово два...ВОТ
smile
--------------------
Фишка есть во всем, а если фишки нет, то это и есть фишка
PM MAIL ICQ   Вверх
Vet
Дата 15.10.2005, 11:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 101
Регистрация: 24.2.2005

Репутация: нет
Всего: нет



А в чем проблема-то?
Задаешь обработчик FindDialog.OnFind, в котором в зависимости от FindDialog.Options организовываешь поиск, типа
Код

var
 FindNode: TTreeNode;
begin
 FindNode := TreeView.Selected;
 while (FindNode <> nil) and (FindNode.Text <> FindDialog.FindText) do
  FindNode := FindNode.GetPrev (или GetNext в зависимости от опций поиска)
...
end;


Затем делаешь FindDialog.Execute.
PM MAIL   Вверх
Alex
Дата 15.10.2005, 12:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

Репутация: 80
Всего: 162



Код

  private
    { Private declarations }
    OldFindNode: Integer;

...

procedure TForm1.Button1Click(Sender: TObject);
begin
  FindDialog1.Execute;
end;

procedure TForm1.FindDialog1Find(Sender: TObject);

  function MyFind(aID: Integer): Boolean;
  var
    aText: String;
    aFindText: String;
  begin
    aText:= TreeView1.Items[aId].Text;
    aFindText:= FindDialog1.FindText;
    if not (frMatchCase in FindDialog1.Options) then begin // Без учета регистра
      aText    := AnsiUpperCase(aText    );
      aFindText:= AnsiUpperCase(aFindText);
    end;

    if frWholeWord in FindDialog1.Options then // Слово целиком
      Result:= AnsiSameStr(aText, aFindText)
    else                                       // Вхождение
      Result:= AnsiPos(aFindText, aText) <> 0;

    if Result then begin // нашли элемент
      OldFindNode:= aID;
      TreeView1.Items[aID].Selected:= True;
    end;
  end;

var
  n, k: Integer;
  find: Boolean;
begin
  find:= False;
  if frDown in FindDialog1.Options then begin // поиск вниз
    k:= IfThen(OldFindNode = -1, TreeView1.Selected.AbsoluteIndex, OldFindNode + 1);
    for n:= k to TreeView1.Items.Count-1 do begin
      find:= MyFind(n);
      if find then Break;
    end;
  end
  else begin                                 // поиск вверх
    k:= IfThen(OldFindNode = -1, TreeView1.Selected.AbsoluteIndex, OldFindNode - 1);
    for n:= k downto 0 do begin
      find:= MyFind(n);
      if find then Break;
    end;
  end;
  if not find then
    ShowMessage(Format('Узел "%s" не найден.', [FindDialog1.FindText]));
end;

procedure TForm1.FindDialog1Show(Sender: TObject);
begin
  if not Assigned(TreeView1.Selected) then   // если ни один элемент не выбран,
    TreeView1.Items[0].Selected:= True;      // то начнем поиск с первого
  OldFindNode:= -1;
end;



--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
R0nin
Дата 16.10.2005, 02:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 136
Регистрация: 31.7.2005
Где: Минск (Белоруссия )

Репутация: нет
Всего: нет



to Alex что значит ''k:= IfThen''? smile
--------------------
Фишка есть во всем, а если фишки нет, то это и есть фишка
PM MAIL ICQ   Вверх
Alex
Дата 16.10.2005, 02:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

Репутация: 80
Всего: 162



IfThen - это функция, которая прописана в модуле math она эквивалентна записе

Код

if OldFindNode = -1 then
  k:= TreeView1.Selected.AbsoluteIndex
else
  k:= OldFindNode + 1;



--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
Alex
Дата 16.10.2005, 02:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

Репутация: 80
Всего: 162



Что бы тебе было легче вот тебе демо проект, на котором и происходила отладка алгоритма

Присоединённый файл ( Кол-во скачиваний: 28 )
Присоединённый файл  FindTree.rar 5,36 Kb


--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
R0nin
Дата 16.10.2005, 20:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 136
Регистрация: 31.7.2005
Где: Минск (Белоруссия )

Репутация: нет
Всего: нет



не качается! smile smile
--------------------
Фишка есть во всем, а если фишки нет, то это и есть фишка
PM MAIL ICQ   Вверх
Alex
Дата 16.10.2005, 20:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

Репутация: 80
Всего: 162



все качается...
Добавлено @ 20:38
R0nin,я на всякий случай отправил вам на почту пример


--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
R0nin
Дата 17.10.2005, 01:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 136
Регистрация: 31.7.2005
Где: Минск (Белоруссия )

Репутация: нет
Всего: нет



smile smile smile
Спасиба, я все понял! smile
--------------------
Фишка есть во всем, а если фишки нет, то это и есть фишка
PM MAIL ICQ   Вверх
Alex
Дата 17.10.2005, 09:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

Репутация: 80
Всего: 162



Цитата(R0nin @ 17.10.2005, 02:34)
Спасиба, я все понял!

Не за что smile


--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0754 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.