Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 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
15-1205857406
Guezt
2008-03-18 19:23
2008.05.04
дефицит информации по SDK. АСКОН-Компас


2-1207568244
azamatufa
2008-04-07 15:37
2008.05.04
Редактирование даты в БД


15-1206081361
Simpson
2008-03-21 09:36
2008.05.04
Cygwin


3-1196589626
Каяна
2007-12-02 13:00
2008.05.04
Подключение к полю типа Binary


2-1207722300
saNat
2008-04-09 10:25
2008.05.04
Редактирование данных по сети





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