ورود

View Full Version : سوال: پرینت از چند ایتم از کاراکترهای صفحه



nsco_nsco
شنبه 25 تیر 1390, 03:33 صبح
سلام دوستان من می خوام چند تا از نوشته ها و عکسهای فرم را به پرینتر بفرستم( نه همه فرم را) ممنون می شوم راهنمایی کنید چگونه عمل کنم ممنون :قلب:

Felony
شنبه 25 تیر 1390, 05:45 صبح
با چه ترتیب و چینشی ؟ همونطور که روی فرم قرار دارن ؟ به جای کنترل هایی که قرار نیست پرینت شوند چی گذاشته بشه ؟ عکس پس زمینه ؟

بی دردسرترین راه این هست که کنترل هایی که قرار نیست پرینت شوند رو Hide کنید و بعد از فراخوانی متد Print دوباره اونها رو Show کنید ، یا اینکه اگر میخواین مشکلی در نمایش فرم ایجاد نشه و کاربر چیزی از این روند متوجه نشه شیئ هایی که نمیخواین پرینت بشه رو مخفی کنید و متد GetFormImage فرم رو صدا بزنید و ازش یک عکس بگیرید و بلافاصله شیئ های مخفی رو نمایش بدید و بعد عکس گرفته شده رو روی Canvas پرینتر رسم کنید :

type
TPrintControls = array of TControl;

function PrintControl(const Control: TPrintControls): TBitmap;
var
ControlNO: Integer;
begin
for ControlNO := Low(Control) to High(Control) do
Control[ControlNO].Visible := False;

Result := Form1.GetFormImage;

for ControlNO := Low(Control) to High(Control) do
Control[ControlNO].Visible := True;
end;

استفاده :

var
MyControl: TPrintControls;
begin
SetLength(MyControl, 3);
MyControl[0] := Label2;
MyControl[1] := ListBox1;
MyControl[2] := Memo1;
with TImage.Create(nil) do
try
Picture.Bitmap := PrintControl(MyControl);
Printer.BeginDoc;
Printer.Canvas.StretchDraw(Self.ClientRect, Picture.Graphic);
Printer.EndDoc;
finally
Free;
end;
end;

nsco_nsco
یک شنبه 26 تیر 1390, 00:08 صبح
سلام ممنون از پاسختون ایا میشه محدوده ای براش تایین کرد یعنی مثلا از یک جایی از صفحه تا یک جایی را هر چی توش بود پرینت کن ؟ :قلب:

Felony
یک شنبه 26 تیر 1390, 09:26 صبح
بله ؛ اگر کمی هم خودتون تلاش کنید میشه :

function PrintControl(const Area: TRect): TBitmap;
var
ControlNO: Integer;
CurrControl: TControl;
begin
for ControlNO := 0 to Form1.ComponentCount - 1 do
begin
CurrControl := TControl(Form1.Components[ControlNO]);
if (CurrControl.Top + CurrControl.Height > Area.Bottom) or
(CurrControl.Left + CurrControl.Width > Area.Right) then
TControl(Form1.Components[ControlNO]).Visible := False;
end;

Result := Form1.GetFormImage;

for ControlNO := 0 to Form1.ComponentCount - 1 do
TControl(Form1.Components[ControlNO]).Visible := True;
end;

استفاده :

var
Area: TRect;
begin
with Area do
begin
Top := 0;
Left := 0;
Right := 200;
Bottom := 200;
end;

with TImage.Create(nil) do
try
Picture.Bitmap := PrintControl(Area);
Printer.BeginDoc;
Printer.Canvas.StretchDraw(Self.ClientRect, Picture.Graphic);
Printer.EndDoc;
finally
Free;
end;
end;

کد بالا کل فرم رو + کنترل هایی که در محدوده مورد نظر هستند پرینت میگیره ؛ اگر میخواین فقط محدده مورد نظر + کنترل های موجود تو اون پرینت گرفته بشن بعد از گرفتن عکس توسط متد GetFormImage میتونید توسط متد CopyRect کلاس TCanvas قسمت مورد نظر ار عکس رو جدا کنید .

nsco_nsco
دوشنبه 27 تیر 1390, 00:10 صبح
سلام ممنون از پاسختون ممنون میشم کمی در مورد برنامه توضیح بدید ممنون :قلب:

nsco_nsco
دوشنبه 27 تیر 1390, 00:36 صبح
سلام مشکلی که دارم اینه زمانی که من میام و از PrinterSetupDialog1 استفاده می کنم و دستور پرینت فرم رو می دم به این شکل

form1.PaintTo(Handle, 500, 500);

میاد و پرینت رو انجام میدهد اما خیلی خیلی فرم حاصله رو ریز می کنه ممنون میشوم کمک کنید راجب این موضوع فقط سریع کمک کنید خیلی واجب هست مرسی :قلب:

nsco_nsco
دوشنبه 27 تیر 1390, 21:15 عصر
سلام دوستان کسی نیست کمک کنه یکی مشکل دیگه چطور میشه گفت که این عکس با چه سایزی پرینت گرفته بشه نه تایین صفحه a4 اینها بلکه سایز همون عکس چطور تایین باید بشه ممنون می شم کمک کنید ممنون :قلب:

Felony
دوشنبه 27 تیر 1390, 21:42 عصر
سلام مشکلی که دارم اینه زمانی که من میام و از PrinterSetupDialog1 استفاده می کنم و دستور پرینت فرم رو می دم به این شکل

form1.PaintTo(Handle, 500, 500);

میاد و پرینت رو انجام میدهد اما خیلی خیلی فرم حاصله رو ریز می کنه ممنون میشوم کمک کنید راجب این موضوع فقط سریع کمک کنید خیلی واجب هست مرسی :قلب:
اون کد پرینت نمیگیره ، اون کد فرم رو روی یک HDC که به عنوان پارامتر بهش داده میشه رسم میکنه ؛ کد کاملی که نوشتید و مشکل داره رو قرار بدید .


سلام دوستان کسی نیست کمک کنه یکی مشکل دیگه چطور میشه گفت که این عکس با چه سایزی پرینت گرفته بشه نه تایین صفحه a4 اینها بلکه سایز همون عکس چطور تایین باید بشه ممنون می شم کمک کنید ممنون :قلب:
توسط متد StretchDraw از کلاس TCanvas میتونید رسم رو در اندازه دلخواه انجام بدید و بعد ازش پرینت بگیرید .

nsco_nsco
دوشنبه 27 تیر 1390, 22:07 عصر
توسط متد StretchDraw از کلاس TCanvas میتونید رسم رو در اندازه دلخواه انجام بدید و بعد ازش پرینت بگیرید .

سلام ممنون از پاسختون ممنون می شم در این رابطه کامل توضیح بدید خیلی لازم دارم ممنون :قلب:

Felony
دوشنبه 27 تیر 1390, 23:14 عصر
چه توضیح کاملی بدم ؟! یک متد هست با 2 تا پارامتر ، توضیح چی میخوای ؟!

2 تا Image روی فرم قرار بدید و تو Image1 یک عکس کوچیک بزارید و Image2 رو بزرگتر از سایز Image1 قرار بدید ؛ سپس کد زیر رو اجرا کنید :

Image2.Canvas.StretchDraw(Image2.ClientRect, Image1.Picture.Graphic);