Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 246

/ вопрос открыт /

Компонент TTabControl...
Как на созданих рание вкладках изменить иконки в процесе выполнения програмы?
У меня есть 3 иконки...
Одна иконка используется при создании вкладки...
Вторая при изменении динамически созданых даных (которые связаны по индексу), когда вкладка не имеет фокуса...
Третья когда изменение динамических даних запрещено...
(Проблема в том что в этом компоненте иконки, я так понимаю, изменяются токо в процессе создания вкладки... Но может есть какието варианты, типа SendMessage(...) или что-то подобное чтобы заставить компонет сменить иконку созданой вкладки...)

Alex_ROI Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: Alex_ROI (статус: Посетитель)
Вопрос отправлен: 8 января 2007, 01:01
Состояние вопроса: открыт, ответов: 1.

Ответ #1. Отвечает эксперт: Новаковский Юрий Аврамович

Здравствуйте, Александр!

К TTabControl подключаете TImageList,наполняете его 25 иконками, если у Вас 5 вкладок, используются иконки NN 0,1,2,3,4.
При необходимости сменить иконку просто перемещаете ее
ImageList1.Move(25,0);,
а чтоб вернуть остальные иконки на место не забудьте
ImageList1.Move(1,25);
Удачи Вам.

Ответ отправил: Новаковский Юрий Аврамович (статус: 4-ый класс)
Время отправки: 9 января 2007, 12:43
Оценка за ответ: 2

Комментарий к оценке: Расход памяти... Это минус...

Мини-форум вопроса

Всего сообщений: 13; последнее сообщение — 25 мая 2008, 15:00; участников в обсуждении: 3.
Knjazev

Knjazev (статус: 3-ий класс), 9 января 2007, 19:07 [#1]:

Новаковский Юрий Аврамович - это действительно работает?
Alex_ROI

Alex_ROI (статус: Посетитель), 9 января 2007, 22:27 [#2]:

Большое спасибо, но в моем случае этот вириант не подойдет, так как количество закладок меняется в процесе выполнения проги. И если я в такой способ буду изменять индекс самой иконки то иконки будут изменятся и на остальных закладках, а это не то что мне надо....
Новаковский Юрий Аврамович

Новаковский Юрий Аврамович (статус: 4-ый класс), 10 января 2007, 11:43 [#3]:

На счет расхода памяти, у вас Александр стол и меню "пуск" загружен с сотней иконок,не говоря про прочее, а вы еще десяток боитесь загрузить. Или вы работаете на 386 с 16М озу?

Уважаемый Ласковый 3лоумышленник, я никогда не даю ответы из головы, а тем более с потолка,как некоторые другие эксперты,потому и сижу в 3 классе. Обязательно проверяю.

Уважаемый Александр! TImageList имеет методы
Insert и Delete,так что меняйте количество закладок и иконок себе на здоровье. Спрпвку по Delphi хоть иногда смотреть надо.
Alex_ROI

Alex_ROI (статус: Посетитель), 10 января 2007, 14:32 [#4]:

Спасиба - я в курсе!!!
Меня интересует событие OnGetImageIndex! В какой-то определенный момент (окромя добавления закладки) оно срабатывает и икон на закладках меняются, но что это за событие я незнаю...
Вот так я это событие обрабатываю:
procedure TPvF.TC1GetImageIndex(Sender: TObject; TabIndex: Integer;
var ImageIndex: Integer);
begin
if NOt(PPrivat(FUser.Items[TabIndex])^.NewMes) then ImageIndex:=1 else ImageIndex:=0;
end;

И меня это бесит так как мне интересно добится сути в этом направлении, а мне все предлагаю другой путь... (ОБЫДНО)

Пробывал расматривать исходник TTabControl в методах на обновление или на перерисовку компонета не предусмотрено изменение иконки...

Вот тут-то я и застрял....
Alex_ROI

Alex_ROI (статус: Посетитель), 11 января 2007, 22:06 [#5]:

Уважаемый Новаковский Юрий Аврамович, я таки послушал Вас! Все начало получатся! Но столкнулся с новой проблемой...
Закладки создаются с иконками и иконки меняются, но стоит, скажем, удалить первую закладку и все дальше начинается бардак...
Выражается:
Индекс TTabControl вказывает на 0, а иконка на закладке остается с индексом (указателем) на 1 - тоесть в дальнейшем получается что две закладки ссылаюся на одну иконку. И тд.
Что делать?
Как закладке сказать что индекс иконки сменился?
Knjazev

Knjazev (статус: 3-ий класс), 12 января 2007, 01:48 [#6]:

Александр, именно это я и имел ввиду в своём первом сообщении :)
Новаковский Юрий Аврамович

Новаковский Юрий Аврамович (статус: 4-ый класс), 12 января 2007, 12:23 [#7]:

Уважаемый Александр!
Сначала действия с закладками,а потом с иконками. TImageList при любых своих изменениях инициирует всеобщую перерисовку.
Удачи!
Alex_ROI

Alex_ROI (статус: Посетитель), 12 января 2007, 14:26 [#8]:

Не правда!!! Он не меняет ImageIndex в TTabControl!
Но мне всетаки удалось довести до ума свою идею... И терь все работает отлично... и без всеких головоломок с TImageList...
Вот решение этой проблемы по моему:

*****************************
......
implementation

uses ....,CommCtrl ....;

...
Function TForm.MeImageIndex(Index : integer) : integer;
begin
// обработка какихто Ваших условий
Result:=<Возвращаем нужный нам ImageIndex из TImageList>;
end;

Procedure TForm.SetImage(Index : integer);
var
TCItem : TTCItem;
begin
TCItem.mask:=TCIF_IMAGE;
TCItem.iImage:=MeImageIndex(Index);
if SendMessage(TabControl1.Handle,TCM_SETITEM,Index,Longint(@TCItem))=0 then ; /Не придумал.... Так как ошибку сгенерировать не пытался :)
end;

Procedure TForm.TC1GetImageIndex(Sender: TObject; TabIndex: Integer;
var ImageIndex: Integer);
begin
ImageIndex:=MeImageIndex(TabIndex);
end;

Вот и усе!!! И ненадо изобретать велосипед...:)
Alex_ROI

Alex_ROI (статус: Посетитель), 12 января 2007, 14:32 [#9]:

Procedure TForm.TabControl1GetImageIndex(Sender: TObject; TabIndex: Integer;
var ImageIndex: Integer);
Alex_ROI

Alex_ROI (статус: Посетитель), 12 января 2007, 14:38 [#10]:

SetImage - используем в тех местах геде надо на закладке сметь иконку...:)
Alex_ROI

Alex_ROI (статус: Посетитель), 20 января 2007, 16:55 [#11]:

Ласковый 3лоумышленник.
Что скажеш... разобрался или как?
Или вариант Новаковского лутчше?:)
Knjazev

Knjazev (статус: 3-ий класс), 20 января 2007, 17:00 [#12]:

Мне сейчас это уже не надо, прогу на заказ делал, проект завершён. На эксперименты времени нет
Alex_ROI

Alex_ROI (статус: Посетитель), 25 мая 2008, 15:00 [#13]:

Вот что получилось из этого - http://alex-roi.at.ua/load/1-1-0-1

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 1 июня 2023, 06:17
Выполнено за 0.03 сек.
Рейтинг@Mail.ru