Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Icon in Image zeichnen (https://www.delphipraxis.net/10793-icon-image-zeichnen.html)

devnull 25. Okt 2003 15:12


Icon in Image zeichnen
 
Hi,

ich habe ein Image Objekt (Größe 20x17 Pixel) und ein Icon (Größe 64x64 Pixel).

Wie kann ich das ganze Icon verkleinern, so dass es komplett im Image angezeigt wird?
Es ist egal, wie verzerrt das dann Ding ist :-D

devnull

Matze 25. Okt 2003 16:29

Re: Icon in Image zeichnen
 
Delphi-Quellcode:
Image1.Stretch:=true;
Image1.Proportional:=true;

Matze 25. Okt 2003 16:30

Re: Icon in Image zeichnen
 
Achja, wenn's verzerrt sein soll einfach
Delphi-Quellcode:
Image1.Proportional:=true;
weglassen.

devnull 25. Okt 2003 16:54

Re: Icon in Image zeichnen
 
Hi Matze,

Delphi-Quellcode:
procedure geticon (x,y,h,w : integer; filename : string);
var
 MyIcon:TIcon;
 icoHandle: HIcon;
 Image1 : TImage;
begin
 Image1 := TImage.Create(Form1);
 Image1.Top := y;
 Image1.Left := x;
 Image1.Parent := Form1;

 MyIcon:=TIcon.Create;
 try
  icoHandle := ExtractIcon(application.handle,pchar(filename), 0);
  MyIcon.Handle := icoHandle;
  Image1.Height := h;
  Image1.Width := w;
    Image1.Picture.Icon := MyIcon;
  Image1.Proportional := true;
 finally
  MyIcon.free;
 end;
end;
:?: Das funzt so nicht.


Wird im Proze Kopf übergeben.
Delphi-Quellcode:
  Image1.Height := 20;
  Image1.Width := 18;

:wall: Die Icons in den EXE-Dateien sind größer als 20x18 Pixel !!!! WARUM GEHT DAS NICHT ????


devnull

Matze 25. Okt 2003 17:06

Re: Icon in Image zeichnen
 
Kannst du mir mal auf die Sprünge helfen? Welche Unit hab ich denn vergessen?

Zitat:

[Fehler] Unit1.pas(28): Undefinierter Bezeichner: 'ExtractIcon'
Edit: den Cool-Smiley hab ich nicht absichtlich da hin gesteckt.

devnull 25. Okt 2003 17:10

Re: Icon in Image zeichnen
 
Hi Matze,

probier es mal mit ShellAPI


devnull

Matze 25. Okt 2003 18:17

Re: Icon in Image zeichnen
 
Es ist keine schöne Lösung:

Delphi-Quellcode:
//exe auswählen
procedure TForm1.Button1Click(Sender: TObject);
begin
  if OpenDialog1.Execute then
  DrawFile(OpenDialog1.FileName);

  Image1.Picture.SaveToFile(ExtractFilePath(ParamStr(0))+'Icon.bmp');
  Image1.Width:=20;
  Image1.Height:=18;
  Image1.Picture.LoadFromFile(ExtractFilePath(ParamStr(0))+'Icon.bmp');
  Image1.Stretch:=true;
end;

//Icon auslesen:
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 Image1 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;

Matze 25. Okt 2003 18:20

Re: Icon in Image zeichnen
 
Achja,
Delphi-Quellcode:
Image1.Proportional:=true;
hab ich noch vergessen.

devnull 25. Okt 2003 18:44

Re: Icon in Image zeichnen
 
@ Matze,

noch einmal danke.
wie kann ich diese bilder über einen button legen ??
Bis jetzt werden Sie unter dem button gezeichnet !

devnull

Matze 25. Okt 2003 19:01

Re: Icon in Image zeichnen
 
Nimm einfach einen SpeedButton oder einen BitBtn, dann bei Glyph das Bildchen angeben.


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:58 Uhr.

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