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

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

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

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

Сообщение Padre_Mortius » 27.04.2010 22:59:56

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

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

Сообщение Mr.Smart » 27.04.2010 23:08:49

Задать индекс изображения в свойстве SelectedIndex элемента TTreeNode.
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

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

Сообщение Padre_Mortius » 27.04.2010 23:21:38

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

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

Сообщение Aleh » 29.10.2018 16:24:42

А как понять, куда щёлкнул юзер, в картинки или текст?
или надо напильником вроде
Код: Выделить всё
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;
допиливать
Aleh
новенький
 
Сообщения: 53
Зарегистрирован: 08.08.2016 12:27:45


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: Google Adsense [Bot] и гости: 36

Рейтинг@Mail.ru