PDA

View Full Version : سوال: پرينت فرم



jafar_ho
چهارشنبه 08 مرداد 1393, 21:46 عصر
با سلام
من يه برنامه براي مرکزي تهيه کردم که يه سري فرماي خاص اسکن شده دارن و بايد فيلداش توسط برنامه پر شه و پرينت بگيرم
با توجه به اينکه فرمها قابل ساختن در ويژوال بيسيک نيست و از تصوير اسکن شده استفاده مي‌کنم در دستور پرينت اول عکس فرم را فيت a4 دستور پرينت مي‌دم بعد تک تک تکست ها را که فيلدهاي فرم است با توجه به left و top اونها دستور پرينت مي‌دم
به نظرتون چه اشتباهي در اين روش وجود داره که فيلدها بالا پايين نسبت به فيلدهاي اصلي چاپ مي‌شن؟
نکته اينکه طول و عرض فرم دقيقا اندازه يه صفحه a4 تنظيم شده تا جاي تکست باکسها همون جاي چاپشون تو دستور پرينت باشه ولي باز جواب نميده
لطفا راهنمايي کنيد
کد:

Private Sub Command1_Click()

Printer.RightToLeft = True
Printer.ScaleMode = 1
Printer.Font.Name = "b mitra"
Printer.Font.Size = 9
Printer.FontBold = True


Printer.PaintPicture Image1.Picture, 0, 0, Printer.Width, Printer.Height
j = 46
For i = 0 To j
Printer.CurrentX = 11906 - (formText(i).Left + formText(i).Width)
Printer.CurrentY = formText(i).Top
Printer.Print formText(i).Text
Next i

End Sub

ایلیا آخوندزاده
پنج شنبه 09 مرداد 1393, 10:35 صبح
خب شما چرا از کریستال رپورت استفاده نمیکنید؟ یا از دیتاریپورت؟ البته من کریستال ریپورت رو توصیه می کنم.

jafar_ho
پنج شنبه 09 مرداد 1393, 13:06 عصر
با تشکر
استفاده از ريپورت ها با توجه به تعداد بالاي فرم ها نياز به ساخت گزارش هاي زياد داره و اگر با اصلاح اين کد حل شه سرعت کار خيلي بيشتره

vbhamed
یک شنبه 12 مرداد 1393, 14:53 عصر
سلام

خب اطلاعات شما كلا جابجا ميشه يعني يا همشون بالا ميرن يا همه پايين و يا چپ و راست و اينطوري نميشه كه يكيش بالاتر قرار بگيره، يكيش پايين تر مگر اينكه در اندازه گيري مكانها اشتباه كرده باشيد، در اينصورت وقتي يكبار پرينت گرفتيد و مشخص شد مثلا بالا رفته كافيه همه رو به مقدار لازم پايين بياريد

حاشيه صفحه رو هم در نظر بگيريد چون ممكنه شما مكان يك فيلد رو از بالاي كاغذ A4 اندازه بگيريد ولي پرينتر اول 1 سانتيمتر از بالا حاشيه در نظر مي‌گيره و بعد محاسبه مكان رو انجام ميده

ضمنا بهتره واحد اندازه گيري فرم و چاپگر (ScaleMode) رو روي شماره 6 يا ميليمتر قرار بدين تا با اندازه‌گيري با خط كش هماهنگ باشه

jafar_ho
یک شنبه 12 مرداد 1393, 17:10 عصر
ممنون از راهنماييتون
درسته همه اطلاعات با هم جابجا ميشن و جالب اينه تو پرينتراي مختلف ميزان جابجايي متفاوته
راهي که خودم فعلا پيدا کردم اينه که متن رو با دستور print رو picturebox ميارم و بعد از اتمام جايگذاري اطلاعات تصوير picturebox رو چاپ ميکنم که البته کيفيتش عالي نميشه ولي براي استفاده اداري کافيه
ضمنا يه جا ديدم بعد از دستور print اين دستور رو اضافه کرده بود که توي ذخيره و پرينت پيکچر باکس هيچ مشکلي ايجاد نشه، برام جالب بود برا شمام ميذارم:
picture1.picture=picture1.image

vbhamed
دوشنبه 13 مرداد 1393, 09:50 صبح
سلام


اينكه جابجايي در پرينترهاي مختلف متفاوته دليلش اينه كه دقت چاپ پرينترها با هم فرق داره مثلا يك پرينتر 600dpi و ديگري 1200dpi بنابراين تعداد نقاط در يك اينچ در اين دو حالت با هم فرق داره، براي همين بود كه گفتم ScaleMode فرم و چاپگر رو روي شماره 6 يعني ميليمتر بزاريد تا به اين مشكل برخورد نكنيد

در مورد دوم هم PictureBox براي تصوير درونش دو خاصيت Image و Picture داره

خاصيت Picture خود منبع واقعي تصوير درون PictureBox هست و فرض كنيد يك فايل با پسوند wmf كه فايل وكتوري (http://fa.wikipedia.org/wiki/%DA%AF%D8%B1%D8%A7%D9%81%DB%8C%DA%A9_%D8%A8%D8%B1% D8%AF%D8%A7%D8%B1%DB%8C) هست رو درون PictureBox بارگذاري كردين، حالا PictureBox رو تغيير اندازه بدين مثلا خيلي بزرگ يا خيلي كوچك كنيد، تصوير درونش هم اتوماتيك تغيير اندازه پيدا مي‌كنه

حالا اگر با دستور زير محتويات رو ذخيره كنيد مي‌بينيد كه فايل ذخيره شده 2 خاصيت داره

SavePicture Picture1.Image, "c:\ss.bmp"

------ 1 - در اندازه اصلي خودش ذخيره شده نه اندازه فعلي PictureBox
------ 2 - فقط همون سورس اصلي فايل ذخيره شده و اگر روي PictureBox با دستور Print چيزي بنويسيد و يا شكلهايي رسم كنيد اونها ذخيره نميشن
------ 3 - فايل به همون صورت وكتوري (http://fa.wikipedia.org/wiki/%DA%AF%D8%B1%D8%A7%D9%81%DB%8C%DA%A9_%D8%A8%D8%B1% D8%AF%D8%A7%D8%B1%DB%8C) ذخيره ميشه كه قابل بزرگ و كوچك كردن بدون افت كيفيت هست

اما اگر ذخيره رو به صورت زير انجام بديد فايل از حالت وكتوري (http://fa.wikipedia.org/wiki/%DA%AF%D8%B1%D8%A7%D9%81%DB%8C%DA%A9_%D8%A8%D8%B1% D8%AF%D8%A7%D8%B1%DB%8C) خارج ميشه و دقيقا چيزي كه روي PictureBox مي‌بينيد ذخيره ميشه اونهم به صورت نقشه بيتي يا Bitmap كه اون خاصيت بزرگنمايي بدون افت كيفيت رو نداره


SavePicture Picture1.Picture, "c:\ss.wmf"


البته خاصيت بزرگنمايي بدون افت كيفيت و ذخيره به صورت وكتوري (http://fa.wikipedia.org/wiki/%DA%AF%D8%B1%D8%A7%D9%81%DB%8C%DA%A9_%D8%A8%D8%B1% D8%AF%D8%A7%D8%B1%DB%8C) در صورتي است كه فايل اوليه كه در PictureBox بارگذاري شده حتما از نوع wmf يا emf باشه

jafar_ho
دوشنبه 13 مرداد 1393, 22:18 عصر
بله درست مي فرماييد
بسيار تشکر
مشکل تا حدودي با همون scalemode حل شد