Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.05.2012, 22:23   #1
Dozent
Форумчанин
 
Регистрация: 21.05.2008
Сообщений: 495
По умолчанию

Подскажите как выделить дочерний обьект

Вобшем смотрите прорисовываю структуру Тривив из базы
ПРимерно таким алгоритмом, беру абиндекс выделеного узла смотрю в базу , есть ли дочернии у него, если есть ставлю картинку №1 если нет то картинку №2, но мне при прорисовки дочерних веток также надо выстовить и дочерним веткам картинки, для этого мне нужно получить их абиндексы а для этого надо поставить селект на них, прошу подскажите как выделить дочерний обект

ВОт временое решение оно работает если у узла только один дочерний узел

Код:
TV.Selected.Item[TV.Selected.Count-1].Selected:=true;
Пробовал так

Код:
           TV.Selected.Expand(true);
           TV.Selections[TV.Selected.AbsoluteIndex+1];
и так

Код:
TV.Selected.Item[TV.Selected.AbsoluteIndex+1].Selected:=true;
Но выдаёт ошибку, что ненаходит такого индекса, подскажите как можно выделить дочерний обьект?

вот кусок кода

Код:
 
 Bool:=false;//нужна для проверки кликает пользователь или же програмного выделяется узел...
           TV.Selected.Expand(true);
           TV.Selections[TV.Selected.AbsoluteIndex+1];
           Bool:=true;
           IBQuery1.SQL.Clear;
           IBQuery1.SQL.Add('select count(id) as kol from TABLE1 where p_id='+id+';');
           IBQuery1.Open;
           if IBQuery1.FieldValues['kol']>0 then TV.Selected.StateIndex:=1 else TV.Selected.StateIndex:=3;
           IBQuery1.Close;
так кажись догнал, в тривив нет количества итемов равное абиндексу

ВОт код

Код:
procedure TForm2.TVChange(Sender: TObject; Node: TTreeNode);
var
 count:integer;
 str, id, stat:string;
begin
//Bool:=false;
if Bool=true then //Проверка что клик произошёл нажатием мышки
   begin
    //*******************************************BROWS****************************************************
    //FOR ADD
    IBQuery1.Close;
    IBQuery1.SQL.Clear;//Получаем количество дочерних записей от выделеного узла
    IBQuery1.SQL.Add('select count(p_id) from TABLE1 where p_id in (select id from TABLE1 where abindex='+IntTOStr(TV.Selected.AbsoluteIndex)+');');
    IBQuery1.Open;
    count:=StrToInt(IBQuery1.Fields[0].asString);   //Запоминаем это колличество
//    showmessage(INTTOStr(Count));
    i:=0;
    While i<=count-1 do  //открываем цикл
     begin
      IBQuery1.Close;
      IBQuery1.SQL.Clear;    //Получаем списко список ешё не отображённых дочерних узлов для выделеного зула
      IBQuery1.SQL.Add('select * from TABLE1 where status=0 and p_id in (select id from TABLE1 where abindex='+IntTOStr(TV.Selected.AbsoluteIndex)+');');
      IBQuery1.Open;
      if IBQuery1.FieldValues['status']= '0' then   //Проверяем если 0 то ешё неотображён, смысла впринципе этой проверки не вижу, потом уберу
          begin
           str:= IBQuery1.FieldValues['fname'];  //Запоминаю имя узла
           id:= IBQuery1.FieldValues['id'];      //ЗАпоминаю ади дочерней записи
           IBQuery1.Close;
           IBQuery1.SQL.Clear;  //Изменяем значение статус(отобаржён) и значение абидекса равное +1 от выделеного для дочернего узла
           IBQuery1.SQL.Add('update TABLE1 set status=1, abindex='+IntTOStr(TV.Selected.AbsoluteIndex+1)+' where id='+id+';');
           IBQuery1.ExecSQL;
           IBQuery1.Close;
           IBQuery1.SQL.Clear;  //Изменяем у всех элементов от выделеного и до конца значение абиндекса кроме дочернего узла с которым работаем
           IBQuery1.SQL.Add('update TABLE1 set abindex=abindex+1 where abindex>'+IntTOStr(TV.Selected.AbsoluteIndex)+' and id<>'+id+';');
           IBQuery1.ExecSQL;
           IBQuery1.Close;
           TV.Items.AddChildObjectFirst(TV.Selected, str, 0);  //прорисовываем дочерний узел
           Bool:=false;
           //TV.Selected.Expand(true);
           TV.Selected.Item[TV.Selected.Count-1].Selected:=true;    //Выделяем отображёный дочерний узел чтобы посомтреть есть ли у него дочернии узлы
           //           ShowMessage(IntTOStr(TV.Selected.Count-1));
           Bool:=true;
           IBQuery1.SQL.Clear;
           IBQuery1.SQL.Add('select count(id) as kol from TABLE1 where p_id='+id+';');//Ишем в базе дочерние узлы для отображёного дочернего зула
           IBQuery1.Open;
           if IBQuery1.FieldValues['kol']>0 then TV.Selected.StateIndex:=1 else TV.Selected.StateIndex:=3;// присвоение картинки
           IBQuery1.Close;
  //         TV.Selected.Item[TV.Selected.AbsoluteIndex].Selected:=true;
  {!!!!!!ну и вот тут надо вернутся выделиный до этого родительский зел!!!!!!!!}
          end;
      inc(i);
     end;
//     TV.Selected.Item[TV.Selected.Count-1].Selected:=true;
   end;
end;
Подскажите как вернутся на родительский узел? Не могу сообразить...

Последний раз редактировалось artemavd; 02.05.2012 в 05:39.
Dozent вне форума Ответить с цитированием
Старый 02.05.2012, 08:34   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Selected.Parent чем не родитель?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программно выделить узел в TreeView, зная иерархический путь. PATRI0T Компоненты Delphi 0 16.04.2012 21:24
Как лучше (надежнее) удалить узел из TreeView? artemavd Общие вопросы Delphi 2 07.04.2012 20:39
сделать недоступным узел в TreeView Don Karleone Общие вопросы Delphi 5 21.02.2011 23:46
TreeView - необходимо развернуть нужный узел, независимо от степени вложенности Mikhail Bakurov Общие вопросы C/C++ 0 20.05.2009 07:42
Как выделить узел в TreeView inndim Общие вопросы Delphi 3 23.10.2008 13:32