Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Transparenz in TImage mit WinXP SP2 versagt ? (https://www.delphipraxis.net/29743-transparenz-timage-mit-winxp-sp2-versagt.html)

DerAndereMicha 14. Sep 2004 08:45


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.

DerAndereMicha 14. Sep 2004 09:41

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:
ImageList1.GetBitmap(0,image1.picture.bitmap);
in das Image geladen.

gothic_mike 14. Sep 2004 10:13

Re: Transparenz in TImage mit WinXP SP2 versagt ?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von DerAndereMicha
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.

Selbiges problem tritt auch mit Delphi 7 Personal unter XP auf, liegt nicht an TImage sondern an TImageList.

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;

himitsu 14. Sep 2004 10:16

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?

DerAndereMicha 14. Sep 2004 12:30

Re: Transparenz in TImage mit WinXP SP2 versagt ?
 
Habs auch schon mit Delphi 7 probiert - selbes Ergebnis.

Und Bilder zur Laufzeit mittels

Delphi-Quellcode:
bmp.LoadFromFile('X:\images\glyFXfree\delete24_h.bmp');
in die ImageList zu laden kommt bei mir nicht in Frage... Sorry. Aber danke
für den Vorschlag.

gothic_mike 14. Sep 2004 23:18

Re: Transparenz in TImage mit WinXP SP2 versagt ?
 
Zitat:

Zitat von DerAndereMicha
Habs auch schon mit Delphi 7 probiert - selbes Ergebnis.

Und Bilder zur Laufzeit mittels

Delphi-Quellcode:
bmp.LoadFromFile('X:\images\glyFXfree\delete24_h.bmp');
in die ImageList zu laden kommt bei mir nicht in Frage... Sorry. Aber danke
für den Vorschlag.

Ich bin gerade dabei wie ein irrer im netz nach einer lösung zu suchen, da ich selbiges problem auch habe.
hätte noch einen anderen Vorschlag, nimm doch statt aus der ImageList die Bilder aus einer Resourcendatei...

himitsu 15. Sep 2004 00:01

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 -.-

Dani 26. Sep 2004 18:26

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 :(

vsandre 26. Sep 2004 18:32

Re: Transparenz in TImage mit WinXP SP2 versagt ?
 
Probiert einfach mal dieses aus.
Delphi-Quellcode:
MeineImagelist.Masked := false;
Der Standardwert bei Delphi ist nämlich auf true gesetzt.

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.

Dani 26. Sep 2004 18:35

Re: Transparenz in TImage mit WinXP SP2 versagt ?
 
Hmm, das ändert leider auch nichts.
Edit: Auch nicht wenn ich es in der IDE ändere.

Kostas 7. Aug 2006 18:16

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

DerAndereMicha 8. Aug 2006 07:22

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:
ImageList1.GetBitmap();
einem TImage zugewiesen haben. Als ich das auf

Delphi-Quellcode:
ImageList1.GetIcon();
geändert habe, funktionierte alles einwandfrei.

Gruß
Micha

vsti 15. Sep 2006 09:50

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;

Hallo_Thomas 24. Sep 2006 20:57

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!

xZise 1. Okt 2006 21:45

Re: Transparenz in TImage mit WinXP SP2 versagt ?
 
Zitat:

Zitat von vsti
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;

Hmmm Komisch. Ich habe das gleiche Problem (Mein Thread), aber der Code tut es nicht...

EWeiss 2. Okt 2006 07:48

Re: Transparenz in TImage mit WinXP SP2 versagt ?
 
Zitat:

Zitat von xZise
Zitat:

Zitat von vsti
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;

Hmmm Komisch. Ich habe das gleiche Problem (Mein Thread), aber der Code tut es nicht...

Keine effektive lösung.. aber vielleicht ein.

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ß

turboPASCAL 2. Okt 2006 08:10

Re: Transparenz in TImage mit WinXP SP2 versagt ?
 
Delphi-Quellcode:
Bild.TransparentColor := clWhite;
Sicher das die Farbe auf dem Bitmap clWhite ist und nicht $00FFFFF9 (halt ein fasst White Color) ?
Denn dann geht es garantiert nicht.

EWeiss 2. Okt 2006 08:13

Re: Transparenz in TImage mit WinXP SP2 versagt ?
 
Zitat:

Zitat von turboPASCAL
Delphi-Quellcode:
Bild.TransparentColor := clWhite;
Sicher das die Farbe auf dem Bitmap clWhite ist und nicht $00FFFFF9 (halt ein fasst White Color) ?
Denn dann geht es garantiert nicht.

kann er ja vorher mal mit GetPixel ermitteln :)

gruß

turboPASCAL 2. Okt 2006 08:35

Re: Transparenz in TImage mit WinXP SP2 versagt ?
 
@EWeiss, upps hab dein Beitrag nicht gesehen. Ja im Grunde kann man es so machen.

EWeiss 2. Okt 2006 08:50

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ß

xZise 2. Okt 2006 11:33

Re: Transparenz in TImage mit WinXP SP2 versagt ?
 
Also ich habe folgenden Code genommen:

Delphi-Quellcode:
iMiniMap.Picture.Bitmap.Transparent := true;
iMiniMap.Picture.Bitmap.TransparentMode := tmFixed;
iMiniMap.Picture.Bitmap.TransparentColor := clBlack;
Nur funktioniers damit nicht...!
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);

xZise 27. Okt 2006 12:04

Re: Transparenz in TImage mit WinXP SP2 versagt ?
 
Also es funktioniert immer noch nicht :(

PS: Habe jetzt die Variante von Kotas verwendet (#11)

Neutral General 27. Okt 2006 12:12

Re: Transparenz in TImage mit WinXP SP2 versagt ?
 
Delphi-Quellcode:
Image1.Picture.Bitmap.Width := ImageList1.Width;
Image1.Picture.Bitmap.Height := ImageList1.Height;
ImageList1.Draw(Image1.Picture.Bitmap.Canvas,0,0,0);
Bin jetzt mal neu in dem Thema aber du meinst das doch so oder?
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

SLATER_LT 28. Okt 2006 22:40

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:19 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