PDA

View Full Version : تنظیم چاپگر در ویژوال بیسیک؟



bahar65
یک شنبه 16 بهمن 1384, 00:16 صبح
با سلام لطفا راهنمایی کنید که چطور می توانم بوسیله دستورات print در ویژوال بیسیک رنگها و شکلها را هم بوسیله پرینتر چاپ کنم و اینکه چطور فرم را با اندازه کاغذ چاپ و تنظیمات پرینتر هماهنگ کنم؟متشکرم.

sohrab o
دوشنبه 17 بهمن 1384, 00:13 صبح
این که خیلی طولانیه اما دستور بالا متد ها و دستورات خیلی زیادی داره که می تونی با اونا کار کنی من یه سورس دارم بعدا برات میزارم اینجا

bahar65
سه شنبه 18 بهمن 1384, 00:24 صبح
اگه هر چه سریعتر کارمو راه بندازین یک دنیا ممنون میشم...آخه وقت زیادی ندارم...متشکرم
....................
بهار

bahar65
سه شنبه 18 بهمن 1384, 16:16 عصر
الوووووو کارم واقعا خیلی ضروریه..هیچکی نیست جوابمو بدهههههههههه ... بابا یه کمک خواستیما ... باید منت خلق خدا رو بکشیم؟؟؟؟

bahar65
سه شنبه 18 بهمن 1384, 23:37 عصر
هیچکی جواب نمیده چراااااااا؟؟؟؟؟:(( بابا پروژ مونده رو دستم بخدا...یا امام حسین کمکمون کن...

ehsan_ansaripoor
چهارشنبه 19 بهمن 1384, 00:55 صبح
دوست عزیز شما برای کار با چاپگر باید از خاصیت Printer استفاده کنید.

1) برای Set کردن چاپگر پیش فرض باید از دستور:


Set Printer=Printers(0)


2) مهمترین خاصیت های چاپگر:

Device name معادل نام چاپگر
Height عرض صفحه چاپ شده برای چاپگر
Page شماره صفحه فعلی
width طول صفحه
Zoom میزان بزرگنمایی مثلا 75%
Print چاپ کارکترها
NewPage خاصیت را به صفحه بعد منتقل میکند
EndDoc پایان چاپ
KillDoc حذف چاپ

برای تنظیم حاشیه:
Scale Left حاشیه سمت چپ را مشخص می کند.
Scale Top حاشیه بالا را مشخص می کند.

و ...

از خاصیت CurrectX و CurrentY هم می توانید برای تنظیم محل قرار گرفتن متن استفاده کنید.

برای چاپ فرم هم می توانید از دستور Form1.Print استفاده کنید.

برای تنظیم فونت هم می توانید از متدهای فونت استفاده کنید.

به عنوان مثال دستور زیر یک متن را بر روی فرم با مختصات (350و300) چاپ می کند:



Form1.CurrentX=300
Form1.CurrentY=350
Form1.Print "Test For Printer"

bahar65
چهارشنبه 19 بهمن 1384, 18:13 عصر
دوست عزیز واقعا نمیدونم با چه زبونی ازتون تشکر کنم...
ایشالله هر چی که میخواین امام حسین بهتون بده...عاقبت بخیر شین ایشالله...اجرتون با امام حسین...
ــــــــــــــــــــــــــــــــــــــ
تنگ غروبا دل من هوای دلبر میکنه گریه برای چادر خاکی مادر می کنه

ehsan_ansaripoor
چهارشنبه 19 بهمن 1384, 22:59 عصر
دوست عزیز واقعا نمیدونم با چه زبونی ازتون تشکر کنم...
ایشالله هر چی که میخواین امام حسین بهتون بده...عاقبت بخیر شین ایشالله...اجرتون با امام حسین...
ـــــــــــــــــــــــــ ـــــــــــــ
تنگ غروبا دل من هوای دلبر میکنه گریه برای چادر خاکی مادر می کنه

دوست عزیز بنده خودم را شایسته این همه لطف نمی بینم فقط و فقط وظیفه خودم را بجا آوردم.

bahar65
پنج شنبه 20 بهمن 1384, 15:19 عصر
حضرت علی علیه السلام میفرمایند : کسی که به من کلمه ای می آموزد مرا بنده خویش ساخته است.
موفق باشید
ـــــــــــــــــــــــــــــــــــــــ
تنگ غروبا که میشه غریبی رو حس میکنم دعا برای فرج زاده نرگس می کنم

مهران فروردین
جمعه 21 بهمن 1384, 06:12 صبح
سلام Bahar65 عزیز،
باید صریحا مشخص می کردید که از کدام نگارش ویژوال بیسیک استفاده می کنید تا بتوانم پاسخ دقیق تری به شما بدهم. اگر از MS-Visual Basic 6 استفاده می کنید برای چاپ حروف، علائم و اعداد و یا چاپ محتویات یک متغیر عددی یا رشته ائی ، ساده ترین راه اینست که از ابجکت پرینتر استفاده کنید، خیلی ساده است در بسیک تحت داس می نوشتید "Print "MEHRAN و کلمه مهران توسط پرینتر چاپ می شد در ویژوال بیسیک باید بنویسید "Printer.Print "MEHRAN تا کلمه مهران چاپ شود واضح استکه بجای "MEHRAN" می توانید از متغیر یا عدد یا عبارت محاسباتی استفاده کنید فقط دقت کنید که در اینگونه مواقع نباید از گیومه ها استفاده کنید چون در این صورت بجای متغیر و یا نتیجه عملیات ، عین متغیر یا عبارت و نه محتویات یا نتیجه آن چاپ می شود. چاپ رنگی و چاپ اشکال و تصاویر هم بسیار ساده است در فرصتی دیگر برای شما توضیح خواهم داد.

bahar65
جمعه 21 بهمن 1384, 08:21 صبح
یک مشکلی هست و اون این که من می خوام خود فرمم رو چاپ کنم
محاسبات قبلش انجام میشه و من می خوام یه صفحه ای مثل کارنامه بسازم و این اطلاعاتی که محاسبات روشون انجام شده چاپ شه و توی این کارنامه اشکالی هم هستن .
یک مشکل دیگه ای هم که هست اینه که وقتی shape رو رنگی می کنم رنگ داخلش توی پرینت نمیاد و فقط خطوط دورش میاد.
یه جای دیگه هم می خوام نموداری که نشون می دم بتونم توی اجرا چاپ کنم.
اگه به همش پاسخ بدین یه دنیا ممنون میشم
ــــــــــــــــــــــــــ
اجر همتون با امام حسین...

مهران فروردین
جمعه 21 بهمن 1384, 23:38 عصر
سلام دوست عزیز Bahar65:
خواهش کردم بفرمایید از کدام نگارش ویژوال بیسیک استفاده می کنید، من نمی دانم متن ارسالی قبلی مرا متوجه شده اید یا خیر، به هر حال من صلاح نمی دانم عین فرم را چاپ کنید، چاپ کردن عین فرم مشکلات زیادی بوجود می آورد مثلا سرعت چاپ بشدت پایین می آید، چاپ بک گراند فرم که معمولا رنگی است به پرینتر فشار زیادی می آورد، کاتریج پرینتر زیاد مصرف می شود، در صورتیکه گزارش چاپی چند صفحه باشد کنترل پرینتر برای به صفحه بعد رفتن دچار مشکل می شود، کنترل سایز چاپ تقریبا غیر ممکن است و آن سایزی که روی صفحه می بینید بستگی به رزولشن صفحه نمایش دارد اما تعبیر پرینتر از رزولوشن کیفیت چاپ است نه سایز آن، سایز چیزی که روی صفحه می بینید با سایز چیزی که چاپ می شود متفاوت است، اگر عرض چاپ بیشتر از عرض کاغذ مورد استفاده پرینتر باشد پرینتر نیمه دیگر صفحه چاپی را در صفحه بعد چاپ می کند و هزار و یک مشکل دیگر که وصف آن در این مقوله نمی گنجد.
اما شما باید چه کنید.
شما می خواهید چیزی شبیه یک کارنامه رنگی چاپ کنید. یک کارنامه تعدادی نام و عنوان و عدد قرار داده شده در یک جدول است و جدول هم که مجموعه ائی از چند خط افقی و عمودی است خب برای چاپ متغیرها و رشته ها و اعداد که مشکلی نیست کافی است متغیر، عدد، رشته کاراکتری و ... را درست مقابل عبارت Printer.print قرارد دهید و برای اینکه کنترل کنید چیزی که قرار است چاپ شود باید در کجای کاغذ چاپ شود خیلی راحت از متد CurrentX و CurrentY استفاده کنید برای چاپ خطوط هم می توانید از شئی چاپگر Printer.Line استفاده کنید.
مثلا سطر های برنامه زیر را در نظر بگیرید ( هنگام آزمایش شما شماره خطوط را تایپ نکنید)


0 Printer.ScaleMode = 4
1 Printer.ForeColor = vbRed
2 Printer.Line (30, 10)-(80, 50)
3 Printer.CurrentX = 10: Printer.CurrentY = 20
4 Printer.Print "MEHRAN FARVARDIN"
5 A$="Dost Aziz Bahar65"
6 Printer.ForeColor = vbBlue
7 Printer.CurrentX = 12: Printer.CurrentY = 20
8 Printer.Print A$



در سطر 1 رنگ پیش فرض پرینتر قرمز می شود در سطر 2 خطی از مختصات 30و 10 تا مختصات 80 و 50 توسط پرینتر چاپ می شود در سطر سوم اشاره گر چاپ به نقطه 10و 20 میرود و در آنجا عبارت مهران فروردین را چاپ می کند در خط 6 رنگ پیش فرض چاپ آبی می شود در خط 7 هد پرینتر به نقطه با مختصات 12 و 20 می رود و در خط 8 عبارت دوست عزیز بهار 65 را چاپ می کند خط صفرم را فراموش نکنید چون این خط واحد مختصات صفحه را کاراکتر تعیین می کند که برحسب واحد کاراکتر باشد به این ترتیب هر واحد مختصات حدود نیم سانتی متر می شود.

در هنگام تایپ 8 سطر کد نوشته شده بالا دقت کنید که ظاهرا ادیتور این سایت مشکل دارد و در برخی سطر ها آخرین کاراکتر انتهای سطر را به ابتدای سطر منتقل می کند مثلا در سطر سوم علامت پرانتز انتهای سطر را به ابتدای خط و قبل از عبارت Printer منتقل کرده این مشکل در سطر های 4 و 5 و 8 نیز وجود دارد یعنی اولین کاراکتر سطر را باید به انتهای سطر منتقل کنید تا عبارت درست شود این هم یکی دیگر از مشکلات برنامه نویسانی است که از زبان های راست به چپ استفاده می کنند.
پیروز باشید

bahar65
جمعه 21 بهمن 1384, 23:59 عصر
با عرض پوزش از اینکه متوجه عرضتون نشدم. منظورتون از کدوم نگارش هستو متوجه نشدم . اگه منظورتون ورژنشه که این بخش . اصلا بخش ویژوال 6 هستش اگرم نه که اگر توضیح بدید منظورتونو ممنون می شم . راجی این که پشت صحنه که رنگیه رو هم چاپ می کنه باید بگم چاپ نمی کنه رنگ پشت صحنه رو . البته من یکی از مشکلاتم این بود که رنگ رو چاپ نمی کنه . گرچه امکانش هم هست که پرینتر من ایراد داشته باشه ! و این هم اصلا می تونه با گذاشتن رنگ سفید برای پشت صحنه حل شه.
مشکل من از اینکه راه شما رو قبول ندارم اینه که اگه بخوام این راهو برم بخاطر داده های زیادی که دارم و خطوط زیادی که باید رسم کنم خطوط برنامم بسیار طولانی میشه .
یه راه بهتر نیست که من نخواد این همه دردسر بکشم برای چاپ یه کارنامه؟
یا اینکه فرم رو نمیشه یه جوری تنظیم کرد که مشکلاتی که شما گفتین دیگه نداشته باشه؟
اگه راهنمایی کنید ممنون میشم.

bahar65
شنبه 22 بهمن 1384, 15:20 عصر
تنظیم نمیشه؟؟؟

ehsan_ansaripoor
شنبه 22 بهمن 1384, 15:25 عصر
با عرض پوزش از اینکه متوجه عرضتون نشدم. منظورتون از کدوم نگارش هستو متوجه نشدم . اگه منظورتون ورژنشه که این بخش . اصلا بخش ویژوال 6 هستش اگرم نه که اگر توضیح بدید منظورتونو ممنون می شم . راجی این که پشت صحنه که رنگیه رو هم چاپ می کنه باید بگم چاپ نمی کنه رنگ پشت صحنه رو . البته من یکی از مشکلاتم این بود که رنگ رو چاپ نمی کنه . گرچه امکانش هم هست که پرینتر من ایراد داشته باشه ! و این هم اصلا می تونه با گذاشتن رنگ سفید برای پشت صحنه حل شه.
مشکل من از اینکه راه شما رو قبول ندارم اینه که اگه بخوام این راهو برم بخاطر داده های زیادی که دارم و خطوط زیادی که باید رسم کنم خطوط برنامم بسیار طولانی میشه .
یه راه بهتر نیست که من نخواد این همه دردسر بکشم برای چاپ یه کارنامه؟
یا اینکه فرم رو نمیشه یه جوری تنظیم کرد که مشکلاتی که شما گفتین دیگه نداشته باشه؟
اگه راهنمایی کنید ممنون میشم.

دوست عزیز چاپ کردن فرم ها در VB زیاد مطلوب در نمیاد و صحبت شما صحیح است. اگر مشکل شما فقط چاپ یک کارنامه است بهترین انتخاب استفاده از کنترل های OCX مثل RichTextBox برای چاپ و در صورت استفاده از بانک اطلاعاتی استفاده از DataReport است.

مهران فروردین
شنبه 22 بهمن 1384, 17:58 عصر
سلام Bahar65:
خوب بالاخره معلوم شد از کدام نگارش از Visual Basic استفاده می کنید. ظاهرا ورژن ششم را انتخاب کرده اید. اما مشخص نکردید که از نسخه Professional یا Enterprice و یا از نسخه های دیگر استفاده می کنید، ویرایش EnterPrice بیشتر در ایران استفاده می شود و فروشگاههای سی دی بیشتر آنرا تکثیر و می فروشند در صورت استفاده از این ویرایش برای چاپ متن مطلب همان بود که عرض کردم و برای چاپ گرافیگ شما فقط متد Line , Circle , Pset را در اختیار دارید.
ضمنا در این متد ها نمی توانید رنگ بک گراند را تغییر دهید البته برای اینکار راههای دیگری هم وجود دارد.

راه اول) استفاده از OLE
در این روش از امکانات چاپی برنامه های دیگر نظیر Word , Exsel , ... استفاده می شود. مثلا با استفاده از وجود OEL می توانید از تمامی امکانات چاپی Word استفاده کنید.
در این راه اولین کار ایجاد یک شیی Word.Basic است. بعد از ایجاد این شیی شما می توانید با استفاده از دستورات WordBasic به امکانات چاپی Word دسترسی پیدا کنید که امکانات فوق العاده گسترده ایست و هر آنچه شما در مورد چاپ تصور کنید در Word وجود دارد و همه آن امکانات در اختیار شما قرار خواهد گرفت. که ذکر آن در این مقوله نمی گنجد.

راه حل دوم) ارتباط آن لاین با چاپگر
در این روش شیی چاپ وجود ندارد که رابط بین برنامه شما و چاپگر شود و می توان مستقیما با چاپگر ارتباط داشت که خود به قسمت متفاوت تقسیم می شود قسمت دوم استفاده از متد #Print و قسمت اول استفاده از فایل #LPT است. در واقع با این روش شما کار را به ویندوز واگذار می کنید تا او کار چاپ را انجام دهند نه به کمپایلر شیی گرای ویژوال بیسیک. براحتی می توانید از یک FileHandel استفاده کنید. یعنی پورت پرینتر را بعنوان خروجی با شماره فایل اختصاصی باز کنید درست مثل باز کردن یک فایل ترتیبی با دستور open فقط بجای نام فایل اطلاعاتی از عبارت "LPT1" استفاده کنید.
Open "Lpt1" for output as #1
Print#1" Mehran"

راه حل سوم) ارسال مستقیم داده های گرافیکی به چایگر.
در این روش باید از زبان PCL استفاده کنید و از برنامه های معروف و کلیشه ائی مثلا برنامه چاپگر راستر و ... استفاده کنید.

در خاتمه باید خدمت شما عرض کنم که امکانات چاپ ویژوال بیسیک هم مثل پدر بزرگش یعنی کوئیک بیسیک محدود است ویژوال بیسیک و حتی دات نت هم متاسفانه این نقص بزرگ را از پدر بزرگشان کوئیک بیسیک و پدر جد بزرگوارشان جی دبلیو بیسیک به ارث پرده اند و امکانات محدودی برای چاپ گرافیک دارند یا شما باید از زبان های برنامه نویسی دیگر استفاده کنید و یا اینکه با امکانات محدود بیسیک بسوزید و بسازید! مثلا شما فقط می توانید فرمتهای گرافیگی BMP , ICO , WMF را در ویژوال بیسیک استفاده کنیدو مثلا اگر بخواهید از فرمت های گرافیکی GIF , TIFF که از معروفترین ها هستند استفاده کنید باید کنترلهای VBX , OCX موجود در بازار را پیدا کنید و یا از اینترنت دانلود نمایید که البته کاربا آنها هم کمی مشکل می شود.

ضمنا از من انتظار نداشته باشید کل راه حل های ارائه شده را بطور کامل در این تاپیک برای شما موشکافی کنم شما می توانید سه عدد سی دی MSDN که همراه با ورژن 6 ویژوال بیسیک ارائه شده را روی کامپیوتر خود نصب کنید و با زدنک کلید Help و سرچ کلمه Printer همه مطالب را یافته و مطالعه کنید یا تشریف ببرید مقابل دانشگاه تهران و چند کتاب مرجع کامل ویژوال بیسیک خریداری نموده و فصل مربوط به چاپ در ویژوال بیسیک و یا چاپ گرافیک در ویژوال بیسیک را مطالعه فرمائید.
با احترام
مهران فروردین

bahar65
یک شنبه 23 بهمن 1384, 09:33 صبح
بسیار ممنونم از راهنماییهاتون.
اگر از ورد استفاده کنم می تونم جدولهامو (کارناممو) هم ببرم توی ورد؟
آخه جدولهام از اکسس اطلاعات رو برمی دارن
چطور میتونم اطلاعاتی که از اکسس برداشتم و حتی خود جدولمو که از لاین و شیپ تشکیل شده ببرم توی ورد برای چاپ؟
اگه راهنمایی بفرمایین ممنون میشم

m_diamond67
دوشنبه 24 بهمن 1384, 12:22 عصر
آقایان و خانوم ها واقعا از راهنمایی هاتون ممنونم چون دقیقا مشکلات دوستمون bahar65 مشکل منم هست و از شما دوست عزیز آقا مهران ممنونم

bahar65
دوشنبه 24 بهمن 1384, 12:28 عصر
اما من هنوز جوابی که می خوامو نگرفتم!

احمد آقا
دوشنبه 24 بهمن 1384, 14:28 عصر
چرا از دیتا ریپورت یا کریستال ریپورت استفاده نمی کنی و میخوای به خودت زحمت بیخودی بدی
همه اینکارا رو به راحتی میشه با دیتا ریپورت انجام داد

bahar65
دوشنبه 24 بهمن 1384, 17:27 عصر
آخه کار با اینا رو بلد نیستم!
دیتا ریپورت چجوری کار میکنه؟

احمد آقا
سه شنبه 25 بهمن 1384, 08:36 صبح
اینجا رو ببین
http://www.iranvig.com/modules.php?name=Forums&file=viewforum&f=33