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