Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi TImage Maske bleibt erhalten bei Zuweisung einer neuen Bitmap aus ImageList (https://www.delphipraxis.net/198556-timage-maske-bleibt-erhalten-bei-zuweisung-einer-neuen-bitmap-aus-imagelist.html)

Hobbycoder 13. Nov 2018 16:54

TImage Maske bleibt erhalten bei Zuweisung einer neuen Bitmap aus ImageList
 
Liste der Anhänge anzeigen (Anzahl: 2)
Ich habe ein TImage, welches ich aus einer ImageList zur Laufzeit mit unterschiedlichen Bitmaps lade.

Zum Programmstart ist die Bitmap des TImage leer. Nach der ersten Zuweisung schaut die Bitmap passabel aus.
Wird nun aber eine andere Bitmap aus der ImageList zugewiesen, bleibt scheinbar die Maske der ursprünglichen Bitmap erhalten. Zumindest schaut es für mich so aus. Siehe Bilder im Anhang.
Zugewiesen wird so:
Delphi-Quellcode:
ilStatusBitmaps.GetBitmap(SymStatusLager, imgStatus.Picture.Bitmap)
Ich muss zugeben, dass ich mich mit Masken usw. bei ImageListen noch nie so wirklich beschäftigt habe.

Woher kommt das und wie kriege ich das weg?

Uwe Raabe 13. Nov 2018 17:15

AW: TImage Maske bleibt erhalten bei Zuweisung einer neuen Bitmap aus ImageList
 
Mach vorher mal ein
Delphi-Quellcode:
imgStatus.Picture.Bitmap := nil;

Hobbycoder 13. Nov 2018 17:37

AW: TImage Maske bleibt erhalten bei Zuweisung einer neuen Bitmap aus ImageList
 
Danke Uwe. So geht's.

EWeiss 14. Nov 2018 00:04

AW: TImage Maske bleibt erhalten bei Zuweisung einer neuen Bitmap aus ImageList
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1417991)
Mach vorher mal ein
Delphi-Quellcode:
imgStatus.Picture.Bitmap := nil;

Sollte er das Object nicht vorher freigeben?
DeleteObject und Konsorte?
imgStatus.Picture.Bitmap.free;

Den auch ein Maske ist ein Bitmap und nur NIL gibt das Object eigentlich nicht frei oder?

gruss

Schokohase 14. Nov 2018 01:19

AW: TImage Maske bleibt erhalten bei Zuweisung einer neuen Bitmap aus ImageList
 
Zitat:

Zitat von EWeiss (Beitrag 1418021)
Zitat:

Zitat von Uwe Raabe (Beitrag 1417991)
Mach vorher mal ein
Delphi-Quellcode:
imgStatus.Picture.Bitmap := nil;

Sollte er das Object nicht vorher freigeben?

Ist hier anders, denn diese Eigenschaft wird komplett durch die
Delphi-Quellcode:
TPicture
Klasse verwaltet.

Bei einer Zuweisung an die Bitmapt Eigenschaft wird nicht die Instanz übergeben, sondern intern wird der Inhalt kopiert. Siehe auch dazu die Doku Delphi-Referenz durchsuchenTPicture.Bitmap. Steht da allerdings etwas seltsam beschrieben.

Am deutlichsten sieht man es im Quelltext selber
Delphi-Quellcode:
procedure TPicture.SetBitmap(Value: TBitmap);
begin
  SetGraphic(Value);
end;

procedure TPicture.SetIcon(Value: TIcon);
begin
  SetGraphic(Value);
end;

procedure TPicture.SetMetafile(Value: TMetafile);
begin
  SetGraphic(Value);
end;

procedure TPicture.SetGraphic(Value: TGraphic);
var
  GraphicClass: TGraphicClass;
begin
  if Value <> nil then
    GraphicClass := TGraphicClass(Value.ClassType)
  else
    GraphicClass := nil;

  Load(GraphicClass,
    procedure (Graphic: TGraphic)
    begin
      Graphic.Assign(Value); // da wird kopiert
    end
  );
end;

EWeiss 14. Nov 2018 11:55

AW: TImage Maske bleibt erhalten bei Zuweisung einer neuen Bitmap aus ImageList
 
Zitat:

Ist hier anders, denn diese Eigenschaft wird komplett durch die TPicture Klasse verwaltet.
OK.. Danke für die Information.

gruss


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:01 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz