# پایگاه‌های داده > سایر پایگاه‌های داده > Foxpro >  چاپ ابعاد غیرمعمول

## mehran_337

با توجه به راهنماییهای دوستان بالاخص آقا کیا به این نتیجه رسیدیم که وقتی قراره ابعاد دلخواهی رو در کاغذ گزارش پیاده کنیم باید به این نکته توجه داشته باشیم که چاپگری که نصب شده آیا توانایی ساپورت آن ابعاد را داره یا خیر؟
مثلا با hp 1200 که فقط a4 لیزری می زنه نمی شه کاغذ a3 پرینت گرفت. پس نمی شه در گزارش ابعاد کاغذ  و بیشتر از a4 تعریف کرد.
این تا اینجا نتیجه بحث هایی که اینجا شد.
حالا یه چاپگری مثل lq300 نصب کردم تا برنامه بتونه چیزی مثل قبض تلفن چاپ کنه اما مشکل اینه که وقتی چاپ تموم می شه کل رول را می خواد اجکت کنه و چون به آخر کاغذ نمی رسه تا اخر رول رو می گرده.
از پارامتر  noeject  و حتی nopageeject هم استفاده کردم اما نشد می خوام وقتی قبض چاپ شد و قبض و بریدیم دیگه بره سر جای اولش .
راهنماییم کنید با تشکر

----------


## abdorreza

تا اونجایی که من توی داس کار میکردم ، با کدهای پرینتر (کد اسکیپ) ، پرینتر رو تنظیم می کردم 

که کاغذ رو چقدر اجکت بده ، یعنی به اندازه طول کاغذ ، حالا نمیدونم توی ویندوز هم باید از 

کدهای اسکیپ استفاده کرد یا اینکه راه حل دیگه ای داره !

----------


## mehran_337

سلام عبدالرضا جان
ممنون از جوابت ولی فکر کنم راه دیگه ای هم داشته باشه
منتظر جواب دوستان هستم

----------


## rezamim

http://www.universalthread.com/wconn...l?2,15,1173141

----------


## mehran_337

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

----------


## pooyeshpajooh

در چاپگر LQ 300  باید  کلید LOAD EJECT  (درست یادم نیست شایدم کلید LF)   را نگه داری وچاپگر را روشن کنی 
دستگاه شروع به چاپ SETUP چاپگر می کند حال با جواب دادن به سوالات چاپگر با استفاده از کلیدها وتنظیم چراغها سایز کاغذ را با توجه به جدول چاپ شده انتخاب کنید

----------


## mehran_337

ممنون . حالا برم تست کنم ببینم چی می شه

----------


## rezamim

اینو برای یه دوست پاکستانی توضیح داده بودم

1 - بعد از طراحی گزارش باید یه تغییراتی در اون بدید. به شکل زیر :


USE MyReport.frx
BROWSE

برای اولین رکورد باید مقدار tag و tag2 خالی شود

REPLACE tag WITH "", tag2 WITH ""


در همان رکورد اول مقادیر فیلد EXPR را مانند زیر تغییر دهید:
در واقع با این کار شما درایور معرفی شده را حذف میکنید تا بر روی چاپگر های مختلف مشکلی نداشته باشید :

DRIVER=
DEVICE=
OUTPUT=
ORIENTATION=0
PAPERSIZE=256
PAPERLENGTH=1380
PAPERWIDTH=2200
DEFAULTSOURCE=8
PRINTQUALITY=180
COLOR=2
YRESOLUTION=180
TTOPTION=1


PAPERLENGTH و PAPERWIDTH در واقع همان طول و عرض گزارش شما یا قبض شما هست که به میلیمتر باید باشد
PRINTQUALITY=180 و YRESOLUTION=180 هم رزولوشن چاپ است که این بهترین مقدار است. یعنی سرعت مناسب و کیفیت معمولی. اگر 360 انتخاب کنید کیفیت عالی و سرعت افتضاح را خواهید داشت.
PAPERSIZE=256 یعنی کاغذ با اندازه تعریف شده (Custom)
DEFAULTSOURCE=8 یعنی کاغذ شما رول است


حالا گزارش را با دستور use ببندید


حالا باید کاغذ مورد نظر را در قسمت تعریف چاپگر هم معرفی کنیم
در ویندوز XP:
به قسمت Printers& Faxes بروید و از منوی File گزینه server properties را انتخاب کنید. در تب Forms روی دکمه CREATE A NEW FORM کلیک کنید . در مقابل Form Name عبارت User Defined Paper را بنویسید و سپس طول و عرض کاغذ یا قبض خود را وارد کنید و دکمه SAVE FORM را بزنید.
یاور استاد شد!

برای ویندوز 98
به کنترل پنل رفته ، پرینتر را انتخاب کنید، روی پرینتر مورد نظر کلیک راست کنیدو گزینه properties را انتخاب کنید. در تب Paper روی گزینه Custom ( آخرین گزینه یا نوع کاغذ ) کلیک کنید. در پنجره باز شده اندازه کاغذ را باز هم به میلیمتر وارد کرده و تایید کنید.
در پنجره کنونی برای گزینه Paper Source ، TRACTOR را انتخاب کنیدو تایید کنید.
اینهم تمام

تازه دردسر اصلی شروع میشود و آنهم تنظیم چاپگر.
پرینتر را خاموش کنید. دکمه فونت را گرفته و پرینتر را روشن کنید. پرینتر شروع به چاپ تنظیمات خود میکند. یکی از این تنظیمات Auto Tear Off است که در حالت معمولی مقدار آن OFF است و شما باید آنرا ON کنید. با دنبال کردن منوها ی چاپ شده این کار قابل انجام است. این همان چیزی است که باعث میشود کاغذ بعد از چاپ یک قبض به عقب برگردد و قبض بعدی را چاپ کند.

این آموزش حاصل چندین ماه وبگردی ، سئوال از خارجیهایی که اصلا از اینکه من ( یا بهتر بگویم کاربران من ) با چاپگر سوزنی کار میکنم میخندیدند و در نهایت استفاده از یک سایت چینی و هندی بود.
امیدوارم مفید واقع شود.
در آخر یک فرم که برای انجام سریعتر تنظیمات فوق الذکر بر روی گزارشات تهیه کرده ام را تقدیم میکنم.

----------


## rezakhj

> حالا یه چاپگری مثل lq300 نصب کردم تا برنامه بتونه چیزی مثل قبض تلفن چاپ کنه اما مشکل اینه که وقتی چاپ تموم می شه کل رول را می خواد اجکت کنه و چون به آخر کاغذ نمی رسه تا اخر رول رو می گرده.
> از پارامتر  noeject  و حتی nopageeject هم استفاده کردم اما نشد می خوام وقتی قبض چاپ شد و قبض و بریدیم دیگه بره سر جای اولش .
> راهنماییم کنید با تشکر


سال 1376 یک برنامه فروش برای کتاب فروشی های آستان قدس نوشتم و البته الان source‌ دم دستم نیست ولی فکر کنم برای اینکار از دستورات زیر استفاده کردم شما امتحان کنید اگر مشکل حل نشد source را نگاه میکنم  چاپگر آنها هم lq300 بود 

prow(),0 say chr(27)+"J"  @           
یا 

chr(27)+"J" ???

هر  chr(27)+"J" ???  یک خط برمیگردد هر چقدر میخواهی دستور را وارد کن و کاغذ بیشتر برمیگردد

for i = 1 to 10
chr(27)+"J"???
endfor

البته برای اطمینان از دستور و عدم گمراه کردن  شما به user Manual  epson  هم نگاهی انداختم ظاهرا دستور درست است . 
البته من lq300 ندارم تست کنم 
موفق باشی

----------


## rezakhj

http://www.atariarchives.org/epson/appendix_b.php
برای اطمینان به این سایت هم سری بزنید
البته برای dos که مشکلی نیست ولی برای ویندوز هم در ابتدای گزارش میتونی یک label انتخاب و دستورات بالا را وارد کنی فکر نمی کنم مشکل داشته باشد .

----------


## mehran_337

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




> تازه دردسر اصلی شروع میشود و آنهم تنظیم چاپگر.
> پرینتر را خاموش کنید. دکمه فونت را گرفته و پرینتر را روشن کنید. پرینتر شروع به چاپ تنظیمات خود میکند. یکی از این تنظیمات Auto Tear Off است که در حالت معمولی مقدار آن OFF است و شما باید آنرا ON کنید. این همان چیزی است که باعث میشود کاغذ بعد از چاپ یک قبض به عقب برگردد و قبض بعدی را چاپ کند.


یعنی هرباری که پرینتر را می خواهیم استفاده کنیم باید اینکار را بکنیم ؟؟؟؟؟ 
شما در نظر بگیر من این برنامه را پکیج می کنم و می فرستم برای شهر دیگر . آیا باید به اینصورت پرینتر را روشن کنند .؟؟ این قسمت را بیشتر توضیح دهید



> سال 1376 یک برنامه فروش برای کتاب فروشی های آستان قدس نوشتم و البته الان source‌ دم دستم نیست ولی فکر کنم برای اینکار از دستورات زیر استفاده کردم شما امتحان کنید اگر مشکل حل نشد source را نگاه میکنم چاپگر آنها هم lq300 بود


فکر کنم این دستورات در محیط داس جوابگو باشد . نظر شما چیه؟؟!

----------


## rezamim

> یعنی هرباری که پرینتر را می خواهیم استفاده کنیم باید اینکار را بکنیم ؟؟؟؟؟ 
> شما در نظر بگیر من این برنامه را پکیج می کنم و می فرستم برای شهر دیگر . آیا باید به اینصورت پرینتر را روشن کنند .؟؟ این قسمت را بیشتر توضیح دهید


وقتی شما کسی را شهر دیگر پیدا کردید که تنظیمات درون کنترل پنل را انجام دهد، تنظیم پرینتر را هم انجام میدهد!
ولی این کار ( تنظیم پرینتر ) فقط یکبار انجام میشود. ولی اگر چاپگر به تعمیرگاه برود و آنها دوباره آنرا به تنظیمات اولیه برگردانند ، متاسفانه باز اینکار باید انجام شود.
من اینکار را برای نرم افزار صدور قبض باسکول و نرم افزار تخلیه بار انجام داده ام و بسیار عالی جواب میدهد. اگر دوستان راه ساده تری میدانند ، ما را هم بی نصیب نگذارند ، علی الخصوص جناب کیا

یه فرم هم به پست قبلی اضافه کردم. دوست داشتید استفاده کنید

----------


## rahro

سلام 
شاید این موضوع بی مورد باشد ولی گفتم شاید بدرد دوستان بخورد ادرس ذیل مربوط به نرم افزاریست که مدعی است که با استفاده از آن در مصرف استفاده از جوهر پرینتر صرفه جویی 75 درصدی می شود 
http://www.p30world.com/archives/006238.php#more
عذر میخوام اگر بی دلیل بود

----------


## عفت بزرگه

شما در ویندوز میتونید کاغذ تعریف کنید . در این صورت دیگه مشگلی نیست بعد از هر چاپ مثل اینکه کاغد A4  رو میده بیرون اون رو میده بیرون . نیازی هم به تغییر در پرینتر و اینها نیست . توی داس هم که اصلا مشکلی نیست مخصوصا اگر کاغذ رول باشه من در 3 ثانیه حلش میکنم اگر خواستی بگو برات بفرستم من با این تا حالا دفترچه قسط - رمز کارت سیباب برای بانکها روی کاغذ رول (همون کارت 2 لایه ) و .... درست کردم

----------


## mehran_337

سلام 
از عنایت همه دوستان ممنونم.
اما واقعیتش Tear Off نمی دونم چطوری باید عوض بشه . قاعدتا باید با دکمه Font روی پرینتر تبدیل به ON بشه ام متاسفانه هر کاری که می کنم با زدن دکمه فونت تغییری در چراغهای سبز داده نمی  شه با توجه به اینکه چاپگر تازه از جعبه باز شده ممکنه خرابیه؟؟؟
یادمه در 2170 با دکمه فونت خیلی از حالات را تغییر می دادیم
به هر حال مشکل من ابعاد نیست  مشکل من اینه که وقتی ابعاد می دم بعد از چاپ باید بایسته تا من کاغذ رول را ببرم اما تا انتهای رول اجکت می شه.



> اگر خواستی بگو برات بفرستم


با اینکه نمی دونم چیو می خوای بفرستی اما اگه کدی هست که در ویندوز باعث جلوگیری از اجکت می شه برام بفرست ممنون می شم . mehran_337@yahoo.com

----------


## rezamim

وقتی که چاپگر خاموش است دکمه فونت را میگیرید و بعد پرینتر را روشن میکنید، البته قبلا کاغذ رول را درون چاپگر بگذارید. فکر کنم حدود دو متر مصرف میشود. وقتی پرینتر روشن شد شروع میکند به چاپ تنظیمات . اول از همه جدول انتخاب زبان است. که لازم نیست آنرا تغییر دهید و بعد با انتخاب یک دکمه ( یادم نیست دقیقا شاید LF/FF ) به منوی بعد میروید که کلیه تنظیمات را نوشته است و خواهید دید که مقابل TEAR OFF نوشته است OFF . بعد گزینه ای را انتخاب میکنید که نوشته شده برای تغییر تنظیمات. و طبق نوشته ها دکمه ها را فشار میدهید تا چراغها همان شود که برای ON شدن لازم است.

دوستان دیگر هم اگر راه حل راحتتری دارند هینجا عنوان کنند تا همه استفاده کنند.

----------


## rezamim

> شما در ویندوز میتونید کاغذ تعریف کنید . در این صورت دیگه مشگلی نیست بعد از هر چاپ مثل اینکه کاغد A4  رو میده بیرون اون رو میده بیرون .


مشکل اینه که اونو نده بیرون !



> نیازی هم به تغییر در پرینتر و اینها نیست . توی داس هم که اصلا مشکلی نیست مخصوصا اگر کاغذ رول باشه من در 3 ثانیه حلش میکنم اگر خواستی بگو برات بفرستم من با این تا حالا دفترچه قسط - رمز کارت سیباب برای بانکها روی کاغذ رول (همون کارت 2 لایه ) و .... درست کردم


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

----------


## mehran_337

با تشکر از همه . 
اما باید با کمال شرمندگی عرض کنم مشکل از بی تجربیگیه من بود.
من کاغذ رو از بالا :خجالت:   :خجالت:   تغذیه می کردم . بعد از راه رول ، کاغذ رو گذاشتم دیدم بدون هیچ تغییر دادنی خودش بعد از پرینت کاغذ دیگه اجکت نمی کنه
فقط اینکه آیا برای تعیین ابعاد حتما باید در کنترل پنل فرم جدید تعریف کنیم یا همون روشی که آقای رضامیم گفتند که گزارش رو باز کنیم و ابعاد custom بدیم کفایت می کنه؟؟

----------


## binyaz2003

با این کد میتونید از طریق برنامه نویسی این کار رو انجام بدید.البته من هنوز تست نکردم.دوستان زحمتشو بکشن.
Frequently Asked Questions
FAQ ID: 21202

This code is based on the working code posted by Jim Livermore on UT and work of George Tasker and late Ed Rauh. 

* All sizes in inches
ooo = NEWOBJECT("AddPrinterForm", "AddPrinterFormClass.fxp")
IF NOT ooo.AddForm("MyCustomForm1", 5,7, "EPSON Stylus C82 Series")
	? ooo.cErrorMessage
	? ooo.cApiErrorMessage 
  * Error
ENDIF
ooo = Null
*RETURN
* All sizes in cm
ooo = NEWOBJECT("AddPrinterForm", "AddPrinterFormClass.fxp", "", "Metric")
IF NOT ooo.AddForm("MyCustomForm2", 15,17, "EPSON Stylus C82 Series")
  * Error
ENDIF
ooo = Null


ooo = NEWOBJECT("AddPrinterForm", "AddPrinterFormClass.fxp")
IF NOT ooo.DeleteForm("MyCustomForm1", "EPSON Stylus C82 Series")
	? ooo.cErrorMessage
	? ooo.cApiErrorMessage 
  * Error
ENDIF
*AddPrinterFormClass.prg
* 10/26/2004 -- Added function Sys2600() so code can be run in VFP6 and earlier 
DEFINE CLASS AddPrinterForm AS Custom

	HIDDEN cUnit, cPrinterName, nFormHeight, nFormWidth, nLeftMargin, ;
              nTopMargin, nRightMargin, nBottomMargin, ;
	      nInch2mm, nCm2mm, nCoefficient, hHeap

	cUnit = "English"		&& inches or Metric - cm's
	cPrinterName = ""
	nFormHeight = 0
	nFormWidth = 0
	nLeftMargin = 0
	nTopMargin = 0
	nRightMargin = 0
	nBottomMargin = 0

	nApiErrorCode = 0
	cApiErrorMessage = ""
	cErrorMessage = ""

	nInch2mm = 25.4
	nCm2mm = 10
	nCoefficient = 0

	hHeap = 0

	PROCEDURE Init(tcUnit)
	IF PCOUNT() = 1 AND INLIST(tcUnit, "English", "Metric")
		This.cUnit = PROPER(tcUnit)
	ENDIF
	This.LoadApiDlls()
	This.hHeap = HeapCreate(0, 4096, 0)
	* Use Windows default printer
	This.cPrinterName = SET("Printer",2)
	This.nCoefficient = IIF(PROPER(This.cUnit) = "English", ;
		This.nInch2mm, This.nCm2mm) * 1000
	ENDPROC

	PROCEDURE Destroy
	IF This.hHeap <> 0
		HeapDestroy(This.hHeap)
	ENDIF

	ENDPROC

	PROCEDURE SetFormMargins(tnLeft, tnTop, tnRight, tnBottom)
	WITH This
		.nLeftMargin 	= tnLeft   * .nCoefficient
		.nTopMargin 	= tnTop    * .nCoefficient
		.nRightMargin 	= tnRight  * .nCoefficient
		.nBottomMargin 	= tnBottom * .nCoefficient
	ENDWITH
	ENDPROC

	PROCEDURE AddForm(tcFormName, tnWidth, tnHeight, tcPrinterName)
	LOCAL lhPrinter, llSuccess, lcForm

	This.nFormWidth  = tnWidth  * This.nCoefficient
	This.nFormHeight = tnHeight * This.nCoefficient
	IF PCOUNT() > 3
		This.cPrinterName = tcPrinterName
	ENDIF

	This.ClearErrors()
	lhPrinter = 0
	IF OpenPrinter(This.cPrinterName, @lhPrinter, 0) = 0
		This.cErrorMessage = "Unable to get printer handle for '" ;
                                + This.cPrinterName + "."
		This.nApiErrorCode = GetLastError()
		This.cApiErrorMessage = This.ApiErrorText(This.nApiErrorCode)
		RETURN .F.
	ENDIF

	lnFormName = HeapAlloc(This.hHeap, 0, LEN(tcFormName) + 1)
        * VFP7 and later
	= SYS(2600, lnFormName, LEN(tcFormName) + 1, tcFormName + CHR(0))
        * VFP6 and earlier
	*= Sys2600(lnFormName, LEN(tcFormName) + 1, tcFormName + CHR(0))

	* Build FORM_INFO_1 structure
	WITH This
		lcForm = This.Num2LOng(0) + ;		&& Flags
		This.Num2LOng(lnFormName) + ;
			This.Num2LOng(.nFormWidth) + ;
			This.Num2LOng(.nFormHeight) + ;
			This.Num2LOng(.nLeftMargin) + ;
			This.Num2LOng(.nTopMargin) + ;
			This.Num2LOng(.nFormWidth - .nRightMargin) + ;
			This.Num2LOng(.nFormHeight - .nBottomMargin)
	ENDWITH

	* Finally, call the API
	IF AddForm(lhPrinter, 1, @lcForm) = 0
		This.cErrorMessage = "Unable to Add Form '" + tcFormName + "'."
		This.nApiErrorCode = GetLastError()
		This.cApiErrorMessage = This.ApiErrorText(This.nApiErrorCode)
		llSuccess = .F.
	ELSE
		llSuccess = .T.
	ENDIF
	= HeapFree(This.hHeap, 0, lnFormName)
	= ClosePrinter(lhPrinter)

	RETURN llSuccess

	PROCEDURE ClearErrors
	This.cErrorMessage = ""
	This.nApiErrorCode = 0
	This.cApiErrorMessage = ""
	ENDPROC
	
	PROCEDURE DeleteForm(tcFormName, tcPrinterName)
	LOCAL lhPrinter, llSuccess

	IF PCOUNT() > 1
		This.cPrinterName = tcPrinterName
	ENDIF

	This.ClearErrors()
	lhPrinter = 0
	IF OpenPrinter(This.cPrinterName, @lhPrinter, 0) = 0
		This.cErrorMessage = "Unable to get printer handle for '" + This.cPrinterName + "."
		This.nApiErrorCode = GetLastError()
		This.cApiErrorMessage = This.ApiErrorText(This.nApiErrorCode)
		RETURN .F.
	ENDIF

	* Finally, call the API
	IF DeleteForm(lhPrinter, tcFormName) = 0
		This.cErrorMessage = "Unable to delete Form '" + tcFormName + "'."
		This.nApiErrorCode = GetLastError()
		This.cApiErrorMessage = This.ApiErrorText(This.nApiErrorCode)
		llSuccess = .F.
	ELSE
		llSuccess = .T.
	ENDIF
	= ClosePrinter(lhPrinter)
	RETURN llSuccess
	
	FUNCTION Num2LOng(tnNum)
	DECLARE RtlMoveMemory IN WIN32API AS RtlCopyLong ;
		STRING @Dest, Long @Source, Long Length
	LOCAL lcString
	lcString = SPACE(4)
	=RtlCopyLong(@lcString, BITOR(tnNum,0), 4)
	RETURN lcString
	ENDFUNC

	FUNCTION Long2Num(tcLong)
	DECLARE RtlMoveMemory IN WIN32API AS RtlCopyNum ;
		Long @Dest, String @Source, Long Length
	LOCAL lnNum
	lnNum = 0
	= RtlCopyNum(@lnNum, tcLong, 4)
	RETURN lnNum
	ENDFUNC

	HIDDEN PROCEDURE ApiErrorText
		LPARAMETERS tnErrorCode
		Local lcErrBuffer
		lcErrBuffer = REPL(CHR(0),1024)
		= FormatMessage(0x1000 ,.NULL., tnErrorCode, 0, @lcErrBuffer, 1024,0)
		RETURN STRTRAN(LEFT(lcErrBuffer, AT(CHR(0),lcErrBuffer)- 1 ), ;
                         "file", "form", -1, -1, 3)

		ENDPROC

	HIDDEN PROCEDURE LoadApiDlls
		DECLARE INTEGER OpenPrinter IN winspool.drv;
			STRING  pPrinterName,;
			INTEGER @phPrinter,;
			INTEGER pDefault
		DECLARE INTEGER ClosePrinter IN winspool.drv;
			INTEGER hPrinter
		DECLARE INTEGER AddForm IN winspool.drv;
			INTEGER hPrinter,;
			INTEGER LEVEL,;
			STRING  @pForm
		DECLARE INTEGER DeleteForm IN winspool.drv;
			INTEGER hPrinter,;
			STRING  pFormName 
		DECLARE INTEGER HeapCreate IN Win32API;
			INTEGER dwOptions, INTEGER dwInitialSize,;
			INTEGER dwMaxSize
		DECLARE INTEGER HeapAlloc IN Win32API;
			INTEGER hHeap, INTEGER dwFlags, INTEGER dwBytes
		DECLARE lstrcpy IN Win32API;
			STRING @lpstring1, INTEGER lpstring2
		DECLARE INTEGER HeapFree IN Win32API;
			INTEGER hHeap, INTEGER dwFlags, INTEGER lpMem
		DECLARE HeapDestroy IN Win32API;
			INTEGER hHeap
		DECLARE INTEGER GetLastError IN kernel32
		Declare Integer FormatMessage In kernel32.dll ;
			Integer dwFlags, String @lpSource, ;
			Integer dwMessageId, Integer dwLanguageId, ;
			String @lpBuffer, Integer nSize, Integer Arguments

		ENDPROC

ENDDEFINE
*-------------------------------------------------------

FUNCTION Sys2600(tnAddress, tnLength, tcNewString)

IF PCOUNT() = 3
	DECLARE RtlMoveMemory IN WIN32API AS RtlCopy ;
		INTEGER nDestBuffer, STRING pVoidSource, INTEGER nLength
	lcRetVal = LEFT(tcNewString, MIN(tnLength, LEN(tcNewString)))
	=RtlCopy(tnAddress, lcRetVal, LEN(lcRetVal))
ELSE
	DECLARE RtlMoveMemory IN WIN32API AS RtlCopy ;
		STRING @DestBuffer, INTEGER pVoidSource, INTEGER nLength
	lcRetVal = REPL(CHR(0),tnLength)
	=RtlCopy(@lcRetVal, tnAddress, tnLength)
ENDIF		
RETURN lcRetVal

----------


## mehran_337

ممنون آقای علی جان ! تست می کنم اینجا جوابشو می زارم

یه مشکل وقتی قبض رولی مورد نظر چاپ شد و قبض رو بریدم باید با دکمه فونت کاغذ رو به عقب بر گردونم.
متاسفانه به جای اینکه لبه کاغذ را به ابتدای چاپگر بیاره کمی بالاتر میاره یعنی بجای لبه کاغذ کمی وسط تر نگهمیداره . در صورتیکه وقتی کاغذ را برای اولین بار می کشه درست همون لبه کاغذ نگهمیداره
1 - چکار کنم رو لبه نگهداره ؟
2- آیا می شه کاری کرد که با کد خود کاغذ برگرده جای اولش؟
با تشکر

----------


## rezamim

> یه مشکل وقتی قبض رولی مورد نظر چاپ شد و قبض رو بریدم باید با دکمه فونت کاغذ رو به عقب بر گردونم.
> متاسفانه به جای اینکه لبه کاغذ را به ابتدای چاپگر بیاره کمی بالاتر میاره یعنی بجای لبه کاغذ کمی وسط تر نگهمیداره . در صورتیکه وقتی کاغذ را برای اولین بار می کشه درست همون لبه کاغذ نگهمیداره
> 1 - چکار کنم رو لبه نگهداره ؟
> با تشکر


این همون خاصیت TEAR OFF هست که شما فرمودید بی خاصیت هست !

----------


## mehran_337

وقتی که کاغذ را از بالا دادم بی خاصیت بود اما وقتی کاغذ را از پایین دادم و کاغذ رول آماده چاپ شد این دکمه کار کرد . حالا وقتی از این دکمه استفاده می کنم وقتی کاغذ را به عقب می برد به لبه نمی برد کمی بالاتر نگه می دارد.
می خوام وقتی چاپ شد به لبه برگرده . در ضمن می خواستم بدونم آیا با کد هم می شه این کارو کرد؟
ممنون

----------


## mehran_337

> من در 3 ثانیه حلش میکنم اگر خواستی بگو برات بفرستم من با این تا حالا دفترچه قسط - رمز کارت سیباب برای بانکها روی کاغذ رول (همون کارت 2 لایه ) و .... درست کردم


اگه می شه برام بفرستین ممنون می شم.
mehran_337@yahoo.com

----------


## rezamim

اگه فرستادند به ما هم خبر بدید

----------


## mehran_337

نه رضا جان علی کلاهدوزان هم مارو سر کار گذاشته.
امروز داشتم تاپیکهای قدیمی رو نگاه می کردم دیدم خیلی هاشون مثل سریالی می مونن که وقتی به جای حساس می رسه طرف می زاره می ره اصلا به تاپیکش هم نگاه هم نمی کنه.
یا جایی هم آقای معمار داد زد یافتم یافتم بعد دیگه هر چی بهش گفتن خب حالا راهش چی بود ، پیداش نشد ... :گیج:  :لبخند گشاده!:

----------


## rezamim

> نه رضا جان علی کلاهدوزان هم مارو سر کار گذاشته.
> امروز داشتم تاپیکهای قدیمی رو نگاه می کردم دیدم خیلی هاشون مثل سریالی می مونن که وقتی به جای حساس می رسه طرف می زاره می ره اصلا به تاپیکش هم نگاه هم نمی کنه.
> یا جایی هم آقای معمار داد زد یافتم یافتم بعد دیگه هر چی بهش گفتن خب حالا راهش چی بود ، پیداش نشد ...


والا اگه منظورت از رضا ، RezaMim هست که معمار هم خودمم!
جایی هم داد نزدم یافتم یافتم ، بلکه اگه دقت بفرمایید آقای کیا مثال زده بودند ( البته من از حمام نپریدم بیرون  :قهقهه:  )
اگه به همون پست مربوط به یافتم یافتم مراجعه کنید میبینید که مال دو سال قبله و همون موقع چون من هم شدیدا گرفتار بودم ، بعد از اینکه راهشو تقریبا پیدا کردم ، چند روزی رو به سایت سر نزدم و بعد دیدم بعضی از دوستان چه تیکه هایی انداختن . خب بعضی وقتها ما عادت کردیم که بشینیم موقعی که یکنفر دنبال چیزی میگرده ، کمک که نمیکنیم هیچ حرفهای بیخود هم میزنیم . بعد که طرف پیدا کرد زود میگیم آره اینجا بنویس تا همه ببینن. ( نه حتی من ببینم ) . باور کن همون زمان هم به بعضی از دوستان از طریق آفلاین آموزش رو دادم ولی اصلا دلم نمیخواست اونو روی سایت بزارم.
من انگلیسیم خیلی خوب نیست و در حد I am a window! هست ولی با این همه همیشه و تا جایی که مشکلاتم مربوط به زبان فارسی نباشه از سایت خارجیه ( تبلیغ ممنوع ! ) استفاده میکنم و برام بسیار جالبه که در اونجا افرادی که برای من خدای برنامه نویسی هستند چطور با تواضع و حوصله به من راهنمایی میدن و هیچوقت هم نه مسخره میکنند و نه با توضیحات بیخود مثل من اینو دارم و میتونم انجام بدم ، اگه خواستی بگو ! آدمو معطل میکنند. باور کن که تا حالا بارها شده که برام سورس نوشتن و حتی قسمت مربوط به خواندن اطلاعات از باسکول رو یه آمریکایی برام ساخت و فرستاد.
ولی آخرین بار که شما سئوال کرده بودید دیدید که همه مراحل رو بطور کامل توضیح دادم و با اینکار من الان دو تا از برنامه هام ( صدور قبض باسکول و تخلیه بار ) به همین روش کار میکنن و مشکلی هم ندارن.
باز هم دیدید که همونجا من گفتم اگه کس دیگه ای روش بهتر یا کامل تری داره بگه تا من هم استفاده کنم .
ولی باز چی دیدیم  :افسرده:   :متفکر:

----------


## mehran_337

با سلام خدمت دوست گلم آقا رضا !
از شوخی من ناراحت نشو . ما  مخلص شما و همه بچه های سایت هستیم.
اما به قول تو واقعا خیلی دیدم "من بلدم خواستی بگو" و از این جمله کفری می شم.
هر کس عقیده ای داره و نمی شه به کسی زور کرد اینطور باش. شما هم برای دانسته هاتون زحمت کشیدین و حق شماست که هر طور که صلاح می دونید استفاده کنید.
من با سایتهای خارجی زیاد ارتباط نداشتم اما الحق والانصاف اینجا هم بچه ها خیلی زحمت کشیدند و من مدیون همه هستم.
شما توضیح دادید و من هم مطالعه کردم اما ایراد (البته از انتظارات کاربر منه نه از شما ):
 تنظیماتی که گفتید باید در کنترل پنل انجام بشه و یا با دکمه های پرینتر و این چیزیست که من بعنوان استاندارد (فقط نظر شخصی بنده هست) قبول ندارم . و چون دیدم که برنامه های دیگر اینطوری نیست دنبال روشش هستم.

----------


## vbhamed

سلام
روش استفاده مستقیم از پرینتر هست با کدهای ESC
یعنی اینکه نباید اصلا با گزارش سازها گزارشتونو طراحی کنید
با دستور printer.print یا پرینت در فایل lpt1
با  کدهای  Esc میشه کاغذ رو هر چقدر خواست جلو و عقب داد
یعنی پس از هر مقدار چاپ که خواستید کاغذ رو جلو بدید تا کاربر اونو جدا کنه، سپس برش گردونین عقب سر جاش
همش با کد نویسی

----------


## mehran_337

با تشکر از شما که پاسخ دادین!
البته گزارشات امروزی رو دیگه حوصله نمی شه با کدنویسی طراحی کرد. چون کار با ریپورت دیزاین ها یه جورایی عادت شده.
اما اگه با ریپورت طراحی بشه و در هنگام چاپ و یا قبل از چاپ کدها ارسال بشه باز هم جواب نمی ده؟؟؟
اگه می شه کدهاش هم اینجا قرار بدین 
ممنون

----------


## vbhamed

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

----------


## mehran_337

این شاید بشه کاری کرد یعنی چه؟
من مشکلم همینه

----------


## vbhamed

یعنی اینکه فکر می کنم در هر حال با استفاده از کدهای ESC شما می تونید کاغذ رو به مقدار دلخواه عقب برگردونید

----------


## rezamim

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

----------


## mehran_337

من هم در ویندوز نتونستم از کد های esc  نتیجه ای بگیرم

----------


## rise2rise

من هم با این مشکل دست و پنجه نرم می کنم واقعیت این است که ویندوز در چاپ از تنظیمات خود استفاده کرده و در کاغذ پیوسته به اندازه فرم انتخاب شده صفحه را بعد از هر چاپ بیرون می برد . 
البته می توان در محل تعریف چاپگرها با استفاده از منوی فایل و سرور پروپرتیز یک فرم جدید به اندازه مورد نظر تعریف کرد پس از تعریف در رجستری ویندوز این تعریف اعمال می شود ولی مشکل اینجاست که فقط در مورد چاپگرهایی که خود ویندوز تعریف کرده و Digitally Signed علامت خورده اعمال می شود مثلا اگر چاپگر LQ300 باشد مشکلی نیست ولی برای +LQ300 
که خودمان نصب می کنیم اعمال نمی شود . متاسفانه کاربر برنامه بنده هم این چاپگر را خریده و من را بیچاره کرده !  :گریه:

----------


## mehran_337

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

----------


## rahro

سلام محسن جان:
آخرشي .
مرسي

----------


## mehran_337

خواهش می کنم . راستش هیچوقت یادم نمیره سر همین مسئله 6 ماه بالا پائین کرده بودم و چقدر با طرف قرار دادم بحث کردم که من می گفتم شما خودتون باید ابعاد و تعریف کنید و ایشون می گفت برنامه ات باید این قابلیت و داشته باشه.
خلاصه به لطف دوستان مخصوصا جناب حسین زاده (کاربر بی نیاز) کدی در سایت قرار گرفت که قرار شد تست کنیم.
امید وارم دوستانی که درآینده به این مسئله نیاز دارند بتوانند به راحتی استفاده کنند

----------


## ashkan_gorg

سلام دوستان من گزارشی دارم که 50 تا صفحه داره میخوام کاری کنم که کاربر بتونه تعیین کنه چه شماره صفحه ای رو چاپ کنه مثلا صفحه شماره 31 رو بتونه در textbox تایپ کنه وهمان صفحه در صفحه نمایش ظاهر شود وچاپ شود آیا چنین چیزی میشه انجام داد

----------


## IC_prog

REPORT FORM repname RANGE startpage,endpage

----------


## rahro

سلام 
اين هفته , موقيعتي پيش آمد كه مجبور شدم صفحات اين تاپيك رو دو بلكه چند بار بخونم تازه ميفهمم سر " كارگاه عزيز" -  قبلا" چي اومده! :خجالت:  حقيقتش مجبورم از پرينتر سوزني 2170 براي چاپ ابعاد غير معمول كه در واقع ميشه گفت همان كاغذ 132 ستوني رول است براي گزارشم استفاده كنم واين اولين تجربه ام است. 
خوب همانطور كه دوستان گفتند رفتم يك ابعاد جديد با نام جديد تعريف كردم و برگشتم تو پروپرتيس ريپورتم و در ستاپ اون دنبالش گشتم نبود! اين انتهاش مطمئنا كارم ميلنگه چون از دوستان نشنيده بودم . ؟؟!! حالا واقعا بايد جدول ريپورتم رو باز كنم و همانطور كه "معمار" فرمودند ركورد يك و دو رو ويرايش كنم يا خير.؟

----------


## mehran_337

نگونبختی هم عالیمه ;-)
من هم با این مسئله مشکل داشتم . بعضی ابعاد و پس از ریست کردن نشون داد
اما احساس می کنم همه ابعاد و قبول نمی کنه مثلا من یکی دو سانت از قسمت های پایین کاغذ که پرتی بود مثلا ارتفاع 27 سانت 3 سانت پایین و نمی خواستم چیزی چاپ کنم ارتفاع رو 24 ایجاد کردم دیدم توی لیست ریپورتم اومد. تست کن شاید جواب داد

----------


## rahro

> نگونبختی هم عالیمه ;-)
> من هم با این مسئله مشکل داشتم . بعضی ابعاد و پس از ریست کردن نشون داد
> اما احساس می کنم همه ابعاد و قبول نمی کنه مثلا من یکی دو سانت از قسمت های پایین کاغذ که پرتی بود مثلا ارتفاع 27 سانت 3 سانت پایین و نمی خواستم چیزی چاپ کنم ارتفاع رو 24 ایجاد کردم دیدم توی لیست ریپورتم اومد. تست کن شاید جواب داد


سلام 
محسن جان واقعا عذر ميخوام اشتباه لپي بود خواستم برسونم كه شما هم قبلا چقدر روي اين موضوع دردسر كشيديد همين . :خجالت: 
از لطفت هم ممنونم درسته, همين بود اندازه رو تغيير دادم درست شد .

----------


## mehran_337

درد سر زیاد تا حدی که داشت روی اعصابم راه می رفت . جالب اینجاست واسه کسی هم پیش نیومده بود. اما احساس خوبیه وقتی میبینم الان می تونه جواب سوالات دوستان باشه.
در ضمن واقعا کار با چاپهای غیر معمول فقط تجربیه ...

----------


## rahro

سلام 
يه مشكل جدي.
از روش فوق براي چاپ ابعاد غير معمول استفاده كردم ولي به مشكل ذيل برخوردم كه بدليل نياز فوري فرصت تحقيق ندارم . و اون اينكه ميخواستم كمي از ابعاد مربوطه رو كاهش دهم ولي جالب اينكه پروژه بعد از EXE اين امكان رو به نظر مياد از من گرفته باشه . 
جايي رو اشتباه رفتم ؟!!!!!
محسن جان كجايي !؟؟؟

----------


## mehran_337

فرم را باید حذف کرده و مجددا با ابعاد جدید بسازید

----------


## rahro

نه هرگز.
اگر در SETUP ريپورت حالت رو دوباره ست كنم مشكل حله . تنها بعد از exe نميشه كاريش كرد.

----------


## kia1349

2170 که خوبه.بیچاره اونهائی که برای بار اول با 2180 کار کردند

----------


## mehran_337

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

----------


## rahro

> 2170 که خوبه.بیچاره اونهائی که برای بار اول با 2180 کار کردند


آره واقعا.
چون وقتي خواستم برنامه رو نصب كنم متوجه شدم 2180 هستش :گریه:

----------


## rahro

فكر كنم متوجه شدم مشكل از كجا بود و اميدوارم حل شده باشه .
پست 8 جناب معمار توضيحات خوبي داده بودند ولي با توجه به نظرات دوستان در پست هاي بعدي اينطور برداشت كردم كه اين توضيحات ابتدايي رو جدي نگيرم .



> بعد از طراحی گزارش باید یه تغییراتی در اون بدید. به شکل زیر :
> کد:
> USE MyReport.frx
> BROWSE
> برای اولین رکورد باید مقدار tag و tag2 خالی شود
> کد:
> REPLACE tag WITH "", tag2 WITH ""
> در همان رکورد اول مقادیر فیلد EXPR را مانند زیر تغییر دهید:
> در واقع با این کار شما درایور معرفی شده را حذف میکنید تا بر روی چاپگر های مختلف مشکلی نداشته باشید :
> ...

----------


## rahro

دارم ديوانه ميشم تو اين چاپ رول. :ناراحت: 
صفحه اول درست چاپ ميشه و بقيه صفحات چند ميلي به جلو ميرن و در كل همه چيز ميريزه بهم .
اي كاش ميشد از نو اجكت كرد.
چه مصيبتي :خیلی عصبانی:

----------


## rahro

> پرینتر را خاموش کنید. دکمه فونت را گرفته و پرینتر را روشن کنید. پرینتر شروع به چاپ تنظیمات خود میکند. یکی از این تنظیمات Auto Tear Off است که در حالت معمولی مقدار آن OFF است و شما باید آنرا ON کنید. با دنبال کردن منوها ی چاپ شده این کار قابل انجام است. این همان چیزی است که باعث میشود کاغذ بعد از چاپ یک قبض به عقب برگردد و قبض بعدی را چاپ کند.


معمار جان دستم به دامنت بيا و اين نكته آخري رو بيشتر توضيح بده كه خيلي گيرم.
من دقيقا كار شما رو انجام ميدم و آنوقت پرينتر من مثل يك مرده هيچ عكس العملي نشون نميده. :ناراحت:

----------


## rezamim

چيزي كه در بالا اشاره شده براي چاپگرهاي LQ300 هست. شايد براي 2170 يا 2180 متفاوت باشه. متاسفانه الان در دسترسم نيست كه چك كنم. شما در دفترچه چاپگرت ببين چطوري ميتوني به قسمت تنظيمات بري.

http://www.epson.com/cgi-bin/Store/s...9&prodoid=8287

----------


## rezamim

يه سئوال. آيا پرينتر رو با استفاده از درايور خودش كه روي سي دي هست نصب كرديد يا از طريق انتخاب پرينتر از ليست ويندوز ايكس پي؟ چون شنيدم اگر با درايور خودش نصب كنيد اندازه هاي متفاوتي قابل دسترس هست ولي با انتخاب چاپگر از ليست ويندوز خيلي از اين اندازه ها نصب نميشوند.
شما چه اندازه اي مد نظرتون هست ؟

----------


## rahro

همنطوره كه فرموديد: از ليست ويندوز
ولي اين موضوع فكر نكنم ربطي به اجكت كاغذ داشته باشه . مهمترين مشكل من در حال حاضر اينه .
در خصوص موضوع پست 51 آيا واقعا به اين كار مشكلم حله چون جايي نداشتم تست كنم .



> شما چه اندازه اي مد نظرتون هست ؟


80 و 132 ستوني رول .

----------


## rezamim

در اين آدرس دفترچه چاپگر 2180 هست كه در صفحه 9-5 گفته دكمه pitch رو بايد نگه داريد و روشن كنيد. بقيه مراحل رو همونجا ببينيد.
http://files.support.epson.com/pdf/lq2180/lq2180u1.pdf

----------


## rahro

دفترچه راهنماشو دارم .
در اون گفتم كليد PITCH رو بگيريم . كه در مرحله اول تنظيمات فونت و در مرحله دوم مربوطه به ساير تنظيمات است ولي مراحل رو رفتم اما چاپگرم ريخته به هم .
الان بايد بدونم چطور ريست ميشه . :گریه: 
واي چه پست شلوغي شد!! خدا رحم كنه فردا با جناب كيا . :افسرده:

----------


## rezamim

> همنطوره كه فرموديد: از ليست ويندوز
> ولي اين موضوع فكر نكنم ربطي به اجكت كاغذ داشته باشه . مهمترين مشكل من در حال حاضر اينه .
> در خصوص موضوع پست 51 آيا واقعا به اين كار مشكلم حله چون جايي نداشتم تست كنم .
> 
> 80 و 132 ستوني رول .


فقط براي ويندوز xp بايد بدونيد كه خط
PAPERSIZE=256 یعنی کاغذ با اندازه تعریف شده (Custom)
عدد 256 نخواهد بود. اين عدد براي ويندوز 98 هست. در ويندوز xp تغيير ميكند كه براي پيدا كردن آن بايد بعد از تعريف كاغذ مورد نظرتان ، يك ريپورت بسازيد و با ست كردن كاغذ مورد نظرتان و رفتن به فيلد expr آن عدد را بدست بياوريد.

----------


## rahro

ممنونم معمار جان , خيلي زحمت كشيديد 
خوب دوستان بلاخره تونستم تاتوي اين قضيه رو در بيارم خلاصه اينكه :
دو تا تنظيمات در چاپگرهاي سوزني هست كه دانستن آنها خالي از لطف نيست وآن دو :
Skip Over Perforation-1
اين تنظيم فقط در وضعيت چاپ روي كاغذ پيوسته قابل دسترس است . با انتخاب on براي اين تنظيم چاپگر بين آخرين سطر چاپ شده در يك صفحه و اولين سطر در صفحه بعد به اندازه يك اينچ (4/25ميليمتر) فاصله ايجاد مي كند. يعني چاپگر قبل از رسيدن به محل پرفراژ چاپ را متوقف نموده و با رعايت فاصله معين از محل پرفراز , ادامه چاپ را در صفحه بعد شروع ميكند. از آنجه كه تنظيم هاي انجام شده در برنامه هاي كاربردي , جايگزين تنظيمهاي حاشيه در contol panel ميشود, فقط زماني از اين تنظيم استفاده كنيد كه حاشيه بالا و پائين را نتوانيد از طريق برنامه كاربردي تنظيم كنيد.
Auto tear off-2
در صورت چاپ روي كاغذ پيوسته با تراكتور هدايت كننده جلو و پشت دستگاه و با فعال كردن تنظيم auto tear off , دستگاه بطور اتوماتيك محل پرفراژ كاغذ رابه محل برش چاپگر هدايت ميكند تا به راحتي بتوانيد قسمت چاپ شده را از كاغذ پيوست جدا كنيد. در صورت اجاري مجدد دستور چاپ , چاپگر كاغذ پيوسته را به اندازه حاشيه بالا تغذيه كرده و چاپ را شروع ميكند بدين ترتيب از مصرف بي رويه كاغذ جلوگيري ميشود .
خوب حال برسيم سر اصل مطلب :
براي ريست كردن چاپگرهاي سوزني (منظورم در حال حاضر lq2170,lq2180 از كمپاني Epson  است ) بايد كليدهاي font و tear off رو با هم به داخل فشار دهيد و چاپگر را روشن كنيد.
خوب براي تنظيمات اين چاپگر به اين گونه عمل ميشود كه كليد pitch را به داخل فشار ميدهيم و بعد چاپگر را روشن ميكنيم , در محله اول چاپگر دستورالعمل انتخاب زبان را چاپ ميكند كه پيش فرض آن انگليسي ست دقت داشته باشيد در چاپ مربع مشكي به منزله چراغ خاموش و مربع خالي به منزله چراغ روش و مربع خالي تاج دار به منزله چراغ روشن چشمك زن.
خوب كليد فونت را ميفشاريم و چاپگر ليست تنظيمهاي اوليه دستگاه را در دو صفحه براي ما چاپ ميكند كه دو گزينه فوق يكي از چندين مورد آن است . در صفحه اول به اين اشاره دارد كه براي تنظيم هريك از اين موارد بايد كليد pitch  را انقدر بفشاريد تا نحوه چينش چراغها مطابق ليست راهنما (ليست چاپ شده صفحه اول )قرار گيرد . حال براي تغير هر مورد همانطور كه در صفحه دوم چاپ شده اشاره دارد  سه مربع راهنما از مجموع دو چراغ كليد tear off  و كليد pause   تشكيل گرديده و براي تغير آن بايد كليد tear off را بفشاريد (به تعداد گزينه هاي موجود مرتبه تغيير ميكند ) تا چينش چراغها مطابق ليست راهنما (ليست چاپ شده صفحه دوم مربوط به همان تنظيم ) قرار گيرد . خوب بعد از تغييرات به قول معمار عزيز "ياور استاد شد" و بايد پرينتر رو خاموش كنيد.
اميدوارم اين موضوع از حلافي و معطلي دوستان در آينده بكاهد .

----------


## rahro

نه 
مثلي كه مشكل ما نميخواد به همينجا ختم شه . 
هيچ مشكلي وجود نداره ولي سيستم بعد از نصب در سيستم طرف مقابل گزارش رو ناقص نمايش ميده!!!
آره مشكل اينه كه نوع كاغذي كه من تعريف كردم رو ست نميكنه. در حالي دقيقا تمامي مراحل رو ائم از تعريف ابعاد جديد و غيره ... رو در سيستم مربوط تنظيم كردم .
چرا؟

----------


## rezamim

اندازه كاغذي كه در سيستم جديد تعريف كرديد چند هست ؟ منظورم عددي هست كه بايد جلوي PAPERSIZE نوشته بشه هست.
در ويندوز xp براي پيدا كردن آن بايد بعد از تعريف كاغذ مورد نظرتان ، يك ريپورت بسازيد و با ست كردن كاغذ مورد نظرتان و رفتن به فيلد expr آن عدد را بدست بياوريد.

----------


## rahro

معمار جان سلام 
دقيقا" همين بود :تشویق: 
 قبلا هم شما فرموده بوديد ولي چون ريپورت روي سيستم خودم ست بود اقدام به ايجاد يك فرم جديد و بدست آوردن PAPERSIZE اون نميكردم . و از روي فرم قبلا كه ست بود اندازه رو گرفته بودم . :خجالت: 
بحرحال هر چند به ظاهر مشكل حله ولي در اين معما ماندم كه چرا سيستم خودم موردي ايجاده نميكنه و روي سيستم طرف مقال گير داده بود. :افسرده: 
از لطفت ممنونم :لبخند:

----------


## rahro

سلام 
چي ميگيد اگر بگويم باز اين هم تو زرد از كار در آمد!!!!!!
حالم رو گرفت! با كمال نا باوري درست نشد.
دوباره تست كردم ريپورت در سيستم مبدا مشكل نداره و در سيستم مقصد رو سايز letter ويندوز ست ميكنه . براي تست , ريپورتي  رو با همين ساير letter ايجاد كردم  PAPERSIZE اون يك بود و PAPERSIZE فرمي كه بصورت دلخواه ايجاد كردم 153 ولي نميدونم چي پيش مياد كه ويندوز انرو ست نميكنه .و ميره letter ست ميكنه 
اندازه ابعاد درخواستي من 34.60 در 27.80 است . و نامي كه من براي اون انتخاب كردم emdad است و اين هم ريپورتم.!!!!
از دوستاني كه وقت دارند خواهش دارم يك تست بزنند.

----------


## rahro

برای تست بیشتر در سه سیستم جداگانه یک ریپورت طراحی کردم و با باز کردن ریپورت PAPERSIZE اونها رو یاداشت کردم فکر میکنید نتیجه چی بود؟!!!
در اولی برابر 141
در دومی برابر با 156
و در سومی برابر با 131
نتیجه خوبیه نه !!!!!!

----------


## mehran_337

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

----------


## rahro

سلام 
واي نميدونيد بعد از اينكه ديدم تعداد كثير صفر نفر اين ريپورت مرا دانلود كردن كه بخوان بهم كمك كنن چقدر ذوق كردم.! :بامزه:  
شوخي كردم . ايمان دارم كه دوستان اگر در خصوص موضوعي اطلاعاتي داشته باشن و يا وقتش رو داشته باشن دريغ نميكنن.
خوب به ياري خدا تونستم اين مشكل رو حل كنم. ولي نميخوام بگويم اين روش استاندارده!!! بلكه وظيفه دونستم تا اينجاي كار , اطلاعاتم رو در اختيار دوستان بگذارم تا همانطور كه قبلا هم عرض كردم اگر كسي به اين مشكل برخورد بتونه به قولي گليمش رو از آب در بياره تا زماني كه اساتيد فن راهكار مطمئن و استانداردي در اختيار بگذارن .
همانطور كه قبلا هم به عرض رسونده بودم يكي از بزرگترين مشكلاتي كه باهاش دست به گريبان بودم اين بودم كه بعد از طراحي ابعاد معمول خود PAPERSIZE فرم پيش فرض شما در سيستم هاي مختلف متفاوت نشان ميده .!! چرا اون رو نپرسين كه سر در نياوردم.
دو تابع پيدا كردم كه مشكل گشا بودن يكي تابع SYS(1037) كه page setup ويندوز رو براي شما باز ميكنه و به كاربر اين اختيار رو ميديد كه بتونه نوع كاغذ خودش رو انتخاب كنه و يكي تابع PRTINFO(2) كه سايز كاغذ انتخابي رو به شما نشون ميده (آره ديگه نيازي نيست براي اينكه PAPERSIZE يك ريپورت رو بدونيد چيه يك گزارش طراحي كنين.!!!!) البته هر دو تابع داراي پارمترهاي زيباي ديگري نيز هستند كه مطمئنا به كامل كردم اين موضوع كمك بسيار ميكنن كه حقير وقت مطالعه بيشتر اون رو نداشتم و بعدا" اگر روي آن كار كردم مطمئنا به دوستان اطلاع ميدم .
قبل از اينكه راه كار خودم رو شرح بدهم اين توضيح رو بدهم كه من دو نوع ابعاد غير معمول رو تعريف كرده بودم و هر دو نيازم بود.
و اما راه حل فعلي  اين بود كه سه متغير عمومي در ابتداي پروژه تعريف كردم كه يكي از اونها بنام PAPERSIZE بود و دو تاي ديگري (دلخواه)  كه مربوط به دو نوع سايز مختلف گزارشم بود . اين دو تا متغير رو در ابتدا پروژه از جدول مورد نظرم مقادر دهي ميكنم و اگر اين دو نوع متغير داراي مقادير صفر باشن به كاربر هشدار ميدهم كه از كدام قسمت نسبت به مقادر دهي عرض گزارش خود رجوع كند . در قسمت مورد نظر از كد ذيل استفاده كردم كه :
a=SYS(1037)
thisform.pageframe1.page1.plarg.Value=PRTINFO(2)

و بعد مقادر مربوط رو به متغير مورد نظر ميدهم و در جدول مربوطه نيز به ثبت ميرسونم .
ولي كار به همينجا ختم نميشه و مهم ترين موضوع مانده! و آن اينه كه مي بايست سطر 
PAPERSIZE=141 رو از فيلد Expr ريپورت حذف كنيد و به هنگام فرخواني ريپورت اين كد رو به اون اضافه كنيد به عنوان مثال :
  PAPERSIZE=paperlarg
  report Form report1.frx  PREVIEW NOCONSOLE
تمام . :چشمک: 
خوب نظرتون چيه دوستان .

----------


## mehran_337

وقتی از   PAPERSIZE=paperlarg
 استفاده کنی ریپورت خودش از این متغیر استفاده می کنه؟؟؟ یعنی حذف اون سط کفایت می کنه؟

----------


## rahro

> وقتی از   PAPERSIZE=paperlarg
>  استفاده کنی ریپورت خودش از این متغیر استفاده می کنه؟؟؟ یعنی حذف اون سط کفایت می کنه؟


محسن جان :براي همينه كه ميگم انرو از جدول ريپورت خودت حذف كن. در ضمن توجه داشته باش كه PAPERSIZE حتما بايد متغير عمومي -public- باشه كه جايگزين شه . :لبخند:

----------


## sekhavat

با سلام
آقا هزاران بار درود بر شما
مشكلم حل شد ......  :لبخند گشاده!:  سر درد گرفتم از بس با اين پرينتر سوزني چاپ مي كردم !! :خیلی عصبانی:  تا بالاخره مشكلم اينجا حل شد.
خدا مشكلتونو حل كنه  :تشویق: 
مرسي
راستي نماز روزه ها هم قبول
با تشكر      برادر شما علي

----------


## sekhavat

> اینو برای یه دوست پاکستانی توضیح داده بودم
> 
> 1 - بعد از طراحی گزارش باید یه تغییراتی در اون بدید. به شکل زیر :
> 
> 
> USE MyReport.frx
> BROWSE
> 
> برای اولین رکورد باید مقدار tag و tag2 خالی شود
> ...


با سلام
آقا هزاران بار درود بر شما
مشكلم حل شد ......  :لبخند گشاده!:  سر درد گرفتم از بس با اين پرينتر سوزني چاپ مي كردم !! :خیلی عصبانی:  تا بالاخره مشكلم اينجا حل شد.
خدا مشكلتونو حل كنه  :تشویق: 
مرسي
راستي نماز روزه ها هم قبول
با تشكر برادر شما علي

----------

