Einzelnen Beitrag anzeigen

Benutzerbild von mirage228
mirage228

Registriert seit: 23. Mär 2003
Ort: Münster
3.750 Beiträge
 
Delphi 2010 Professional
 
#1

PageControl: Fehlerhafte Imagedarstellung (Transparenz)

  Alt 31. Jul 2004, 14:58
Hi,

ich habe auf meinem Form ein PageControl, wo ich in den Tabs Bilder anzeigen lassen. Die Bilder sind vom jeweiligen Dateityp des geöffneten Dokumentes.
Ich habe dazu eine ImageList, wo alle System-Icons drin sind. Dazu verwende ich folgenden Code:

Delphi-Quellcode:
var
  SHFileInfo: TSHFileInfo;
  SysIcons : THandle;
begin
  GlobalImageList := TImageList.Create(Self); // <-- die Variable ist nicht wirklich "global" ;)
  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;
  GlobalImageList.Handle := SysIcons;
  GlobalImageList.ShareImages := True;
  // ...
  Documents.Images := GlobalImageList; // <-- Zuweisung an das PageControl
end;
Den ImageIndex setze ich folgendermaßen:
Delphi-Quellcode:
// Die Funktion GetAssociatedIconIndex aus einer anderen Unit:
function GetAssociatedIconIndex(const AExtension: string;
  ASmall: Boolean): Integer;
var
  Info: TSHFileInfo;
  Flags: Cardinal;
begin
  if ASmall then
    Flags := SHGFI_ICON or SHGFI_SMALLICON or SHGFI_USEFILEATTRIBUTES
  else
    Flags := SHGFI_ICON or SHGFI_LARGEICON or SHGFI_USEFILEATTRIBUTES;

  SHGetFileInfo(PChar(AExtension), FILE_ATTRIBUTE_NORMAL, Info, SizeOf(TSHFileInfo), Flags);
  Result := Info.iIcon;
end;

// Die Funktion, die den ImageIndex setzt
procedure TMainForm.UpdateFile(Index: Integer);
begin
  if IsIndexValid(Index) and (vcTabIcon in Core.Settings.Views) then
    Documents.Pages[Index].ImageIndex := GetAssociatedIconIndex(ExtractFileExt(Core.Documents[Index].FileName), True) else
  Documents.Pages[Index].ImageIndex := -1;
end;
Nun, die Icons werden auch angezeigt (sie sind auch korrekt), aber die Hintergrundtransparenz bei diesen wird in "weiss" umgewandelt. Bei aktiviertem Xp-Style fällt dies zwar nicht auf, jedoch sieht ohne XP-Style nicht mehr schön aus. (s. Anhang).

Ich habe die Vermutung, dass es an einer fehlerhaften ImageList Implementierung der VCL liegt (Habe ich in einem anderen Thread [glaube ich] gelesen).
Wie kann ich dieses Problem am Besten lösen?

mfG
mirage228
Miniaturansicht angehängter Grafiken
icon_fehler.jpg  
David F.

May the source be with you, stranger.
PHP Inspection Unit (Delphi-Unit zum Analysieren von PHP Code)
  Mit Zitat antworten Zitat