PDA

View Full Version : پرینت تصاویر در دلفی



alireza_63
چهارشنبه 14 مرداد 1383, 06:59 صبح
سلام

چه راه حلی برای پرینت تصاویر در دلفی وجود داره ؟ آیا نیاز به component خاصی هست؟

ممنون میشم از راهنمایی تون

orion188
چهارشنبه 14 مرداد 1383, 07:35 صبح
سلام
منظورتون از پرینت تصویر ، بر روی چاپگر هست؟
اگر بله then
1-تصویر رو به همون سایزی که میخواین ، روی فرم نمایش بدین.
2- فرم رو به پرینتر بفرستین
که خود مرحله دو عبارت است از تعریف پرینتر و تنظیم اشاره گر canvas پرینتر به canvas فرم
(البته چرا از اول از canvas خود image استفاده نکنیم؟ :متفکر: )

(امید)
چهارشنبه 14 مرداد 1383, 11:13 صبح
با یک image و printDialog داریم:



procedure TForm1.Print1Click(Sender: TObject);
var
ScaleX, ScaleY: Integer;
RR: TRect;
begin
printdialog1.Execute;
with Printer do
begin
BeginDoc;
try
ScaleX := GetDeviceCaps(Handle, logPixelsX) div PixelsPerInch;
ScaleY := GetDeviceCaps(Handle, logPixelsY) div PixelsPerInch;
RR := Rect(0, 0, Image.picture.Width * scaleX, Image.Picture.Height * ScaleY);
Canvas.StretchDraw(RR, Image.Picture.Graphic);

finally
EndDoc; //Methode EndDoc beendet den aktuellen Druckauftrag und schlie?t die
end;
end;
end;

alireza_63
چهارشنبه 14 مرداد 1383, 19:50 عصر
سلام

orion188 عزیز
مشکل من همان تعریف پرینتر و تنظیم اشاره گر canvas پرینتر به canvas فرم یا image است ....

امید گرامی

در کدی که شما نوشتید چند ابهام وجود دارد :
1. در خط هفتم Printer نوشته شده که از قبل تعریف نشده و مورد اشکال است...
2. دلیل استفاده از BeginDoc و EndDoc در خط نهم و شانزدهم چیست ؟

با تشکر ...

orion188
چهارشنبه 14 مرداد 1383, 20:14 عصر
سلام

داخل پرانتز بگم که من هنوز نمیدونم چجوری کد برنامه رو ضمیمه ارسالها بکنم . اگه میدونین کمکم کنین . پرانتز بسته.

و اما پرینتر. تو builder که من یه pointer از نوع *TPrinter درست کردم و اون رو مساوی حاصل تابع ()Printer قرار دادم. بعد از مشخصه count شیء ایجاد شده استفاده میکنین تا ببینین اصلا" پرینتری تعریف شده یا نه. بعد هم به وسیله متد CopyRect مربوط به Canvas همین TPrinter از image مربوطه کپی میگیرین.
منتها قبل از کپی کردن، BeginDoc و بعدش EndDoc میکنین. دومی رو که اجرا کنین ، canvas رو میفرسته به پرینتر ویندوز.

موفق باشین

orion188
چهارشنبه 14 مرداد 1383, 20:31 عصر
سلام
eyvel یاد گرفتم. اینم کد (خودتون دلفیش کنین بی زحمت)



TRect TheRect = Rect(0,0,Image1->Width,Image1->Height);
TPrinter* MyPrinter = Printer();
if(MyPrinter->Printers->Count == 0)
return;
MyPrinter->BeginDoc();
MyPrinter->Canvas->CopyRect(TheRect,Image1->Canvas,TheRect);
MyPrinter->EndDoc();

alireza_63
پنج شنبه 15 مرداد 1383, 20:16 عصر
سلام...

orion188 عزیز
مشکل حل شد...

از راهنمایی شما متشکرم ...