Форум: "Прочее";
Текущий архив: 2008.05.04;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.51 MB
Время: 0.006 c