И снова здравствуйте, немного подумал о тех проблемах, которые могут возникнуть при создании вашей программы (приложения) и пришел к тому, что возможно некоторым необходимо прятать картинки, иконки именно в своей программе, можно в файле ресурсов, но я хотел бы рассказать как спрятать это все дело в самой программе. Хранить теже самые иконки в папке с программой — не самый лучший способ, так как пользователь удалит что-нибудь, а Вам еще думать защиту от «дурака«. Так, что выгодней бы было хранить все в программе, хотя от этого размер Вашего исполняемого файла увеличивается, но способ все равно покажу, а делать выводы по нему только Вам. На форме у меня следующие компоненты
- TImageList
- TButton
- TImage
Вот весь перечень компонентов, который нам необходим, чтобы осуществить то, что я описал выше. Все картинки, иконки мы будем хранить в TImageList, а в TImage мы будем их отображать (естественно по нажатию на кнопку, вот для этого нам и TButton). Незнаю у кого как, но я сразу заметил недостатки данного метода, в TImageList есть свойство Width и Height, которые задают размер хранимых наших картинок, иконок и так далее. Так вот, если выставить сильно большой размер, например 1024х768, то тут произойдет зависание, что и есть минус, этот «глюк» был обнаружен в компиляторе Borland Delphi 7.0. Возможно в Delphi 2010 этой проблемы уже нету, как опробую это дело, так сразу и отпишу об этом.
Так вот, в TImageList хранятся все наши картинки, иконки. Так давайте на событие OnClick нашей кнопки напишем следующий код
procedure TForm1.BitBtn1Click(Sender: TObject);
var
bmp:TBitmap;
begin
try
bmp:=TBitmap.Create;
ImageList1.GetBitmap(0,bmp);
Image1.Picture.Assign(bmp);
bmp.Free;
except
on e:Exception do
bmp.Free;
end;
end;
Как видите GetBitmap устанавливает в TImageList указатель на индекс, который мы указываем и сохраняет изображение под этим индексом в bmp. Перед этим мы конечно же создали наш TBitmap, а затем с помощью Assign мы сохраняем в TImage. Как видите ничего сложного, работа с иконками тоже самое, только тип немного другое, давайте посмотрим как работать в таком случае с иконками.
procedure TForm1.BitBtn1Click(Sender: TObject);
var
ico:TIcon;
begin
try
ico:=TIcon.Create;
ImageList1.GetIcon(0,ico);
Image1.Picture.Assign(ico);
ico.Free;
except
on e:Exception do
ico.Free;
end;
end;
Как видите все похоже. Думаю урок пригодится в дальнейшем. Да, но не забывайте, что если работаете с ico, то на индексе с которого считываете из TImageList должна лежать картинка именно такого расширения — ico.