Delphi-PRAXiS

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 07:50


Windows SystemMessage Icons in 16x16 laden?
 
Hallo zusammen!

Ich möchte gern die Windows SystemMessage Icons (also Error, Warnung, Information und Frage) mit den Abmessungen
16x16 in ein TImage laden. Kann mir jemand sagen wie ich das anstelle? Ich habe es mit LoadIcon versucht, aber das TImage
bleibt immer leer. :(

mfG newbe

turboPASCAL 11. Nov 2009 07:53

Re: Windows SystemMessage Icons in 16x16 laden?
 
Wie hast du es denn gemacht ?

newbe 11. Nov 2009 08:11

Re: Windows SystemMessage Icons in 16x16 laden?
 
so..
Delphi-Quellcode:
Image4.Picture.Graphic := TIcon.Create;
  TIcon(Image4.Picture.Graphic).Handle := LoadImage(0, IDI_ERROR, Image_Icon, 16, 16, 0);
mfG newbe

turboPASCAL 11. Nov 2009 08:37

Re: Windows SystemMessage Icons in 16x16 laden?
 
Versuch es mal bitte so:

Delphi-Quellcode:
procedure ...
var Icon: TIcon;
begin
  Icon := TIcon.Create;
  try
    Icon.Handle := LoadImage(0, IDI_ERROR, Image_Icon, 16, 16, LR_SHARED);
    Image4.Picture.Assign(Icon);
  finally
    Icon.Freee;
  end;
end;
Ich glaube aber unter XP / Vista gibt es keine Grössen von 16*16 bei IDI_ERROR & Co.
Die beginnen wohl erst bei 32x32.

Bernhard Geyer 11. Nov 2009 08:50

Re: Windows SystemMessage Icons in 16x16 laden?
 
Solche Sachen legt man am besten selbst zur Exe. MS ändert/löscht solche Ressourcen gerne mal bei neueren Windows-Versionen. Siehe auch die System-Animationen die ab Vista nicht mehr vorhanden sind un damit ab D2007 (D2006) selbst als AVI-Ressourcen mitgeliefert werden.

Luckie 11. Nov 2009 08:55

Re: Windows SystemMessage Icons in 16x16 laden?
 
Aber ich glaube, bei diesen Standardicons ist man ziemlich sicher. Die gibt es ja schon sein Windows 3.11. Und so lange man die Konstanten verwendet und nichts hardcodet, sollte da nichts passieren, da sich hin und wieder schon mal die Ressourcen IDs ändern. Würden sie da was ändern, würden das ja auch die ganzen Messageboxen betreffen.

Bernhard Geyer 11. Nov 2009 09:04

Re: Windows SystemMessage Icons in 16x16 laden?
 
Zitat:

Zitat von Luckie
Würden sie da was ändern, würden das ja auch die ganzen Messageboxen betreffen.

Wenn du die Windows-Messagebox-API meinst: Dies wird ja passend zum Betriebssystem kompiliert.

turboPASCAL 11. Nov 2009 09:14

Re: Windows SystemMessage Icons in 16x16 laden?
 
Zitat:

Die gibt es ja schon sein Windows 3.11. Und so lange man die Konstanten verwendet und nichts hardcodet, sollte da nichts passieren
Denke ich auch.

Nur können sich halt, wie es MS beliebt, die Grösse und das Aussehen der Symbole ändern oder auch nicht. ;)
Vorhanden sind sie schon.

newbe 11. Nov 2009 11:08

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

Also der Code funktioniert erstmal, jedoch ist das Icon 32x32 und nicht 16x16 groß, so wie ich es gerne hätte.

mfG newbe

DeddyH 11. Nov 2009 11:10

Re: Windows SystemMessage Icons in 16x16 laden?
 
Dann lad sie doch in 32x32 und stell das TImage auf 16x16, Stretch und Proportional auf true.

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:41 Uhr.

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