Einzelnen Beitrag anzeigen

madas

Registriert seit: 9. Aug 2007
207 Beiträge
 
#3

AW: Icons "fransen" mit der Zeit aus?

  Alt 1. Mär 2016, 07:40
Einfach die Images via res-Datei als Resource in eine DLL packen und dann an gewünschter Stelle im Programm in die ImageList laden.
DrawingStyle der ImageList auf dsTransparent setzen. Die Abmessungen der Bilder in der DLL sollten zu denen der ImageList passen.
Zum Erstellen der res-Datei verwenden wir den XN-Resource-Editor.

Projekt für die DLL erstellen mit einer pas-Datei, die alle Konstanten für die Namen der einzelnen Bilder pflegt
Code:
const
  RES_TOOLBAR_BTN_PNG = 'RESOURCE_IDENTIFIER'; // name des Bildes/der Resource in der DLL
  ...
und in der Projektdatei, diese pas-Datei und die res-Datei einbindet.

Code:
library imageContainingResource;

uses
  SysUtils,
  Classes,
  ToolbarImages in 'ToolbarImages.pas';

{$R imageContainingResource.res}
{$R ToolbarImages.res} //Datei mit Images

begin
end.
Und dann im eigentlichen Programm darauf zugreifen.

Code:
uses
  ..., ToolbarImages, ...

const
  TOOLBAR_IMG_RESOURCE_DLL = 'imageContainingResource.dll';

...

procedure LoadPNGFromResourceDll(png: TPNGObject; ResDll: string; const ResName: string);
var
  h: THandle;
begin
  h := 0;
  try
    h := LoadLibrary(PChar(ResDll));
    if (h <> 0) then
      png.LoadFromResourceName(h, ResName);
  finally
    FreeLibrary(h);
  end;
end;

...

procedure TFormTest.InitImgList;
var
  png: TPngImage;
  bmp: TBitmap;
begin
  png := TPngImage.Create;
  bmp := TBitmap.Create;
  try
    LoadPNGFromResourceDll(png, TOOLBAR_IMG_RESOURCE_DLL, RES_TOOLBAR_BTN_PNG);
    bmp.Assign(png);

    // Variante 1
    imgList.Add(bmp, nil);
    // Variante 2
    imgList.AddMasked(bmp, clWhite);

    png.Assign(nil);
    bmp.Assign(nil);
  finally
    bmp.Free;
    png.Free;
  end;
madas

Geändert von madas ( 1. Mär 2016 um 07:52 Uhr)
  Mit Zitat antworten Zitat