Главная страница
    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.46 MB
Время: 0.011 c
1-52139
СлБ
2003-12-03 12:51
2003.12.16
Как в TListView фокусировать Selected?


11-52132
Deimos
2003-04-01 23:39
2003.12.16
помогите начинающему...


14-52363
RealRascal
2003-11-23 10:01
2003.12.16
Автоформат кода


3-52067
Pako
2003-11-24 08:29
2003.12.16
Error creating cursor handle


1-52261
Lion_ua
2003-12-04 12:39
2003.12.16
Оптимизаторы кода в Delphi





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