▼ Mr.XRAYさん
> しかし,BPL のコンポーネントのビットマップは取得できません.
が〜ん・・・
近い環境ということで、Delphi6で試してみたのですが、以下のほぼ丸コピー
動いています。
なぜだろう?
bplのフルパスを格納したEdit1: TEdit
EnumResourceNames でビットマップリソース名を列挙する ListBoxNames:TListBox
リソースビットマップを表示するImageRes: TImage
var
hHandle: THandle;
hBmp: HBitmap;
tagBmp :tagBitmap;
newBmp: TBitmap;
memDC :HDC;
begin
if ListBoxNames.ItemIndex < 0 then begin
end
else begin
//ロード
hHandle :=LoadLibrary(PChar(Edit1.Text));
if hHandle <> 0 then begin
//Bitmapリソース検索
hBmp := LoadImage(hHandle, MakeIntResource(PChar(ListBoxNames.Items[ListBoxNames.ItemIndex])), IMAGE_BITMAP,
0, 0, 0);
try
if hBmp <> 0 then begin
//ビットマップ情報を取得
GetObject(hBmp, Sizeof(tagBmp), @tagBmp);
newBmp := TBitmap.Create;
try
newBmp.Width := tagBmp.bmWidth;
newBmp.Height := tagBmp.bmHeight;
//TBitmap互換のメモリデバイスコンテキストを生成
memDC :=CreateCompatibleDC(newBmp.Canvas.Handle);
try
SelectObject(memDC, hBmp);
//ビットマップにコピー
BitBlt(newBmp.Canvas.Handle, 0, 0, tagBmp.bmWidth, tagBmp.bmHeight,
memDC, 0, 0, SRCCOPY);
//Imageにコピー
ImageRes.Picture.Bitmap.Assign(newBmp);
finally
DeleteDC(memDC);
end;
finally
newBmp.Free;
end;
end;
finally
DeleteObject(hBmp);
end;
//解放
FreeLibrary(hHandle);
end;
end;
end;
|