Главная страница
    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
1-52149
KF111
2003-12-02 20:32
2003.12.16
Позиция курсора в TMemo


6-52313
lahtak
2003-10-20 23:42
2003.12.16
iHTMLInputElement


1-52197
LittleGirly
2003-12-05 15:35
2003.12.16
Вопрос по TreeView


1-52214
FBI
2003-12-05 09:15
2003.12.16
Буфер


7-52415
LeNa19
2003-10-09 23:30
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский