Форум: "Основная";
Текущий архив: 2005.01.30;
Скачать: [xml.tar.bz2];
ВнизImageList Найти похожие ветки
← →
Igor_thief (2005-01-11 22:18) [0]Да... Короче наигрался я с ImageList и понял что прийдется кое-что реализовывать самому. Дело в том, что я хотел сделать такую фишку: во время выполнения прогрммы, пользователь добавляет иконки или картинки в какой-то элемент (+ одновременно они добавляются в ImageList), а когда происходит выход из программы, то все картинки иp ImageList сохраняются в один файл (большую картинку, точно такую, как при нажатии на кнопку Export в design time во время работы со списком картинок ImageList). При последующем запуске надо чтобы картинки загрузились в ImageList из этой большой картинки. Короче пытался я зделать это стандартными возможностями ImageList в Delphi 2005, но положительного результата я так и не добился (результат то был, но глюкавый, так-как из большой картинки стандартными средствами считывается только первый ряд). Может я не прав? Есть ли у кого пример реализации того, что я описал? Такой подход используется в The Bat! для смены иконок.
← →
Igor_thief (2005-01-12 11:38) [1]Хелп! Плиз.
← →
Поручик © (2005-01-12 11:44) [2]Руками делать надо.
Создаешь TBitmap, размером, какой тебе надо, на его canvas"е рисуешь свои иконки, поочереди, затем сохраняешь битмап.
Открывать также, только вот, куда в ImageList копировать иконки не знаю, не пользовался им
← →
Igor_thief (2005-01-12 13:36) [3]Поручик © (12.01.05 11:44) [2]
Это понятно. Вот я написал кусочек кода, который все картинки из ImageList загоняет на битмап и сохраняет его.procedure TfrmMain.btnCreateImageClick(Sender: TObject);
var
i: Integer;
begin
Bitmap := TBitmap.Create;
try
Bitmap.Width := 24 * ImageList1.Count;
Bitmap.Height := 24;
Bitmap.Canvas.Brush.Color := clFuchsia;
Bitmap.Canvas.FillRect(Rect(0, 0, Bitmap.Width, Bitmap.Height));
for i := 0 to ImageList1.Count - 1 do
ImageList1.Draw(Bitmap.Canvas, 24 * i, 0,i);
// Canvas.Draw(0, 0, Bitmap);
Bitmap.SaveToFile("d:\1.bmp");
finally
Bitmap.Free;
end;
end;
Но как сделать так, чтобы когда кртинок станет очень много (более 100 ...), чтобы они сохранялись не в один ряд, а в несколько рядов? Например по 20 штук в ряд. В принципе это совсе не трудно. Это я сделаю. Но вот когда количество картинок не парное, то последний ряд будет не доконца заполнен, соответсвенно при считывании картинок из этого файла мы получим несколько пустых картинок. Как этого избежать? Неужели надо кудато записывать сколько картинок у нас сохранено в файле? Есть у кого-то другие идеи?
В принципе можно между картинками вставлять разделитель и тогда надо будет считывать все картинки до последнего разделителя, а все что останется просто пропустить. Как вам такое? Или лучше в каждой картинке самый верхний правый пиксель делать другого цвета и потом при считывании проверять, есть ли у картинки такой пиксель. Если нету, то картинки закончились. Какой вариант самый лаконичный?
← →
Igor_thief (2005-01-13 11:31) [4]Эх... Видать не подуше народу вопросик. А жаль! Ведь часто попадаются вопросы о том, как сделать чтобы программа меньше "весила". Ну вот, это ведь один из не плохих спопсобов седалть это. Убираем графические ресурсы в отдельный файл и подгружаем его во время выполнения программы. Да и это очень удобный способ заменять иконки на кнопочках, менюшках... Заменил один файл и все ок. Ну ладно, буду сам разбираться.
← →
Ega23 © (2005-01-13 11:34) [5]Сохраняй в 100 отдельных файлов. Или каждый "ряд" - отдельный файл. Зачем всё в один пихать-то?
← →
Antonn © (2005-01-13 11:51) [6]тоже задавался такой целью:
WriteComponentResFile("путь",ImageList);
ImageList:= ReadComponentResFile("путь", ImageList ) as TImagelist;
первое сохраняет, второе загружает
← →
Igor_thief (2005-01-13 23:40) [7]Ega23 © (13.01.05 11:34) [5]
Ради краткости и удобства надо пихать все в один файл. Если создавать кучу файлов, то при считывании прейдется проверять размер каждого файла (высоту и широту), надо выбирать файлы с определенными расширениями.
Antonn © (13.01.05 11:51) [6]
Writes components and their properties to a file using a resource file format - а это лишняя инфа. Да и картинку можно просто просмотреть любому рядовому пользователю и отредактировать в любом граф. редакторе, а созданый при использовании WriteComponentResFile файл нет. Хотя так код упрощается до дребезгов. Но мне такое не подходит. Придется писать все в ручную дальше.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2005.01.30;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.188 c