Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Virtual Treeview работа с imagelist


Автор: sergey_occnet_ru 2.5.2007, 13:12
Вопрос следующий.....
На форме лежит Vt в нем загружены списки
группы с пользователями (как аське и других клиентах)
Так вот как менять номер картинки у определенного нода
например у первого в списке....причем надо менять не в TPhoneNode = record
а именно у казать ноду индекс картинки под другим номером из imagelist
в 
Viewer: TTreeView
 я менял вот так Viewer.Items[1].ImageIndex:=4;
а как в Virtual Treeview ? помогите

Автор: aktuba 2.5.2007, 13:57
В VT есть событие OnGetImageIndex и OnGetImageIndexEx... Они тебе помогут =)

Автор: sergey_occnet_ru 2.5.2007, 14:46
procedure TForm1.CLGetImageIndex(Sender: TBaseVirtualTree;
  Node: PVirtualNode; Kind: TVTImageKind; Column: TColumnIndex;
  var Ghosted: Boolean; var ImageIndex: Integer);
var
  PhoneNode: PPhoneNode;
begin
  if Column > 0 then Exit;
  ImageIndex := -1;
  PhoneNode := CL.GetNodeData(Node);
  if Assigned(PhoneNode) then
  begin
  ImageIndex := strtoint(PhoneNode^.status);
  end;
end;


Уже написано на рисует базовые иконки и этот метод возникает только когда кликаешь по 
спискам или мышкой проводишь..
а как менять картинки не трогая комонента
ну как в аске вам пришло сообщение там мигает напротив человека иконка
вот что мне надо сделать кто знает помогите !

Автор: aktuba 2.5.2007, 14:55
Цитата

а как менять картинки не трогая комонента


Самому апдейтить ноды, например по таймеру или по своим событиям.

Цитата

ну как в аске вам пришло сообщение там мигает напротив человека иконка


Там сделано просто - произошло обновление статуса, запустился таймер, который каждые пол секунды обновляет нод и иконку для нода...

Автор: sergey_occnet_ru 2.5.2007, 14:56
мне нужен пример !
ImageIndex := strtoint(PhoneNode^.status); как это сменить ?
вернее как вписать в дату PhoneNode^.status:='2'  ???? этот как раз номер иконки в imagelist

например в обработчике
Код

procedure TForm1.CLExpanded(Sender: TBaseVirtualTree; Node: PVirtualNode);
var
  PhoneNode: PPhoneNode;
begin
  PhoneNode := CL.GetNodeData(Node);
  if Assigned(PhoneNode) then
  begin
  if Node = Sender.HotNode then
  begin
  PhoneNode^.groupsee:='open';
  PhoneNode^.Status:='0';
  end;
  end;

end;

их менят а как сменить ее у этого эелемента например на 2 из например простой кнопки

procedure TForm1.Button3Click(Sender: TObject);
var
FoundNode: PVirtualNode;
PhoneNode: PPhoneNode;
begin
if CL.RootNodeCount > 0 then FoundNode := FindNode_PIN(CL.RootNode, '666');
PhoneNode := CL.GetNodeData(FoundNode);
PhoneNode^.Status:='0';
end;

end.


пишет ошибку :((

Автор: sergey_occnet_ru 2.5.2007, 16:24
FoundNode := FindNode_PIN(CL.RootNode, '666');
оказалось функция  FindNode_PIN ищет только по группа внутрь их не заглядывает
поэтому был результат 0 решил проблему !

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)