Иконка компонента является инкапсулированным объектом, требующим для хранения изображения некоторый участок памяти. Следовательно, при замене иконки, память, связанная с первоначальной иконкой, должна возвратиться в кучу, а для новой иконки требуется новое распределение памяти. По правилам Delphi, этим должен заниматься метод "Assign". Ниже приведен код всей процедуры замены иконки.
implementation{$R *.DFM}var
n: integer; // При инициализации программы данное значение будет равным нулюprocedure TForm1.Button1Click(Sender: TObject);
var
Image: TBitmap;
begin// Изменение иконки в BitBtn1
Image := TBitmap.Create;
if n < ImageList1.Count then
ImageList1.GetBitmap(n, Image);
{end if}
BitBtn1.Glyph.Assign(Image)
// Примечание: Для изменения свойств объекта используется метод Assign
inc(n, 2); // В данный момент кнопка содержит две иконки!if n > ImageList1.Count then
n := 0;
{end if}
Image.Free;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin// добавляем новую иконку кнопки в список ImageList1if OpenDialog1.Execute then
ImageList1.FileLoad(rtBitMap, OpenDialog1.FileName, clBtnFace);
label1.Caption := 'Количество иконок = ' + IntToStr(ImageList1.Count);
end;
Смена иконки BitBtn в Delphi происходит за счет метода Assign, который позволяет изменять свойства объекта без выделения дополнительной памяти.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS