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