Форум: "Основная";
Текущий архив: 2003.12.16;
Скачать: [xml.tar.bz2];
ВнизСтранное поведение 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;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.008 c