![]() |
Transparenz in TImage mit WinXP SP2 versagt ?
Mir ist aufgefallen, daß in Anwendungen in welchen TImages mit Transparenz dargestellt
werden, seit SP2 in WinXP die Transparenz nicht mehr transparent ist. Hat jemand von Euch ne Ahnung an was das liegt. Unter Win2003 Server ist es auch so. Programme sind mit Delphi 5 compiliert. |
Re: Transparenz in TImage mit WinXP SP2 versagt ?
Liste der Anhänge anzeigen (Anzahl: 2)
Hier noch zwei Screenshots. Einmal unter XP SP1 und einmal unter XP SP2.
Das Bitmap wird über ne Imagelist mit Hilfe von
Delphi-Quellcode:
in das Image geladen.
ImageList1.GetBitmap(0,image1.picture.bitmap);
|
Re: Transparenz in TImage mit WinXP SP2 versagt ?
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
ich habe das mit folgendem Code (irgendwo mal im Netz gefunden) hinbekommen, allerdings müssen dann die Bilder erst zur laufzeit in die Imagelist geladen werden!
Delphi-Quellcode:
uses Consts, CommCtrl;
Procedure ConvertTo32BitImageList(Const ImageList: TImageList); Const Mask: Array[Boolean] Of Longint = (0, ILC_MASK); Var TemporyImageList: TImageList; Begin If Assigned(ImageList) Then Begin TemporyImageList := TImageList.Create(Nil); Try TemporyImageList.Assign(ImageList); With ImageList Do Begin ImageList.Handle := ImageList_Create(Width, Height, ILC_COLOR32 Or Mask[Masked], 0, AllocBy); If Not ImageList.HandleAllocated Then Begin Raise EInvalidOperation.Create(SInvalidImageList); End; End; ImageList.AddImages(TemporyImageList); Finally TemporyImageList.Free; End; End; End; procedure TForm1.Button1Click(Sender: TObject); var bmp: TBitmap; begin ConvertTo32BitImageList(ImageList1); ImageList1.Clear; bmp := TBitmap.Create; try bmp.LoadFromFile('X:\images\glyFXfree\delete24_h.bmp'); ImageList1.Add(bmp, bmp); finally bmp.Free; end; ImageList1.GetBitmap(0,image1.picture.bitmap); ImageList1.GetBitmap(0,image2.picture.bitmap); end; |
Re: Transparenz in TImage mit WinXP SP2 versagt ?
Liste der Anhänge anzeigen (Anzahl: 1)
Hast du dein Proggi auch schon mal mit anderen Delphi Versionen compiliert und es damit getestet?
|
Re: Transparenz in TImage mit WinXP SP2 versagt ?
Habs auch schon mit Delphi 7 probiert - selbes Ergebnis.
Und Bilder zur Laufzeit mittels
Delphi-Quellcode:
in die ImageList zu laden kommt bei mir nicht in Frage... Sorry. Aber danke
bmp.LoadFromFile('X:\images\glyFXfree\delete24_h.bmp');
für den Vorschlag. |
Re: Transparenz in TImage mit WinXP SP2 versagt ?
Zitat:
hätte noch einen anderen Vorschlag, nimm doch statt aus der ImageList die Bilder aus einer Resourcendatei... |
Re: Transparenz in TImage mit WinXP SP2 versagt ?
Also wenn dieser Code daoben wirklich funktioniert, dann einfach bei Programmstart die Bilder der ImageList in eine temporäre ImageList kopieren, die ImageList mit dem Code auf 32 Bit umstellen, dann die Bilder wieder von der Temporären ist die umgebaute ImageList eifügen und schon sollte es auch gehn, oder eben die Resourcen verwenden -.-
|
Re: Transparenz in TImage mit WinXP SP2 versagt ?
Hi!
Hat sich hier irgendwas ergeben? Habe gerade dasselbe Problem: Die Transparenz der ImageList funktioniert mit 32x32 Bitmaps, aus einer Ressource geladen, nicht :( |
Re: Transparenz in TImage mit WinXP SP2 versagt ?
Probiert einfach mal dieses aus.
Delphi-Quellcode:
Der Standardwert bei Delphi ist nämlich auf true gesetzt.
MeineImagelist.Masked := false;
ciao Edit: 1. Ich meien bevor die Bilder in die ImageList geladen werden. 2. In der IDE könnt ihr das natürlich auch schon einstellen. |
Re: Transparenz in TImage mit WinXP SP2 versagt ?
Hmm, das ändert leider auch nichts.
Edit: Auch nicht wenn ich es in der IDE ändere. |
Re: Transparenz in TImage mit WinXP SP2 versagt ?
Ich hatte das gleiche Problem.
Die Lösung ist recht einfach: Eine neue ImageList auf das Form, Masket auf false setzen, und die bmps einzeln wieder einlesen, fertig. Die bmps können ja vorher einzeln aus der ImageList in ein Verzeichnis exportiert werden. Gruß Kostas |
Re: Transparenz in TImage mit WinXP SP2 versagt ?
Ich habe mein Problem damals anders gelöst. Und zwar trat es nur auf, wenn ich Images aus der TImageList direkt mit
Delphi-Quellcode:
einem TImage zugewiesen haben. Als ich das auf
ImageList1.GetBitmap();
Delphi-Quellcode:
geändert habe, funktionierte alles einwandfrei.
ImageList1.GetIcon();
Gruß Micha |
Re: Transparenz in TImage mit WinXP SP2 versagt ?
Tag,
hier auch nochmal meine Lösung, nicht schön, aber funzt ;)
Delphi-Quellcode:
Bild:=tbitmap.Create;
Imagelist1.GetBitmap(0,Bild); Bild.Transparent := true; Bild.TransparentMode := tmFixed; Bild.TransparentColor := clWhite; dbgrid1.Canvas.Draw(rect.left+3,rect.Top+1,Bild); Bild.Free; |
Re: Transparenz in TImage mit WinXP SP2 versagt ?
Ich hatte mal Probleme, als ich die Bilder mit unter 24bit abgespeichert habe, also versuch es mal mal mit 24bit Bildern!
|
Re: Transparenz in TImage mit WinXP SP2 versagt ?
Zitat:
![]() |
Re: Transparenz in TImage mit WinXP SP2 versagt ?
Zitat:
Die beliebige Farbe welche transparent sein soll über die API GetPixel ermitteln Dann das Pic durch eine schleife laufen lassen ahängig von weite,höhe mit SetPixel die Farbe löschen. Bild darf dann aber nicht die eigenschaft Transparent besitzen. gruß |
Re: Transparenz in TImage mit WinXP SP2 versagt ?
Delphi-Quellcode:
Sicher das die Farbe auf dem Bitmap clWhite ist und nicht $00FFFFF9 (halt ein fasst White Color) ?
Bild.TransparentColor := clWhite;
Denn dann geht es garantiert nicht. |
Re: Transparenz in TImage mit WinXP SP2 versagt ?
Zitat:
gruß |
Re: Transparenz in TImage mit WinXP SP2 versagt ?
@EWeiss, upps hab dein Beitrag nicht gesehen. Ja im Grunde kann man es so machen.
|
Re: Transparenz in TImage mit WinXP SP2 versagt ?
Die Auskunft ist ja spärlich hier.
Mich würde mal interessieren ob das problem generell oder nur auftritt je nachdem welches Design(Theme) man gewählt hat. Windows klassisch Windows Xp gruß |
Re: Transparenz in TImage mit WinXP SP2 versagt ?
Also ich habe folgenden Code genommen:
Delphi-Quellcode:
Nur funktioniers damit nicht...!
iMiniMap.Picture.Bitmap.Transparent := true;
iMiniMap.Picture.Bitmap.TransparentMode := tmFixed; iMiniMap.Picture.Bitmap.TransparentColor := clBlack; Und die Farbe ist zu 100% Schwarz:
Delphi-Quellcode:
iMiniMap.Canvas.Pen.Color := clBlack;
iMiniMap.Canvas.Brush.Color := clBlack; iMiniMap.Canvas.Rectangle(0,0,100,100); |
Re: Transparenz in TImage mit WinXP SP2 versagt ?
Also es funktioniert immer noch nicht :(
PS: Habe jetzt die Variante von Kotas verwendet (#11) |
Re: Transparenz in TImage mit WinXP SP2 versagt ?
Delphi-Quellcode:
Bin jetzt mal neu in dem Thema aber du meinst das doch so oder?
Image1.Picture.Bitmap.Width := ImageList1.Width;
Image1.Picture.Bitmap.Height := ImageList1.Height; ImageList1.Draw(Image1.Picture.Bitmap.Canvas,0,0,0); Also in meiner ImageList ist ein Bild das nen rosa rand hat, der Transparent sein soll. In der ImageList die Transparenz auf diese Farbe gestellt, Image1.Transparent := true gestellt und oben den Code innen Button eingefügt und es geht. Oder versteh ich da was falsch? Weil dann erklärt mir das bitte^^ Gruß Neutral General |
Re: Transparenz in TImage mit WinXP SP2 versagt ?
Hallo!
Ich habe WinXP mit dem SP2 und bei mir kann ich jetzt durch zusammenschreiben eurer Vorschläge auch ein bmp per Canvas auf ein in einem Image geladenes jpg malen. Ich habe keine Angabe der Farbe gemacht, wobei bei meinem Quellcode damit die Farbe weiß standardmäßig als Hintergrund transparent wird.
Delphi-Quellcode:
procedure bildAufFeldMalen(dateiname: string);
var bild: TBitmap; begin bild := TBitmap.Create(); bild.width := 30; bild.height := 30; bild.LoadFromFile(dateiname); bild.Transparent := true; Form_Spielbrett.Image_Spielbrett.Canvas.Draw(10,10,bild); bild.Free; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:16 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz