ترفندي براي گرفتن تصوير يك Chart ( نمودار )
سلام ...
يكي از مشكلاتي كه بعضا در نرم افزارهاي بانك اطلاعاتي و نرم افزارهايي كه به نوعي با نمودار ( chart ) سر و كار دارند ، چاپ نمودار است ...
يك راه ساده براي گرفتن تصوير يك chart ( يا هر كنترل گرافيكي ديگر ) :
فكر كنم همه دوستان در آرشيوشون ، كد مربوط به گرفتن عكس از صفحه نمايش رو داشته باشن ، اين تابع با گرفتن DC مربوط به صفحه نمايش ( يا همون Screen ) ، اقدام به گرفتن تصوير از اون ميكنه ، كد اين رويه به صورت زير هست :
کد:
procedure TMainFrm.GetBtnClick(Sender: TObject);
var
DC : HDC;
B : TBitmap;
begin
b := MImg.Picture.Bitmap;
DC := GetDC(GetDesktopWindow);
try
B.Width := GetDeviceCaps(DC, HORZRES);
B.Height := GetDeviceCaps(DC, VERTRES);
BitBlt(B.Canvas.Handle,
0,
0,
B.Width,
B.Height,
DC,
0,
0,
SRCCOPY) ;
finally
ReleaseDC(GetDesktopWindow, DC);
end;
end;
حالا با كمي تغيير ، يعني با دادن Handle مربوط به Chart به تابع GetDC در كد بالا ، ميشه به جاي DC صفحه نمايش ، DC مربوط به Chart رو در اختيار داشت ، به كد زير دقت كنيد :
کد:
procedure TMainFrm.GetChartShot;
var
rc :trect;
DC : HDC;
Canvas : TCanvas;
MyBitmap : TBitmap;
begin
try
rc := rect(0, 0, Chartfx.Width, Chartfx.Height);
Canvas := TCanvas.Create;
MyBitmap := TBitmap.Create;
DC := GetDC(Chartfx.Handle);
Canvas.Handle := DC;
MyBitmap.Width := Chartfx.Width;
MyBitmap.Height := Chartfx.Height;
MyBitmap.Canvas.CopyRect(Rc, Canvas, Rc);
MyBitmap.SaveToFile('MyBitmap.bmp');
finally
MyBitmap.Free;
Canvas.Free
end;
در كد بالا از DC مربوط به Chart عكس گرفته ميشه ، باقي كدها هم براي ذخيره عكس هستند ...
با اين ترفند ، تصوير Chart رو ميشه استخراج كرد و بعد اون رو به صورت جداگونه چاپ كرد ، البته براي چاپ راه هاي بهتري هم هست ولي در برنامه هايي كه فقط نياز به تصوير هست ، ميشه از اين راه استفاده كرد ...
از لينك زير ميتونيد برنامه نمونه اي كه اين كار رو انجام ميده رو دانلود كنيد :
کد:
http://nabegheh.parsaspace.com/DelphiTutrials/GetChartShot.rar
موفق باشيد ...