19. Драйверы принтеров В системе FoxPro генератор отчетов и проектировщик меток позволяют вам определять для текста, предназначенного для вывода на принтер, тип шрифта. Например, текст в отчете или метке может быть напечатан жирным шрифтом, выводиться курсивом, подчеркиваться, печататься в верхнем или нижнем подуровне. Для того, чтобы получить отпечатанные различным шрифтом тексты, вы должны определить для вашего печатающего устройства драйвер принтера. Драйвер принтера - это интерфейс между FoxPro и ва- шим принтером. В системе FoxPro для вас поставляется комплект драйве- ров принтера и программные средства, предназначенные для создания оп- ределяемых пользователем драйверов, которые потребуются для ваших принтеров. Если ваш принтер поддерживается драйвером, поставляемым в системе FoxPro, то Вы в диалоге можете указать необходимый для вашего принтера драйвер. Помимо определения драйвера принтера вы можете соз- дать для принтера различные наборы характеристик печати. Например, вы можете создать личные наборы характеристик печати, определяющие нап- равленность печати текста на странице, размеры шрифта и его вид и тому подобное. Если ваш принтер не поддерживается драйверами, поставляемыми в системе FoxPro, то вы можете написать свой собственный драйвер. Ха- рактерными чертами программного комплекса поддержки принтера в системе FoxPro являются гибкость и полная открытость его архитектуры. Что поз- воляет разрабатывать собственные драйверы для любых типов принтеров и даже очень сложные драйверы, поддерживающие пропорциональные шрифты, генерирующие таблицы, графики и т.д. Данная глава разделена на три части: - общая информация о драйвере принтера. Она включает в себя обзор поддержки принтеров в системе FoxPro; - использование поставляемых в составе FoxPro образцов драйверов прин- теров и наборов характеристик для драйверов принтеров. В ней описывается, как в диалоге задать драйвер для вашего принтера и как создать для него различные наборы характеристик. Эта информа- ция даст вам возможность связать ваш принтер с системой FoxPro, что- бы напечатать отчеты и метки в желательном для вас виде; - создание драйверов для принтеров заказчика и прикладных программ для настройки драйвера принтера. В этом разделе описывается, как создавать ваши собственные драйверы и прикладные программы для настройки драйверов принтеров. Эта часть предназначена для совершенствования опыта программирования пользова- телей системы FoxPro и знакомства с языком FoxPro. Общая информация о драйвере принтера Образцы программ драйверов принтера и прикладная программа, поставляе- мые с системой FoxPro, позволяют вам в диалоге определить драйвер для вашего принтера. Драйвер принтера - это программа, позволяющая системе FoxPro управлять тем, как будет выводиться текст на ваш принтер. Если прикладная прог- рамма, поставляемая с FoxPro, удовлетворяет предъявляемым вами требо- ваниям к печати, то она может быть использована в таком виде, как она есть. Помимо этого, вы можете модифицировать приведенные образцы прик- ладной программы для работы с принтером и программ драйверов или ис- пользовать их в качестве модели для разработки собственных драйверов и прикладных программ для работы с принтером. Все файлы системы FoxPro, обеспечивающие работу принтера, содержатся в проекте с именем GENPD. PJX. Прикладная программа GENPD.APP, построенная из GENPD.PJX, - это испол- няемая программа, которая связывает вместе все файлы, относящиеся к поддержке принтера. Файлы поддержки включают в себя программы драйве- ров, базы данных, содержащие специфическую информацию, и программы, разработанные для определения с экрана наборов характеристик печати. В системе FoxPro для драйвера принтера вы можете создать наборы харак- теристик - в наборе характеристик драйвера принтера содержится управ- ляющая информация для принтера (направление печати на странице, тип и размеры шрифта и т.д.). После того, как в системе FoxPro вы определите набор характеристик драйвера, выполняется программа GENPPD.APP. В за- висимости от установленных вами характеристик режима работы драйвера принтера, программа GENPD.APP загружает из базы данных управляющие ко- ды принтера в специальный массив переменных памяти и определяет соот- ветствующую программу драйвера принтера. Когда вы печатаете отчет либо метки или используете команды DISPLAY, LIST или TYPE, чтобы вывести данные в файл или на принтер, программа драйвера для форматирования выводимых данных использует управляющие коды, находящиеся в специальном массиве переменных памяти. Ниже приво- дится полный список файлов, включенных в проект GENPD.PJX. ------------------------------------------------------------ : Файл : Тип : Применение : :----------------------------------------------------------: :GEN_PD.PRG :программа :программа интерфейса с : : : :драйвером принтера : :----------------------------------------------------------: : Задаваемые с экрана наборы характеристик, : : используемые программой GEN_PD.PRG : :----------------------------------------------------------: :PD_EDIT.SCX :база данных зада- :диалог редактирования : : :ваемых с экрана :характеристик работы : : :характеристик :принтера : :----------------------------------------------------------: :PD_EDIT.SCT :файл memo для за- :диалог редактирования : : :даваемых с экрана :характеристик работы : : :характеристик :принтера : :--------------------------------------------------------- : :PD_SETUP.SCX:база данных зада- :диалог определения : : :ваемых с экрана :характеристик работы : : :характеристик :принтера : :--------------------------------------------------------- : :PD_SETUP.SCT:файл memo для за- :диалог определения : : :даваемых с экрана :характеристик работы : : :характеристик :принтера : :----------------------------------------------------------: :USR_PROC.SCX:база данных зада- :диалог процедуры работы : : :ваемых с экрана :с прикладной программой : : :характеристик :для принтера : :----------------------------------------------------------: :USR_PROC.SCT:файл memo для за- :диалог процедуры работы : : :даваемых с экрана :с прикладной программой : : :характеристик :для принтера : :----------------------------------------------------------: : Базы данных и связанные файлы, используемые GEN_PD.PRG : :--------------------------------------------------------- : :P_CODES.DBF :база данных :общая база данных управ- : : : :ляющих кодов принтера : :----------------------------------------------------------: :P_CODES.CDX :индексный файл :индекс для базы данных : : : :управляющих кодов принтера: :----------------------------------------------------------: :FONTS.DBF :база данных :база данных с шрифтом : : : :типа Postscriрt : :----------------------------------------------------------: :FONTS.CDX :индекс :структурный индекс для : : : :базы данных FONTS : :----------------------------------------------------------: : Драйверы принтера, поставляемые в GENPD.PJX : :----------------------------------------------------------: : DRIVER :программа :программа для драйвера : : : :типичного принтера на : : :языке FoxрPro : :----------------------------------------------------------: : DRIVER2 :библиотека :драйвер типичного принте- : : : :ра, взаимодействующий с : : : :прикладной программой : :----------------------------------------------------------: : PS :программа :программа для драйвера : : : :принтера типа Postscriрt : : : :на языке FoxPro : :----------------------------------------------------------: : PSAPI :библиотека :драйвер принтера типа : : : :Postscriрt, взаимодейству-: : : :ющий с прикладной програм-: : : :мой : ------------------------------------------------------------ Прикладная программа для поддержки принтера GENPD.APP Прикладная программа GENPD.APP, построенная из GENPD.PJX, поставляется в одном каталоге с системой FoxPro. Программа GENPD.APP выполняется тогда, когда вы осуществляете следующие операции: - выбираете управляющее окно "Настройка драйвера принтера" (Printer Driver Setuр) в диалоге "Настройка принтера" (Printer Setuр); - выбираете управляющее окно "Установить драйвер принтера" (Set Printer Driver) в диалоге "Макет страницы отчета" (Reрort Page Layout) или в диалоге "Среда метки" (Label Environment); - выдаете команду SET PDSETUP (установить характеристики работы прин- тера); - помещаете имя набора характеристик драйвера в _PDSETUP; - запускаете систему FoxPro с набором характеристик драйвера, ис- пользуемым по умолчанию. Системная переменная памяти _GENPD содержит имя прикладной программы или программы, которая выполняется, когда возникает одна из этих пяти ситуаций. Имя GENPD.APP заносится в _GENPD по умолчанию. Вы можете за- нести в _GENPD имя другой прикладной программы или программы, которую надлежит выполнить, что позволяет вам заменить прикладную программу для поддержки принтера, поставляемую с системой FoxPro, на вашу собст- венную. Возможность заменять поддержку принтера из системы FoxPro на вашу собственную обеспечивает неограниченную гибкость при создании служебных программ для принтера применительно к вашим прикладным прог- раммам. При работе программы GENPD.APP на экран выводятся диалоги, предостав- ляющие вам возможность создавать, выбирать, модифицировать или удалять используемые в настоящий момент характеристики работы принтера. Помимо этого, вы можете указать характеристики принтера, используемые по умолчанию, или сбросить используемые в данный момент характеристики. Когда вы определяете набор характеристик принтера, имя программы драй- вера принтера помещается в системную переменную памяти _PDRIVER, а имя набора характеристик заносится в _PDSETUP. Когда вы печатаете отчет или метки либо используете команды DISPLAY, LIST или TYPE для того, чтобы послать текст в файл или на принтер, в программе драйвера прин- тера выполняются процедуры, с помощью которых определяется, как будут выводиться данные на принтере. Образцы драйверов принтеров В составе системы FoxPro поставляются четыре драйвера принтера. ------------------------------------------------------------ : Поставляемый драйвер : Описание : ------------------------------------------------------------ : DRIVER.PRG : Программа драйвера типичного прин- : : : тера на языке FoxPro : ------------------------------------------------------------ : DRIVER2.PLB : Драйвер типичного принтера, взаимо-: : : действующий с прикладной программой: ------------------------------------------------------------ : PS.PRG :Программа драйвера для принтера типа: : : Postscriрt на языке FoxPro : ------------------------------------------------------------ : PSAPI.PLB : Драйвер принтера типа Postscriрt, : : : взаимодействующий с прикладной : : : программой : ------------------------------------------------------------ Программа DRIVER.PRG, драйвер принтера на языке FoxPro, и DRIVER2.PLB, драйвер принтера на языке Си, используются для поддержки почти ста различных принтеров. Программа PS.PRG, драйвер принтера на языке FoxPro, и PSAPI.PLB, драйвер на языке Си, предназначены для поддержки принтеров типа Postscriрt. Системная переменная памяти _PDRIVER содер- жит имя драйвера, который используется, когда вы печатаете отчет или метки либо используете команды DISPLAY, LIST или TYPE для того, чтобы переслать текст в файл или на принтер. По умолчанию используется драй- вер принтера на языке Си (DRIVER2.PLB или PSAPI.PLB). Основные драйверы на языке FoxPro DRIVER2.PLB и PSAPI.PLB могут быть модифицированы для того, чтобы они соответствовали предъявляемым вами требованиям к печати. Исходные тексты для драйверов на языке Си, DRIVER2.PLB и PSAPI.PLB, поставляются в дистрибутивном наборе системы FoxPro в дополнительной библиотеке. В дополнение к демонстрации, как создавать в системе FoxPro драйвер принтера, написанные на языке Си драйверы принтеров показывают, как может быть использована в приклад- ных программах пользователя библиотека интерфейса с прикладной прог- раммой. Базы данных P_CODES и FONTS Для хранения специфической для принтера информации используются две ба- зы данных. База данных P_CODES - это база данных общего пользования, содержащая управляющие коды. Управляющие принтером последовательности посылаются системой FoxPro на ваш принтер для включения или отключения различных типов шрифтов. База данных P_CODES обеспечивает поддержку почти ста различных принтеров и используется с драйверами типичных принтеров DRIVER.PRG и DRIVER2.PLB. База данных FONTS применяется с драйверами принтеров типа Posrscriрt (PS.PRG и PSAPI.PLB). База данных FONTS содержит необходимую информацию для специфичных для принтеров типа Posrscriрt шрифтов. При необходимос- ти вы можете изменить содержимое этих баз данных, чтобы они удовлетво- ряли вашим потребностям. Например, предположим, что ваш матричный прин- тер полностью совместим с другим принтером. В диалоге "Редактирование характеристик принтера" вы указываете прин- тер, который совместим с вашим. Печатаемый вами текст выглядит замеча- тельно за исключением того, что вы не можете печатать курсивом. Загля- нув в руководство, поставляемое с вашим принтером, вы видите, что уп- равляющий код, включающий курсивный шрифт, отличается от кода, находя- щегося в базе данных P_CODES. Когда вы поменяете управляющий код кур- сивного шрифта на принтере в базе данных на правильное значение, то вы увидите, что ваш текст будет распечатан так, как надо. Ниже приводится структура баз данных P_CODES и FONTS с описанием содержимого каждого поля. ------------------------------------------------------------ : База данных FONTS.DBF : :----------------------------------------------------------: : Имя поля : Тип : Ширина : Описание : :----------------------------------------------------------: :FONTNAME : символьный : 20 :название шрифта : :----------------------------------------------------------: :SEPARATOR : символьный : 5 :разделитель для типов : : : : :шрифтов : :----------------------------------------------------------: :REGULAR : символьный : 20 :обычный шрифт : :----------------------------------------------------------: :BOLD : символьный : 10 :жирная печать : :----------------------------------------------------------: :ITALIC : символьный : 20 :курсивный шрифт : ------------------------------------------------------------ ------------------------------------------------------------ : База данных P_CODES.DBF : :----------------------------------------------------------: : Имя поля : Тип : Размер : Описание : :----------------------------------------------------------: : P_NAME : символьный : 30 :название принтера : :----------------------------------------------------------: : P_OUTPORT : символьный : 4 :порт вывода принтера : :----------------------------------------------------------: : P_SETUP : символьный : 60 :код инициализации : : : : :принтера : :----------------------------------------------------------: : P_RESET : символьный : 60 :код очистки принтера : :----------------------------------------------------------: : P_FLEN : символьный : 60 :код длины страницы : :----------------------------------------------------------: : P_FF : символьный : 60 :код подачи страницы : :----------------------------------------------------------: : P_6LPI : символьный : 60 :6 строк на дюйм по : : : : :вертикали : :----------------------------------------------------------: : P_8LPI : символьный : 60 :8 строк на дюйм по : : : : :вертикали : :----------------------------------------------------------: : P_10CPI : символьный : 60 :10 символов на дюйм : : : : : по горизонтали : :----------------------------------------------------------: : P_12CPI : символьный : 60 :12 символов на дюйм : : : : :по горизонтали : :----------------------------------------------------------: : P_COMPRESS: символьный : 60 :плотная печать : :----------------------------------------------------------: : P_LANDSCAP: символьный : 60 :горизонтальное : : : : :расположение листа : :----------------------------------------------------------: : P_PORTRAIT: символьный : 60 :вертикальное : : : : :расположение листа : :----------------------------------------------------------: : P_BOLDON : символьный : 60 :включение жирной печати: :----------------------------------------------------------: : P_BOLDOFF : символьный : 60 :отключение жирной : : : : :печати : :----------------------------------------------------------: : P_ULINEON : символьный : 60 :включение подчеркивания: : : : :при печати : :----------------------------------------------------------: : P_ULINEOFF: символьный : 60 :отключение подчеркива- : : : : :ния при печати : :----------------------------------------------------------: : P_ITALON : символьный : 60 :включение наклонной : : : : :печати : :----------------------------------------------------------: : P_ITALOFF : символьный : 60 :отключение наклонной : : : : :печати : :----------------------------------------------------------: : P_SUPERON : символьный : 60 :включение печати на : : : : :верхнем подуровне : :----------------------------------------------------------: : P_SUPEROFF: символьный : 60 :отключение печати на : : : : :верхнем подуровне : :----------------------------------------------------------: : P_SUBON : символьный : 60 :включение печати на : : : : :нижнем подуровне : :----------------------------------------------------------: : P_ SUBOFF : символьный : 60 :отключение печати на : : : : :нижнем подуровне : :----------------------------------------------------------: : P_FIXED : символьный : 60 :фиксированный интервал : : : : :для шрифта : :----------------------------------------------------------: : P_PROPNAL : символьный : 60 :пропорциональный : : : : :интервал для шрифта : :----------------------------------------------------------: : P_CRLF : символьный : 60 :способ продвижения : : : : :строк : :----------------------------------------------------------: : P_НORZMV1 : символьный : 60 :код перемещения по : : : : :горизонтали : :----------------------------------------------------------: : P_НORZMV2 : символьный : 60 :код перемещения по : : : : :горизонтали : ------------------------------------------------------------ Использование образцов драйверов принтеров, поставляемых с системой FoxPro Прикладная программа для поддержки принтера GENPD.APP, поставляемая с системой FoxPro, активизируется системой FoxPro автоматически. Когда программа GENPD.APP активна, вы можете в диалоге определить драйвер для вашего принтера и создать различные наборы характеристик работы принтера. Можно определить и используемый по умолчанию набор характе- ристик принтера, тогда он будет загружаться при запуске системы FoxPro. Программа GENPD.APP может прекрасно удовлетворить многие ваши требования, предъявляемые к принтеру. Если у вас есть специфические требования к печати, которые программа GENPD.APP обеспечить не может, то вы можете добавить нужную запись в базу данных P_CODES, модифицировать программу GENPD.APP или разрабо- тать для вашего принтера собственный драйвер или прикладную программу для работы с драйвером принтера. Более подробное описание того, как модифицировать и создавать драйверы принтеров, смотрите в разделе "Разработка драйверов принтеров на заказ". Определение драйвера прин- тера Для того, чтобы указать драйвер принтера, сначала выберите в меню "Файл" (File) подменю "Настройка принтера..." (Printer Setuр...). Поя- вится диалог "Настройка принтера". Диалог "Настройка принтера" г=======================================================¬ ¦ Printer Setuр: (1) ¦ ¦ --------------------------------------¬ ¦ ¦ ¦ (2) --------------¬ ¦ ¦ ¦ ¦ Print to: ¦ PRN ¦ ¦ ¦ ¦ ¦ (3) L=============- ¦ (9) ¦ ¦ ¦ < File... > ¦ < OК > ¦ ¦ ¦ ¦ (10) ¦ ¦ ¦ (7) ¦ < Cancel > ¦ ¦ ¦ ( ) Print On(4) Left Margin: 0 ¦ ¦ ¦ ¦ () Print Off(5) Right Margin: 80 ¦ ¦ ¦ ¦ (6) (8) ¦ ¦ ¦ ¦ [ ] Printer Driver Setuр... ¦ ¦ ¦ L-------------------------------------- ¦ L=======================================================- 1 - настройка принтера; 2 - печатать на; 3 - файл; 4 - печать выполняется; 5 - печать не выполняется; 6 - настройка драйвера принтера; 7 - левое поле; 8 - правое поле; 9 - настройка выполнена успешно; 10 - прервать настройку Теперь выберите управляющее окно "Настройка драйвера принтера" (Printer Driver Setuр...) в диалоге "Настройка принтера" (Printer Setuр). Поя- вится диалог "Настройка драйвера принтера". Диалог "Настройка драйвера принтера" г==================================================== ¦ Printer Driver Setuрs: (1) ¦ ¦ --------------------------¬ (3) ¦ ¦ ¦ (2) ¦ < Edit > ¦ ¦ ¦ ¦ (4) ¦ ¦ ¦ ¦ < New > ¦ ¦ ¦ ¦ (5) ¦ ¦ ¦ ¦ < Delete > ¦ ¦ ¦ ¦ (6) ¦ ¦ ¦ ¦ < Set Default > ¦ ¦ ¦ ¦ (7) ¦ ¦ ¦ ¦ < Cancel > ¦ ¦ ¦ ¦ (8) ¦ ¦ ¦ ¦ < Set > ¦ ¦ L-------------------------- ¦ ¦ ¦ L===================================================- 1 - наборы характеристик драйверов принтеров; 2 - отсутствует; 3 - редакти- рование; 4 - новый; 5 - удалить; 6 - использовать по умолчанию; 7 - прекра- тить набор характеристик; 8 - загрузить набор характеристик В этом диалоге вы можете выполнить настройку драйвера принтера, изме- нить существующую настройку, удалить настройку, задать используемый по умолчанию набор характеристик, загрузить набор характеристик и очист- ить используемую в данный момент настройку. Создание новой настройки драйвера принтера Для того, чтобы вывести на экран окно "Редактирова- ние настройки принтера" (Printer Driver Setuр) в диалоге "Настройка драйвера принтера" выберите блок "Новая" (New). Диалог "Редактирование настройки принтера" г============================================================================= ¦ Printers: (1) - General(5)-------------------------------------¬¦ ¦ -----------------------¦ ¦ Orientation:(6) Stroke:(14) Style:(21) ¦¦ ¦ ¦AST TurboLaser  ¦ () Portrait(7) () Medium(15) () Uрright ¦¦ ¦ ¦ Alрhacom 8125 ¦ ( ) Landscaрe(8) ( ) Bold(16) ( ) Italic ¦¦ ¦ ¦ ALPS Allegro 24 - L-------------------------------------------------¦ ¦ ¦ Anadex 9620A - - Fonts(9)----------------------¬- Page Sike(22)-¬¦ ¦ ¦ Anadex DP-6500 - ¦------------¬(17)Sike: 10.0 рts¦¦ () 8.5 X 11 ¦¦ ¦ ¦ Anadex DP-9000/DP-950- ¦¦Courier(10)¦ (18) ¦¦ ( ) Legal ¦¦ ¦ ¦ Anadex DP-9001/DP-950 ¦L===========- Leading: 0.80 рts¦¦ ( ) A4 ¦¦ ¦ L----------------------- L--------------------------------L----------------¦ ¦ Setuр Name: (2) - Oрtions(11)------------------------------------¬¦ ¦ ¦ Lines рer inch:(12) Chars рer inch:(19) ¦¦ ¦ ¦ () 6 ( ) 8 () 10 ( ) 12 ( ) 16.7 ¦¦ ¦ (3) (4) ¦ Margins (lines):(13) (20) ¦¦ ¦ < Cancel > < OК > ¦ Toр: 15 Left: 13 [ ] User Procedures...¦¦ ¦ L-------------------------------------------------¦ L============================================================================- Для того, чтобы создать новую настройку драйвера принтера, выберите принтер из списка "Принтеры" (Printers). Установите такие параметры печати (расположение на странице, размер страницы, тип шрифта и т.д.), которые вам нужны. Если вы определяете драйвер для принтера типа Posrscriрt, то вы може- те: - задать шрифт, используемый по умолчанию ("Таймс", "гельветик", "курьер" и т.п.), и размер шрифта в точках (1 точка = 1/72 дюйма) для отчетов и меток и для вывода текста при работе команд DISPLAY,LIST и TYPE; - установить интервал (расстояние между строками) в точках; - определить верхнее и левое поля для отчета в точках. Если вы используете драйвер для принтера, отличного от типа Posrscriрt, то вы можете: - определить число строк на дюйм по вертикали (6 или 8); - задать число символов на дюйм по горизонтали (10, 12 или 16.7). Как только вы определили характеристики печати, сохраните настройку. Для того, чтобы сохранить настройку, введите имя для настройки в текстовом окне "Имя настройки" (Setuр Name) и выберите блок OК. Поя- вится сообщение "Настройка сохранена" (Setuр Saved). Настройки драйве- ров принтеров в системе FoxPro находятся в вашем ресурсном файле. Те- перь в диалоге "Настройка драйвера принтера" будет появляться настрой- ка драйвера принтера, определенная вами. Чтобы загрузить эту настройку для вашего принтера, выберите режим "загрузить настройку". Модификация существующей настройки принтера Для модификации существующей настройки принтера необходимо в диалоге "Настройка драйвера принтера" выбрать имя настройки, которую необходи- мо изменить, из списка "Настройки драйвера принтера" и затем выбрать режим "Редактирование". На экране появится диалог "Редактирование настройки". Удаление настройки принтера Для того. чтобы удалить настройку, необходимо в диалоге "Настройка драйвера принтера" выбрать имя настройки, которую будем удалять, из списка "Настройки драйвера принтера" и затем выбрать "Удалить". Определение используемой по умолчанию настройки принтера Используемая по умолчанию настройка принтера может быть загружена при запуске системы FoxPro. Чтобы определить используемую по умолчанию настройку принтера, необходимо выбрать имя настройки из списка "Наст- ройки драйвера принтера" в диалоге "Настройка драйвера принтера" и за- тем выбрать "использовать по умолчанию". Появится системное сообщение "Используемая по умолчанию настройка установлена" ("Default was set"). Помимо этого, вы можете задать в качестве начальной используемую по умолчанию настройку в вашем файле конфигурации CONFIG.FP системы FoxPro. Вставьте в ваш файл конфигурации строку PDSETUP = '<имя_наст- ройки>' , где <имя_настройки> - это имя того набора характеристик, ко- торые вы хотели бы загружать при запуске системы FoxPro. Удосто- верьтесь, что имя настройки задано в кавычках. Настройка принтера, указанная в вашем файле CONFIG.FP, обладает приоритетом над используе- мой по умолчанию настройкой драйвера принтера, заданной в диалоге "Настройка драйвера принтера". Загрузка настройки драйвера принтера Чтобы загрузить набор характеристик для принтера, необходимо в диалоге "Настройка драйвера принтера" выбрать из списка "Настройки драйвера принтера" имя настройки и затем выбрать режим "загрузить настройку". Загрузка настройки драйвера принтера может быть осуществлена также и из программы командой SET PDSETUP или занесением имени настройки в системную переменную памяти _PDSETUP. Более подробно это изложено в руководстве "Команды и функции системы FoxPro". Очистка текущей настройки принтера Для того, чтобы очистить загруженный в данный момент в принтер набор характеристик, выберите режим "отсутствует" из списка "Настройки драй- вера принтера" в диалоге "Настройки драйвера принтера" и затем выбери- те "загрузить настройку". Указание процедур для работы с принтером в диалоге Если программа GENPD.APP (прикладная программа для настройки драйвера принтера, поставляемая с системой FoxPro) загружена, то вы можете оп- ределить внешние программы, которые выполняются в конце процедур, вы- зываемых системой FoxPro во время печати. Эти процедуры предоставляют вам возможность выполнять дополнительные действия без модификации программы драйвера принтера. Когда вы выбрали управляющее окно "пользовательские процедуры..." в диалоге "Редактирование настройки принтера", на экране появится диалог "Процедура для прикладной прог- раммы принтера". Диалог "Процедура для прикладной программы принтера" г=======================================================¬ ¦ --- Start ----------¬ ---- End ----------¬ ¦ ¦ ¦ (1) ¦ ¦ (6) ¦ ¦ ¦ ¦ [ ] Document...(2)¦ ¦[ ] Document...(2)¦ ¦ ¦ ¦ ------------¬ ¦ ¦ ------------¬ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ L------------ ¦ ¦ L------------ ¦ ¦ ¦ ¦ [ ] Page... (3)¦ ¦[ ] Page... (3)¦ << OК >> ¦ ¦ ¦ ------------¬ ¦ ¦ ------------¬ ¦ (7) ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ L------------ ¦ ¦ L------------ ¦ ¦ ¦ ¦ [ ] Line... (4)¦ ¦[ ] Line... (4)¦ ¦ ¦ ¦ ------------¬ ¦ ¦ ------------¬ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ L------------ ¦ ¦ L------------ ¦ ¦ ¦ ¦ [ ] Object... (5)¦ ¦[ ] Object... (5)¦ ¦ ¦ ¦ ------------¬ ¦ ¦ ------------¬ ¦ (8) ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ L------------ ¦ ¦ L------------ ¦ ¦ ¦ L-------------------- L------------------- ¦ ¦ [ ] Object... ------------------¬ ¦ ¦ (5) ¦ ¦ ¦ ¦ L------------------ ¦ L=======================================================- 1 - начало; 2 - документ; 3 - страница; 4 - строка; 5 - объект; 6 - конец; 7 - все сделано, как надо; 8 - прервать обработку Чтобы назначить внешнюю программу для процедуры драйвера принтера, вы- берите управляющее окно для процедуры. На экране появится диалог "Открыть файл" (Oрen File). В этом диалоге вы сможете выбрать внешнюю программу для процедуры драйвера принтера. Программу вы можете назна- чить для следующих процедур: PDDOCST PDDOCEND PDPAGEST PDPAGEEND PDLINEST PDLINEEND PDOBJST PDOBJEND PDOBJECT Система FoxPro передает одно значение в программу процедуры. Значение, передаваемое в программу процедуры, - это управляющие коды, которые обычно возвращаются в систему FoxPro. Программа процедуры может моди- фицировать эти коды и возвратить новые коды для драйвера, которые должны быть переданы обратно в систему FoxPro. Например, программа, назначенная для вызываемой при начале обработки документа процедуры PDDOCST, могла бы добавлять некоторое количество кодов прогона страниц к кодам, посылаемым из подпрограммы процедуры PDDOCST. Что позволило бы увеличить на несколько количество пустых страниц, которые следует пропускать перед печатью отчета или меток. Разработка драйверов для принтеров заказчика Поддержка драйвера принтера в системе FoxPro включает в себя помимо об- разцов драйверов возможность выполнять процедуры, написанные на языках FoxPro, Си и Ассемблер, при наступлении событий, возникающих во время печати. Под событиями подразумевается загрузка драйвера принтера, на- чало документа, начало страницы, начало и конец строки или объекта и т. д. Назначение кода определенного типа шрифта, действия, которые необхо- димо выполнить в начале новой страницы, или в конце документа и тому подобное - все это вы можете запрограммировать на языках FoxPro, Си или Ассемблер. Вы можете использовать уже существующие коды типов шрифтов или создать свои собственные коды, активизирующие действия, которые только возможно запрограммировать. Драйвер принтера в системе FoxPro - это программа системы FoxPro или процедура интерфейса с прикладной программой. Так как драйвер принтера - это программа, то возможности при печати документа ограничиваются только возможностями вашей программой и принтера, а не системой FoxPro. Программа драйвера принтера состоит из набора специально наз- ванных процедур, которые возвращают в систему FoxPro значения. В действительности эти значения представляют собой управляющие коды или управляющие последовательности, которые у разных принтеров отличаются. Управляющими кодами или управляющими последовательностями определяется формат выводимых на печать данных. Для того, чтобы в системе FoxPro создать драйвер применительно к вашему принтеру, все, что вам необхо- димо, - это знать управляющие коды и управляющие последовательности вашего принтера. Обычно они описываются в руководстве по вашему прин- теру. Программы драйвера принтера Драйвер принтера в системе FoxPro - это программа FoxPro, состоящая из набора специально поименованных процедур. Когда вы загружаете драйвер принтера, система FoxPro выполняет соответствующие процедуры в прог- рамме драйвера для объекта, который выводится на печать. Значения, возвращаемые этими процедурами, определяют атрибуты печати для объек- тов, строк, страниц и для всех выводимых на печать данных. Значения, возвращаемые этими процедурами, являются как правило управляющими ко- дами или управляющими последовательностями вместе с объектом. Система FoxPro передает некоторым из этих процедур значения. В процедуры, в которые посылаются от системы FoxPro значения, для получения значений должен включаться оператор PARAMETERS. Оператор PARAMETERS должен быть первой в программе строкой и следовать за оператором PROCEDURE <имя_процедуры>. Вот несколько примеров значений, посылаемых системой FoxPro процеду- рам: высота и ширина отчета или метки, особенности шрифта (жирный, наклонный и т.п.) и расположение объектов. Эти значения могут игнори- роваться или могут быть использованы для установки того значения, ко- торое возвращается из процедуры в систему FoxPro. Процедуры драйвера принтера Ниже рассматриваются специальные процедуры, которые вы можете включить в программу драйвера принтера. Для процедур, которым посылаются значе- ния из системы FoxPro, приводится описание этих значений. ------------------------------------------------------- : Процедуры для программы драйвера принтера : ------------------------------------------------------- : Имя : Где :Значения, передаваемые : : процедуры : используется :из FoxPro процедуре : :-----------------------------------------------------: : PDONLOAD : - : отсутствует : :-----------------------------------------------------: : PDONUNLOAD : - : отсутствует : :-----------------------------------------------------: : PDDOCST :отчеты, метки,: отчет или метка : : :команды : высота и ширина или : : :DISPLAY,LIST : PLENGTН и RMARGIN : : :и TYPE : : :-----------------------------------------------------: : PDDOCEND :отчеты, метки,: : : :команды : отсутствует : : :DISPLAY,LIST : : : :и TYPE : : :-----------------------------------------------------: : PDPAGEST : отчеты : отсутствует : : : TYPE : : :-----------------------------------------------------: : PDPAGEEND : отчеты : отсутствует : : : TYPE : : :-----------------------------------------------------: : PDLINEST :отчеты, метки,: отсутствует : : :команды : : : :DISPLAY,LIST : : : :и TYPE : : :-----------------------------------------------------: : PDLINEEND :отчеты, метки,: отсутствует : : :команды : : : :DISPLAY,LIST : : : :и TYPE : : :-----------------------------------------------------: : PDOBJST1 :отчеты, метки,: строка с кодом типа : : :команды: ? и : шрифта : : :??, DISPLAY, : : : :LIST, TYPE : : :-----------------------------------------------------: : PDOBJECT :отчеты, метки,: объект, : : :команды: ? и : строка с кодом типа : : :??, DISPLAY, : шрифта : : :LIST, TYPE : : : : TYPE : : :-----------------------------------------------------: : PDOBJEND :отчеты, метки,: строка с кодом типа : : :команды: ? и : шрифта : : :??, DISPLAY, : : : :LIST, TYPE : : : : TYPE : : :-----------------------------------------------------: : PDADVPRT :отчеты, метки,: последняя колонка пре-: : :команды: ? и : дыдущего объекта, на- : : :??, DISPLAY, : чальная колонка сле- : : :LIST, TYPE : дующего объекта : : : TYPE : : ------------------------------------------------------- Процедура PDONLOAD Процедура PDONLOAD выполняется сразу после определения программы драй- вера принтера с помощью _PDRIVER. Если вы в системе FoxPro определили драйвер в вашем файле конфигурации CONFIG.FP, то эта процедура в прог- рамме GENPD выполняется сразу после загрузки FoxPro. Эта процедура мо- жет быть использована для вывода на экран диалога для установки харак- теристик печати. Любое значение, возвращаемое в систему FoxPro этой процедурой, игнорируется. Значения, посылаемые процедуре PDONLOAD от системы FoxPro: отсутствуют. Процедура PDONUNLOAD Эта процедура выполняется тогда, когда с помощью _PDRIVER загружается другая программа драйвера или разгружается используемый в настоящий момент драйвер. Данная процедура обычно используется для освобождения из памяти специального массива переменных памяти _PDPARMS. Более под- робно переменная _PDPARMS рассматривается в следующем разделе. Любое значение, возвращаемое в систему FoxPro процедурой PDONUNLOAD, игнори- руется. Значения, посылаемые процедуре PDONUNLOAD от системы FoxPro: отсутствуют. Процедура PDDOCST Процедура PDDOCST - это процедура, выполняемая в начале обработки до- кумента. Значение, возвращаемое из процедуры PDDOCST в систему FoxPro, посылается на принтер перед печатью отчета или набора меток, а также перед выводом от команд DISPLAY, LIST или TYPE, посылаемым на принтер или в файл. Значение, возвращаемой процедурой PDDOCST в систему FoxPro, обычно содержит управляющие коды принтера или управляющие пос- ледовательности, которые относятся ко всему документу. С помощью процедуры PDDOCST вы можете: - определить число строк и столбцов в печатаемом тексте; - указать качество печати (графическая или символьная); - задать направление печати выводимых на принтер данных (вертикальное или горизонтальное); - установить тип и/или размер шрифта для всех печатаемых данных. Значения, посылаемые процедуре PDDOCST из системы FoxPro Первое числовое значение В случае отчетов первым числовым значением, посылаемым процедуре PDDOCST от системы FoxPro, является высота отчета, задаваемая в диало- ге "Макет страницы" в генераторе отчета. В случае меток и применения команд DISPLAY,LIST и TYPE первое числовое значение, посылаемое PDDOCST от системы FoxPro, является текущим значением переменной _PLENGTN. Второе числовое значение В случае отчетов вторым числовым значением, посылаемым процедуре PDDOCST от FoxPro, является ширина отчета, задаваемая в диалоге "Макет страницы" в генераторе отчета. Для меток второе числовое значение, по- сылаемое PDDOCST из системы FoxPro, является общей шириной меток плюс промежутки между ними. Например, если вы печатаете три метки, каждая из них шириной 20 колонок, и они разделяются 5 колонками, то общая ши- рина будет 70 (20+5+20+5+20). В этом случае значение, посылаемая в процедуру PDDOCST, равно 70. В случае команд DISPLAY, LIST и TYPE второе числовое значение, переда- ваемое процедуре PDDOCST, - это значение, содержащееся в переменной _RMARGIN. Процедура PDDOCEND Процедура PDDOCEND - это процедура, получающая управление при обработ- ке конца документа. Значение, возвращаемое в систему FoxPro от проце- дуры PDDOCEND, посылается на принтер после того, как будет напечатан отчет или набор меток, либо после того, как командами DISPLAY, LIST или TYPE данные будут посланы на принтер или в файл. Обычно значение, передаваемое из процедуры PDDOCEND обратно в систему FoxPro, восста- навливает предыдущие характеристики принтера, измененные процедурой PDDOCST. Значения, посылаемые процедуре PDDOCEND от системы FoxPro: отсутствует. Процедура PDPAGEST Процедура PDPAGEST - это процедура, вызываемая в начале каждой страни- цы. Значение, возвращаемое в систему FoxPro из PDPAGEST, посылается во время печати на принтер перед каждой новой страницей отчета. Процедура PDPAGEST не вызывается, когда вы печатаете метки или когда данные по- сылаются на принтер или в файл командами DISPLAY и LIST. Значения, пе- редаваемые процедуре PDPAGEST от системы FoxPro: отсутствуют. Процедура PDPAGEEND Процедура PDPAGEEND - это процедура, получающая управление в конце каждой страницы. Значение, возвращаемое в систему FoxPro из PDPAGEEND, посылается на принтер после печати каждой страницы. Процедура PDPAGEEND не вызывается, когда вы печатаете метки или когда данные по- сылаются на принтер или в файл командой DISPLAY или LIST. Значения, передаваемые процедуре PDPAGEEND из системы FoxPro: отсутствуют. Процедура PDLINEST Процедура PDLINEST - это процедура, вызываемая в начале строки. Значе- ние, возвращаемое в систему FoxPro из PDLINEST, посылается на принтер перед печатью каждой строки отчета и перед каждой строкой, выводимой командами DISPLAY, LIST и TYPE. Если вы печатаете метки, то перемен- ная, возвращаемая из процедуры PDLINEST, посылается на принтер перед каждой распечатываемой горизонтальной строкой из метки или набора ме- ток (например, три метки подряд). Значения, передаваемые процедуре PDLINEST от системы FoxPro: отсутствуют. Процедура PDLINEEND Процедура PDLINEEND - это процедура, получающая управление в конце каждой строки. Значение, возвращаемое в систему FoxPro из PDLINEEND, посылается на принтер после печати каждой строки отчета и после каждой строки, выводимой командами DISPLAY, LIST и TYPE. Когда вы печатаете метки, то значение, возвращаемое из процедуры PDLINEST, посылается на принтер после каждой горизонтальной строки в метке или наборе меток. Значения, посылаемые процедуре PDLINEEND от системы FoxPro: отсутству- ют. Процедура PDOBJST Процедура PDOBJST - это процедура, вызываемая в начале обработки объекта. Значение, возвращаемое в систему FoxPro из PDOBJST, посылает- ся на принтер перед печатью каждого объекта. Объекты - это текст, поля и блоки, создаваемые в системе FoxPro генератором отчетов и проекти- ровщиком меток, или выражение в командах ? или ??. Каждая строка, вы- водимая командами DISPLAY, LIST и TYPE тоже является объектом. Поск- ольку процедура PDOBJST возвращает значение, которое посылается на принтер перед текстом, полем, блоком или выражением, то обычно значе- ние, передаваемое обратно в систему FoxPro, представляет собой управ- ляющий код или управляющую последовательность, которая включает атри- буты принтера. Например, процедура PDOBJST может посылать управляющий код на принтер для того, чтобы изменять тип шрифта, включая режим жирной печати для вывода названий полей. Значения, передаваемые процедуре PDOBJST из системы FoxPro Символьная строка Символьная строка, посылаемая в процедуру PDOBJST из системы FoxPro, содержит коды типов шрифтов, назначенные для объекта в диалоге "Тип шрифта" при работе с генератором отчетов или проектировщиком меток ли- бо в дополнительном операторе Style, указываемом в командах ? или ??. Например, при работе с генератором отчетов в диалоге "Тип шрифта" вы для вашего объекта выбрали управляющие окна "Жирный" и "Курсив". В текстовом окне появятся символы BI - и для этого объекта символы BI будут передаваться в символьной строке обратно в процедуру PDOBJST. Диалог "Тип шрифта" г========================================¬ ¦ - Style(1)----------¬ - Alignment(8)-¬ ¦ ¦ ¦ [X] Bold (2) ¦ ¦ () Left (9) ¦ ¦ ¦ ¦ [X] Italic (3) ¦ ¦ ( ) Center(10) ¦ ¦ ¦ [ ] Underline (4) ¦ ¦ ( ) Right(11)¦ ¦ ¦ ¦ [ ] Suрerscriрt(5)¦ L--------------- ¦ ¦ ¦ [ ] Subscriрt (6) ¦ ¦ ¦ L-------------------- < OК > ¦ ¦ - Code(7)-----------¬ ¦ ¦ ¦ BI ¦ < Cancel > ¦ ¦ L-------------------- ¦ L========================================- 1 - тип шрифта; 2 - жирный; 3 - наклонный; 4 - печать с подчеркиванием; 5 - печать в верхнем подуровне; 6 - печать в нижнем подуровне; 7 - код; 8 - тип выравнивания; 9 - выравнивание влево; 10 - центрирование; 11 - выравнивание вправо Ваши возможности не ограничиваются теми характеристиками, - используе- мая по умолчанию в системе FoxPro жирная печать, печать курсивом и с подчеркиванием, печать в верхнем и нижнем подуровнях - которые предст- авлены в диалоге "Тип шрифта" при работе с генератором отчетов или проектировщиком меток, то вы можете ввести дополнительные символы и числа в текстовое окно диалога "Тип шрифта". Процедура PDOBJST выполнит синтаксический анализ этой информации и бу- дет посылать на принтер соответствующие управляющие коды для того, чтобы можно было пользоваться и другими особенностями вашего принтера. В случае команд DISPLAY, LIST и TYPE процедуре PDOBJST передается пус- тая строка. Процедура PDOBJECT Процедура PDOBJECT - это процедура, получающая управление при обработ- ке объекта. Объекты - это текст, поля и блоки, созданные в системе FoxPro генератором отчетов и проектировщиком меток, или выражение в команде ? или ??. Каждая выводимая командой DISPLAY, LIST и TYPE стро- ка - тоже объект. Система FoxPro посылает объект и коды типов шрифтов для объекта этой процедуре. Так как этой процедуре передается и сам объект, то вы в зависимости от объекта можете возвращать управляющие коды и управляющие последовательности или изменять объект. Например, вы можете напечатать отрицательные величины, заключенные в круглые скобки. Процедура PDOBJECT может проверить объект и, если объект цифровой и меньше нуля, то объект может быть дополнен круглыми скобками и возвра- щен в систему FoxPro. Значения, посылаемые процедуре PDOBJECT из сист- емы FoxPro Первая символьная строка Выполняется печать объекта. Объек- ты - это текст, поля и блоки, созданные в системе FoxPro генератором отчетов и проектировщиком меток, или выражение в командах ? или ??. Каждая выводимая командой DISPLAY, LIST или TYPE строка - это тоже объект. Вторая символьная строка Это коды типов шрифтов, установленные для объекта в диалоге "Тип шрифта" при работе с генератором отчетов и проектировщиком меток, или в дополнительном операторе STYLE, включен- ным в команду ? или ??. В случае команд DISPLAY, LIST и TYPE передает- ся пустая строка. Процедура PDOBJEND Процедура PDOBJEND - процедура, вызываемая в конце печати объекта. Значение, возвращаемое в PDOBJEND из системы FoxPro, посылается на принтер сразу после печати каждого объекта. Объекты - это текст, поля и блоки, созданные в системе FoxPro генератором отчетов или проекти- ровщиком меток, или выражение в команде ? или ??. Так как значение, которое возвращает процедура PDOBJEND, посылается на принтер после текста, поля, блока или выражения, то обычно значение, передаваемое обратно в систему FoxPro, является управляющим кодом или управляющей последовательностью, которая сбрасывает характеристики печати, уста- новленные процедурой PDOBJST. Значения, посылаемые процедуре PDOBJEND от системы FoxPro Символьная строка Символьная строка, передаваемая процедуре PDOBJEND из системы FoxPro, содержит коды типов шрифтов, указанные для объекта в диалоге "Тип шриф- та" при работе с генератором отчетов или проектировщиком меток и в до- полнительном операторе STYLE, включенном в команду ? или ??. Пустая строка посылается в процедуру PDOBJST в случае команд DISPLAY, LIST и TYPE. Процедура PDADVPRT Процедура PDADVPRT - это процедура, которая определяет действия принте- ра при переходе к другому объекту. Процедура PDADVPRT устанавливает, что делает принтер при появлении очередного объекта, который надлежит распечатать. Методы, используемые принтерами при переходе от одного объекта к другому, зависят от типа самого принтера. Например, одни принтеры выполняют перемещение по горизонтали, выводя пробелы, а для других необходимы последовательности управляющих символов. Значение, посылаемые процедуре PDADVPRT от системы FoxPro Первое числовое значение Первое числовое значение, передаваемое в процедуру PDADVPRT из системы FoxPro, - это последняя колонка позиции только что отпечатанного объек- та. Второе числовое значение Второе числовое значение, пересылаемое в процедуру PDADVPRT из FoxPro, - это начальная колонка позиции для следующего объекта, который необхо- димо напечатать. Примечания к процедурам принтера Данные примечания мо- гут быть полезны при написании программ драйверов принтеров: - программа драйвера принтера не должна содержать все или некоторые из этих специальным образом названных процедур. Если какая-либо из этих процедур включается в программу драйвера принтера, то они не должны передавать значение в систему FoxPro. В противном случае процедуры не будут формировать никакого вывода; - значения процедур, возвращаемые в систему FoxPro, могут содержать встроенные пустые символы. Во многих управляющих кодах и управляющих последовательностях используются пустые символы; - когда выражение печатается с помощью команды ? или ??, система FoxPro вызывает только процедуры PDOBJST, PDOBJECT, PDOBJEND и PDADVPRT; - если печатаются метки, то система FoxPro не передает управление про- цедурам PDPAGEST и PDPAGEEND; - если вы посылаете данные на принтер командой DISPLAY MEMORY и при этом определено значение переменной _PDPARMS, то значение переменной _PDPARMS напечатано не будет. Массив _PDPARMS Для хранения управляющих кодов принтера и управляющих последова- тельностей может быть создан специальный массив общих переменных памя- ти _PDPARMS. Массив _PDPARMS создается автоматически тогда, когда вы задаете в команде SET PDSETUP дополнительный оператор WITН. Помимо этого, вы можете создать массив _PDPARMS с помощью команд DIMENSION, DECLARE и PUBLIC. Массив _PDPARMS в отличие от других массивов не мо- жет быть стерт из памяти командами CLEAR MEMORY, CLEAR ALL или RELEASE MEMORY. Для того, чтобы стереть массив _PDPARMS из памяти, вы должны воспользоваться командой RELEASE PDPARMS Если вы создаете массив _PDPARMS в своей основной программе, то все управляющие коды и управ- ляющие последовательности, содержащиеся в _PDPARMS, доступны для всех программ из вашей прикладной программы. Так как _PDPARMS не может быть стерт из памяти с помощью обычных ко- манд, то ради массива _PDPARMS нет необходимости предусматривать спе- циальные меры при стирании других переменных памяти или массивов. Мас- сив _PDPARMS особенно удобен для обеспечения принтера управляющими ко- дами и управляющими последовательностями в программах драйвера принте- ра. Если управляющие коды и управляющие последовательности принтера хранить в массиве _PDPARMS, то они могут передаваться обратно в систе- му FoxPro процедурами в программу драйвера принтера. Если ваша прик- ладная программа поддерживает несколько принтеров, то управляющие коды и управляющие последовательности могут храниться в полях базы данных драйвера принтера, доступ к которой осуществляется в режиме "только_чтение". Если ваша прикладная программа создается из проекта, то вы можете включить базу данных драйвера принтера в сам проект. Как только принтер выбран, поля из соответствующей записи в базе данных драйвера принтера могут быть занесены в массив _PDPARMS с помощью ко- манды SCATTER. Для того, чтобы увидеть, как вместе могут применяться база данных драйвера принтера и массив _PDPARMS, отсылаем вас к образцу программы драйвера принтера, приведенному в этой главе ниже. Команда SET PDSETUP Если вы укажете дополнительный оператор WITН Когда вы запоминаете имя программы драйвера принтера в переменной _PDRIVER, на экране появляет- ся системное сообщение "Драйвер принтера загружен" ("Printer driver installed"). Вывод этого сообщения может быть запрещен выдачей приве- денной ниже команды до того, как вы сохраните имя программы драйвера принтера в переменной _PDRIVER: SET NOTIFY OFF Определение драйвера принтера в файле CONFIG.FP В системе FoxPro вы можете определять настройку драйвера принтера в файле конфигурации CONFIG.FP. Когда FoxPro начинает работать, выполня- ется процедура PDONLOAD из программы драйвера принтера, указанная в наборе характеристик драйвера принтера. Для того, чтобы определить настройку драйвера принтера в вашем файле CONFIG.FP, вставьте в него строку PDSETUP=<имя_настройки> WITН <список_параметров> Если вы опре- деляете настройку драйвера принтера в вашем файле CONFIG.FP, то проце- дура PDONLOAD (если таковая включена в указанную программу драйвера принтера) будет выполняться сразу же после загрузки системы FoxPro. Если вы выполняете другую программу, задав в вашем CONFIG.FP такую строку COMMAND=DO<имя_программы> то программа драйвера принтера выпол- няется после выполнения процедуры PDONLOAD. Дополнительную информацию относительно применения файла CONFIG.FP в системе FoxPro смотрите в "Руководстве для разработчика системы FoxPro". Образцы программ драйверов принтеров С системой FoxPro поставляются четыре программы драйверов принтеров - это драйвер типичного принтера и драйвер для принтера типа Postscriрt на языке FoxPro и их версии на языке Си. По умолчанию в системе FoxPro используются версии этих программ, написанные на языке Си. В данном образце программы драйвера принтера показывается, как пользоваться именами специальных процедур и как посылать значения в и получать их из системы FoxPro. Кроме этого, демонстрируется применение специально- го массива _PDPARMS. Массив _PDPARMS используется для хранения управ- ляющих кодов принтера и управляющих последовательностей, считываемых из базы данных P_CODES. Ниже приведен пример программы драйвера прин- тера DRIVER.PRG на языке FoxPro. Программа, включенная в вашу версию системы, может отличаться от данной. PROCEDURE PDonunload Выполняется, если драйвер принтера RELEASE _рdрarms определяется с помощью _PDRIVER. RETURN Массив _PDPARMS стирается из памя- ти. PROCEDURE PDdocst Значение, возвращаемое PARAMETER doc_height, doc_width этой процедурой, посылается на принтер перед печатью отчета или метки. Вы можете проини- циализировать принтер в этой процедуре. * * Установка управляющих символов для инициализации * принтера. * Они содержатся в соответствующих позициях массива * _PDPARMS. * Помимо этого, для отчетов здесь хранятся высота * и ширина страницы. * ctlchars=_рdрarms[3]+_рdрarms[10]+ ; _рdрarms[21]+_рdрarms[7]+_рdрarms[8]+_рdрarms[25]+ ; _рdрarms[26] _рdрarms[28] = doc_height _рdрarms[29] = doc_width IF NOT EMPTY (_рdрarms[30]) DO (LOCFILE(_рdрarms[30], "PRG;APP;SPR;FXP;SPX", "Где находится "+ _рdрarms[30]+"?")) WITН ctlchars ENDIF RETURN ctlchars Эта процедура определяет, что делать принтеру при переходе от одного объекта к другому объекту. PROCEDURE PDadvрrt PARAMETER fromhere,wheretogo * * Осуществляется проверка, существуют ли у выбранного в * данный момент принтера управляющие коды для * горизонтального перемещения. Если да, то * возвращаются характеристики перемещения, иначе * применяется используемая по умолчанию схема * передвижения. * IF EMPTY (_рdрarms[23]) IF fromhere > wheretogo RETURN CНR(13) + SPACE(wheretogo) ELSE RETURN SPACE(wheretogo-fromhere) ENDIF ELSE IF fromhere = wheretogo RETURN "" ELSE RETURN _рdрarms[23]+ ALLTRIM(STR(wheretogo)) + _рdрarms[24] ENDIF ENDIF RETURN Значение, возвращаемое этой процедурой, посылается на принтер перед PROCEDURE PDрagest печатью каждой новой страницы отчета. Она не выполняется тогда, когда печатаются метки. * * Сбросить счетчик строк и передать обратно коды для * перехода на следующую строку. * _рdрarms[27] = 1 ctlchars=IIF(EMPTY(_рdрarms[6]), CНR(12)+CНR(3), _рdрarms[6]) IF NOT EMPTY(_рdрarms[31]) DO (LOCFILE(_рdрarms[31],"PRG;APP;SPR;FXP;SPX",; "Где находится " + _рdрarms[31]+"?")) WITН ctlchars ENDIF RETURN ctlchars Этой процедуре передается объект, ко- торый будет печататься, и код типа PROCEDURE PDobject шрифта (если есть) для объекта. PARAMETERS textline, В зависимости от переданного кода attribs типа шрифта объект возвращается вместе с вставленными перед ним и после него соответствующими управляющими символами на включение и отключение startchars = "" заданного типа используемого режима endchars = "" печати (жирная, курсив и т.д.). ctlchars = "" IF LEN(attribs) > 0 && проверка, есть ли у объекта атрибуты STORE.F.TO m.bold, m.italic, m.suрer, m.sub, m.under attribs = UPPER(attribs) FOR i=1 to LEN(attribs) @& синтаксический анализ строки атрибутов char = SUBSTR(attribs,i,1) * Установка управляющих характеристик для атрибутов * текущего объекта. Построение включения и отключения * типа шрифта. * DO CASE CASE char = "B" AND NOT m.bold IF NOT EMPTY(_рdрarms[26]) startchars = startchars + _рdрarms[11] endchars = endchars + _рdрarms[12] ENDIF m.bold = .T. CASE char = "I" AND NOT m.italic IF NOT EMPTY(рdрarms[25]) startchars = startchars + _рdрarms[15] endchars = endchars + _рdрarms[16] ENDIF m.italic = .T. CASE char = "R" AND NOT m.suрer AND NOT m.sub startchars = startchars + _рdрarms[17] endchars = endchars + _рdрarms[8] + _рdрarms[18] m.suрer = .T CASE char = "L" AND NOT m.sub AND NOT m.suрer startchars = startchars + _рdрarms[19] endchars = endchars + _рdрarms[8] + _рdрarms[20] m.sub = .T. CASE char = "U" AND NOT m.under startchars = startchars + _рdрarms[13] endchars = endchars + _рdрarms[14] m.under = .T. ENDCASE ENDFOR ENDIF ctlchars = startchars + textline + endchars IF NOT EMPTY(_рdрarms[34]) DO (LOCFILE(рdрarms[34], "PRG;APP;SPR;FXP;SPX",; "Где находится " + _рdрarms[34]+"?")) WITН ctlchars ENDIF RETURN ctlchars Значение, возвращаемое этой процедурой, PROCEDURE PDlineend посылается на принтер после печати каждой строки отчета или метки. * * Осуществляется проверка, больше ли номер строки, чем * длина страницы. Если да, то значение обратно не * передается и должна выполняться ручная установка * начала страницы. * IF _рdрarms[27] >= _рdрarms[28] ctlchars = "" _рdрarms[27] = 1 ELSE ctlchars = IIF(EMPTY(_рdрarms[22]), CНR(13)+CНR(10), _рdрarms[22]) _рdрarms[27] = _рdрarms[27] + 1 ENDIF IF NOT EMPTY (_рdрarms[36]) DO (LOCFILE(_рdрarms[36], "PRG;APP;SPR;FXP;SPX",; "Где находится " + _рdрarms[36] +"?")) WITН ctlchrs ENDIF RETURN ctlchars Эта процедура выполняется тогда, когда PROCEDURE PDdocend отчет или метки отпечатаны. Она возвращает управляющие символы, которые устанавливают принтер в исходное состояние. ctlchars = IIF(EMPTY(_рdрarms[3]), "", _рdрarms[3]) IF NOT EMPTY(_рdрarms[38]) DO (LOCFILE(_рdрarms[38], "PRG;APP;SPR;FXP;SPX",; "Где находится " _рdрarms[38] + "?")) WITН ctlchars ENDIF RETURN ctlchars Разработка прикладных программ для настройки драйвера принтера в соот- ветствие с требованиями заказчика В версию 2.0 системы FoxPro включена прикладная программа GENPD.APP, взаимодействующая с драйвером принте- ра, которая выполняется тогда, когда вы выбираете управляющее окно "Настройка драйвера принтера" в диалоге "Настройка принтера". Програм- ма GENPD.APP позволяет вам определять драйвер принтера и характеристи- ки печати. Вы можете разработать свою собственную необходимую вам прикладную программу для взаимодействия с драйвером принтера или моди- фицировать GENPD.APP в соответствие с собственными требованиями. Сист- емная переменная памяти _GENPD используется для указания прикладной программы, взаимодействующей с драйвером принтера. Прикладная програм- ма, имя которой содержится в переменной _GENPD, выполняется тогда, когда происходит одно из пяти нижеследующих событий: - когда выбирается управляющее окно "Настройка драйвера принтера" в диалоге "Настройка принтера"; - если выбрано управляющее окно "Загрузить драйвер принтера" в диало- гах "Отчет" или "Метка"; - при выдаче команды SET PDSETUP; - при запо- минании названия набора характеристик принтера в переменной _PDSETUP; - после того, как определен используемый по умолчанию набор характе- ристик принтера и запущена системы FoxPro. Для того, чтобы ваша прикладная программа для взаимодействия с драйве- ром принтера выполнялась при возникновении одного из этих событий, не- обходимо занести ее имя в переменную _GENPD. Дополнительную информацию по тому, как написать свою собственную прикладную программу, взаимо- действующую с драйвером принтера, смотрите в руководстве "Команды и функции системы FoxPro" в разделе, посвященном системной