Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.064 c
4-1102800675
Piter
2004-12-12 00:31
2005.01.30
Перехват функций


1-1105858601
DDDeN
2005-01-16 09:56
2005.01.30
Защита программного пакета


1-1105691362
vvv_spb
2005-01-14 11:29
2005.01.30
key=#9


1-1105717067
Начинающий 2
2005-01-14 18:37
2005.01.30
Extended to Integer


3-1103720785
Aleksandr.
2004-12-22 16:06
2005.01.30
Есть какая-то возможность получить значения всех записей поля?





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