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.
И не забудьте уничтожить дескриптор библиотеки при закрытии приложения!
Комментарии