16番会議室「玉石混淆みんなで作るSample蔵」に寄せられたサンプル
"Bitmapの描画例"
この発言に対し以下のコメントが寄せられています
#01045 snail さん RE:Bitmapの描画例
たこなプリンタドライバではStretchDrawが使えないので,Forms.pasの
PrintメソッドをまねしてStreatchDIBitsを使って描画します.
Bitmap: TBimap;
procedure TMyImage.Paint;
var
HBitmap: HBITMAP;
pInfo: PBitmapInfo;
InfoSize: Integer;
pImage: Pointer;
ImageSize: DWORD;
begin
if FAutosize then begin
width:=(version*4+17)*FBarwidth+2;
height:=width;
end;
Canvas.Lock;
if (GetDeviceCaps(Canvas.Handle, RASTERCAPS) and RC_STRETCHDIB)<> 0 then
begin
HBitmap := Bitmap.Handle;
GetDIBSizes(HBitmap, InfoSize, ImageSize);
pImage := AllocMem(ImageSize);
try
pInfo := AllocMem(InfoSize);
try
GetDIB(HBitmap, 0, pInfo^, pImage^);
StretchDIBits(Canvas.Handle, 0, 0, ClientWidth, ClientHeight, 0, 0,
pInfo^.bmiHeader.biWidth, pInfo^.bmiHeader.biHeight, pImage,
pInfo^, DIB_RGB_COLORS, SRCCOPY);
finally
FreeMem(pInfo, InfoSize);
end;
finally
FreeMem(pImage, ImageSize);
end;
end else begin
Canvas.StretchDraw(ClientRect, Bitmap)
end;
Canvas.UnLock;
end;
CanvasにPrinterDC HandleがセットされていてもOKというわけ.
TN(CQJ01721)
Original document by TN 氏 ID:(CQJ01721)
ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum の16番会議室「玉石混淆みんなで作るSample蔵」に投稿されたサンプルです。これらのサンプルはボーランド株式会社がサポートする公式のものではありません。また、必ずしも動作が検証されているものではありません。これらのサンプルを使用したことに起因するいかなる損害も投稿者、およびフォーラムスタッフはその責めを負いません。使用者のリスクの範疇でご使用下さい。
Copyright 1996-2002 Delphi Users' Forum
|