Hallo,
Post by Thomas CebullaWie bekomme ich aber nun das Shieldicon elegant als Bitmap, um es zum
Beispiel einem Toolbutton zuzuwesen?
Image = Bitmap.FromHicon(SystemIcons.Shield.Handle);
//http://www.danielmoth.com/Blog/2007/12/systemiconsshield.html
Wie macht man das mit VCL32?
Es gibt eine Shell-API Funktion, mit dem man Shell Stock-Icons laden kann:
SHGetStockIconInfo()
Hilfe dazu gibt's in der von Borland/CodeGear mitgelieferten
Dokumentation nicht, aber Online:
http://msdn2.microsoft.com/en-us/library/bb762205(VS.85).aspx
Die entsprechenden Konstanten für SHGSI_xxx sind natürlich auch nicht in
der Delphi-Umsetzung enthalten; hier muss man selber nachhelfen. Zum
Glück gibts das Visual Studio 2008 Express incl. Platform SDK kostenlos
zum download; in den Include-Dateien erfährt man dann auch die Wert der
benötigten Konstanten und den Aufbau der Struktur TSHStockIconInfo.
Also:
const
IDI_APPLICATION = 32512;
IDI_HAND = 32513;
IDI_QUESTION = 32514;
IDI_EXCLAMATION = 32515;
IDI_ASTERISK = 32516;
IDI_WINLOGO = 32517;
IDI_SHIELD = 32518; // <- das Objekt der Begierde.
IDI_WARNING = IDI_EXCLAMATION;
IDI_ERROR = IDI_HAND;
IDI_INFORMATION = IDI_ASTERISK;
SIID_SHIELD = 77; // <- nochmal das Shield
SHGSI_ICON = $0100; // für SHGetStockIconInfo
SHGSI_LARGEICON = $0000;
SHGSI_SMALLICON = $0001;
type
TSHStockIconInfo = record
cbSize : DWORD;
hIcon : THandle;
iSysImageIndex: Integer;
iIcon : Integer;
szPath : Array[0..MAX_PATH-1] of WideChar;
end;
function SHGetStockIconInfo(
SIID : Integer; uFlags: UINT; var SSI: TSHStockIconInfo
): HResult; stdcall; external 'shell32.dll';
procedure TForm1.Button1Click(Sender: TObject);
var
hIcon : THandle;
SSII : TSHStockIconInfo;
ResCode : HResult;
begin
//========================================
// Variante 1: via LoadIcon
// Stock Icon laden
hIcon := LoadIcon(0, PChar(IDI_SHIELD);
Image1.Picture.Icon.Handle := hIcon;
//========================================
// Variante 2a: kleines Icon
SSII.cbSize := SizeOf(SSII);
ResCode := SHGetStockIconInfo(SIID_SHIELD,
SHGSI_ICON or SHGSI_SMALLICON,
SSII);
if Succeeded(ResCode) then
Image1.Picture.Icon.Handle := SSII.hIcon;
//========================================
// Variante 2b: Großes Icon
SSII.cbSize := SizeOf(SSII);
ResCode := SHGetStockIconInfo(SIID_SHIELD,
SHGSI_ICON or SHGSI_LARGEICON,
SSII);
if Succeeded(ResCode) then
Image1.Picture.Icon.Handle := SSII.hIcon;
end;
So, jetzt hast Du das Shield in einem Icon. Wie man das zu einer
ImageList oder in einen ToolButton bekommt, überlasse ich Dir :-)
HTH
Achim