
첨부한 이미지와 같은 폼에서 왼쪽 부분인 차트와 차트밑의 레이블들의 값을 프린트하고자 합니다.
chart 컴포넌트의 print를 사용하니...레이블들이 프린트되지를 않고.. ㅜㅜ
form.print를 사용하니...왼쪽 위로 쏠려서 프린트되고... ㅜㅜ
getDC를 써서 이미지를 캡춰한뒤 프린트하는 방법은 모르겠고...ㅜㅜ
printDialog로 도 어떻게 사용하는지를 모르겠고...
정말 미치겠습니다...
위에서는 안되는게 어딨냐고....
무조건 까라면 까라고 하고...
좀 도와주십쇼...
부탁드립니다.
아래 코드들이 적절한 참고자료가 될것 같습니다..
아래는 폼의 일부분을 이미지로 저장하는 루틴과 이미지를 출력하는 루틴입니다.
적절히 응용하셔서 즐거운 프로그래밍 하시길~
//폼의 특정부위 (아래예제는 폼위에 판넬크기만큼 캡쳐) 를 이미지로 저장
procedure TForm1.Button1Click(Sender: TObject);
var PnlBmp : TBitmap;
PnlCanvas: TCanvas;
PnlRect : TRect;
BmpFileName: String;
begin
BmpFileName:= ExtractFilePath(Application.ExeName) + 'aaa.bmp';
with Panel1 do
PnlRect := Rect(Left, Top, (Left + Width),(Top + Height));
PnlCanvas := TCanvas.Create;
PnlBmp := TBitmap.Create;
try
PnlCanvas.Handle := GetDC(0);
PnlBmp.Width := Panel1.Width;
PnlBmp.Height := Panel1.Height;
PnlBmp.Canvas.CopyMode := cmSrcCopy;
PnlBmp.Canvas.CopyRect(Rect(0, 0, Panel1.Width, Panel1.Height), PnlCanvas, PnlRect);
PnlBmp.SaveToFile(BmpFileName);
finally
PnlBmp.Free;
PnlCanvas.Free;
end;
end;
//이미지를 출력
procedure DrawImage(Canvas: TCanvas; DestRect: TRect; ABitmap: TBitmap);
var
Header, Bits: Pointer;
HeaderSize, BitsSize: Integer;
begin
GetDIBSizes(ABitmap.Handle, HeaderSize, BitsSize);
GetMem(Header, HeaderSize);
GetMem(Bits, BitsSize);
try
GetDIB(ABitmap.Handle, ABitmap.Palette, Header^, Bits^);
StretchDIBits(Canvas.Handle, DestRect.Left, DestRect.Top,
DestRect.Right - DestRect.Left, DestRect.Bottom - DestRect.Top,
0, 0, ABitmap.Width, ABitmap.Height, Bits, TBitmapInfo(Header^),
DIB_RGB_COLORS, SRCCOPY);
finally
FreeMem(Header, HeaderSize);
FreeMem(Bits, BitsSize);
end;
end;
이미지 출력 호출은 다음과 같이... (Left, Top, Right, Bottom 은 인쇄하는 크기)
DrawImage(Printer.Canvas, Rect(Left, Top, Right, Bottom), MyBitmap);