# Native Code > برنامه نویسی در 6 VB > ابزارهای گزارشگیری در VB6 >  چطور کاغذ را a5 تعریف کنم ؟

## mrtzxxx

چطوری می شه در دیتا ریپورتر کاغذ رو a5 تعریف کرد ؟

----------


## UpgradeVB6Code

منم همين سوالو دارم ...

----------


## AmirAmiri

فکر نکنم بشه چنین کاری کرد. اگه یه نگاه به پراپرتی هاش بکنید میبینید که چنین چیزی نداره. حداقل من که ندیدم.
د ضمن یه سوال: مگه پرینتر میتونه به غیر از A4 کاغذ دیگه ای هم مثلا A3 چاپ کنه؟ اگه نتونه اینکارو بکنه کاملا منطقیه که DataReport هم چنین پراپرتی نداشته باشه ولی اگه پرینتر بتونه اینکارو بکنه پس میشه گفت این یک ضعفه VB هست.

----------


## vbhamed

سلام

با خاصيت ReportWidth ميشه عرض كاغذ رو تعريف كرد
ضمنا فكر مي كنم اگر قبل از چاپ با دستوري مثل Printer.PaperSize = vbPRPSA5 كاغذ رو براي چاپگر تعريف كنيم روي ديتا ريپورت هم اثر ميزاره

----------


## ali_habibi1384

> فکر نکنم بشه چنین کاری کرد. اگه یه نگاه به پراپرتی هاش بکنید میبینید که چنین چیزی نداره. حداقل من که ندیدم.
> د ضمن یه سوال: مگه پرینتر میتونه به غیر از A4 کاغذ دیگه ای هم مثلا A3 چاپ کنه؟ اگه نتونه اینکارو بکنه کاملا منطقیه که DataReport هم چنین پراپرتی نداشته باشه ولی اگه پرینتر بتونه اینکارو بکنه پس میشه گفت این یک ضعفه VB هست.


به سوال توجه کنید گفتند A5  نه A3 که a5  رو هم توی تنظیمات پرینتر داره.

----------


## UpgradeVB6Code

> سلام
> 
> با خاصيت ReportWidth ميشه عرض كاغذ رو تعريف كرد
> ضمنا فكر مي كنم اگر قبل از چاپ با دستوري مثل Printer.PaperSize = vbPRPSA5 كاغذ رو براي چاپگر تعريف كنيم روي ديتا ريپورت هم اثر ميزاره


 
من نميدونم چرا وقتي اين كد رو اجرا ميكنم سايز كاعذ رو تغيير نميده 
Printer.PaperSize = vbPRPSA5 
من با پرينتر مجازي "FinePrint pdfFactory Pro" دارم كار ميكنم 
بايد حتما از منوي Start > Printers And Fax > FinePrint pdfFactory Pro رو انتخاب كنم بعد از منوي Printer بعد زير منوي Printer Performance سايز كاغذ رو دستي تغيير بدم يعني اون كد كه اجرا ميشه بعد ميرم نگاه ميكن ميبينم سايز كاغذ A5 نشده ؟؟؟  :خیلی عصبانی:

----------


## ali_habibi1384

از فرمان  printer.width  و  printer.higth  استفاده کنید .
البته من بعد از استفاده از این روش برای چاپ گزارش از printer.print  استفاده کردم و جواب داده . شما باید سایز کاغذ A5  رو دستی وارد کنید.

----------


## UpgradeVB6Code

سلام 
مگه با اين دستور نبايد اندازه كاغذ پرينتر پيش فرض من تفيير كنه 
 
Private Sub Command1_Click()
 
Printer.ScaleMode = vbMillimeters
Printer.Width = 148
Printer.Height = 210
 
End Sub

اما من اينو اجرا ميكنم ميرم نگاه ميكنم ميبينم كه تغيير نكرده  :خیلی عصبانی: 
شايد يه دستوري بايد بنويسم كه اين تغييرات رو Set كنه ؟؟؟
البته من با "FinePrint pdfFactory Pro" دارم تست ميكم ربطي نداره ؟

----------


## UpgradeVB6Code

> سلام 
> مگه با اين دستور نبايد اندازه كاغذ پرينتر پيش فرض من تفيير كنه 
>  
> Private Sub Command1_Click()
>  
> Printer.ScaleMode = vbMillimeters
> Printer.Width = 148
> Printer.Height = 210
>  
> ...


اين كدها كه ما مينويسيم هيچ كدوم Set نميشند 
كسي نميدونه اون دستوري كه اينا رو Set ميكنه چيه ؟

----------


## ali_habibi1384

شما برو توی قسمت controlpanel  ویندوز و پرینتر پیش فرضت رو microsoft office image  انتخاب کن و کارهایی رو که میکردی تکرار کن. قطعا درست میشه.درضمن گزینه printer.enddoc  رو هم نذاشتی.

----------


## UpgradeVB6Code

سلام
من اين 3 تا پرينتر رو دارم



بعد اين كد رو اجرا ميكنم 

Private Sub Command1_Click()
    Printer.ScaleMode = vbMillimeters
    Printer.PaperSize = vbPRPSA5
    Printer.Orientation = vbPRORLandscape
    Printer.EndDoc
End Sub

انتظار دارم وقتي اون صفحه رو ميارم به اون شكلي كه نشون دادم باشه اما نميشه 




من اين تست رو روي هر سه تا پرينتر انجام دادم اما نشد  :ناراحت: 

ميشه شما اگر پرينتر داريد تست كنيد ببينيد اين كدها روي پرينتر شما اين تغييرات رو اعمال ميكنه يا نه ؟؟؟

----------


## ali_habibi1384

نه آفیس رو نصب کن و سپس پرینتر پیش فرض رو image office انتخاب کن

----------


## vbhamed

سلام

وقتي شما دستور تنظيم صفحه رو به چاپگرت مي دي، فقط براي برنامه خودت تنظيم ميشه پس نيازي نيست اون پنجره تغيير كنه
ضمنا دستور Enddoc وقتي لازمه كه چيزي واسه چاپ فرستاده باشي
دستورات زير رو ببين


Printer.PaperSize = vbPRPSA5
    Printer.Print "This is a test"
    Printer.EndDoc



با نوشتن اين دستورات جمله This is a test روي يك صفحه A5 چاپ ميشه، چاپگرش هم مهم نيست چي باشه، با همون چاپگر پيش فرض ويندوز چاپ مي كنه كه البته مي توني با چاپگر ديگه هم بهش بگي چاپ كنه

----------


## ali_habibi1384

ابتدا پرینتر پیش فرض رو تنظیم کن همونطوری که گفتم و سپس کد زیر رو اجرا کن تا اندازه صفحه A5  رو ببینی در پیش نمایش

Private Sub CmdPrint_Click()
Printer.Height = 12000
Printer.Width = 8000
Printer.CurrentX = 1000
Printer.CurrentY = 1000
Printer.Print "Hello UpgradeVB6Code"
Printer.EndDoc
End Sub

----------


## UpgradeVB6Code

اين كدها درست كار ميكنند يعني اندازه كاغذ رو براي برنامه ميكنند A5 اما مشكل اينه كه با ديتا ريپورت چه طوري اين كارو بكنم 
يعني من اين كدهاي شما رو كه وارد ميكنم بعد 
Printer.Print "Hello UpgradeVB6Code"
رو ميزنم اندازه كاغذ A5 هست اما وقتي 
DataReport2.PrintReport

رو ميزنم باز اندازه كاغذ همون اندازه هاي پيش فرض هست و به انداره A5 تغيير نكرده مگر اين كه دستي برم اندازه پيش فرض رو A5 بذارم 
اما ميخوام اين كارو برنامه خودش انجام بده

----------


## ali_habibi1384

اگه شما بخوای از شئ دیتا ریپورت استفاده بکنی اجازه تعریف نوع کاغذ رو نداری و فقط روی A4  می تونی چاپ کنی . بهر حال برای هر کاری راه حلی هست . شما میتونی از کریستال ریپورت استفاده کنی و یا از شئ پرینتر با هزاران قابلیت . کاری که من با کد بالا برات سایز کاغذ A5  رو ساختم.

----------


## flooden

من قبول ندارم كه نشه اينكار رو انجام داد !!!
upgradevb6code من هم همان مشكل شما رو دارم
تغيير سايز كاغذ از طريق كد در هنگام كار با ديتا رپورت

----------


## UpgradeVB6Code

> من قبول ندارم كه نشه اينكار رو انجام داد !!!
> upgradevb6code من هم همان مشكل شما رو دارم
> تغيير سايز كاغذ از طريق كد در هنگام كار با ديتا رپورت


من تحقیق کردم دیتا ریپورت این امکان رو نداره که بتونی سایز کاغذ رو تغییر بدی 
اما انگار توی SP6 امکان تغییر جهت کاغذ هست 
فکر کنم آپدیت به sp6 رو از مایکروسافت بتونی بگیری

----------

