Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.12.16;
Скачать: CL | DM;

Вниз

Странное поведение TabControl   Найти похожие ветки 

 
Альф ©   (2003-12-03 17:14) [0]

Столкнулся с некорректным добавлением объектов к закладкам в TTabControl.
Вкратце ситуация:
1. есть TabControl с подключенным ImageList
2. в этом TabControl три типа закладок(0,1,2) и картинки к этим закладкам хранятся в ImageList
3. установлен обработчик TabControlGetImageIndex() - который возвращает номер картинки в зависимости от типа закладки
4. номер картинки хранится как TObject(integer) в TabControl.Tabs.Objects

Проблема в чем:
При добавлении новой закладки например с типом 2 происходит выход за границы диапазона в обработчике TabControlGetImageIndex().
Добавляю так

TabControl.Tabs.AddObject(Имя4, TObject(2));

Получается что сначала добавляется Имя4 потом вызывается TabControlGetImageIndex() а уж потом добавляется TObject(2).

Может кто сталкивался с таким и знает как решить эту проблему ?


 
хамло   (2003-12-03 18:16) [1]

procedure TForm1.TabControl1GetImageIndex(Sender: TObject;
TabIndex: Integer; var ImageIndex: Integer);
begin
ImageIndex:=integer(TTabControl(Sender).Tabs.Objects[TabIndex]);
end;

procedure TForm1.Button3Click(Sender: TObject);
var i: PInteger;
begin
TabControl1.OnGetImageIndex:=nil;
New(i);
i^:=3;
TabControl1.Tabs.AddObject("imageIndex=3", TObject(i));
New(i);
i^:=2;
TabControl1.Tabs.AddObject("imageIndex=2", TObject(i));
New(i);
i^:=0;
TabControl1.Tabs.AddObject("imageIndex=0", TObject(i));
TabControl1.OnGetImageIndex:=TabControl1GetImageIndex;
end;


 
Альф ©   (2003-12-03 18:35) [2]

2хамло (03.12.03 18:16) [1]
Спасибо! Ваш способ очень интересен - но при отключении обработчика мы получим обычную закладку без картинки :(


 
хамло   (2003-12-03 18:36) [3]

а строку
TabControl1.OnGetImageIndex:=TabControl1GetImageIndex;
вы не заметили?


 
Альф ©   (2003-12-04 09:29) [4]

Покорнейше простите, я ошибся говоря что совсем без картинки, просто порядок картинок получиться не заданный мною - а по умолчанию что ImageIndex = TabIndex .


 
хамло   (2003-12-04 11:26) [5]

Покорнейше простите и меня. у меня почему-то

procedure TForm1.TabControl1GetImageIndex(Sender: TObject;
TabIndex: Integer; var ImageIndex: Integer);
begin
ImageIndex:=integer(TTabControl(Sender).Tabs.Objects[TabIndex]);
end;

вообще не вызывается (код писал без делфи) )). не пойму почему


 
Альф ©   (2003-12-04 11:51) [6]

Потому что GetImageIndex() вызывается в момент добавления объекта, но т.к. обработчик в это время отключен - то и не вызывается :)

Я решил задачу - просто обновляя картинку уже после добавления, вот так:

obj := TTabProperties.Create(s);
tcitem.mask := TCIF_IMAGE;
tcitem.iImage := obj.Image;
TabControl.TabIndex := TabControl.Tabs.AddObject(obj.ShortName, obj);
SendMessage(TabControl.Handle, TCM_SETITEM, TabControl.TabIndex, longint(@tcitem));



Страницы: 1 вся ветка

Текущий архив: 2003.12.16;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.013 c
6-52302
saNat
2003-10-04 20:59
2003.12.16
Дозвон


6-52308
SammIk
2003-10-13 21:13
2003.12.16
Прокси в настроиках ИЕ


1-52224
DeScriptor
2003-12-05 01:55
2003.12.16
Выбор элемента ListBox и еще парочка


11-52128
mdw
2003-04-03 10:50
2003.12.16
Обновление http://kol.mastak.ru...?


1-52225
Dimaxx
2003-12-03 01:46
2003.12.16
Область памяти для двух приложений