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/)
-   -   TComboboxEx - Icons sind schwarz (https://www.delphipraxis.net/169542-tcomboboxex-icons-sind-schwarz.html)

FXL 27. Jul 2012 14:15

TComboboxEx - Icons sind schwarz
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hi Leute,

vielleicht ist es ja momentan einfach zu warm zum programmieren, aber ich seh den Fehler nicht. Gibt es einen Grund warum meine Icons in der Liste schwarze sind?

Pfad und Name der Bilder stimmen!

Zuweisen tue ich mittels: TCombobox.Images := TImageList



Gruß

mkinzler 27. Jul 2012 14:17

AW: TComboboxEx - Icons sind schwarz
 
Möglichweise liegt es an den Einstellungen zur Transparenz.

FXL 27. Jul 2012 14:28

AW: TComboboxEx - Icons sind schwarz
 
bei was bzw. was könnte falsch sein?

meinst du, dass evtl. das obere linke Pixel als transparent Farberkennung genommen wird und dies bei einer Deutschlandflagge ja schwarz ist?

Wenn es so wäre, dann müsste aber die englische Flagge weiß, rot oder blau sein?

Bernhard Geyer 27. Jul 2012 14:30

AW: TComboboxEx - Icons sind schwarz
 
Sind evtl. PNGs in der ImageList aber die Komponente wurde nicht für PNG's angepasst?

FXL 27. Jul 2012 14:44

AW: TComboboxEx - Icons sind schwarz
 
nein, alles BMPs - und die Bildfläche ist voll ausgefüllt

himitsu 27. Jul 2012 16:04

AW: TComboboxEx - Icons sind schwarz
 
Wieviele Farben (BitsProPixel) haben die Bitmaps?

Irgendwo DoubleBuffered aktiv?

ConnorMcLeod 27. Jul 2012 16:12

AW: TComboboxEx - Icons sind schwarz
 
Das erinnert mich sehr stark an meine Frage von vor zwei Wochen. Es liegt an der Art und Weise, wie die Grafiken der ImageList zugewiesen werden. Ich bin dann den Weg über eine Zwischen-Bitmap (oder TImage) gegangen, dann hat es gepasst.

FXL 27. Jul 2012 22:13

AW: TComboboxEx - Icons sind schwarz
 
@himitsu

zu Punkt 1. - K.A. bin nicht mehr auf Arbeit und kanns nicht mittel Photshop kontrolieren

zu Punkt 2. - Ja, ist an


@ConnorMcLeod

Geladen wird über TBitmap.loadFromFile(....)

und die Bitmaps werden in einer TImageList.add(tBitmap) gesetzt und der Combobx zugewiesen TCombobox.Images := TImageList

kannst du mir evtl. mal ein Codeauszug von deiner Lösung mitteilen


Gruß und Danke für die Unterstützung

himitsu 27. Jul 2012 23:10

AW: TComboboxEx - Icons sind schwarz
 
Zitat:

Zitat von FXL (Beitrag 1176115)
zu Punkt 2. - Ja, ist an

Das mein ich ja ... schalte es mal aus :zwinker:

ConnorMcLeod 28. Jul 2012 05:02

AW: TComboboxEx - Icons sind schwarz
 
Mit dem Unterschied/Vorbehalt, daß es bei mir um Icons ging:

Delphi-Quellcode:
procedure AddIconToImageList(
        const AFileName       : string
      ; var  AAddToImageList : TImageList
      );
var
  licnIcon   : TIcon;
  lsfiFileInfo: SHFILEINFO;
  limgInter  : TImage;
  lsExePath  : string;
begin
  // Create a temporary TIcon
  licnIcon := TIcon.Create;
  limgInter := TImage.Create(nil);
  try
    //Get The Icon That Represents The File
    FillChar(lsfiFileInfo, SizeOf(lsfiFileInfo), 0);
    SHGetFileInfo(PChar(AFileName + #0), 0, lsfiFileInfo, SizeOf(lsfiFileInfo), SHGFI_ICON {or SHGFI_LARGEICON});
    licnIcon.Transparent := True;
    licnIcon.Handle := lsfiFileInfo.hIcon;

    // add the icon to the imagelist:
    if Assigned(AAddToImageList) then
    begin
      limgInter.Width := licnIcon.Width;
      limgInter.Height := licnIcon.Height;
      limgInter.Picture.Bitmap.Width := licnIcon.Width;
      limgInter.Picture.Bitmap.Height := licnIcon.Height;
      limgInter.Canvas.FillRect(Rect(0, 0, limgInter.Picture.Bitmap.Width, limgInter.Picture.Bitmap.Height));
      limgInter.Transparent := True;
      limgInter.Picture.Bitmap.TransparentColor := clWhite;

      if DrawIcon(limgInter.Canvas.Handle, 0, 0, licnIcon.Handle) then
      begin
        //
      end
      else
      begin
        licnIcon.ReleaseHandle;
        licnIcon.Handle := GetIconHandleOfExtension(ExtractFileExt(AFileName), lsExePath);
        DrawIcon(limgInter.Canvas.Handle, 0, 0, licnIcon.Handle);
      end;

      AAddToImageList.AddMasked(limgInter.Picture.Bitmap, limgInter.Picture.Bitmap.TransparentColor);
    end;

    DestroyIcon(lsfiFileInfo.hIcon);
  finally
    FreeAndNil(licnIcon);
    FreeAndNil(limgInter);
  end;
end;
HTH

FXL 28. Jul 2012 12:09

AW: TComboboxEx - Icons sind schwarz
 
@ConnorMcLeod

Vielen Dank für den Codeauszug, werd es am Montag gleich probieren.

Meinst du ".ico"?? - wenn ja, kein Problem, dann wandel ich die Bilder um.


Gruß

ConnorMcLeod 28. Jul 2012 13:03

AW: TComboboxEx - Icons sind schwarz
 
Nein, ich musste die Icons für bestimmte Extensions ermitteln. Nicht aus Grafikdateien auslesen, sondern von Windows anfordern.

FXL 30. Jul 2012 11:27

AW: TComboboxEx - Icons sind schwarz
 
So, habs heute hinbekommen, ka was falsch war, hab einfach nochmal neu angefangen und es hat funktioniert.

Hier der Quellcode (wenn noch jemand anders das selbe problem hat)

Code:
procedure TForm5.FormShow(Sender: TObject);
var
  combEx : TComboBoxEx;
  myImages : TImageList;
  image : TBitmap;
begin

  try  
    combEx := TComboBoxEx.Create(Self);
    combEx.Parent := Self;
    combEx.Visible := true;
    combEx.ItemHeight := 20;
    combEx.Style := csExDropDownList;

    combEx.Align := alLeft;
    combEx.DoubleBuffered := true;

    image := TBitmap.Create();

    myImages := TImageList.CreateSize(16, 11);
    image.LoadFromFile('Name.bmp');
    myImages.Add(image,nil);
    image.LoadFromFile('Name2.bmp');
    myImages.Add(image,nil);

    combEx.Images := myImages;

    combEx.ItemsEx.AddItem('1. Eintrag', 0, 0, -1, 0, nil);
    combEx.ItemsEx.AddItem('2. Eintrag', 1, 1, -1, 0, nil);

    combEx.ItemIndex := 0;

  except on E:Exception do begin
    MessageDlg(e.Message, mtWarning, [mbOK], 0);

  end;

  end;
end;

Gruß


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:06 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