Я загружаю timagelist динамически как сделать картинки из timagelist прозрачными


Содержание

Я загружаю timagelist динамически как сделать картинки из timagelist прозрачными?

Элемент управления ImageList содержит коллекцию изображений, которые могут использоваться другими обычными элементами управления Windows — в частности, элементами управления ListView, TreeView, TabStrip и Toolbar. Например, элемент управления ImageList может сохранять все изображения, которые появляются на кнопках элемента управленияToolbar.

Элемент управления ImageList может также использоваться с элементами управления, которые назначают объект Picture на свойство Picture, такими, как PictureBox, Image и CommandButton.

Использование элемента управления ImageList в качестве отдельного архива экономит время разработки, позволяя записать код, который обращается к единственному совместимому каталогу изображений. Вместо записи кода, который загружает точечные рисунки или значки (функция LoadPicture) можно один раз заполнить ImageList, назначить, если хотите, значения Key и записать код, который использует свойства Key или Index, чтобы обратиться к изображениям.

Элемент управления использует в коллекции объектов ListImage файлы точечного рисунка (.bmp) или значка (.ico). Вы можете добавлять и удалять изображения во время разработки или выполнения. Объект ListImage имеет стандартные свойства объекта коллекции: Key, Index и Count. Он также имеет стандартные методы — такие, как Add, Remove и Clear.

Наконец, элемент управления характеризуется методами Overlay, Draw и ExtractIcon, которые позволяют создавать составные изображения, выводить изображения в объекты (такие, как Form и Printer) свойством hDC и создавать значки их точечных рисунков, сохраненных в элементе управления.

Возможное применение
  • Сохранение изображений, представляющих открытые папки, закрытые папки и документы. Эти изображения могут динамически назначаться на объект Node элемента управления TreeView, чтобы представить его различные состояния: развернут или свернут, документ или папка.
  • Сохранение изображений, которые представляют обычные компьютерные операции типа сохранения, открытия и печати файлов. Эти изображения могут быть назначены на объекты Button элемента управления Toolbar, который используется приложением.
  • Сохранение изображений для операций перетаскивания, типа значков MousePointer и DragIcons.
Управление объектами ListImage и коллекцией ListImages

Элемент управления ImageList содержит коллекцию ListImages, состоящую из объектов ListImage, каждый из которых может быть упомянут своим значением свойства Index или Key. Можно добавлять изображения в элемент управления или удалять их из него во время разработки или выполнения.

Добавление объектов ListImage во время разработки

Чтобы добавить изображение во время разработки, используйте окно диалога страницы свойств элемента управления ImageList.

Чтобы добавить объекты ListImage во время разработки

  1. Щелкните ImageList правой кнопкой мыши и выберите Properties.
  2. Нажмите вкладку Images, чтобы отобразить окно диалога страницы свойств элемента управления ImageList, как показано на рис. 7А.3.

Рис. 7А.3 Окно диалога страницы свойств элемента управления ImageList

  1. Нажмите Insert Picture, чтобы отобразить окно диалога Select Picture.
  2. Используйте окно диалога, чтобы найти файл точечного рисунка или значка, и нажмите Open.

Примечание Можно выбрать несколько точечных рисунков или значков.

  1. Назначьте индивидуальную установку свойства Key, нажав поле Key и напечатав строку.
  2. Не обязательно. Назначите установку(настройку) свойства Tag, нажав поле Tag и напечатав строку. Свойство Tag не должно быть уникально.
  3. Повторяйте шаги 3-6, пока не заполните элемент управления нужными изображениями.
Добавление объектов ListImage во время выполнения

Чтобы добавить изображение во время выполнения, используйте метод Add коллекции ListImages вместе с функцией LoadPicture. Следующий пример происходит в событии формы Load; элемент управления ImageList с именем «imlImages» загружен одним точечным рисунком:

Private Sub Form_Load()
‘ При условии, что путь правильный,
‘ к коллекции ListImages будет добавлено
‘ изображение open.bmp. Свойству Key
‘ будет также назначено значение «open»
imlImages.ListImages. _
Add , «open» , LoadPicture( «c:\bitmaps\open.bmp» )
End Sub

Назначение на объект ListImage уникального значения свойства Key позволяет создать код, более легкий для чтения. При назначении изображения на свойство можно использовать его значение Key вместо его значения Index. Таким образом, назначение изображения на свойство может привести к коду наподобие следующего:

‘ Назначение изображения на объект Node элемента управления TreeView.
‘ Уникальный ключ изображения — «open».
TreeView1.Nodes.Add , , , «Folder1» , «open»

Определение размеров изображения

Элемент управления может содержать изображение .bmp или .ico любого размера, а также картинки могут отличаться по размеру файла при одинаковом размере отображения. Вообще размер отображения первого рисунка, вставленного в элемент управления, определяет размер отображения остальных изображений, вставленных позже. Например, если сначала был вставлен значок 32 X 32 пикселя, все остальные изображения, вставленные после этого, будут отображены в других элементах управления в том же размере.

Примечание Исключение — использование изображения из элемента управления ImageList в элементом управления Image. Установка в True свойства Stretch элемента управления Image заставит изображение изменить размер, чтобы приспособиться к элементу управления.

Во время разработки можно определить в пикселях высоту и ширину изображений в элементе управления, выбрав размер из вкладки General окна диалога страницы свойств элемента управления ImageList. Можно выбрать предопределенный размер или нажать Custom и устанавливать размер изображения, напечатав нужные значения в полях Height и Width. Это можно только тогда, когда ImageList еще не содержит ни одной картинки. Попытка изменить размер тогда, когда элемент управления уже содержит изображения, приведет к ошибке.

Илон Маск рекомендует:  Сборник программ для работы с CMS
Методы, позволяющие создавать составные изображения

Можно использовать элемент управления ImageList, чтобы создать составное изображение (объект picture) их двух изображений, используя метод Overlay вместе со свойством MaskColor. Например, если у вас есть картинка «международное нет» (круг с диагональной чертой внутри), то можете наложить его на любое другое изображение (см. рис.):

Синтаксис метода Overlay требует двух аргументов. Первый аргумент определяет основное изображение; второй — определяет изображение, которое накладывается на первое. Оба аргумента могут быть свойствами Index или Key объекта ListImage.

Итак, код для достижения этого эффекта следующий:

‘ Составное изображение появляется в элементе
‘ управления PictureBox с именем «picOver». Значение Index
‘ изображения сигареты — 2; значение Index символа «Нет» — 1.
ImageList1.MaskColor = vbGreen
Set picOver.Picture = ImageList1.Overlay(2, 1)

Можно также использовать свойство Key изображений, как в этом коде:

‘ За ключ первого изображения принимается
‘ «smokes», второго — «no».
Set picOver.Picture = ImageList1.Overlay( «smokes» , «no» )

Пример этого кода иллюстрирует также, как работает свойство MaskColor. Короче говоря, свойство MaskColor определяет цвет, который станет прозрачным, когда изображения наложатся друг на друга. Изображение «no» имеет зеленый фон. Таким образом, когда код определяет, что MaskColor будет vbGreen (встроенная константа), зеленый в в составном изображении становится прозрачным.

Я загружаю timagelist динамически как сделать картинки из timagelist прозрачными?

На этом шаге мы рассмотрим компонент TImageList .

Компонент TImageList ( Список изображений ) является невизуальным и применяется в приложениях, где используется много графических изображений. Он позволяет хранить наборы изображений фиксированного размера, такие как пиктограммы или битовые карты, обращаться к ним по номерам и осуществлять вывод изображений на экран различными способами.

Перед загрузкой изображений в данный компонент надо настроить ряд его основных свойств, перечисленных в таблице ниже. При работе со списком изображений, прежде всего, требуется определить, как его элементы отображаются на холсте: просто копируются или рисуются с учетом маски, определяемой цветом маскируемой области. Все точки, попавшие в эту область, либо вообще не выводятся, либо отображаются одним и тем же цветом.

Рассмотрим свойства компонента TImageList .

В свойствах Width и Height указываются ширина и высота одного изображения в пикселях. Все изображения в списке должны иметь одинаковые размеры. Рекомендуется использовать размеры 24*24 пикселя, при которых можно получить достаточный визуальный эффект.

Для загрузки изображений используется редактор списка изображений. Он вызывается двойным щелчком на объекте ImageList .

Рис.1. Редактор списка изображений

Новые картинки добавляются с помощью кнопки Add ( Добавить ). Пока редактор не закрыт, добавленные изображения можно редактировать. Раскрывающийся список Transparent Color ( Прозрачный цвет ) позволяет выбрать цвет, который будет считаться прозрачным. Пиксели этого цвета не выводятся. Если прозрачность не нужна, следует выбрать значение clNone .

В группе Options ( Параметры ) задается способ позиционирования картинки. Выбор Crop ( Обрезка ) означает, что изображение будет вкладываться в элемент списка, начиная от его верхнего левого угла. Выбор Stretch ( Растяжение ) указывает, что изображение будет сжиматься или растягиваться, чтобы соответствовать параметрам ширины и высоты элемента списка. Выбор Center ( Центр ) размещает изображение по центру допустимого прямоугольника. Если оно превышает размеры выделенной области, то происходит обрезка.

Кнопка Delete использует для удаления выделенного изображения из списка.

Кнопка Clear используется для удаления всех изображений из списка.

Кнопка Export используется для сохранения выделенного изображения в файл. Файл будет содержать изображение, уже обработанное для размещения в объекте.

В классе TImageList определены следующие методы .

Добавление в список изображения и его маски (черно — белого точечного изображения, где белый цвет обозначает прозрачную область). Возвращаемое значение — номер изображения в списке. Нумерация начинается с нуля.

Добавление пиктограммы. Пиктограммы всегда рисуются прозрачным цветом.


Копирование всех изображений из другого объекта ImageList .

Аналогично методу Add, но вместо дополнительной маски задается цвет изображения, который считается прозрачным, подобно работе с редактором списка.

Удаление всех изображений из списка.

Основная процедура вывода изображения с номером Index на холст Canvas в позицию X,Y. Способ отображения определяется значением свойства DrawingStyle . Если значение параметра Enabled равно False , то изображение будет бледным.

Загрузка изображения из файла ресурсов с именем Name . В параметре ResType указывается тип ресурса, в параметре MaskColor задается прозрачный цвет.

Получение элемента изображения с номером Index как объекта класса TBitmap . Результат возвращается во втором параметре, который должен быть переменной.

Получение элемента изображения (или его фрагмента) с номером Index как объекта класса TIcon .

Разделение изображения с номером Index на две части: цветное точечное изображение и монохромная маска. Эти изображения возвращаются во втором и третьем параметрах.

Добавление изображения и маски в конкретную позицию списка.

Добавление значка в конкретную позицию списка.

Добавление изображения с маскируемым цветом в конкретную позицию списка.

Перестановка изображения в списке из позиции CurIndex в позицию NewIndex .

Замена элемента списка на новое изображение (с маской).

Замена элемента списка на новое изображение.

Замена элемента списка на новое изображение (с маскируемым цветом).

Загрузка изображения из ресурса программы под названием Name . В параметре ResType указывается тип ресурса, в параметре MaskColor — прозрачный цвет.

Компоненты типа TImageLists используются библиотекой Windows Comctl32.dll . Если установлена не самая последняя версия этой библиотеки, то могут возникнуть проблемы с выводом изображений, так как в предыдущих версиях имеются ошибки.

Корректно загружать изображения в список можно динамически. Это делается следующим образом.

Данный компонент удобен, во-первых, тем, что позволяет с помощью метода Draw выводить на экран изображения с прозрачными областями, которые легко формируются, а во-вторых, элемента списка изображений активно применяются во многих других компонентах Delphi , например, при создании списка элементов, деревьев и т.п.

На следующем шаге мы рассмотрим компонент TRichEdit .

Программирование Delphi

Все о программировании.

Главное меню

Как сохранить и загрузить все изображение из TImageList в один файл

Функция WriteComponentResFile может быть использована для сохранения их свойств компонентов Delphi в одном файле ресурсов.

Сохранение изображений TImageList в один файл

Допустим, у Вас есть компонент TImageList, заполненный изображениями, каждое из этих изображений можно получить с помощью свойства ImageIndex. Эти изображения используются для различных компонентов, такие, как меню, пункты TreeView, ListView и т.д.

Если Вы хотите использовать изображения из TImageList, Вы можете заполнить TImageList изображениями, сохранить эти изображения в одном файле ресурсов, а затем динамически загружать эти изображения из хранимого файла в динамически созданный TImageList.

Илон Маск рекомендует:  Что такое код pg_send_query

WriteComponentResFile

Чтобы сохранить свойства компонента (в нашем случае, это ImageList1) в файл, используйте метод WriteComponentResFile:

ImageList1 — это имя компонента TImageList, который находится у Вас на форме и заполнен изображениями.

ReadComponentResFile

Чтобы прочитать свойства компонента из файла, используйте функцию ReadComponentResFile.

Допустим, у Вас было четыре изображения в ImageList1 и мы сохранили их в файл. Чтобы восстановить эти изображения программно, а также отобразить их в четыре TImage, можно использовать следующий код:

Это сокращает время загрузки формы, так как изображения не загружаются вместе с формой, а будут загружены по мере необходимости. А также экономит ресурсы, так как после использвания TImageList будет тут же уничтожен.

Я загружаю timagelist динамически как сделать картинки из timagelist прозрачными?

Группа: Пользователи
Сообщений: 205
Пол: Мужской
Реальное имя: Евгений

P.S. Ага. Вот и нашлось
Вот описание бага в Quality Central: QC -> TImageList locks-up IDE

В самом низу читаем объяснение Embarcadero:

Группа: Пользователи
Сообщений: 205
Пол: Мужской
Реальное имя: Евгений

Рантайм — это время выполнения программы. То есть, не бросаешь компонент на форму в Дизайнере, а создаешь его через myImageList := TImageList.Create(nil) где-нибудь в начале, при старте программы, устанавливаешь нужные размеры, загружаешь из какого-нибудь списка картинки, и назначаешь созданный ImageList в PageControl. Естественно, как и говорили в Embarcadero, никакой поточной обработки, это опять приведет к зависанию.

Ну, вот я попробовал:

, в папке с проектом лежат еще 4 файла (p01.bmp, p02.bmp, p03.bmp и p04.bmp) размером 285*16. Все нормально создается, ничего не виснет. Не забудь удалить myImageList (при удалении формы, наверное, раз создавали при Form.Create)

Группа: Пользователи
Сообщений: 205
Пол: Мужской
Реальное имя: Евгений

Спасибо! Все работает как надо). Хотел бы только уточнить, о чем здесь идет речь — (we do this in the IDE for the tool palette)? Т.е. они выполняют это в каком то IDE?
Поточная обработка получается если ImageList расположен на форме, или может возникнуть в каком-то другом случае?
И что если не удалять myImageList? К чему это может привести? Я проверял без удаления, на первый взгляд без проблем

Сообщение отредактировано: 1147 — 20.08.2009 17:17

Они в IDE в своей (ну, в смысле, в Дельфийской среде разработки) используют Stream-ы для работы с изображениями в TImageList, что (при Height > 256 или Width > 256) приводит к ошибке и зависанию среды. Ошибка может проявиться сразу по дабл-клику на иконку ImageList-а, может при сохранении проекта, или еще на каком-либо этапе. Факт тот, что Дельфи перестает работать стабильно.

Практическое руководство. Добавление и удаление изображений, выводимых с помощью компонента ImageList, в Windows Forms How to: Add or Remove Images with the Windows Forms ImageList Component

Windows Forms ImageList компонент обычно заполняется образами, прежде чем он будет связан с элементом управления. The Windows Forms ImageList component is typically populated with images before it is associated with a control. Однако можно добавлять и удалять изображения после связывания списка изображений с элементом управления. However, you can add and remove images after associating the image list with a control.

При удалении образов убедитесь, что ImageIndex свойство всех связанных элементов управления по-прежнему допустимо. When you remove images, verify that the ImageIndex property of any associated controls is still valid.

Добавление образов программным способом To add images programmatically

Add Используйте метод Images свойства списка изображений. Use the Add method of the image list’s Images property.

В следующем примере кода путь, заданный для расположения изображения, является папкой » Мои документы «. In the following code example, the path set for the location of the image is the My Documents folder. Это расположение используется, поскольку можно предположить, что большинство компьютеров, работающих под управлением операционной системы Windows, будут содержать эту папку. This location is used because you can assume that most computers that are running the Windows operating system will include this folder. Выбор этого расположения также позволяет пользователям с минимальными уровнями доступа к системе более безопасно запускать приложение. Choosing this location also lets users who have minimal system access levels more safely run the application. В следующем примере кода требуется форма с ImageList уже добавленным элементом управления. The following code example requires that you have a form with an ImageList control already added.

Для добавления изображений со значением ключа. To add images with a key value.

Используйте один из Add методов Images свойства списка изображений, который принимает значение ключа. Use one of the Add methods of the image list’s Images property that takes a key value.

В следующем примере кода путь, заданный для расположения изображения, является папкой » Мои документы «. In the following code example, the path set for the location of the image is the My Documents folder. Это расположение используется, поскольку можно предположить, что большинство компьютеров, работающих под управлением операционной системы Windows, будут содержать эту папку. This location is used because you can assume that most computers that are running the Windows operating system will include this folder. Выбор этого расположения также позволяет пользователям с минимальными уровнями доступа к системе более безопасно запускать приложение. Choosing this location also lets users who have minimal system access levels more safely run the application. В следующем примере кода требуется форма с ImageList уже добавленным элементом управления. The following code example requires that you have a form with an ImageList control already added.

Программное удаление всех образов To remove all images programmatically


Remove Использование метода для удаления одного образа Use the Remove method to remove a single image

Clear Используйте метод, чтобы очистить все изображения в списке изображений. Use the Clear method to clear all images in the image list.

Удаление образов по ключу To remove images by key

RemoveByKey Используйте метод, чтобы удалить одно изображение по ключу. Use the RemoveByKey method to remove a single image by its key.

Как присвоить картинку из TImageList в контрол TImage?

Есть библиотека изображений лежащих в TImageList. Нужно назначить одну из этих картинок в контрол TImage расположенный на форме.

Сложность в том, что в Firemonkey TImage не имеет свойства ImageList и ImageIndex и использует MultiResBitmap. А TImageList теперь тоже хранит не просто картинки одного размера, а коллекции разных.

Вопрос, как достичь желаемого и использовать картинку из TImageList в контроле TImage?

Илон Маск рекомендует:  Что такое код get_current_user

1 ответ 1

Можно добавить картинку в MultiResBitmap самого TImage:

Всё ещё ищете ответ? Посмотрите другие вопросы с метками delphi изображения firemonkey или задайте свой вопрос.

Похожие

Подписаться на ленту

Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.

дизайн сайта / логотип © 2020 Stack Exchange Inc; пользовательское содержимое попадает под действие лицензии cc by-sa 4.0 с указанием ссылки на источник. rev 2020.11.12.35412

Книги онлайн

. . . все ваши любимые книги онлайн

«Виртуальная библиотека Delphi»

SendKeys(‘Delphi Is RAD!’);

Я загружаю TImageList динамически. Как сделать картинки из TImageList прозрачными?

il.Draw(Form1.Canvas, 0, 0, 0);

Как заставить TMediaPlayer проигрывать одно и тоже бесконечно? AVI например?

В примере AVI файл проигрывается снова и снова — используем событие MediaPlayer’а Notify

with MediaPlayer1 do if NotifyValue = nvSuccessful then begin

При выполнении диалога FontDialog со свойством Device равным fdBoth or fdPrinter, появляется ошибка «There are no fonts installed».

Эти установки должны показать шрифты совместимые либо с принтером либо с экраном. В примере диалог Windows ChooseFont вызывается напрямую чтобы показать список шрифтов, совместимых одновременно и с экраном и с принтером.

uses Printers, CommDlg;

FillChar(cf, sizeof(cf), #0);

cf.Flags := CF_BOTH or CF_INITTOLOGFONTSTRUCT or CF_EFFECTS or CF_SCALABLEONLY or CF_WYSIWYG;

Копирование материалов сайта www.bookol.ru
допускается только с письменного разрешения
администрации сайта.

Информационная продукция сайта
запрещена для детей (18+).
© 2010 -2020 «Книги онлайн»

Практическое руководство. Добавление и удаление изображений, выводимых с помощью компонента ImageList, в Windows Forms How to: Add or Remove Images with the Windows Forms ImageList Component

Windows Forms ImageList компонент обычно заполняется образами, прежде чем он будет связан с элементом управления. The Windows Forms ImageList component is typically populated with images before it is associated with a control. Однако можно добавлять и удалять изображения после связывания списка изображений с элементом управления. However, you can add and remove images after associating the image list with a control.

При удалении образов убедитесь, что ImageIndex свойство всех связанных элементов управления по-прежнему допустимо. When you remove images, verify that the ImageIndex property of any associated controls is still valid.

Добавление образов программным способом To add images programmatically

Add Используйте метод Images свойства списка изображений. Use the Add method of the image list’s Images property.

В следующем примере кода путь, заданный для расположения изображения, является папкой » Мои документы «. In the following code example, the path set for the location of the image is the My Documents folder. Это расположение используется, поскольку можно предположить, что большинство компьютеров, работающих под управлением операционной системы Windows, будут содержать эту папку. This location is used because you can assume that most computers that are running the Windows operating system will include this folder. Выбор этого расположения также позволяет пользователям с минимальными уровнями доступа к системе более безопасно запускать приложение. Choosing this location also lets users who have minimal system access levels more safely run the application. В следующем примере кода требуется форма с ImageList уже добавленным элементом управления. The following code example requires that you have a form with an ImageList control already added.

Для добавления изображений со значением ключа. To add images with a key value.

Используйте один из Add методов Images свойства списка изображений, который принимает значение ключа. Use one of the Add methods of the image list’s Images property that takes a key value.

В следующем примере кода путь, заданный для расположения изображения, является папкой » Мои документы «. In the following code example, the path set for the location of the image is the My Documents folder. Это расположение используется, поскольку можно предположить, что большинство компьютеров, работающих под управлением операционной системы Windows, будут содержать эту папку. This location is used because you can assume that most computers that are running the Windows operating system will include this folder. Выбор этого расположения также позволяет пользователям с минимальными уровнями доступа к системе более безопасно запускать приложение. Choosing this location also lets users who have minimal system access levels more safely run the application. В следующем примере кода требуется форма с ImageList уже добавленным элементом управления. The following code example requires that you have a form with an ImageList control already added.

Программное удаление всех образов To remove all images programmatically

Remove Использование метода для удаления одного образа Use the Remove method to remove a single image

Clear Используйте метод, чтобы очистить все изображения в списке изображений. Use the Clear method to clear all images in the image list.

Удаление образов по ключу To remove images by key

RemoveByKey Используйте метод, чтобы удалить одно изображение по ключу. Use the RemoveByKey method to remove a single image by its key.

Как нарисовать прозрачное растровое изображение из ImageList на TMenuItem?

Мне нужно нарисовать прозрачное растровое изображение на TMenuItem. Несмотря на попытки в течение многих часов различными методами, я не смог добиться успеха:

Вот как ThisBmp выглядит в CodeSite после GetBitmap : [ 112]

И вот так выглядит результирующий пункт меню:

1 ответ

Ваш код не работает, потому что вы потеряли всю информацию о прозрачности при использовании GetBitmap() . Вместо этого вам придется рисовать растровое изображение вручную, например:

Как загрузить прозрачное изображение из ImageList?

Я хочу загрузить изображение (32-битная глубина, прозрачность) от TImageList до TImage . Стандартным подходом будет ImageList.GetBitmap(Index, Image.Picture.Bitmap); . Однако метод GetBitmap не работает с прозрачностью, поэтому я всегда получаю непрозрачное растровое изображение.

Создан 22 июл. 12 2012-07-22 11:50:05 Martin Melka

2 ответа

Обходной путь довольно прост — ImageList предлагает другой способ: GetIcon , который работает нормально с прозрачностью. Код для загрузки прозрачного изображения будет:

И не забудьте установить соответствующие свойства ImageList:

Создан 22 июл. 12 2012-07-22 11:50:05 Martin Melka

Я тоже были различные проблемы с прохождением в изображениях с более TImageList. Поэтому у меня есть простая процедура обертки, которая обычно выполняет эту работу и обеспечивает прозрачность. Ниже приведен код Delphi 2005, а imlActiveView — это компонент tImageList, который имеет мой набор изображений с символами кнопок.

Ниже приведен пример использования там, где проходит 5-й imlActiveView изображения в btnNavigate.Glyph.

Создан 08 янв. 14 2014-01-08 20:56:40 Sharzade

Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL