Главная страница
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.012 c
14-52383
Vlad Oshin
2003-11-21 16:36
2003.12.16
Михаилов с праздником!


1-52157
чайник
2003-12-05 10:15
2003.12.16
формат ввода для Edit


1-52228
soup
2003-12-04 16:20
2003.12.16
Аналог MouseOn / MouseOver в Дельфи


6-52325
range_0
2003-10-19 17:56
2003.12.16
где в 7ой делфе альтернатива NMFTP и NMHTTP?


4-52452
SH
2003-10-22 19:39
2003.12.16
Shell