ورود

View Full Version : سوال: مشکل با موقعیت چاپ



M.T.P
جمعه 23 اردیبهشت 1390, 12:23 عصر
دوستان گرامی...
وقتیی با دستور زیر یک خط رسم میکنم:


Printer.PaperSize = vbPRPSA4
Printer.ScaleMode = vbTwips
Printer.Line (0, 0)-(1000, 1000), vbBlack
Printer.EndDoc
تو همه چاپگر مجازی ها مثلا (Microsoft Office Document Image Writer Driver) دقیقا خط از مختصات 0 و 0 شروع میشه و درست رسم میشه اما اگه همین دستور رو مستقیم به چاپگر بفرستم خط تقریبا دو میلیمتر از بالا و چهار میل از چپ شروع میشه ، روی دو تا چاپگر مختلف یعنی HP و Canon امتحان کردم همینطور بود.

حالا جالب اینجاست وقتی با چاپگر مجازی چاپ میکنم درست میزنه و بعد همون صفحه موجود در چاپگر مجازی رو با چاپگر حقیقی چاپ میکنم درست چاپ میکنه (یعنی دقیقا از گوشه کاغذ)

اگه چاپگر جلو دست دارید ، زحمت بکشید یه تست بزنید و بفرمایید مشکل از کجاست؟ :متفکر:

mbf5923
جمعه 23 اردیبهشت 1390, 14:37 عصر
سلام
نقاط شروعت رو منفي بده
يعني به جاي رسم از (0و0) از (-100و-100) شرع كن
البته بايد مقاديري كه گفتي حساب كني ببيني دقيقا چند بايد بدي

M.T.P
جمعه 23 اردیبهشت 1390, 15:26 عصر
منظور شما اینه که همیشه باید اینکار رو کرد و از منفی شروع کرد یا اینکه صرفا فقط به خاطر اینکه کارمون راه بیفته؟

mbf5923
جمعه 23 اردیبهشت 1390, 16:07 عصر
نه عزيزم پرينترهاي شما صفر و صفرشون دقيقا گوشه ي برگه تعريف نشده و اين دو راه داره: يكي همون كه قبلا گفتم دوم اينكه قبل از انجام پرينت مرگين چاپگر رو روي صفر و صفر قرار بدي اما راحت تر همين كاره

M.T.P
جمعه 23 اردیبهشت 1390, 17:22 عصر
شما چطور مارگین شی ء پرینتر رو صفر می کنید؟ شی Printer که مارگین نداره !!!! :متفکر:

Mr'Jamshidy
جمعه 23 اردیبهشت 1390, 18:40 عصر
این که نشد روش که از اعداد منفی استفاده کنه

شاید تو یک پرینتر ه دیگه یک طور دیگه باشه

من میگم ار API استفاده کن شاید مشکلت حل بشه

mbf5923
جمعه 23 اردیبهشت 1390, 19:09 عصر
از داخل برنامه و با دستورات میشه باید تست کنم

Mr'Jamshidy
جمعه 23 اردیبهشت 1390, 23:34 عصر
در ضمن یک راه دیگه که همین الان یادم اومد

منم یک همچین مشکلاتی رو با وی بی داشتم که با تنظیم پرینتر حل شد شما هم امتحان کن ببین میشه یا نه
منظورم همون Printer Properties و Printing Preferences
اگر مشکلت حل نشد بگو تا ببینیم چه میشه کرد

M.T.P
شنبه 24 اردیبهشت 1390, 18:43 عصر
با تشکر از نظرات دوستان ارجمند.
علت این مشکل ScaleWidth و ScaleHeight مربوط به چاپگر هست.
در اکثر چاپگرهای مجازی یا شاید همه اونها همیشه ScaleWidth با Width برابر هست و در نتیجه مختصات چاپ شده در این دسته از چاپگرها مجازی همون مختصات مورد نظر ما هست ، اما در چاپگرهای حقیقی (حداقل با 3 چاپگر که تست کردم) ScaleWidht کمتر از Width هست و در نتیجه باید محاسبات خود را بر اساس ScaleWidth و ScaleHeight انجام داد.
البته در مباحث فوق فرض رو بر این گرفتیم که ScaleMode پرینتر Twip باشه.

forooz
شنبه 30 اردیبهشت 1391, 11:42 صبح
ببخشید من هم همین مشکل رو دارم تو برنامه چاپ چک میشه بیشتر راهنمایی کنید ببینم شما چه جوری این مشکل رو حل کردین؟

M.T.P
شنبه 30 اردیبهشت 1391, 16:52 عصر
برای مختصات دادن به جای width و height از ScaleWidth و ScaleHeight استفاده کن همین.

برای روشن تر شدن موضوع یک کنترل PictureBox روی فرم قرار بدید.
خب همینطور که می بینید ScaleWidth از Width اون کمتره (به خاطر وجود border) و در واقع ScaleWidth همون مقدار فضای قایل دسترس هست.

در مورد چاپ هم همینه یعنی شما مقدار فضایی که برای چاپ کردن در حالت افقی در اختیار دارید مقدار ScaleWidth هست
و برای عمودی ScaleHeight هست.

تست عملی: می خواهیم یک نقطه در مرکز یک صفحه آچار چاپ کنیم.


Private Sub PrintDot()
Dim prt As Printer

Set prt = Printer

With prt
.PaperSize = vbPRPSA4
.Font.Name = "Arial"
.Font.Size = 20
.Font.Bold = True
.CurrentX = (.ScaleWidth \ 2)
.CurrentY = (.ScaleHeight \ 2)
End With

prt.Print "."
prt.EndDoc
End Sub