nassim_20
سه شنبه 25 تیر 1387, 09:53 صبح
برای چاپ image من این کد رو نوشتم ولی ارور میده
procedure TForm3.TransImageButton5Click(Sender: TObject);
var rr:TRect;
begin
if printdialog1.Execute then
begin
with Printer do
begin
BeginDoc;
try
RR := Rect(0, 0, Img_1.picture.Width , Img_1.Picture.Height );
Canvas.StretchDraw(RR, Img_1.Picture.Graphic);
finally
EndDoc;
end;
end;
end;
end;
اینم ارورش
[Error] Unit3.pas(339): Incompatible types: 'QGraphics.TGraphic' and 'Graphics.TGraphic'
vcldeveloper
سه شنبه 25 تیر 1387, 12:49 عصر
خب خودش داره میگه که!
یونیت QGraphics مربوط به برنامه های Cross-plateform نوشته شده با CLX هست. یونیت Graphics هم مربوط به برنامه های تحت ویندوز نوشته شده با VCL. شما احتمالا جایی شی ایی از کلاس TGraphic در یونیت QGraphics ساختید و قصد دارید آن را به یک کلاس TGraphic در Graphics نسبت بدید، یا دارید از یکی از کامپوننت های CLX استفاده می کنید، ولی اشیاء مورد نظر خود را از کلاس های موجود در Graphics استفاده می کنید.
باید در هر برنامه فقط از یکی از این مجموعه ها استفاده کنید؛ یا یونیت های VCL، یا یونیت های CLX که با حرف Q شروع میشند. این دو مجموعه نباید با هم ترکیب بشند، چون کلاس های موجود در آنها نام مشابه دارند، ولی پیاده سازی آنها با هم فرق دارد و با هم سازگار نیستند.
Hsimple11
سه شنبه 25 تیر 1387, 16:06 عصر
این کد به تنهایی مشکلی ندارد و همانطور که گفته شد در جای دیگری کدتان اشکال دارد.
uses
Printers;
.
.
.
procedure TForm1.Button1Click(Sender: TObject);
var
RR: TRect;
begin
with Printer do
begin
BeginDoc;
try
RR := Rect(0, 0, Image1.picture.Width , Image1.Picture.Height );
Canvas.StretchDraw(RR, Image1.Picture.Graphic);
finally
EndDoc;
end;
end;
end;
اصغر (پآچ)
سه شنبه 25 تیر 1387, 18:10 عصر
سلام دوست من
من یه کد دارم برای چاپ عکس در قطع های متفاوت فقط مشکلش اینه که عکس داخل Image حتما باید از نوع Bitmap باشه برای استفاده از این باید عکس مورد نظرت رو اول با پسوند BMp ذخیره کنی بعد این روال رو فراخوانی کنی
این هم کدش شاید بدردت بخوره:
uses
..., Printers;
.
.
.
.
procedure PrintImageClick(Sender: TObject);
procedure PrintImage(Image: TImage; ZoomPercent: Integer);
procedure DrawImage(Canvas: TCanvas; DestRect: TRect; ABitmap: TBitmap);
.
.
.
procedure TFrm_Preview.PrintImageClick(Sender: TObject);
var
Pic: TBitmap;
WinDir: PChar;
FileName: String;
begin
Pic := TBitmap.Create;
Pic.Assign(Image2.Picture.Graphic);
GetMem(WinDir, 144);
GetWindowsDirectory(WinDir, 144);
StrCat(WinDir, '\Temp\PicPrt.Bmp');
FileName := StrPas(WinDir);
Pic.SaveToFile(ChangeFileExt( FileName, '.Bmp'));
Image2.Picture.Metafile.Clear;
Image2.Picture.LoadFromFile(FileName);
if PrintDialog1.Execute then
PrintImage(Image2, 100);
end;
procedure DrawImage(Canvas: TCanvas; DestRect: TRect; ABitmap: TBitmap);
var
Header, Bits: Pointer;
HeaderSize: DWORD;
BitsSize: DWORD;
begin
GetDIBSizes(ABitmap.Handle, HeaderSize, BitsSize);
Header := AllocMem(HeaderSize);
Bits := AllocMem(BitsSize);
try
GetDIB(ABitmap.Handle, ABitmap.Palette, Header^, Bits^);
StretchDIBits(Canvas.Handle, DestRect.Left, DestRect.Top,
DestRect.Right, DestRect.Bottom,
0, 0, ABitmap.Width, ABitmap.Height, Bits, TBitmapInfo(Header^),
DIB_RGB_COLORS, SRCCOPY);
finally
FreeMem(Header, HeaderSize);
FreeMem(Bits, BitsSize);
end;
end;
procedure TFrm_Preview.PrintImage(Image: TImage; ZoomPercent: Integer);
var
relHeight, relWidth: integer;
begin
Screen.Cursor := crHourglass;
Printer.BeginDoc;
with Image.Picture.Bitmap do
begin
if ((Image.Picture.Bitmap.Width / Image.Picture.Bitmap.Height) > (Printer.PageWidth / Printer.PageHeight)) then
begin
relWidth := Printer.PageWidth;
relHeight := MulDiv(Height, Printer.PageWidth, Width);
end
else
begin
relWidth := MulDiv(Width, Printer.PageHeight, Height);
relHeight := Printer.PageHeight;
end;
relWidth := Round(relWidth * ZoomPercent / 100);
relHeight := Round(relHeight * ZoomPercent / 100);
DrawImage(Printer.Canvas, Rect(0, 0, relWidth, relHeight), Image.Picture.Bitmap);
end;
Printer.EndDoc;
Screen.cursor := crDefault;
end;
end.
موفق و موید باشی
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.