AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi TImage Maske bleibt erhalten bei Zuweisung einer neuen Bitmap aus ImageList

TImage Maske bleibt erhalten bei Zuweisung einer neuen Bitmap aus ImageList

Ein Thema von Hobbycoder · begonnen am 13. Nov 2018 · letzter Beitrag vom 14. Nov 2018
Antwort Antwort
Hobbycoder

Registriert seit: 22. Feb 2017
666 Beiträge
 
#1

TImage Maske bleibt erhalten bei Zuweisung einer neuen Bitmap aus ImageList

  Alt 13. Nov 2018, 16:54
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:
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?
Miniaturansicht angehängter Grafiken
bild1.png   bild2.png  
Gruß Hobbycoder
Alle sagten: "Das geht nicht.". Dann kam einer, der wusste das nicht, und hat's einfach gemacht.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
6.893 Beiträge
 
Delphi 10.3 Rio
 
#2

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

  Alt 13. Nov 2018, 17:15
Mach vorher mal ein imgStatus.Picture.Bitmap := nil;
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Hobbycoder

Registriert seit: 22. Feb 2017
666 Beiträge
 
#3

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

  Alt 13. Nov 2018, 17:37
Danke Uwe. So geht's.
Gruß Hobbycoder
Alle sagten: "Das geht nicht.". Dann kam einer, der wusste das nicht, und hat's einfach gemacht.
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#4

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

  Alt 14. Nov 2018, 00:04
Mach vorher mal ein 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
  Mit Zitat antworten Zitat
Schokohase

Registriert seit: 17. Apr 2018
890 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#5

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

  Alt 14. Nov 2018, 01:19
Mach vorher mal ein imgStatus.Picture.Bitmap := nil;
Sollte er das Object nicht vorher freigeben?
Ist hier anders, denn diese Eigenschaft wird komplett durch die 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;

Geändert von Schokohase (14. Nov 2018 um 01:23 Uhr)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#6

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

  Alt 14. Nov 2018, 11:55
Zitat:
Ist hier anders, denn diese Eigenschaft wird komplett durch die TPicture Klasse verwaltet.
OK.. Danke für die Information.

gruss
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:33 Uhr.
Powered by vBulletin® Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2019 by Daniel R. Wolf