Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.05.04;
Скачать: CL | DM;

Вниз

ImageList с поддержкой 32 битных иконок   Найти похожие ветки 

 
Л.Николай   (2008-03-22 08:19) [0]

Подскажите компонент - ImageList с поддержкой 32 битных иконок. Я хочу в время разработки загрузить иконки в ImageList и потом уже во время работы программы, отрисовывать их на канве.

Спасибо.


 
АИК   (2008-03-22 08:41) [1]

Непонятен вопрос
Тебе нужен другой компонент который может поддерживать 32 битные иконки кроме ImageList"a, или ты считаешь что ImageList не поддерживает 32 битные иконки


 
АИК   (2008-03-22 08:48) [2]

Тоесть исходя из второга тебе нужно первое?


 
grisme   (2008-03-22 10:05) [3]

у объекта класса TImageList есть свойства Width и Height.


 
Kolan ©   (2008-03-22 10:10) [4]

> Подскажите компонент — ImageList с поддержкой 32 битных
> иконок.

TImageList


 
Ega23 ©   (2008-03-22 11:03) [5]

Это TImageList с перекрытым конструктором.
Блин, сейчас кода под рукой нет, в понедельник выложу.


 
АИК   (2008-03-22 11:34) [6]


> у объекта класса TImageList есть свойства Width и Height.


вроде Автор неимеет виду размеры типа 32х32 а битность иконки тоесть эт когда в изображении (2)-32 количество цвето (32-это степень)


 
АИК   (2008-03-22 11:36) [7]


> (2)-32

Напишу по буквам а то ерунда какаята:
"два тридцать второй степени"


 
DrPass ©   (2008-03-22 11:40) [8]

Это пишется 2^32

По сабжу, ImageList - это обертка вокруг стандартного объекта GUI. Если не ошибаюсь, он автоматически должен поддерживать то, что поддерживает ImageList винды, на которой запущена программа. Если винда поддерживает 32-битные иконки, то и в листе они тоже будут нормально загружаться.
Другое дело, что использующие их визуальные компоненты не всегда смогут их отобразить. Но это уже проблема визуальных компонент


 
Eraser ©   (2008-03-22 12:04) [9]

> [8] DrPass ©   (22.03.08 11:40)


> Если винда поддерживает 32-битные иконки, то и в листе они
> тоже будут нормально загружаться.

+1
правда стандартными методами их туда возможно не добавишь, но если через API действовать то работает.


 
Ega23 ©   (2008-03-22 12:55) [10]

Блин, ребят, там кода на одну строчку - перекрыть конструктор и ImageList_Create - в параметрах как-то передаётся.


 
Л.Николай   (2008-03-22 20:52) [11]

Я испробовал уже кучу вариантов, включая даже этот: http://cc.codegear.com/Item/21269

Но все эти способы (компонент по ссылке выше, модификация стандартного) будут работать только в том случае если добавлять иконки в лист в рантайме. Мне же нужно добавить иконки в лист в время разработки и потом уже работать с ними.

Спасите меня.


 
grisme   (2008-03-22 21:25) [12]


> АИК   (22.03.08 11:34) [6]
> > у объекта класса TImageList есть свойства Width и Height.
> вроде Автор неимеет виду размеры типа 32х32 а битность иконки
> тоесть эт когда в изображении (2)-32 количество цвето (32-
> это степень)


я прочитал криво. спать надо больше %)


 
АИК   (2008-03-22 21:59) [13]


> я прочитал криво. спать надо больше %)


Что именно криво?
Один бит имеет два значения 0 или 1 для закраски одного пикселя 32-х битного изображения выдяляется 32 бита, отсюда изображения имеет 2^32 количество цветов


 
Игорь Шевченко ©   (2008-03-22 22:15) [14]

А вот Developer Express специально разработал такой ImageList (с альфа-каналом, имеется в виду, потому как цветов только 2^24)

Они конструкторы перекрывать не умеют ? :)


 
АИК   (2008-03-22 22:28) [15]


> grisme   (22.03.08 21:25) [12]


Если тебе нужно добавить иконку вовремя проектирования то кликни дважды на ImageList и там add, а если после компиляции то есть уже в готовую программу то свойства InsertIcon AddIcon например:

procedure TForm1.Button1Click(Sender: TObject);
var
B: TIcon;
begin
b:= TIcon.Create;
b.LoadFromFile(Edit1.text);
ImageList1.InsertIcon(0, b);
B.Free;
end;
end.


там где выделено жирным  это индекс иконки первый загрузи в 0 второй в 1 ... 2 ... 3 и.т.д.

А как их обрисовывать на канве к примеру на форме:
Form1.Canvas.Draw(0,0,b);


 
31512   (2008-03-22 22:49) [16]


> Игорь Шевченко ©   (22.03.08 22:15) [14]

Они вообще все компоненты серьёзно так написали, основательно. У них с VCL связь вообще только базовая. TObject, TPersistent, TComponent. Ну и так ещё кое чего...


 
Игорь Шевченко ©   (2008-03-22 22:55) [17]

31512   (22.03.08 22:49) [16]

Как ты понимаешь, вовсе не из любви к чистому искусству.


> Ну и так ещё кое чего...


Tcontrol, TWinControl, TForm, далее везде, до станцци Можайск Смоленского направления...


 
31512   (2008-03-22 23:03) [18]


> Игорь Шевченко ©   (22.03.08 22:55) [17]

Однако ж очень многих VCL классов нетути.


 
31512   (2008-03-22 23:06) [19]

Впрочем они и нафиг не нужны. При таком-то подходе...


 
Игорь Шевченко ©   (2008-03-22 23:06) [20]

31512   (22.03.08 23:03) [18]

Мы отвлеклись от темы - лучше про ImageList


 
31512   (2008-03-22 23:27) [21]


> Игорь Шевченко ©   (22.03.08 23:06) [20]

В Красноярске сейчас 3 часа ночи. Я лучше спать пойду. :-) Хватит с меня войны с Qt под Linux на С++. :-))) Только оттуда вылез. Это я к тому, что VCL и Delphi благодать божия по сравнению с Qt и qmake (через g++ (gcc)).
И проблема отрисовать 32 битный иконки вообще кажется смешной. :-)
Только что загрузил 32 битную иконку в TImageList без всяких проблем. Он даже предложил мне её разбить на части и корректно это сделал. Или я чего-то не понимаю?


 
Л.Николай   (2008-03-23 09:01) [22]

Что за ерунда. У меня D7 и TImageList - не поддерживает 32-х битные иконки. При загрузке он их 32 бита "режет".

Решения (для поддержки 32-х бит) которые я находил сводятся к тому, что бы хранить иконки в ресурсах, а во время работы извлекать их из ресурсов и грузить в лист. (Вот тут как раз измененный TImageList или код к нему для такой работы)

Я же хочу во время разработки указать-загрузить иконки в лист и потом с ними во время работы программы обрабатывать этот лист.


 
DrPass ©   (2008-03-23 11:22) [23]


> Что за ерунда. У меня D7 и TImageList - не поддерживает
> 32-х битные иконки. При загрузке он их 32 бита "режет".

Это проблема не самого ImageList"а, а его редактора. Подозреваю, редактор использует класс TIcon для сохранения, который имеет ограничения при работе с полноцветными иконками.


 
AIK ©   (2008-03-23 13:02) [24]


> Л.Николай   (23.03.08 09:01) [22]
>...
> "режет"


То есть...
А меня например вроде всё нормально. Нарисовал иконку на IconXp 32-битную размером 64Х64 (взял по максимуму), добавил в ImageList оттуда сразу эксплуатировал чтоб проверить режет ли она её, всё чисто глубина цвета 32 бит размеры 64х64. Правда догадываюсь что ты не меняешь размеры у ImageList - Width и Height (см. пост 3) в моём случаи у обоих я ставил 64


 
Ega23 ©   (2008-03-24 10:18) [25]


 TImageList32 = class(TImageList)
 public
   constructor Create(AOwner: TComponent); override;
 end;

constructor TImageList32.Create(AOwner: TComponent);
begin
 inherited;
 Handle := ImageList_Create(Width, Height,
   ILC_COLOR32 or ILC_MASK, AllocBy, AllocBy);
end;



Типа, вот так. Насчёт как в дизайн-тайм туда картинки добавлять - не знаю, не пробовал.


 
REA   (2008-03-24 10:50) [26]

TIcon нужной разрядности сделался у меня легко, но прикрутить к нему дизайнер с альфа каналом у меня не получилось - нет исходников родного, а с нуля писать напряжно - мало информации. С ImageList так же наверно...



Страницы: 1 вся ветка

Текущий архив: 2008.05.04;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.024 c
15-1206101436
vajo
2008-03-21 15:10
2008.05.04
как удалить Висту с компьютера?


15-1206347973
usr
2008-03-24 11:39
2008.05.04
MS SQL Server 2000


10-1143450022
msgipss
2006-03-27 13:00
2008.05.04
Использование свойства Calculation com сервера Excel


6-1185774105
Darth Avenger
2007-07-30 09:41
2008.05.04
Отправка письма с аттачем


2-1206949920
FishNode
2008-03-31 11:52
2008.05.04
Замена элемента TList