Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
14-52404
mari
2003-11-21 10:50
2003.12.16
не могу войти в чат


14-52387
Юрий Зотов
2003-11-21 13:33
2003.12.16
Глюк видеокарты и/или ее драйвера


1-52267
lipskiy
2003-11-30 20:36
2003.12.16
Приложение загружает ЦП на 100%, как побороть?


1-52239
mail
2003-12-04 17:10
2003.12.16
Image.Canvas


14-52408
Dimman1
2003-11-17 20:23
2003.12.16
Какой выбрать монитор





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский