TTreeView и отображение изображений

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Ответить
Padre_Mortius
энтузиаст
Сообщения: 1265
Зарегистрирован: 29.05.2007 17:38:07
Откуда: Спб

TTreeView и отображение изображений

Сообщение Padre_Mortius »

Когда компонент TTreeView, на котором расположено изображение хранимое в компоненте TImageList, получает фокус (выделяем элемент с изображением), то изображение исчезает. Как можно исправить данный момент?
P.S. проверялось под Fedora 12 gtk (i386) и Winows XP SP3 i386. Lazarus svn, fpc 2.4.0 от 23-04-2010
Mr.Smart
долгожитель
Сообщения: 1796
Зарегистрирован: 29.03.2008 00:01:11
Откуда: из леса!

Сообщение Mr.Smart »

Задать индекс изображения в свойстве SelectedIndex элемента TTreeNode.
Padre_Mortius
энтузиаст
Сообщения: 1265
Зарегистрирован: 29.05.2007 17:38:07
Откуда: Спб

Сообщение Padre_Mortius »

Спасибо, теперь буду знать
Aleh
новенький
Сообщения: 53
Зарегистрирован: 08.08.2016 11:27:45

Сообщение Aleh »

А как понять, куда щёлкнул юзер, в картинки или текст?
или надо напильником вроде

Код: Выделить всё

procedure TForm1.TreeView1MouseDown(Sender: TObject; Button: TMouseButton;  Shift: TShiftState; X, Y: Integer);
var tn:TTreeNode;
  left1, ww, ww1, ww2:integer;
begin
 tn:=TreeView1.GetNodeAt(x,y);
 if tn=nil then exit;
ww:=TreeView1.DefaultItemHeight;
 ww1:=0;  ww2:=0;
 if TreeView1.StateImages<>nil then
  if (tn.StateIndex>-1)and(tn.StateIndex<TreeView1.StateImages.Count)then ww1:=ww;
 if TreeView1.Images<>nil then
  if (tn.ImageIndex>-1)and(tn.ImageIndex<TreeView1.Images.Count)then ww2:=ww;
 if tn<>nil then
   begin
    left1:=tn.Level*ww-4+ww;
    Memo1.Lines.Add('X='+IntToStr(X));
    if (x>left1)and(x<left1+ww1) then
      begin
       Memo1.Lines.Add('первая картинка StateIndex');
       if tn.StateIndex=1 then tn.StateIndex:=2
        else  tn.StateIndex:=1;
      end else
    if (x>left1+ww1)and(x<left1+ww1+ww2) then
      begin
       Memo1.Lines.Add('вторая картинка ImageIndex');
       tn.ImageIndex:=tn.ImageIndex+1;
       tn.SelectedIndex:=tn.ImageIndex;
      end else
    if x<left1 then Memo1.Lines.Add('Перед картинками')
      else Memo1.Lines.Add('Текст после картинок');
   end;
end;
допиливать
Ответить