// Es wird der Icondialog zum Aussuchen eines Icons aufgerufen.
// Dabei bezeichnet "Datei" die entsprechende Datei
(welche
//
mindestens 1 Icon enthalten sollte) und "IconIndex" welches
// Icon bei der Anzeige markiert ist. Nach dem Klick auf OK gibt
// dann "Datei" die Datei zurück, auf die man gewechselt hat, und
// "IconIndex" den Index des gewählten Icons.

// Variante 1
// Getestet mit D4 unter XP

uses shellapi; 
 
function PickIconDlgA(OwnerWnd: HWND; lpstrFile: PAnsiChar; 
  var nMaxFile: LongInt; var lpdwIconIndex: LongInt): LongBool; stdcall; 
  external 'SHELL32.DLL' index 62; 
 
function IconDialog(H: THandle; var IconIndex: integer; var Datei: TFilename): boolean; 
var 
  nMaxF, x, lg: Integer; 
  buffer: PChar; 
begin 
  Result := false; 
  if not Fileexists(Datei) then exit; 
  nMaxF := MAX_PATH * 2; 
  buffer := AllocMem(nMaxF); 
  lg := length(Datei); 
  x := 1; 
  repeat 
    buffer[pred(x) * 2] := Datei[x]; 
    inc(x); 
  until x > lg; 
  try 
    if PickIconDlgA(H, buffer, nMaxF, IconIndex) 
      then begin 
      Datei := ''; 
      x := 0; 
      while x < nMaxF do begin 
        if (buffer[x] = #0) and (buffer[x + 1] = #0) then break; 
        Datei := Datei + buffer[x]; 
        inc(x, 2); 
      end; 
      Result := IconIndex > -1; 
    end; 
  except 
  end; 
  FreeMem(buffer); 
end; 
 
// Beispielaufrufe 
 
var 
  Datei: TFilename; 
  IconIndex: Integer; 
 
procedure TForm1.Button1Click(Sender: TObject); 
begin 
  IconIndex := 0; 
  Datei := Application.Exename; 
  if IconDialog(Handle, IconIndex, Datei) then 
    DrawIcon(Canvas.Handle, 10, 10, 
      ExtractIcon(Hinstance, PChar(Datei), IconIndex)); 
end; 
 
procedure TForm1.Button2Click(Sender: TObject); 
begin 
  IconIndex := 13; 
  Datei := 'C:\WINDOWS\system32\shell32.dll'; 
  if IconDialog(Handle, IconIndex, Datei) then 
    Icon.Handle := ExtractIcon(Hinstance, PChar(Datei), IconIndex); 
end;

// --------------------------------------------------------------


// Variante 2
// Getestet mit D2010 unter W7

uses shellapi; 
 
var 
  Datei: String; 
  IconIndex: integer; 
 
function PickIconDlgA(OwnerWnd: HWND; lpstrFile: String; var nMaxFile: LongInt; 
  var lpdwIconIndex: LongInt): LongBool; stdcall; 
external 'SHELL32.DLL' index 62; 
 
function IconDialog(H: THandle; var IconIndex: integer; 
  Filename: String): boolean; 
var 
  nMaxF: integer; 
begin 
  Result := false; 
  nMaxF := Max_Path; 
  if not Fileexists(Datei) then 
    exit; 
  try 
    if PickIconDlgA(H, Filename, nMaxF, IconIndex) then 
    begin 
      Result := IconIndex > -1; 
    end; 
  except 
  end; 
end; 
 
// Beispielaufruf
 
procedure TForm2.Button2Click(Sender: TObject); 
var 
  ic: TIcon; 
begin 
  ic := TIcon.Create; 
  IconIndex := 5; 
  Datei := 'D:\Program Files\Microsoft Office\OFFICE11\Excel.exe'; 
  if IconDialog(Handle, IconIndex, Datei) then 
    ic.Handle := ExtractIcon(Hinstance, PChar(Datei), IconIndex); 
  Form2.Icon := ic; 
  ic.Free; 
end; 


 

Zugriffe seit 6.9.2001 auf Delphi-Ecke