Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Не получается загружать картинки формата PNG в ImageList. D 2009


Kilowatt ©   (2011-12-26 23:15:00) 

Всем привет.
Delphi 2009.
Нужно загружать картинки формата PNG в ImageList в определенные для каждого файла индексы, потом компоненты программы используют эти картинки в соответствии с индексами.
Пытаюсь загрузить в TImageList в рантайме, но почему-то ничего не получается. GetLastError говорит: Параметр задан неверно. Компилятор не ругается. При этом картинка не убивается, та что была загружена в design time. Вот пример кода который я пытаюсь применить для загрузки в imagelist в индекс 8:
var
png: tpngimage;
begin
png := tpngimage.Create;
 png.LoadFromFile('d:\1.png');
 ImageList1.DrawingStyle := dsTransparent;
 ImageList1.Masked := true;
 ImageList1.Draw(Canvas, 0, 0, 8);
png.Free;
end;
Подскажите, что не правильно и куда копать? BMP и другие форматы картинок не предлагать, нужно именно PNG.
Заранее благодарен!


Германн   (2011-12-27 01:34:00) [1]


> KilkennyCat ©   (27.12.11 01:12) [19]
>
> Труп робота дохлого - нечаянно :)
> <Цитата>
>
>  

сказки рассказывай детям. (с)
:)


KilkennyCat   (2011-12-27 01:12:00) [2]

Труп робота дохлого - нечаянно :)


Труп робота дохлого   (2011-12-27 01:11:00) [3]


> что бы потом эти картинки использвать в элементах TButton,
>  TTrayIcon и TPopupMenu.

для этого:
1. необязательно использовать png, насколько я помню, ico с альфаканалом вполне работают, да и в иконках должны быть иконки,
2. фон предполагает постоянные изменения?


Германн   (2011-12-27 01:07:00) [4]

TsAlphaImageList от AlphaControls http://www.alphaskins.com/index_rus.php
интересно трактует фильтр Bitmap
В его ОпенДиалоге есть следующие фильтры:
All (*.png, *.ico)
Icons (*.ico)
Bitmaps (*.png)

:)


sniknik   (2011-12-27 01:04:00) [5]

> в формате PNG засунуть в рантайме в TImageList
обломайся бабка мы на корабле. © анекдот

не получится, ImageList не хранит "в формате PNG", уже говорили. т.что можешь забить, и пойти улицу например от снега почистить.


Kilowatt   (2011-12-27 00:56:00) [6]

Нужно 20 картинок в формате PNG засунуть в рантайме в TImageList, что бы потом эти картинки использвать в элементах TButton, TTrayIcon и TPopupMenu.


KilkennyCat   (2011-12-27 00:43:00) [7]

что ты хочешь в имаджелист засунуть?


Kilowatt   (2011-12-27 00:09:00) [8]

Что бы использовать функцию AddMasked нужно файл в формате bmp ведь загрузить. А у меня файлы в png формате. Вот как тут состыковать?


Anatoly Podgoretsky   (2011-12-27 00:00:00) [9]

function AddMasked(Image: TBitmap; MaskColor: TColor): Integer;


Kilowatt   (2011-12-26 23:52:00) [10]


> загружать ты можешь хоть черта в ступе, преобразования никто
> не отменял

Хорошо, можете подсказать как сделать преобразование подходящее для Bitmap после загрузки в PNGImage и не потерять прозрачность PNG? Если получится, то такой варинт устроит.


Kilowatt   (2011-12-26 23:50:00) [11]


> А какое отношение переменная png имеет к ImageList1

Запутался я уже с этой загрузкой...
Брал вот этот код и пытался его переделать под загрузку PNG:
procedure TForm1.Button1Click(Sender: TObject);
var
 bm : TBitmap;
 il : TImageList;
begin
 bm := TBitmap.Create;
 bm.LoadFromFile('C:\DownLoad\TEST.BMP');
 il := TImageList.CreateSize(bm.Width,
                             bm.Height);
 il.DrawingStyle := dsTransparent;
 il.Masked := true;
 il.AddMasked(bm, clRed);
 il.Draw(Form1.Canvas, 0, 0, 0);
 bm.Free;
 il.Free;
end;


Kilowatt   (2011-12-26 23:45:00) [12]


> сказки рассказывай детям.

Даже и не собираюсь.
По сути вопроса можете что подсказать?


Anatoly Podgoretsky   (2011-12-26 23:45:00) [13]

> Kilowatt  (26.12.2011 23:15:00)  [0]

А какое отношение переменная png имеет к ImageList1


KilkennyCat   (2011-12-26 23:44:00) [14]


> Неужели только bmp можно загружать таким образом?

загружать ты можешь хоть черта в ступе, преобразования никто не отменял


KilkennyCat   (2011-12-26 23:44:00) [15]


> Подставился логин подруги )

сказки рассказывай детям.


Kilowatt   (2011-12-26 23:35:00) [16]


> ну и код конечно неправильный, нет добавления/замены битмапа
> в ImageList, зато есть попытка отрисовать на какой то "левый"
> (не понятно из куска "кода" к чему относится) канвас.

Canvas от TForm, на которой размещен ImageList. Я понял, что сделал не верно, но вот как выйти из ситуации понять не могу. Неужели только bmp можно загружать таким образом?


Kilowatt   (2011-12-26 23:33:00) [17]

Блин. Подставился логин подруги )


Natalya   (2011-12-26 23:31:00) [18]

Загрузка png.LoadFromFile('d:\1.png');
Далее отрисовка.
Пересмотрел еще раз код ) Сам код переделал из кода загрузки bmp файлов. Правда выкинул вот эту строку    ImageList1.Add(png,8), т.к. это только с bitmap работает и думаю, что из-за этого как раз и не рисуется. Я так понимаю, что никак не сделать?


sniknik   (2011-12-26 23:29:00) [19]

> что не правильно
вот это
> BMP и другие форматы картинок не предлагать, нужно именно PNG.
идеологически, ImageList хранит битмапы, отрисовка (Draw) идет тоже на них, и раз ты что-то пытаешься нарисовать... это уже не PNG.

ну и код конечно неправильный, нет добавления/замены битмапа в ImageList, зато есть попытка отрисовать на какой то "левый" (не понятно из куска "кода" к чему относится) канвас.


Rouse_   (2011-12-26 23:23:00) [20]


> Пытаюсь загрузить в TImageList в рантайме, но почему-то
> ничего не получается.

Стесняюсь спросить, а в какой строчке приведенного кода ты ее загружаешь?


Наверх

Титульная страница Поиск, карта сайта Написать письмо