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

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

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.03.2011, 15:27   #1
atihiy2010
Пользователь
 
Аватар для atihiy2010
 
Регистрация: 22.04.2010
Сообщений: 60
Вопрос TreeView, ImageList и БД(трабл з заполнением дерева)

Доброго всем дня. У меня имеется Дерево, Иконки к нему и таблица tRazdels c полем R_Pict в которое занесены индексы картинок.
Хочу чтобы при заполнении дерева каждой ветке присваивались картинки(каждой ветке своя).

Код:
var s,f,i:integer;
  s:=Treeview1.Items.Count;
while not tRazdels.Eof do
begin
f:=tRazdels['R_Pict'];
For i:=0 to s-1 do
  TreeView1.items.item[i].ImageIndex:=f;
  tRazdels.Next;
end;


Но чето не меняются картинки в дереве, курсор в таблице на последней записи значит по таблице прохожусь. В чем дело - непойму. Может неучел какую-нибудь мелочь? Если нужно, могу привести полный код заполнения дерева.

Последний раз редактировалось atihiy2010; 13.03.2011 в 15:55.
atihiy2010 вне форума Ответить с цитированием
Старый 13.03.2011, 15:34   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А картинки эти загружены? Компонент, содержащий картинки привязан к дереву?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 13.03.2011, 15:42   #3
atihiy2010
Пользователь
 
Аватар для atihiy2010
 
Регистрация: 22.04.2010
Сообщений: 60
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
А картинки эти загружены? Компонент, содержащий картинки привязан к дереву?
Да конечно. Меня это тоже конечно смущает, потому что как только привязываю имеджлист к дереву оно сразу заполняется картинками с индексом 0) Но это пока меньше интересует.
atihiy2010 вне форума Ответить с цитированием
Старый 13.03.2011, 18:08   #4
asmodey1
Подтвердите свой е-майл
 
Регистрация: 19.12.2010
Сообщений: 808
По умолчанию

Цитата:
Сообщение от atihiy2010 Посмотреть сообщение
как только привязываю имеджлист к дереву оно сразу заполняется картинками с индексом 0)
Ну и ничего удивительного...
Нужно же задавать, когда какую картинку показывать. Примерно так:
Код:
procedure TForm1.TreeViewGetImageIndex(Sender: TObject; Node: TTreeNode);
begin
if <условие> then
begin
if Node.Expanded then
Node.ImageIndex:=1 else
Node.ImageIndex:=0;
end else
if Node.Selected then
Node.ImageIndex:=2 else
Node.ImageIndex:=0;
end;
То же самое и с событием TreeViewGetSelectedIndex - тоже нужно описать обработчик.
asmodey1 вне форума Ответить с цитированием
Старый 14.03.2011, 12:37   #5
atihiy2010
Пользователь
 
Аватар для atihiy2010
 
Регистрация: 22.04.2010
Сообщений: 60
По умолчанию

Вот полная процедура заполнения дерева, куда вставить и какой код для решения моей задачи??? Пожалуйста подскажите, два дня мучусь...

procedure TfMain.N10Click(Sender: TObject);
//var f,i,s:integer;
begin
//если таблица пуста, сразу выходим:
if tRazdels.IsEmpty then Exit;
//если в старом дереве есть узлы, очистим их:
TreeView1.Items.Clear;
//вначале запросим все главные узлы:
Q1.SQL.Clear;
Q1.SQL.Add('select * from Razdels where R_Parent=0');
Q1.Open;
if Q1.IsEmpty then Exit; //если НД пуст, выходим.
//теперь занесем их в дерево:
while not Q1.Eof do begin
TreeView1.Selected := nil;
TreeView1.Items.Add(TreeView1.Selec ted,
Q1.FieldByName('R_Name').AsString);
Q1.Next;
end; //while

//делаем запрос, выводящий пару: Родительский узел - Дочерний узел
//и поочередно прописываем их в дерево процедурой TreeViewAddChild:
Q1.SQL.Clear;
Q1.SQL.Append('select r.R_Name, d.R_Name '+
'from Razdels r, Razdels d '+
'where r.R_Num=d.R_Parent');
Q1.Open;
if Q1.IsEmpty then Exit; //если нет вложенных узлов, выходим
Q1.First;
while not Q1.Eof do begin
TreeViewAddChild(Q1.Fields[0].AsString, Q1.Fields[1].AsString);
Q1.Next;
end; //while

//распахиваем дерево:
TreeView1.FullExpand;


{Это мой кусок кода для моей задачи. Видимо неправильный}
//s:=Treeview1.Items.Count;
//while not tRazdels.Eof do
//begin
//f:=tRazdels['R_Pict'];
//For i:=0 to s-1 do
//TreeView1.items.item[i].ImageIndex:=f;
//tRazdels.Next;
//end;
end;

Может я не туда пишу код куда надо?
atihiy2010 вне форума Ответить с цитированием
Старый 14.03.2011, 13:16   #6
ReportCube
Форумчанин
 
Аватар для ReportCube
 
Регистрация: 11.03.2011
Сообщений: 426
По умолчанию

{Это мой кусок кода для моей задачи. Видимо неправильный}
s:=Treeview1.Items.Count; //Получаем количество Node
while not tRazdels.Eof do
begin //Цикл по таблице
f:=tRazdels['R_Pict']; //Получили значение индекса картинки
For i:=0 to s-1 do //В цикле всем Node присвоили этот номер картинки
TreeView1.items.item[i].ImageIndex:=f;
tRazdels.Next; //Перешли к следующей записи таблицы
end;
end;
ReportCube вне форума Ответить с цитированием
Старый 14.03.2011, 13:26   #7
atihiy2010
Пользователь
 
Аватар для atihiy2010
 
Регистрация: 22.04.2010
Сообщений: 60
По умолчанию

Почему всем, я ж по очереди ветки перебираю от 0-й до последней. Блин совсем запутался...

Ну да, понял. Точно. И что с чем местами поменять???
Может поставить for перед while? Но вроде пробывал уже...

Последний раз редактировалось atihiy2010; 14.03.2011 в 13:30.
atihiy2010 вне форума Ответить с цитированием
Старый 14.03.2011, 13:35   #8
ReportCube
Форумчанин
 
Аватар для ReportCube
 
Регистрация: 11.03.2011
Сообщений: 426
По умолчанию

до цикла i:= 0
В цикле
TreeView1.items.item[i].ImageIndex:=f;
Inc(i);
if i = s then Break;
ReportCube вне форума Ответить с цитированием
Старый 14.03.2011, 13:38   #9
atihiy2010
Пользователь
 
Аватар для atihiy2010
 
Регистрация: 22.04.2010
Сообщений: 60
По умолчанию

Щас попробую
atihiy2010 вне форума Ответить с цитированием
Старый 14.03.2011, 13:44   #10
atihiy2010
Пользователь
 
Аватар для atihiy2010
 
Регистрация: 22.04.2010
Сообщений: 60
По умолчанию

Все получилось, большое спасибо. Как говорится ларчик просто открывался...
atihiy2010 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
проблема с заполнением массива Freddi Krjuger Общие вопросы C/C++ 0 22.10.2010 18:12
TreeView и ImageList tropskoy Общие вопросы C/C++ 0 07.07.2010 11:36
Сортировка узлов дерева treeview gool Общие вопросы Delphi 1 06.11.2009 09:20
Проблема с заполнением asd48 Помощь студентам 1 21.04.2009 00:21
TreeView и ImageList Stanislav Общие вопросы Delphi 4 27.03.2008 01:26