PDA

View Full Version : تغییر حالت پرینتر



alizanganeh
چهارشنبه 04 بهمن 1391, 00:51 صبح
سلام
من توی گزارش های برنامم بعضی جاها گزارشم portrate هستش و بعضی ها landscape
اگر در حال پرینت ، حالت پرینتر سیستم مثلا روی portrate باشه و گزارش landscape ، کاربر مجبوره بره و بصورت دستی از قسمت printer and faxes حالت پرینتر رو عوض کنه که کار سخت و خسته کننده ایه

میخواستم بدونم راهی هست که با یک کد بتونیم قبل از پرینت ، حالت پرینتر رو بصورت خودکار عوض کنیم؟

ممنون

the king
چهارشنبه 04 بهمن 1391, 02:00 صبح
سلام
من توی گزارش های برنامم بعضی جاها گزارشم portrate هستش و بعضی ها landscape
اگر در حال پرینت ، حالت پرینتر سیستم مثلا روی portrate باشه و گزارش landscape ، کاربر مجبوره بره و بصورت دستی از قسمت printer and faxes حالت پرینتر رو عوض کنه که کار سخت و خسته کننده ایه

میخواستم بدونم راهی هست که با یک کد بتونیم قبل از پرینت ، حالت پرینتر رو بصورت خودکار عوض کنیم؟

ممنون
نمی دونم چطور گزارش می گیرید اما

Printer.Orientation = vbPRORPortrait



Printer.Orientation = vbPRORLandscape

alizanganeh
چهارشنبه 04 بهمن 1391, 09:39 صبح
ممنون ولی جواب نداد
با ویندوز 7 دارم تست میکنم
با دیتا ریپورت گزارش میگیرم
و پرینترم هم پرینتر مجازی هستش (که البته فکر کنم ربطی نداره !!!)
این کدی که دادید رو قبل از دستور نمایش دیتا ریپورت زدم ولی حالن پرینتر همون portrate موند !!!

alizanganeh
چهارشنبه 04 بهمن 1391, 20:21 عصر
واقها هیچکی بلد نیست ؟!!!!

alizanganeh
پنج شنبه 05 بهمن 1391, 20:33 عصر
لطفا کمک کنید . ضروریه خیلی

hosein3000
پنج شنبه 05 بهمن 1391, 21:15 عصر
منم همین مشکلو دارم
ممنون میشم اساتید راهنمایی کنن

m.4.r.m
جمعه 06 بهمن 1391, 00:38 صبح
یه با این مشکلو یکی از بچه ها هم مطرح کرده بودن من جواب دادم بهش دقیقا نمی دونم کدوم تاپیک بود اما اسرع وقت چشم میزارم براتون کدشو

ببین اینطوری میشکلت حل میشه ؟

Printer.PaperSize = 256 Printer.Width = 11808 '(8.2 * 1440) Printer.Height = 15840 '(11 * 1440)

m.4.r.m
جمعه 06 بهمن 1391, 00:58 صبح
این قسمت رو بخون حتما مشکلت حل میشه

http://barnamenevis.org/showthread.php?332501-%D9%84%D9%86%D8%AF%D8%A7%D8%B3%DA%A9%DB%8C%D9%BE-%D8%B4%D8%AF%D9%86-%DA%A9%D8%A7%D8%BA%D8%B0-%DA%86%D8%A7%D9%BE&highlight=%D9%BE%D8%B1%DB%8C%D9%86%D8%AA%D8%B1

alizanganeh
جمعه 06 بهمن 1391, 01:11 صبح
آقا با اون تاپیک هم درست نشد (اونو قبلا زده بودم)

این کد پرینت منه :

Set DataDP.DataSource = rs1
DataDP.Show 1

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

m.4.r.m
جمعه 06 بهمن 1391, 13:07 عصر
خوب شما چرا از کریستال ریپورت استفاده نمی کنی ؟ انعطاف پذیری بالایی هم داره کار کردن هم باهاش آسونه . Data Report با اینکه سادس ولی خیلی هم مشکلات داره .

m.4.r.m
جمعه 06 بهمن 1391, 13:20 عصر
فایل ضمیمه رو دانلود کن و ریجستری کن سپس از Refrence های ویژوال بیسیک اونو بخون بعد کد زیر رو اعمال کن ببین جواب میگیری یا نه

Private Sub Form_Load()

Dim obj As PageSet.PrinterControl

Private Sub Command1_Click()
On Error GoTo errorhandler:
Set obj = New PrinterControl
obj.ChngOrientationLandscape
DataReport1.Show
DataReport1.PrintReport False, rptRangeFromTo, 1, 1

Exit Sub

errorhandler:
MsgBox Err.Description
obj.ReSetOrientation

End Sub


Private Sub Form_Unload(Cancel As Integer)

obj.ReSetOrientation 'This resets the printer to portrait.

End Sub

alizanganeh
جمعه 06 بهمن 1391, 13:40 عصر
خوب شما چرا از کریستال ریپورت استفاده نمی کنی ؟ انعطاف پذیری بالایی هم داره کار کردن هم باهاش آسونه . Data Report با اینکه سادس ولی خیلی هم مشکلات داره .



نه بابا من قبلا از کریستال ریپورتز استفاده میکردم
دردسرش زیاده
ساخت ریپورت با دیتا ریپورت راحت تره و همچنین دسترسی به فیلدهاش راحتتره
تازه توی کریستال ، پدر آدمو سر هماهنگ سازی سرور در میاره
سرور رو لوکال انتخاب میکنی ولی بازم اذیت میکنه

من تابحال با دیتا ریپورت مشکلی نداشتم جز همین که حالت پرینتر نمیشه !

alizanganeh
جمعه 06 بهمن 1391, 13:48 عصر
به این صورت نوشتم کدهارو و اون فایل dll رو هم ضمیمه کردم


Private Sub Form_Load()

Dim obj As PageSet.PrinterControl

Private Sub cmdPrint_Click()
On Error GoTo errorhandler:
Set obj = New PrinterControl
obj.ChngOrientationLandscape
DataDP.Show
DataDP.PrintReport False, rptRangeFromTo, 1, 1

Exit Sub

errorhandler:
MsgBox Err.Description
obj.ReSetOrientation

End Sub


Private Sub Form_Unload(Cancel As Integer)

obj.ReSetOrientation 'This resets the printer to portrait.

End Sub


ولی بازم جواب نداد !!!

m.4.r.m
جمعه 06 بهمن 1391, 17:14 عصر
تو فرم لود ننویس که رفیق این کد رو من تستی برات گذاشتم این کد رو دقیقا رو باتون پرینت که میزنی و DataReport رو نشون میده بزار تا قبل از نمایش ریپورت حالتش عوض بشه تست کن جواب میده

alizanganeh
جمعه 06 بهمن 1391, 17:22 عصر
تو فرم لود ننویس که رفیق این کد رو من تستی برات گذاشتم این کد رو دقیقا رو باتون پرینت که میزنی و DataReport رو نشون میده بزار تا قبل از نمایش ریپورت حالتش عوض بشه تست کن جواب میده



ببین من کد مروبط به فرم لود رو توی فرم لود
مربوط به دکمه رو توی دکمه ی پرینت
و آنلود رو توی آنلود نوشتم
مگه غیر از انی کار دیگه هم میشه کرد؟

m.4.r.m
جمعه 06 بهمن 1391, 23:13 عصر
دوست خوبم دیگه راهی به ذهنم نمی رسه میشه بگی بعد از این کد چه خطایی یا روالی انجام میگیره اگه میشه سورس رو بزار بهتر کمک کنیم .

alizanganeh
شنبه 07 بهمن 1391, 02:05 صبح
دوست خوبم دیگه راهی به ذهنم نمی رسه میشه بگی بعد از این کد چه خطایی یا روالی انجام میگیره اگه میشه سورس رو بزار بهتر کمک کنیم .


این کل چیزیه که وجود داره توی برنامه من : (ببخش اگر خیلی کلی میگم با اینکه اینا رو قبلا بهت گفتم . کلی میگم تا همه در جریان باشن . ببخشید)

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

Set DataRMoraje.DataSource = rs1
DataRMoraje.Show 1

هیچ مشکلی نیست و کار میکنه
اما وقتی حالت پرینتر سیستم روی Portrate باشه ، چون اندازه ی طول و عرض گزارش با پرینتر مجازی سیستم هماهنگ نیست پیغام زیر رو نمایش میده :

http://upload.tehran98.com/img1/9e8r4cr4rbhljehgcgr.jpg

و اگر من برم و پرینتر سیستم رو روی حالت Landscape بذارم ، چون حالت پرینتر با طول و عرض گزارش هماهنگ میشه ، گزارش رو نشون میده و هیچ مشکلی نیست

حالا من میخوام این تغییر حالت پرینتر رو دستی انجام ندم و با کد بصورت خودکار انجام بشه . ینی حتی اگر حالت گزارش با حالت پرینتر هماهنگ هم نبود خودش حالت پرینتر سیستم رو تغییر بده و هماهنگش کنه

همین ♥ بسیار ممنون از وقت و حوصله ای که میذاری ♥

m.4.r.m
شنبه 07 بهمن 1391, 08:53 صبح
این کد رو هم تست کن ببین جواب میگیری یا نه ؟
Option Explicit Private Sub Command1_Click() DataReport1.Orientation = rptOrientLandscape DataReport1.Show End Sub

alizanganeh
شنبه 07 بهمن 1391, 09:35 صبح
اینو قبلا زدم نمیشه
البته چنینکدی وجود نداره
درستش DataReport1.Orientation = rptOrientLandscape هستش
:عصبانی++:

محسن واژدی
شنبه 07 بهمن 1391, 12:40 عصر
اینو قبلا زدم نمیشه
البته چنینکدی وجود نداره
درستش DataReport1.Orientation = rptOrientLandscape هستش
:عصبانی++:

سلام علیکم
این دستور در sp6 وی بی اضافه شده، به عبارت بهتر وقتی بسته Microsoft VisuavBasic Service Pack6 را نصب کردیم این دستور در Data-Report اضافه و قابل استفاده هست

موفق باشید

alizanganeh
شنبه 07 بهمن 1391, 14:27 عصر
ینی راهی نداره بدون نصب چیزی درست بشه ؟

m.4.r.m
شنبه 07 بهمن 1391, 19:04 عصر
به جای این دستور باید عدد 0 یا 1 بزاری تست کن جواب میگیری

rptOrientLandscape

alizanganeh
شنبه 07 بهمن 1391, 20:34 عصر
به جای این دستور باید عدد 0 یا 1 بزاری تست کن جواب میگیری

rptOrientLandscape



هم Printer.Orientation = 1 و هم Printer.Orientation = 0 رو تست کردم نشد :لبخند::عصبانی++:

m.4.r.m
شنبه 07 بهمن 1391, 22:16 عصر
دیگه نمی دونم چی بگم . این همه کد جواب نداد شاید تو کد هات مشکل هست اگه می تونی سورس رو بزار والا من که دیگم ذهنم قد نمیده .

alizanganeh
شنبه 07 بهمن 1391, 23:29 عصر
خودمم موندم
تمام کدهام هموناییه که نوشتم
هیچی دیگه نیست

محسن واژدی
یک شنبه 08 بهمن 1391, 11:35 صبح
سلام علیکم
اینطور که دیدم کامپوننتی از سوی مایکروسافت منتشر شده برای تغییر Orientation پرینتر پیش فرض به Landscape یا Portrait (علل الخصوص برای DataReport)

برای سهولت استفاده و انتخاب راحتتر landscape و portrait مقداری از کدها ویرایش شده، در سورس ضمیمه هم زمان با خروج از برنامه پرینتر بطور خودکار به portrait برگردانده میشود، سورس اصلی در یک فایل dll کامپایل و سپس به برنامه اضافه میشود، ولی خب سورس ویرایش شده را بمنظور بی نیاز کردن برنامه به کامپوننت خارجی مستقیما به برنامه اضافه میکنیم

ضمیمه را بررسی کنین انشاءا... درسته

سورس اصلی: http://support.microsoft.com/kb/q198901

موفق باشید

alizanganeh
یک شنبه 08 بهمن 1391, 12:00 عصر
محسن جان ممنونم ولی نشد بازم :لبخند:
ینی حتی برنامه ای که دادی هم کار نمیکنه
در اصل کدی که دادی هیچ کاری نمیکنه
چون اگر توجه کنی تحت شرایط هر دو آپشن باکس ، حالت گزارش portrate هستش
میدونی چرا جواب میده؟
چون گزارشت portrate هستش
اگر گزارشت رو landscape کنی ، اونوقت برنامت هیچ کاری نمیکنه

فک کن از دست مایکروسافتم کاری بر نیمومد :قهقهه:

alizanganeh
یک شنبه 08 بهمن 1391, 14:12 عصر
واقعا عجب داستانی شده این قضیه ها :لبخند:

محسن واژدی
یک شنبه 08 بهمن 1391, 16:32 عصر
سلام علیکم
واقعیتش خیلی متوجه نشدم، البته چون کدها برای تغییر تنظیم پرینتر پیش فرض بکار میره به خوبی کار میکرد!

alizanganeh
یک شنبه 08 بهمن 1391, 17:03 عصر
سلام علیکم
واقعیتش خیلی متوجه نشدم، البته چون کدها برای تغییر تنظیم پرینتر پیش فرض بکار میره به خوبی کار میکرد!


هیچی دیگه این کد در اصل میاد حالت پرینتر رو عوض میکنه ولی فایده ای نداره
چون در هنگام پرینت گرفتن بازم مشکل داره !!!

Hashemvp
دوشنبه 09 بهمن 1391, 05:09 صبح
هیچی دیگه این کد در اصل میاد حالت پرینتر رو عوض میکنه ولی فایده ای نداره
چون در هنگام پرینت گرفتن بازم مشکل داره !!!
دوست عزیز شما اگه ی عکسی برعکس باشه
خودتو کله پا میکنی عکسو میبینی؟یا اینکه عکس رو میچرخونی ک درست ببنیش؟
خوب عزیز فرم پرینتت رو طول و عرضو تغییر بده این همه داستان داره
موفق باشید

alizanganeh
دوشنبه 09 بهمن 1391, 08:23 صبح
دوست عزیز شما اگه ی عکسی برعکس باشه
خودتو کله پا میکنی عکسو میبینی؟یا اینکه عکس رو میچرخونی ک درست ببنیش؟
خوب عزیز فرم پرینتت رو طول و عرضو تغییر بده این همه داستان داره
موفق باشید



خیلی خیلی ممنون از راهنمایی که اصلا به فکر هیچکس نرسیده بود :لبخند:
دوست عزیز حتما امکانش نیست که دارم دنبال این کد میگردم دیگه

بعدشم اگر طول گزارشی که عمودی هستش از طول حالت افقی پرینتر بیشتر بشه بازم خطا میده و باید دوباره از این کد استفاده بشه . یا اینکه باز کاربر بره و تنظیمات پرینت رو دستکاری کنه

ممنون از کمکت :لبخند: :قلب:

alizanganeh
دوشنبه 09 بهمن 1391, 22:31 عصر
نبود ؟ !!!!!!!!!!!!!!!!!!!!!

m.4.r.m
دوشنبه 09 بهمن 1391, 22:50 عصر
شما سرویس پک 6 ویژوال بیسیک رو نصب کن مشکلت درست میشه برای کمبود ویژوال بیسیک کاران باید یه سری برنامه های مکمل نصب بشه دیگه . امتحان کن خیر میبینی

alizanganeh
دوشنبه 09 بهمن 1391, 23:07 عصر
خب اگر نصب کنم و از برنامم setup بگیرم ، روی سیستم کاربر نیاز به انجام کاری نیست ؟ !!!

m.4.r.m
دوشنبه 09 بهمن 1391, 23:15 عصر
خوب سرویس پک رو در مقصد هم باید نصب کنی فکر کنم شایدم خود برنامه Setup از فایل های مورد نیاز برای خودش برداره و در مقصد کپی کنه خلاصه باید تست کنی .

alizanganeh
دوشنبه 09 بهمن 1391, 23:53 عصر
خب از کجا دانلود کنم ؟
میترسم لینک هایی که توی سایت ها هستن بیخود باشن
لینک سالم سراغ نداری؟
البته ببخشیداااا :قلب:

m.4.r.m
سه شنبه 10 بهمن 1391, 00:35 صبح
http://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=2&ved=0CDkQFjAB&url=http%3A%2F%2Fwww.microsoft.com%2Fen-us%2Fdownload%2Fdetails.aspx%3Fid%3D5721&ei=n-8GUaqBM4SPswbggoHoCw&usg=AFQjCNF8APdZeGe5UdLdRduGDVsTJm-6zQ&sig2=erJ29DWq6MCjA1DL2gF9LQ&bvm=bv.41524429,d.Yms

alizanganeh
سه شنبه 10 بهمن 1391, 11:15 صبح
آقا دمت گرم

alizanganeh
سه شنبه 10 بهمن 1391, 11:39 صبح
خب من اون سرویس پک رو نصب کردم
حالا باید چه کنم؟
کل کد هایی که از اول دادید رو تست کردم ولی بازم نشد
بعد از نصب سرویس پک نباید چیزی رو به برنامه ضمیمه کنم یا ... ؟

m.4.r.m
سه شنبه 10 بهمن 1391, 20:31 عصر
امکان نداره چاپ رو به صورت عمودی انجام بدی ؟ این همه کار لازم نباشه ؟

alizanganeh
سه شنبه 10 بهمن 1391, 21:41 عصر
نه نمیشه
تعداد فیلدهایی که باید توی گزارش ذکر بشن زیادن و توی عمودی جا نمیشن :افسرده:

alizanganeh
چهارشنبه 11 بهمن 1391, 19:03 عصر
!!!!!!!!!!!!!!!!!!!!!!!!!!!!

alizanganeh
شنبه 14 بهمن 1391, 19:27 عصر
ینی کاملا ناامید باشم؟
راهی نیست ؟:لبخند:

m.4.r.m
شنبه 14 بهمن 1391, 21:34 عصر
راه زیاده شما نمی خوای استفاده کنی : کریستال ریپورت و اکتیو ریپورت و این جور چیزا و در ضمن چرا همه کارو باید برنامه نویس انجام بده این کار رو هم بسپار دست کاربر خودش تنظیم کنه . راحت

alizanganeh
شنبه 14 بهمن 1391, 22:12 عصر
خب بخاطر اینکه اگر بخوام عوض کنم گزارشاتمو پدرم در میاد :لبخند: در اصل باید برنامه نویس سختی داشته باشه و راحتترین شرایط رو برای کاربر فراهم کنه دیگه . این قانون مهندسی نرم افزاره
ولی بقول شما بذار یکم زحمت بکشن. کاربری که سر پرداخت هزینه ی نرم افزار پوست آدمو میکنن ، همون بهتر پدرش در بیاد :لبخند:

بازم ممنون از وقت و حوصله ای که گذاشتی
موفق باشی