Форум » [x]Harbour » Снова WIN_PRN (Hbwin) » Ответить

Снова WIN_PRN (Hbwin)

Dima: Устал бороться с этой проблемой , не работает кол-во копий, всегда печатается 1 копия. Просьба проверить как у кого отработает под Harbour. У меня Harbour 3.2.0dev (Rev. 18920) Пример [pre2] PROC Main() LOCAL oPrinter, i LOCAL cPrinter:=win_printerGetDefault() oPrinter := Win_Prn():New( cPrinter ) oPrinter:Copies := 2 oPrinter:Create() oPrinter:startDoc("testprn") FOR i := 1 TO 40 oPrinter:TextOut(str(i)) oPrinter:NewLine() NEXT oPrinter:endDoc() oPrinter:Destroy() return [/pre2] PS Пробовал под Mingw и Bcc

Ответов - 21, стр: 1 2 All

nick_mi: Harbour 3.0.0 (rev 16951) BCC Отпечатал 2 копии на лазерном и на струйнике

ZAlex: Harbour 3.2.09dev (r1306061203) Mingw 2 копии на лазерном -- все Ok!

Dima: nick_mi ZAlex Спасибо ! А я юзал виртуальные принтера и на любом из них всегда получал 1 копию и вот пробнул на железном , действительно все нормально. Вероятно какой то косяк с виртуальными принтерами из Harbour


Dima: А на виртуальном принтере кто то может попробовать ? Я юзал VentaFax , PdfFactory 3.x , PdfFactory 4.x , Snagit 10 и виртуалки от MS Office

AlexMyr: Тоже 1 на CutePDF Writer

Dima: AlexMyr Спасибо. Думал только у меня такой глюк а оно во как.

Vladimir: Модераторы, можно убрать предыдущее сообщение Uldamir? Это моё, машинально логин вписал, а оно и ушло. Повторю и дополню: Bullzip PDF Printer. 2 страницы. Хотя в трее выбросил сообщение, что напечатана 1. И строки начинаются со 2-й на каждом листе.

AlexMyr: Vladimir пишет: И строки начинаются со 2-й на каждом листе. и на CutePDF Writer тоже со второй

nick_mi: doPDF v7 печать со второй строки - 1 лист

Dima: Всем спасибо за тесты !!! Вопросик. Может есть у кого (кто сам дописывал) метод в Win_prn позволяющий вывести текст вписанный в прямоугольник ? По сути аналог wapi_DrawText или Pstextbox из PageScript.

azoo: Подскажите где найти описание параметров и методов класса Win_prn ?

AlexMyr: azoo пишет: Подскажите где найти описание Только если почитать исходник core\contrib\hbwin\win_tprn.prg и посмотреть тесты core\contrib\hbwin\tests\prn*.prп

azoo: Только если почитать исходник core\contrib\hbwin\win_tprn.prg и посмотреть тесты core\contrib\hbwin\tests\prn*.prп AlexMyr , во как сурово Вышеуказанный пример вполне рабочий. На его основе можно написать процедуру вывода на печать указанного текстового файла на печать и не потребуются тогда Dosprn, Sprint и т.п. Или есть в Harbour какие-то другие возможности отправки текстового вывода на win-принтер ?

gustow: azoo , попробую "втупую", хотя бы "для ориентировки" перевести про параметры и методы Win_prn (из win_tprn.prg). Кто "попродвинутее" - поредактируйте, если есть желание и надобность. Авось кому пригодится ;) - - - - - win_Prn() сделан для простой эмуляции печати из Clipper на матричном принтере. При печати на матричном принтере единицами измерения являются CPI (символов на дюйм) и LPI (строк на дюйм). Даже если для win_prn() параметр "Mapping Mode" равен WIN_MM_TEXT, то для ::SetFont() значения параметра xWidth все равно должны указываться в CPI, а не в пикселах. По умолчанию значение ::LineHeight равно 6 строкам на дюйм, поэтому ::NewLine() работает как перевод строки ("Line Feed") на матричных принтерах. Если вам это не подходит, переопределите то, что вам нужно, так, как вам нужно. METHOD New( cPrinter ) Создает новый объект класса Параметры: - cPrinter - строка, определяющая принтер, на который пойдет вывод; по умолчанию - текущий принтер METHOD Create() Создает DC (? как перевести?) и устанавливает шрифт "Courier New", ориентацию (Orientation), количество копий (Copies), лоток (так ли?) принтера (Bin#) Параметров нет. Примечание: Create() (и StartDoc() ) должны вызываться до начала печати. METHOD Destroy() Вызывает функцию EndDoc() - восстанавливает шрифт по умолчанию, удаляет DC. DESTRUCTOR Destruct() METHOD StartDoc( cDocName ) Начало печати документа. Вызывает StartPage() Параметры: - cDocName - строка, имя документа METHOD EndDoc( lAbortDoc ) Конец печати документа. Вызывает EndPage(), если lAbortDoc не равно .T. METHOD StartPage() Начало новой страницы. Параметров нет. METHOD EndPage( lStartNewPage ) Конец страницы. Параметры: - lStartNewPage ; если равно .T., то вызывается StartPage() для перехода на новую страницу. METHOD NewLine() Перевод на следующую строку. METHOD NewPage( lDelay ) Начало печати новой страницы. Параметры: - lDelay ; если равно .T., то новая страница создается не немедленно, а непосредственно перед первым выводом на печать на нее METHOD CheckPage() (проверяет страницу?) METHOD GetDocumentProperties() Получить свойства документа. Возвращает win_GetDocumentProperties( ::PrinterName, @::FormType, @::Landscape, @::Copies, @::BinNumber, @::fDuplexType, @::fPrintQuality, @::PaperLength, @::PaperWidth ) METHOD SetFont( cFontName, nPointSize, xWidth, nBold, lUnderline, lItalic, nCharSet, lManualSize ) Установка шрифта. - cFontName - строка, название шрифта - nPointSize - плотность по высоте (строк на дюйм, LPI) - xWidth - плотность по ширине (символов на дюйм, CPI) - nBold - полужирный (0 или 1) (? почему не "logical"?) - lUnderline - подчеркнутый - lItalic - курсив - nCharSet - номер используемого набора символов - lManualSize - установка размера вручную Примечание: xWidth указывается в символах на дюйм ("CharactersPerInch") _или_ (для точного указания вручную) как массив { nMul, nDiv } который вычисляет значение "CharactersPerInch" (например, для "Condensed" - 16.67 симв./дюйм массив == { 3,-50 } ) _или_ ZERO ( 0 ) для установки ширины шрифта по умолчанию для nPointSize; если xWidth (или nDiv) < 0 , то эмулируется шрифт Fixed METHOD SetDefaultFont() Установить шрифт по умолчанию. Параметров нет. METHOD GetFonts() Возвращает массив { "FontName", lFixed, lTrueType, nCharSetRequired } METHOD Bold( nWeight ) METHOD UnderLine( lUnderline ) METHOD Italic( lItalic ) METHOD SetDuplexType( nDuplexType ) // Get/Set current Duplexmode METHOD SetPrintQuality( nPrintQuality ) // Get/Set Printquality METHOD CharSet( nCharSet ) METHOD SetPos( nPosX, nPosY ) !!! Значения указывать в порядке ( Col, Row ) - "позиция в строке, за ней строка, - а НЕ "строка, за ней позиция в строке" ( Row, Col ) METHOD SetColor( nClrText, nClrPane, nAlign ) METHOD SetBkMode( nMode ) // Set Background mode: WIN_TRANSPARENT or WIN_OPAQUE METHOD TextOut( cString, lNewLine, lUpdatePosX, nAlign ) // nAlign : WIN_TA_* METHOD TextOutAt( nPosX, nPosY, cString, lNewLine, lUpdatePosX, nAlign ) !!! Значения указывать в порядке ( Col, Row ) - "позиция в строке, за ней строка, - а НЕ "строка, за ней позиция в строке" ( Row, Col ) METHOD SetPen( nStyle, nWidth, nColor ) METHOD Line( nX1, nY1, nX2, nY2 ) METHOD Box( nX1, nY1, nX2, nY2, nWidth, nHeight ) METHOD Arc( nX1, nY1, nX2, nY2 ) METHOD Ellipse( nX1, nY1, nX2, nY2 ) METHOD FillRect( nX1, nY1, nX2, nY2, nColor ) METHOD GetCharWidth() METHOD GetCharHeight() METHOD GetTextWidth( cString ) METHOD GetTextHeight( cString ) METHOD DrawBitmap( oBmp ) /* Clipper compatible functions. */ METHOD SetPRC( nRow, nCol ) // Based on ::LineHeight and current ::CharWidth METHOD PRow() METHOD PCol() METHOD MaxRow() // Based on ::LineHeight and Form dimensions METHOD MaxCol() // Based on ::CharWidth and Form dimensions METHOD MM_TO_POSX( nMm ) // Convert position on page from MM to pixel location Column METHOD MM_TO_POSY( nMm ) // " " " " " " " " " Row METHOD INCH_TO_POSX( nInch ) // Convert position on page from INCH to pixel location Column METHOD INCH_TO_POSY( nInch ) // " " " " " " " " " Row METHOD TextAtFont( nPosX, nPosY, cString, cFont, nPointSize,; // Print text string at location nWidth, nBold, lUnderLine, lItalic, nCharSet,; // in specified font and color. lNewLine, lUpdatePosX, nColor, nAlign ) // Restore original font and colour // after printing. Печатает строку текста в указанной позиции/строке указанным шрифтом (с размером и проч. свойствами) указанного цвета. После печати ВОССТАНАВЛИВАЕТ установки шрифта и его цвета, которые были до вызова этого метода. METHOD GetDeviceCaps( nCaps ) - - - - -

azoo: DosPrn не перехватывает печать из приложений [x]Harbour. Логично, т.к. DosPrn для DOS-приложений. Поэтому при переходе на [x]Harbour там, где был вывод на Win-принтер необходимо переписывать программу с использованием например метода Win_prn. Я прав?

Dima: azoo пишет: DosPrn не перехватывает печать из приложений [x]Harbour. Он перехватывает порт LPT , поэтому если приложение по прежнему пишет прямо в порт то и переделывать не надо. PS Не проверял (с)

azoo: Dima, перехватчик LPT1 в dosprn - DOS-программка prn2file.com. Она запускается из autoexec.nt при старте DOS-приложения. При запуске windows-приложения, скомпилированного Harbour, autoexec.nt не запускается и соответственно LPT1 не перехватывается. Отсюда следует вывод, что DOS-приложения, которые выводили печать на Windows-принтеры через dosprn не будут работать. Кто-нибудь сталкивался с такой проблемой? Я поступил так: написал процедуру, которая перехватывает весь вывод на LPT1 в тестовый файл. Затем появляется диалог просмотреть файл на экране или распечатать. При выборе "распечатать" используя класс Win_prn печатаю на лазерный принтер. Вроде всё хорошо кроме одного - нужно изменять программы.

azoo: По умолчанию значение ::LineHeight равно 6 строкам на дюйм gustow, а как изменить это значение на другое ? Например на 8 ? Написал : oPrinter:LineHeight := 8 вообще какая-то ерунда получилась - всё сжалось в 10-ю часть страницы

nick_mi: GUSTAV писал При печати на матричном принтере ... По умолчанию значение ::LineHeight равно 6 строкам на дюйм У вас действительно матричный принтер? Потому что для обычных принтеров, пример определения высоты линии oprn:LineHeight := oprn:GetCharHeight()

azoo: nick_mi, здесь речь об эмуляции печати(Clipper на матричном принтере) на Windows-принтерах.



полная версия страницы