PDA

View Full Version : پرینت مستطیل با داشتن طول و عرض آنها



mah.yar
یک شنبه 20 دی 1388, 12:48 عصر
با سلام
من چند تا مستطیل بزرگ دارم که هر کدام رو با تابع Draw.Rectangle رسم میکنم.
در واقع چندین طول و عرض دارم که رسم میکنم.
داخل هر مستطیل بزرگ چند تا مستطیل کوچیک هم رسم میکنم.
حالا میخوام این مستطیل های بزرگ که شامل چند مستطیل کوچیک است رو پرینت بگیرم طوریکه مشخصات (طول و عرض) هر مستطیل کوچیک هم یه گوشه ای از صفحه چاپ بشه.
طول و عرض هر مستطیل رو میشه به صورت پارامتر به کریستال ریپورت فرستاد ولی تصویرشونو چطوری؟
راهی یا پیشنهادی دارید ممنون میشم.

Yasersadegh
یک شنبه 20 دی 1388, 13:33 عصر
سلام دوست عزیز
به نظر من شما کریستال ریپورت رو بیخیال شو و خودت دستی چاپشون کن!!:لبخند: یعنی همین مستطیلها رو که رویه فرمت چاپ می کنی با کدهای زیر روی کاغذ چاپشون کن از کریستالم راحت تره!!!:لبخند:
روند کار به شکل زیره:
اول کد زیر رو در رویداد on click دکمه چاپ می نویسی!!



PrintDocument pd = new PrintDocument();
pd.DocumentName = "Test Print";
pd.PrinterSettings.PrinterName = "printer Name";
pd.PrintPage += new PrintPageEventHandler(pd_PrintPage);

if (pd.PrinterSettings.IsValid)
{
MessageBox.Show("Printer found.");
pd.Print();
}
else
{
MessageBox.Show("Printer is invalid.");
}


بعد هم یه تابع به شکل زیر می نویسی:



private void pd_PrintPage(object sender, PrintPageEventArgs ev)
{
SolidBrush br=new SolidBrush(Color.Black);
Font df=new Font("Arial",14);
Pen p = new Pen(Color.Black, 5);
ev.Graphics.DrawRectangle(p, 10, 10, 450, 450);
...
}


این نمونه کد یه مستطیل به ابعاد مشخص را چاپ می کند!!
موفق باشید:چشمک:

mah.yar
دوشنبه 21 دی 1388, 19:32 عصر
یه سوالی:
فرض 10تا مستطیل دارم و میخوام در یک بار چاپ ده صفحه چاپ کنم(تو هر صفجه یک مستطیل). .
کدی که شما گفتید خیلی خیلی خوب بود ولی من مجبورم ده بار عمل چاپ رو انجام بدم. درواقع نتونستم یه پرینت ده صفحه ای داشته باشم بلکه ده پرینت یه صفحه ای...
تشکر

mah.yar
جمعه 25 دی 1388, 17:44 عصر
ev يه متد با نام HasMorePage داره ولي نميدونم چه جوري ازش استفاده كنم.
پرينت چند صفحه اي...

Yasersadegh
شنبه 26 دی 1388, 09:01 صبح
سلام دوست عزيز
شما برايه پرينت چند صفحه اي بايد از همون خاصيت HasMorePage استفاده كني، به روش زير::چشمک:
شما در درون يه حلقه يكبار كد رسم مستطيلت رو مي نويسي و برايه مختصاتهاي آن هر بار اندازه ارتفاع صفحه ي پرينتت رو به مختصات مستطيل قبلي اضافه مي كني!:گیج: يعني از نظر مختصاتي طوري تنظيم مي كني اولي در صفحه اول بيفته و دومي در صفحه دوم و ...!
حالا قبل از حلقه مقدار اين خاصيت رو برابر true قرار ميديد! بعد از پرينت چون مقدار اين متغير true هست برنامه خودش تعداد صفحات رو باتوجه به مختصات هايي كه داديد تشخيص مي ده و پرينت مي كنه!!:متعجب:

اميدوارم كه متوجه منظورم شده باشيد!:لبخند:
موفق باشيد:چشمک: