ورود

View Full Version : چاپ ابعاد غیرمعمول



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

abdorreza
دوشنبه 04 دی 1385, 15:42 عصر
تا اونجایی که من توی داس کار میکردم ، با کدهای پرینتر (کد اسکیپ) ، پرینتر رو تنظیم می کردم

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

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

mehran_337
سه شنبه 05 دی 1385, 13:36 عصر
سلام عبدالرضا جان
ممنون از جوابت ولی فکر کنم راه دیگه ای هم داشته باشه
منتظر جواب دوستان هستم

rezamim
سه شنبه 05 دی 1385, 16:26 عصر
http://www.universalthread.com/wconnect/wc.dll?2,15,1173141

mehran_337
سه شنبه 05 دی 1385, 18:22 عصر
مرسی رضا جان
متاسفانه لینک بالا باز نشد . اگر اطلاعاتی در این زمینه داری اگه میشه همینجا توضیح بده که بقیه بچه ها هم استفاده کنند.
در ضمن این مسئله خیلی برام حیاتیه از بچه های دیگه هم کمکی از دستشون بر میاد کوتاهی نکنند
در هفته دوبار خوردن ماهی برای سلامتی مفیده .

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

mehran_337
چهارشنبه 06 دی 1385, 07:39 صبح
ممنون . حالا برم تست کنم ببینم چی می شه

rezamim
چهارشنبه 06 دی 1385, 08:57 صبح
اینو برای یه دوست پاکستانی توضیح داده بودم

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
چهارشنبه 06 دی 1385, 09:40 صبح
حالا یه چاپگری مثل 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
چهارشنبه 06 دی 1385, 09:54 صبح
http://www.atariarchives.org/epson/appendix_b.php
برای اطمینان به این سایت هم سری بزنید
البته برای dos که مشکلی نیست ولی برای ویندوز هم در ابتدای گزارش میتونی یک label انتخاب و دستورات بالا را وارد کنی فکر نمی کنم مشکل داشته باشد .

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



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

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


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

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

rezamim
چهارشنبه 06 دی 1385, 16:26 عصر
یعنی هرباری که پرینتر را می خواهیم استفاده کنیم باید اینکار را بکنیم ؟؟؟؟؟
شما در نظر بگیر من این برنامه را پکیج می کنم و می فرستم برای شهر دیگر . آیا باید به اینصورت پرینتر را روشن کنند .؟؟ این قسمت را بیشتر توضیح دهید

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

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

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

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

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


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

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

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

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

rezamim
پنج شنبه 07 دی 1385, 15:27 عصر
شما در ویندوز میتونید کاغذ تعریف کنید . در این صورت دیگه مشگلی نیست بعد از هر چاپ مثل اینکه کاغد A4 رو میده بیرون اون رو میده بیرون .

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


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

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

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

binyaz2003
یک شنبه 10 دی 1385, 20:40 عصر
با این کد میتونید از طریق برنامه نویسی این کار رو انجام بدید.البته من هنوز تست نکردم.دوستان زحمتشو بکشن.

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
دوشنبه 11 دی 1385, 08:43 صبح
ممنون آقای علی جان ! تست می کنم اینجا جوابشو می زارم

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

rezamim
دوشنبه 11 دی 1385, 11:21 صبح
یه مشکل وقتی قبض رولی مورد نظر چاپ شد و قبض رو بریدم باید با دکمه فونت کاغذ رو به عقب بر گردونم.
متاسفانه به جای اینکه لبه کاغذ را به ابتدای چاپگر بیاره کمی بالاتر میاره یعنی بجای لبه کاغذ کمی وسط تر نگهمیداره . در صورتیکه وقتی کاغذ را برای اولین بار می کشه درست همون لبه کاغذ نگهمیداره
1 - چکار کنم رو لبه نگهداره ؟
با تشکر

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

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

mehran_337
شنبه 16 دی 1385, 10:52 صبح
من در 3 ثانیه حلش میکنم اگر خواستی بگو برات بفرستم من با این تا حالا دفترچه قسط - رمز کارت سیباب برای بانکها روی کاغذ رول (همون کارت 2 لایه ) و .... درست کردم

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

rezamim
چهارشنبه 11 بهمن 1385, 13:50 عصر
اگه فرستادند به ما هم خبر بدید

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

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

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

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

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

mehran_337
چهارشنبه 23 اسفند 1385, 08:21 صبح
با تشکر از شما که پاسخ دادین!
البته گزارشات امروزی رو دیگه حوصله نمی شه با کدنویسی طراحی کرد. چون کار با ریپورت دیزاین ها یه جورایی عادت شده.
اما اگه با ریپورت طراحی بشه و در هنگام چاپ و یا قبل از چاپ کدها ارسال بشه باز هم جواب نمی ده؟؟؟
اگه می شه کدهاش هم اینجا قرار بدین
ممنون

vbhamed
چهارشنبه 23 اسفند 1385, 15:54 عصر
سلام
این بستگی به برنامه گزارشگر داره
اگر گزارشگر شما بعد از چاپ صفحه کد صفحه بعد رو به چاپگر بفرسته دیگه کاریش نمیشه کرد، هر چند شما همچنان کد برگشت به عقب رو می تونید بدید که اگر مشکل شما فقط همین میشه شاید بشه یه کارایی کرد

mehran_337
شنبه 26 اسفند 1385, 07:58 صبح
این شاید بشه کاری کرد یعنی چه؟
من مشکلم همینه

vbhamed
شنبه 26 اسفند 1385, 08:19 صبح
یعنی اینکه فکر می کنم در هر حال با استفاده از کدهای ESC شما می تونید کاغذ رو به مقدار دلخواه عقب برگردونید

rezamim
شنبه 26 اسفند 1385, 08:23 صبح
دقیقا همینطوره . یعنی گزارشگر کد خروج کاغذ از چاپگر رو هم میفرسته. البته در سایتهای دیگه ای کدهایی دیدم که مثلا این کد خروج کاغذ رو میخوردند! ولی من که تست میکردم جواب نمیداد.

mehran_337
یک شنبه 05 فروردین 1386, 08:32 صبح
من هم در ویندوز نتونستم از کد های esc نتیجه ای بگیرم

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

mehran_337
سه شنبه 28 خرداد 1387, 12:34 عصر
شاید برای دوستان پیش بیاید که بخواهندی کاغذی در ابعاد دلخواه در کنترل پنل / چاپگر تعریف کنند که این عمل از سوی کاربر ملالات بار است و نیاز به ایجاد آن در خود برنامه دارند.
با توجه به کدی که جناب حسین زاده در تاپیکهای گذشته مطرح کردند بده فرم تکمیلی را برای این موضوع ساخته و همراه سورس در اختیار علاقمندان قرار می دهم.
چنانچه نکاتی باشدر در خدمتم

rahro
چهارشنبه 29 خرداد 1387, 06:31 صبح
سلام محسن جان:
آخرشي .
مرسي

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

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

IC_prog
شنبه 01 تیر 1387, 08:52 صبح
REPORT FORM repname RANGE startpage,endpage

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

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

rahro
دوشنبه 10 تیر 1387, 12:30 عصر
نگونبختی هم عالیمه ;-)
من هم با این مسئله مشکل داشتم . بعضی ابعاد و پس از ریست کردن نشون داد
اما احساس می کنم همه ابعاد و قبول نمی کنه مثلا من یکی دو سانت از قسمت های پایین کاغذ که پرتی بود مثلا ارتفاع 27 سانت 3 سانت پایین و نمی خواستم چیزی چاپ کنم ارتفاع رو 24 ایجاد کردم دیدم توی لیست ریپورتم اومد. تست کن شاید جواب داد
سلام
محسن جان واقعا عذر ميخوام اشتباه لپي بود خواستم برسونم كه شما هم قبلا چقدر روي اين موضوع دردسر كشيديد همين .:خجالت:
از لطفت هم ممنونم درسته, همين بود اندازه رو تغيير دادم درست شد .

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

rahro
یک شنبه 23 تیر 1387, 08:13 صبح
سلام
يه مشكل جدي.
از روش فوق براي چاپ ابعاد غير معمول استفاده كردم ولي به مشكل ذيل برخوردم كه بدليل نياز فوري فرصت تحقيق ندارم . و اون اينكه ميخواستم كمي از ابعاد مربوطه رو كاهش دهم ولي جالب اينكه پروژه بعد از EXE اين امكان رو به نظر مياد از من گرفته باشه .
جايي رو اشتباه رفتم ؟!!!!!
محسن جان كجايي !؟؟؟

mehran_337
یک شنبه 23 تیر 1387, 15:08 عصر
فرم را باید حذف کرده و مجددا با ابعاد جدید بسازید

rahro
دوشنبه 24 تیر 1387, 06:48 صبح
نه هرگز.
اگر در SETUP ريپورت حالت رو دوباره ست كنم مشكل حله . تنها بعد از exe نميشه كاريش كرد.

kia1349
دوشنبه 24 تیر 1387, 07:03 صبح
2170 که خوبه.بیچاره اونهائی که برای بار اول با 2180 کار کردند

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

rahro
دوشنبه 24 تیر 1387, 07:55 صبح
2170 که خوبه.بیچاره اونهائی که برای بار اول با 2180 کار کردند
آره واقعا.
چون وقتي خواستم برنامه رو نصب كنم متوجه شدم 2180 هستش:گریه:

rahro
دوشنبه 24 تیر 1387, 08:21 صبح
فكر كنم متوجه شدم مشكل از كجا بود و اميدوارم حل شده باشه .
پست 8 جناب معمار توضيحات خوبي داده بودند ولي با توجه به نظرات دوستان در پست هاي بعدي اينطور برداشت كردم كه اين توضيحات ابتدايي رو جدي نگيرم .

بعد از طراحی گزارش باید یه تغییراتی در اون بدید. به شکل زیر :
کد:
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 یعنی کاغذ شما رول است

rahro
دوشنبه 24 تیر 1387, 09:41 صبح
دارم ديوانه ميشم تو اين چاپ رول.:ناراحت:
صفحه اول درست چاپ ميشه و بقيه صفحات چند ميلي به جلو ميرن و در كل همه چيز ميريزه بهم .
اي كاش ميشد از نو اجكت كرد.
چه مصيبتي:عصبانی++:

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

rezamim
دوشنبه 24 تیر 1387, 14:20 عصر
چيزي كه در بالا اشاره شده براي چاپگرهاي LQ300 هست. شايد براي 2170 يا 2180 متفاوت باشه. متاسفانه الان در دسترسم نيست كه چك كنم. شما در دفترچه چاپگرت ببين چطوري ميتوني به قسمت تنظيمات بري.

http://www.epson.com/cgi-bin/Store/support/supDetail.jsp?BV_UseBVCookie=yes&infoType=FAQs&oid=14329&prodoid=8287

rezamim
دوشنبه 24 تیر 1387, 17:10 عصر
يه سئوال. آيا پرينتر رو با استفاده از درايور خودش كه روي سي دي هست نصب كرديد يا از طريق انتخاب پرينتر از ليست ويندوز ايكس پي؟ چون شنيدم اگر با درايور خودش نصب كنيد اندازه هاي متفاوتي قابل دسترس هست ولي با انتخاب چاپگر از ليست ويندوز خيلي از اين اندازه ها نصب نميشوند.
شما چه اندازه اي مد نظرتون هست ؟

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

شما چه اندازه اي مد نظرتون هست ؟
80 و 132 ستوني رول .

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

rahro
دوشنبه 24 تیر 1387, 17:54 عصر
دفترچه راهنماشو دارم .
در اون گفتم كليد PITCH رو بگيريم . كه در مرحله اول تنظيمات فونت و در مرحله دوم مربوطه به ساير تنظيمات است ولي مراحل رو رفتم اما چاپگرم ريخته به هم .
الان بايد بدونم چطور ريست ميشه .:گریه:
واي چه پست شلوغي شد!! خدا رحم كنه فردا با جناب كيا .:افسرده:

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

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

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

rahro
سه شنبه 25 تیر 1387, 10:46 صبح
ممنونم معمار جان , خيلي زحمت كشيديد
خوب دوستان بلاخره تونستم تاتوي اين قضيه رو در بيارم خلاصه اينكه :
دو تا تنظيمات در چاپگرهاي سوزني هست كه دانستن آنها خالي از لطف نيست وآن دو :
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
چهارشنبه 26 تیر 1387, 10:56 صبح
نه
مثلي كه مشكل ما نميخواد به همينجا ختم شه .
هيچ مشكلي وجود نداره ولي سيستم بعد از نصب در سيستم طرف مقابل گزارش رو ناقص نمايش ميده!!!
آره مشكل اينه كه نوع كاغذي كه من تعريف كردم رو ست نميكنه. در حالي دقيقا تمامي مراحل رو ائم از تعريف ابعاد جديد و غيره ... رو در سيستم مربوط تنظيم كردم .
چرا؟

rezamim
چهارشنبه 26 تیر 1387, 12:37 عصر
اندازه كاغذي كه در سيستم جديد تعريف كرديد چند هست ؟ منظورم عددي هست كه بايد جلوي PAPERSIZE نوشته بشه هست.
در ويندوز xp براي پيدا كردن آن بايد بعد از تعريف كاغذ مورد نظرتان ، يك ريپورت بسازيد و با ست كردن كاغذ مورد نظرتان و رفتن به فيلد expr آن عدد را بدست بياوريد.

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

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

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

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

rahro
یک شنبه 30 تیر 1387, 09:56 صبح
سلام
واي نميدونيد بعد از اينكه ديدم تعداد كثير صفر نفر اين ريپورت مرا دانلود كردن كه بخوان بهم كمك كنن چقدر ذوق كردم.!:بامزه:
شوخي كردم . ايمان دارم كه دوستان اگر در خصوص موضوعي اطلاعاتي داشته باشن و يا وقتش رو داشته باشن دريغ نميكنن.
خوب به ياري خدا تونستم اين مشكل رو حل كنم. ولي نميخوام بگويم اين روش استاندارده!!! بلكه وظيفه دونستم تا اينجاي كار , اطلاعاتم رو در اختيار دوستان بگذارم تا همانطور كه قبلا هم عرض كردم اگر كسي به اين مشكل برخورد بتونه به قولي گليمش رو از آب در بياره تا زماني كه اساتيد فن راهكار مطمئن و استانداردي در اختيار بگذارن .
همانطور كه قبلا هم به عرض رسونده بودم يكي از بزرگترين مشكلاتي كه باهاش دست به گريبان بودم اين بودم كه بعد از طراحي ابعاد معمول خود 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
یک شنبه 30 تیر 1387, 10:31 صبح
وقتی از PAPERSIZE=paperlarg
استفاده کنی ریپورت خودش از این متغیر استفاده می کنه؟؟؟ یعنی حذف اون سط کفایت می کنه؟

rahro
یک شنبه 30 تیر 1387, 10:48 صبح
وقتی از PAPERSIZE=paperlarg
استفاده کنی ریپورت خودش از این متغیر استفاده می کنه؟؟؟ یعنی حذف اون سط کفایت می کنه؟
محسن جان :براي همينه كه ميگم انرو از جدول ريپورت خودت حذف كن. در ضمن توجه داشته باش كه PAPERSIZE حتما بايد متغير عمومي -public- باشه كه جايگزين شه .:لبخندساده:

sekhavat
یک شنبه 17 شهریور 1387, 21:53 عصر
با سلام
آقا هزاران بار درود بر شما
مشكلم حل شد ...... :لبخند: سر درد گرفتم از بس با اين پرينتر سوزني چاپ مي كردم !!:عصبانی++: تا بالاخره مشكلم اينجا حل شد.
خدا مشكلتونو حل كنه :تشویق:
مرسي
راستي نماز روزه ها هم قبول
با تشكر برادر شما علي

sekhavat
یک شنبه 17 شهریور 1387, 21:55 عصر
اینو برای یه دوست پاکستانی توضیح داده بودم

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 کنید. با دنبال کردن منوها ی چاپ شده این کار قابل انجام است. این همان چیزی است که باعث میشود کاغذ بعد از چاپ یک قبض به عقب برگردد و قبض بعدی را چاپ کند.

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

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