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 Icons in TListView haben schwarzen Rand! (https://www.delphipraxis.net/9406-icons-tlistview-haben-schwarzen-rand.html)

mirage228 25. Sep 2003 19:41


Icons in TListView haben schwarzen Rand!
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,

ich habe mit dem Code für das Herausfinden von Icons von Dateitypen Icons bzw. Items in meine Listview gespeichert. Die Icons dieser Items haben nun das gewünschte Icon, nur mit einer sehr unschönen schwarzen Umrandung.

Der Code für die Listenerstellung:
Delphi-Quellcode:
procedure TMainForm.MailForm_AttachFile(const FileName: String);
var
  Item: TListItem;
  Icon : TIcon;
begin
  Item := TListItem.Create(lwMail_AttachmentList.Items);
  lwMail_AttachmentList.LargeImages := GlobalImageList;
  Icon := TIcon.Create;
  Icon.Handle := Properties.GetAssociatedIcon(ExtractFileExt(FileName), false);
  icon.Transparent := true;
  lwMail_AttachmentList.Items.BeginUpdate;
  Item := lwMail_AttachmentList.Items.Add;
  Item.ImageIndex := GlobalImageList.AddIcon(Icon);
  Item.Caption := ExtractFileName(FileName);
  lwMail_AttachmentList.Items.EndUpdate;
  Icon.Free;
  // Attachment liste hinzufügen
  Mail.Attachment.Add(Mail.CheckAttachment(FileName));
end;
Im Anhang ein Screenshot, wo die schwarzen Ränder zu sehen zu sehen sind

DSeven 25. Sep 2003 19:45

Re: Icons in TListView haben schwarzen Rand!
 
Hallo

Ich habe da keine lösung für aber das liegt dadran das das XP Icons sind und da TListView diesen XP Icon Typ nicht unterstüzt geht es auch nicht.

Glaube auch nicht das es dafür eine lösung gibt.

Dagon 25. Sep 2003 20:23

Re: Icons in TListView haben schwarzen Rand!
 
welche Auflösung haben die Icons?

DSeven 25. Sep 2003 20:24

Re: Icons in TListView haben schwarzen Rand!
 
Zitat:

Zitat von the_master
welche Auflösung haben die Icons?

Hallo

Ich habe die Funktion mal ausprobiert und egal welche auflösung die Icons haben ob 16X16 oder 32x32. Der Rand ist immer da da das eigentlich eine art Schatten von XP sein sollte der nicht unterstützt wird.

Dagon 25. Sep 2003 20:27

Re: Icons in TListView haben schwarzen Rand!
 
Ach so! Dann kann muss man es eben so lassen.

Chewie 25. Sep 2003 21:21

Re: Icons in TListView haben schwarzen Rand!
 
Versuch mal, das Icon transparent zu machen.

FriFra 25. Sep 2003 22:44

Re: Icons in TListView haben schwarzen Rand!
 
Zitat:

Zitat von the_master
Ach so! Dann kann muss man es eben so lassen.

musst Du nicht ;) Das ist wohl ein Bug in der Implementierung der ImageList-Komponente...

Bau einfach folgenden Code in dein FormCreate ein:
Delphi-Quellcode:
var
  SHFileInfo: TSHFileInfo;
  SysIcons: THandle;
begin
  try
    SysIcons := SHGetFileInfo(PChar(copy(ParamStr(0), 1, 3)), 0, SHFileInfo,
      SizeOf(SHFileInfo), SHGFI_SYSICONINDEX or SHGFI_SMALLICON or
      SHGFI_ICON);
  finally
    DestroyIcon(SHFileInfo.hIcon);
  end;
  ImageList1.Handle := SysIcons;
  ImageList1.Clear;
...
Danach kannst Du Programmicons mit Alphablending (schwarze Ränder) in deine ImageList einfügen und sie werden korrekt angezeigt.

TimonWorld 11. Mär 2005 22:53

Re: Icons in TListView haben schwarzen Rand!
 
Ab welcher Delphi Version geht es denn? Bei D3 Pro kennt er TSHFileInfo nicht!

Was nun?

Gruß, Timon

Sprint 11. Mär 2005 22:56

Re: Icons in TListView haben schwarzen Rand!
 
Zitat:

Zitat von TimonWorld
Ab welcher Delphi Version geht es denn? Bei D3 Pro kennt er TSHFileInfo nicht!

Du musst die Unit ShellAPI mit einbinden.

Matze 11. Mär 2005 23:04

Re: Icons in TListView haben schwarzen Rand!
 
@Mirage: Wusstest du schon, dass die DP eine Code-Library hat? ;)

schwarzer randschwarzer rand hätte auch geholfen. ;)

mirage228 12. Mär 2005 07:40

Re: Icons in TListView haben schwarzen Rand!
 
Zitat:

Zitat von Matze
@Mirage: Wusstest du schon, dass die DP eine Code-Library hat? ;)

schwarzer randschwarzer rand hätte auch geholfen. ;)

Und jetzt schau Dir mal ganz genau das Datum meines Posting und den des Eintrages in der Code-Library an :mrgreen:

mfG
mirage228

Die Muhkuh 12. Mär 2005 07:43

Re: Icons in TListView haben schwarzen Rand!
 
Zitat:

Zitat von mirage228
Zitat:

Zitat von Matze
@Mirage: Wusstest du schon, dass die DP eine Code-Library hat? ;)

schwarzer randschwarzer rand hätte auch geholfen. ;)

Und jetzt schau Dir mal ganz genau das Datum meines Posting und den des Eintrages in der Code-Library an :mrgreen:

mfG
mirage228

:lol:

TimonWorld 12. Mär 2005 11:06

Re: Icons in TListView haben schwarzen Rand!
 
Bei mir geht es trotzdem nicht... erst werden bei den ersten 5 einige systemicons angezeigt (verknüpfung und so...) und wenn ich erst zur laufzeit ein 32bit-Bitmap hinzufüge (wenn ich bei Maske nil angebe) bleibt der Hintegrund schwarz. Ich weiß nicht, wie ich das mit der Maske etc. machen soll... kann nicht mal jemand einen beispielprogramm (wenigstens OnCreate und wie man dann Bitmaps oder Icons hinzufügt)?
:thumb: Aber ich find's schon klasse, das wenigsten die 5 system icons mit schatten gezeigt werden!!! :-D

gruß,
timon

TimonWorld 23. Apr 2005 15:13

Re: Icons in TListView haben schwarzen Rand!
 
Sorry...

Hab's schon selber entdeckt wie man Icons anfügt!


Habe aber was anderes zu fragen:

Ich habe versucht eine dafür passende T(New)ImageList erstellt, aber die Icons die ich hinzufüge sind immer nur 5 mal 5 Pixel groß:

Delphi-Quellcode:
constructor TNewImageList.Create(AOwner: TComponent);
var
  SHFileInfo: TSHFileInfo;
  SysIcons: THandle;
begin
  inherited Create(AOwner);
  try
    SysIcons := SHGetFileInfo(PChar(copy(ParamStr(0), 1, 3)), 0, SHFileInfo,
      SizeOf(SHFileInfo), SHGFI_SYSICONINDEX or SHGFI_SMALLICON or SHGFI_ICON);
  finally
    DestroyIcon(SHFileInfo.hIcon);
  end;
  Self.Handle := SysIcons;
end;
Gruß,
Timon.

NicoDE 23. Apr 2005 15:32

Re: Icons in TListView haben schwarzen Rand!
 
Hier im Forum suchenILC_COLOR32

TimonWorld 24. Apr 2005 10:46

Re: Icons in TListView haben schwarzen Rand!
 
Zitat:

Zitat von NicoDE

Danke, aber den Befehl "ImageList_Create()" und die "Convert ImageList (XP Fix)" kann ich bei Delphi 3 leider nicht verwenden.

Gibt es denn irgendwo eine neuere ShellAPI.dcu bei Borland für Delphi 3 zu downloaden???

Gruß,
Timon.

mirage228 24. Apr 2005 10:48

Re: Icons in TListView haben schwarzen Rand!
 
Hi,

der ImageList_Create() Befehl ist nicht in der Unit ShellAPI, sondern in der CommCtrl Unit deklariert.

mfG
mirage228

TimonWorld 24. Apr 2005 11:32

Re: Icons in TListView haben schwarzen Rand!
 
Zitat:

Zitat von mirage228
Hi,

der ImageList_Create() Befehl ist nicht in der Unit ShellAPI, sondern in der CommCtrl Unit deklariert.

mfG
mirage228

Hallo!

Stimmt... Ich hatte bei mir den Befehl nur an falscher Stelle platziert.

Aber funktionieren tut es so
Code:
Handle := ImageList_Create(16,16,ILC_COLOR32,255,0);
trotzdem nicht.

Aber ich habe mir jetzt dieses Convert ImageList (XP Fix) angeschaut und eingebunden:

Code:
//Diese Procedure habe ich hinzugefügt...
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;

//...und hier eingebunden.
constructor TNewImageList.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  ConvertTo32BitImageList(Self);
end;
Gruß,
Timon.

mirage228 24. Apr 2005 11:36

Re: Icons in TListView haben schwarzen Rand!
 
Hi,

in Deinem Aufruf:
Delphi-Quellcode:
ImageList_Create(16,16,ILC_COLOR32,255,0);
sind die letzten beiden Parameter anders, als in der Prozedur darunter. Eventuell liegt es daran.

Ich konnte die Prozedur übrigens ohne Fehlermeldungen unter Delphi 3 compilieren.
Daher wäre es gut zu wissen, was genau nicht klappt.

mfG
mirage228

TimonWorld 24. Apr 2005 12:14

Re: Icons in TListView haben schwarzen Rand!
 
Zitat:

Zitat von mirage228
Ich konnte die Prozedur übrigens ohne Fehlermeldungen unter Delphi 3 compilieren.
Daher wäre es gut zu wissen, was genau nicht klappt.

Ich konnte auch beide verschiedene Möglichkeiten ohne Fehler compilieren, aber wenn ich dann mit der ImageList arbeite ist der Hintergrund weiß, wenn es Bilder mit Alpha-Channel sind.

Gruß,
Timon.

mirage228 24. Apr 2005 12:19

Re: Icons in TListView haben schwarzen Rand!
 
Zitat:

Zitat von TimonWorld
Zitat:

Zitat von mirage228
Ich konnte die Prozedur übrigens ohne Fehlermeldungen unter Delphi 3 compilieren.
Daher wäre es gut zu wissen, was genau nicht klappt.

Ich konnte auch beide verschiedene Möglichkeiten ohne Fehler compilieren, aber wenn ich dann mit der ImageList arbeite ist der Hintergrund weiß, wenn es Bilder mit Alpha-Channel sind.

Gruß,
Timon.

Jau, das konnte ich auch beobachten. Wie man das behebt oder woran das liegt, weiss ich allerdings nicht. Den weißen Hintergrund finde ich aber immernoch annehmbarer, als den schwarzen Rand.

mfG
mirage228


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