Glyph из ресурсов DLL
Но как же извлечь глифы для кнопок (TBitBtn, TSpeedButton и т.д.)? Ответ ниже, в исходном коде. Код простой, поэтому без комментариев:

uses
{ ... }, JPEG;
{ ... }
private
{ Private declarations }
procedure LoadGlyph(Sender: TObject);
{ ... }
var
Form1: TForm1;
h: HWND;
{$IFDEF WIN32}
const BadDllLoad = 0;
{$ELSE}
const BadDllLoad = 32;
{$ENDIF}
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
h:= LoadLibrary('appres.dll');
if h <= BadDllLoad then
ShowMessage('Не могу загрузить DLL!')
else
LoadGlyph(Self);
end;
procedure TForm1.LoadGlyph(Sender: TObject);
var
strm: TResourceStream;
image: TJPEGImage;
bmp: TBitmap;
begin
image:= TJPEGImage.Create;
strm:= TResourceStream.Create(h, '#4', RT_RCDATA);
strm.Seek(0, soFromBeginning);
image.LoadFromStream(strm);
Image1.Canvas.Draw(0, 0, image);
image.Free;
strm.Free;
image:= TJPEGImage.Create;
bmp:= TBitmap.Create;
strm:= TResourceStream.Create(h, '#3', RT_RCDATA);
strm.Seek(0, soFromBeginning);
image.LoadFromStream(strm);
bmp.Assign(image);
BitBtn1.Glyph:= bmp;
bmp.Free;
strm.Free;
image.Free;
end;
Изображения в ресурсах находятся в JPG формате, так они занимают меньше места, чем BMP.
И не забудьте уничтожить дескриптор библиотеки при закрытии приложения!
Комментарии