Einzelnen Beitrag anzeigen

Benutzerbild von woelfchen
woelfchen

Registriert seit: 17. Dez 2003
14 Beiträge
 
#3

Re: Icon-Position aus Icon-Library finden

  Alt 18. Dez 2003, 18:04
hallo sakura,

erstmal vielen dank für den Hinweis. Wie ich oben schon schrieb', bin ich (blutiger) Anfänger, und hab' mal dein Code probiert, leider ohne erfolg:

Inhalt der main.pas:
Delphi-Quellcode:
unit main;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ShellAPI, StdCtrls, ExtCtrls;

type
  TForm1 = class(TForm)
    PaintBox1: TPaintBox;
    OpenDialog1: TOpenDialog;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

  procedure DrawFile(Name: String);

var
  Form1: TForm1;
implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  if OpenDialog1.Execute then
    DrawFile(OpenDialog1.FileName);
end;

procedure TForm1.DrawFile(Name: String);
var
  FileInfo: TSHFileInfo;
  ImageListHandle: THandle;
  aIcon: TIcon;
begin
  // Speicher löschen
  FillChar(FileInfo, SizeOf(FileInfo), #0);
  // Handle der Image Liste der ausgewählten Datei ermitteln
  ImageListHandle := SHGetFileInfo(
    PChar(Name), 0, FileInfo, SizeOf(FileInfo),
    // großes Icon verlangen
    SHGFI_ICON or SHGFI_LARGEICON
  );
  try
    // TIcon Objekt erstellen
    aIcon := TIcon.Create;
    try
      // Icon Handle zuweisen
      aIcon.Handle := FileInfo.hIcon;
      // Transparent darstellen
      aIcon.Transparent := True;
      with PaintBox1 do begin
         // Paintbox auf die entsprechende Größe bringen
         Width := aIcon.Width;
         Height := aIcon.Height;
         Application.ProcessMessages;
         // Paintbox löschen
         Canvas.Rectangle(-1, -1, Succ(Width), Succ(Height));
         // Icon darstellen
         Canvas.Draw(0, 0, aIcon);
      end;
    finally
      // TIcon Objekt freigeben
      FreeAndNil(aIcon);
    end;
  finally
    // Icon der Shell wieder freigeben
    DestroyIcon(FileInfo.hIcon);
    // Icon Liste der Shell wieder freigeben
    ImageList_Destroy(ImageListHandle);
  end;
end;

end.
compiler-meldungen:
Delphi-Quellcode:
[Fehler] main.pas(35): Undefinierter Bezeichner: 'DrawFile'
[Fehler] main.pas(45): Undefinierter Bezeichner: 'Name'
[Fehler] main.pas(57): Undefinierter Bezeichner: 'PaintBox1'
[Fehler] main.pas(59): Undefinierter Bezeichner: 'Width'
[Fehler] main.pas(60): Undefinierter Bezeichner: 'Height'
[Fehler] main.pas(63): Undefinierter Bezeichner: 'Canvas'
[Fehler] main.pas(63): Konstantenausdruck verletzt untere Grenzen
[Fehler] main.pas(63): Nicht genügend wirkliche Parameter
[Fehler] main.pas(65): Operator oder Semikolon fehlt
[Fehler] main.pas(75): Undefinierter Bezeichner: 'ImageList_Destroy'
[Fehler] main.pas(21): Ungenügende Forward- oder External-Deklaration: 'DrawFile'
[Fataler Fehler] iconfind.dpr(5): Verwendete Unit 'main.pas' kann nicht compiliert werden

wo hab' ich denn was vergessen?



woelfchen
  Mit Zitat antworten Zitat