Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Windows SystemMessage Icons in 16x16 laden? (https://www.delphipraxis.net/143170-windows-systemmessage-icons-16x16-laden.html)

newbe 11. Nov 2009 11:12

Re: Windows SystemMessage Icons in 16x16 laden?
 
@DeddyH

hab ich grad getestet, dann sehe ich nur ein viertel von dem Icon.

mfG newbe

Bernhard Geyer 11. Nov 2009 12:03

Re: Windows SystemMessage Icons in 16x16 laden?
 
Ist das Icon 32*32 groß oder die verwendete Fläche? Teilweise werden 32*32 Icons geliefert auf denen das Icon eigentlich nur in 16*16 vorliegt.

newbe 11. Nov 2009 12:11

Re: Windows SystemMessage Icons in 16x16 laden?
 
@Bernhard Geyer

Sehr gute Frage, ich kann sie leider nicht beantworten, da ich nicht weis, wo Windows das Icon herzaubert.
Meine Intenet-Recherchen dazu haben nicht ergeben. In der Shell32.dll sind sie jedenfalls nicht.

mfG newbe

DeddyH 11. Nov 2009 12:20

Re: Windows SystemMessage Icons in 16x16 laden?
 
Und mit einem kleinen Umweg über eine Bitmap?
Delphi-Quellcode:
var Icon: TIcon;
    Bmp: TBitmap;
begin
  Icon := TIcon.Create;
  try
    Icon.Handle := LoadImage(0, IDI_ERROR, Image_Icon, 16, 16, LR_SHARED);
    Bmp := TBitmap.Create;
    try
      Bmp.Width := Icon.Width;
      Bmp.Height := Icon.Height;
      Bmp.Canvas.Draw(0,0,Icon);
      Image1.Picture.Assign(Bmp);
    finally
      Bmp.Free;
    end;
  finally
    Icon.Free;
  end;
end;
Man könnte natürlich auch gleich die Bitmap in 16x16 deklarieren und per StretchBlt auf deren Canvas zeichnen, aber so wie oben ging das bei mir.

turboPASCAL 11. Nov 2009 13:08

Re: Windows SystemMessage Icons in 16x16 laden?
 
@DeddyH, das wird wohl nur so funktionieren. Leider nur mit einem weissem Rand / Hintergrund vom Bitmap.
Auch ein Transparent stellen wir da nur ein schlechtes Ergebnis liefern.

Ich habe selber feststellen müssen, dass das TIcon insbesondere bei Delphi6 so seine Eigenheiten hat.

Wenn der TE nun aber 16x16 Icons will:

Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
const
  IcS = 16;
var
  Icon: HICON;
  Bmp: TBitmap;
begin
    Icon:= LoadImage(0, IDI_ERROR, Image_Icon, IcS, IcS, LR_SHARED);
    Bmp := TBitmap.Create;
    try
      Bmp.Width := IcS;
      Bmp.Height := IcS;
      Bmp.PixelFormat := pf24Bit;
      Bmp.Canvas.Brush.Color := Self.Color;
      Bmp.Canvas.FillRect(Bmp.Canvas.ClipRect);
      DrawIconEx(Bmp.Canvas.Handle,0,0,Icon,IcS,IcS,0,0,DI_NORMAL);
      Image1.Picture.Assign(Bmp);
    finally
      Bmp.Free;
    end;
end;
Ich sag es gleich, schick schaut es nicht aus. ;)

newbe 11. Nov 2009 14:09

Re: Windows SystemMessage Icons in 16x16 laden?
 
@Turbo Pascal

Ich benötige die Icons für eine Baumansicht und ich arbeite mit Delphi6

mfG newbe


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:48 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz