Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Image aus TImage als Icon in einer TImageList (https://www.delphipraxis.net/65427-image-aus-timage-als-icon-einer-timagelist.html)

delphinia 16. Mär 2006 14:19


Image aus TImage als Icon in einer TImageList
 
Das Topic sagt eigendlich schon alles.

Mein Problem ich steht wie nen Kuh vor einer Aphotheke :wall: und weis nicht,

wie ich ein Bild, welches in einem TImage ist in ein Icon für die TImageList speichere?!

:gruebel:

marabu 16. Mär 2006 18:57

Re: Image aus TImage als Icon in einer TImageList
 
Hallo Doreen,

du hast eine BMP-Datei in eine TImage-Komponente geladen und möchtest Sie von dort in eine ImageList übernehmen?

Delphi-Quellcode:
with ImageList do
  InsertMasked(Count, Picture.Bitmap, Picture.Bitmap.TransparentColor);
Grüße vom marabu

delphinia 16. Mär 2006 19:07

Re: Image aus TImage als Icon in einer TImageList
 
habe schon verschieden functionen die ich im Internet gefunden habe probiert.

Auch deinen Vorschlag...

Aber wie auch bei den Functionen die ich fand ist auch bei deinem Vorschalg
die gleiche Fehlermeldung!

Zitat:

Ungültige Bildgröße

ich fand 1
Delphi-Quellcode:
procedure bmp2ico(Image: TImage; FileName: TFilename);
var
  Bmp: TBitmap;
  Icon: TIcon;
  ImageList: TImageList;
begin
  Bmp := TBitmap.Create;
  Icon := TIcon.Create;
  try
    Bmp.Assign(Image.Picture.Bitmap);
    ImageList := TImageList.CreateSize(32, 32);
    try
      ImageList.AddMasked(Bmp, Bmp.TransparentColor);
      ImageList.GetIcon(0, Icon);
      Icon.SaveToFile(FileName);
    finally
      ImageList.Free;
    end;
  finally
    Bmp.Free;
    Icon.Free;
  end;
end;

ich fand 2
Delphi-Quellcode:
function BitmapToIcon_4(const Source: TBitmap): HICON;
var
  bmpMask: TBitmap;
  bmpTemp: TBitmap;
  pInfo:   TIconInfo;

begin
  bmpMask                    := TBitmap.Create();
  bmpMask.Width              := 16;
  bmpMask.Height             := 16;
  bmpMask.Canvas.Brush.Color := clFuchsia;
  bmpMask.Canvas.FillRect(Rect(0, 0, bmpMask.Width, bmpMask.Height));

  bmpTemp := TBitmap.Create();
  bmpTemp.Assign(Source);

  with pInfo do begin
    fIcon    := True;
    xHotspot := 0;
    yHotspot := 0;
    hbmMask  := bmpMask.Handle;
    hbmColor := bmpTemp.Handle;
  end;

  Result := CreateIconIndirect(pInfo);
  FreeAndNil(bmpTemp);
  FreeAndNil(bmpMask);
end;

aber alle diese funktionieren bei mir nicht ;(

marabu 16. Mär 2006 19:36

Re: Image aus TImage als Icon in einer TImageList
 
Du kannst nicht wahllos irgendwelchen Code ausprobieren. Eine ImageList nimmt Bilder mit gleichem Format auf. Das Format konfigurierst du vor dem Laden der Bilder. Wenn dein Image.Picture.Bitmap geladen werden soll, dann muss es das festgelegte Format haben. Notfalls musst du dein Bild erst auf dieses Format bringen.

marabu

delphinia 17. Mär 2006 07:04

Re: Image aus TImage als Icon in einer TImageList
 
ok anders ich versuche mal zu erklären was ich eigentlich Vorhabe!

Ich scanne das System32 Verzeichnis nach EXE udn DLLs - bez. nach deren Icons.
Diese werden dann in einer ListView angezeigt soweit so gut.

Nun damit ich nicht immer wieder neuscannen muss, habe ich mich für die Komponente JvImageList entschieden da diese ihren Inhalt in einer Datei speichern kann!

Wo wir nun beim Problem sind

ich muss aufgrund der Schwärzenrändern um den Icons diesen Code * benutzten

Nun leider ist es so das wenn ich das nutzte die Icons die gespeichert werden unbrauchbar sind - beim laden sehe ich keine Icons. erst wenn ich den Code deaktiviere funktioniert das so wie ich es haben will nur leider mit "hässlichen " Icons.

Daher dachte ich, gehe ich einen Umweg über eine TImage und einer 2ten JvImageList die nicht vom Code aus der OnCreate beeinflusst wurde.
Leider war dies auch nicht möglich auch bei dem "Umweg" sind die Icons nicht da ;(

Hoffe ich habe mein Problem "gut" beschrieben und jemand kann mir nun dadurch besser helfen ;)

Danke Euch für Eure Mühen...
Gruss Doreen


*
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var
  SHFileInfo: TSHFileInfo;
  SysIcons: THandle;
begin

  try
    SysIcons := SHGetFileInfo(PChar(copy(ParamStr(0), 1, 3)), 0, SHFileInfo, SizeOf(SHFileInfo), SHGFI_SYSICONINDEX OR SHGFI_LARGEICON);
  finally
    DestroyIcon(SHFileInfo.hIcon);
  end;
  JvImageList1.Handle := SysIcons;
end;
[edit=sakura] Push-Beitrag entfernt. Bitte mind. 24 Stunden warten. Mfg, sakura[/edit]


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:49 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