Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Printer / 7 сообщений из 7, страница 1 из 1
03.10.2003, 12:10
    #32283061
IgorProgrammer
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Printer
Как высветить диалоговое окно Print Options Window - са с заданным принтером...

И как поучить допинфо(примечание) о принтере???

Всем спасибо...
...
Рейтинг: 0 / 0
03.10.2003, 14:26
    #32283316
po2
po2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Printer
Исчерпывающий ответ на первый вопрос можно найти по ссылке: http://www.news2news.com/vfp/?example=372&function=572 , там же описание функции GetPrinter. Будучи вызванной с нужным параметром 2, она заполняет структуру PRINT_INFO_2 свойствами принтера одно из них - комментарий.
...
Рейтинг: 0 / 0
03.10.2003, 15:47
    #32283468
IgorProgrammer
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Printer
Сенкс po2...

А как можно считать PRINT_INFO, бо не описано...
...
Рейтинг: 0 / 0
03.10.2003, 15:59
    #32283495
NNN
NNN
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Printer
А SYS(1037) и PRTINFO() недостаточно?
...
Рейтинг: 0 / 0
03.10.2003, 16:12
    #32283517
NNN
NNN
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Printer
Нда. пора домой..Открываю второй глаз:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/gdi/prntspol_1gky.asp
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/gdi/prntspol_9otu.asp
...
Рейтинг: 0 / 0
03.10.2003, 17:13
    #32283613
IgorProgrammer
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Printer
Мне надо получить значения PRINTER_INFO...

А на ссылках:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/gdi/prntspol_1gky.asp
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/gdi/prntspol_9otu.asp

Тако нема...

Мне нужен примерчик... Плиз...
...
Рейтинг: 0 / 0
03.10.2003, 19:28
    #32283784
po2
po2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Printer
Пример разбора структуры аналогичной PRINTER_INFO_2, так же состоящей в основном из указателей, есть здесь же по ссылке /topic/47562&hl=getprinter. Ключевым моментом при этом является работа с функциями позволяющими сохранить нужную для Fox\'а информацию в неприкосновенности. Это RtlMoveMemory, GetProcessHeap, HeapFree и HeapAlloc.\r
Пример я по простому собрал из упомянутых ссылок\r
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
  DO decl \r
* offset to  "Jobs number"  member in PRINTER_INFO_2 structure \r
#DEFINE pComment_OFFSET  21 \r
\r
LOCAL          ; \r
     hPrinter ,;\r
     lcPrinter,;\r
     lcPrnInfo,;\r
     lnBufsize,;\r
     lnResult \r
     lcPrinter                   = GetPrnName() \r
     hPrinter                    =  0  \r
  IF OpenPrinter(lcPrinter, @hPrinter,  0 ) =  0  \r
wait wind  "Unable to retrieve printer handle"  \r
RETU\r
ENDI \r
\r
     lnBufsize                   =  4096   && provide buffer of sufficient size \r
     lcPrnInfo                   = Repl(Chr( 0 ), lnBufsize) \r
     TempBuff                    = HeapAlloc(GetProcessHeap(), 0 ,lnBufsize) \r
     lnResult                    = GetPrinterA(hPrinter,  2 , TempBuff, lnBufsize, @lnBufsize) \r
   = CopyMemory (@lcPrnInfo, TempBuff, lnBufsize) \r
\r
  IF lnResult =  0  \r
wait wind  "Error code:"  + tran(GetLastError())\r
ELSE \r
     cComment                     = GetStr(buf2dword(SUBSTR(lcPrnInfo,pComment_OFFSET, 4 )))\r
wait wind  "Comment:"  + iif(empt(cComment), "Без комментариев!" ,cComment)\r
ENDI \r
\r
   = ClosePrinter(hPrinter) \r
\r
FUNCTION GetPrnName \r
* returns default printer name from Windows Registry \r
LOCAL         ;\r
    lcBuffer ,;\r
    lcPrinter,;\r
    lcDriver ,;\r
    lcPort \r
    lcBuffer                      = Repl(Chr( 0 ),  120 ) \r
\r
  = GetProfileString( "Windows" ,;\r
                      "Device"  ,;\r
                      ",,,"     ,; \r
                     @lcBuffer,;\r
                     Len(lcBuffer)) \r
    lcBuffer                      = STRT(lcBuffer, Chr( 0 ),  "") \r
RETU SUBSTR(lcBuffer, 1 , AT(",", lcBuffer,  1 )- 1 ) \r
\r
PROC decl \r
DECLARE INTEGER OpenPrinter      IN winspool.drv STRING  pPrinterName,;\r
                                                 INTEGER @phPrinter  ,;\r
                                                 INTEGER pDefault \r
\r
DECLARE INTEGER ClosePrinter     IN winspool.drv INTEGER hPrinter \r
\r
DECLARE INTEGER GetPrinter       IN winspool.drv AS      GetPrinterA ; \r
                                                 INTEGER hPrinter   ,;\r
                                                 INTEGER Lvl        ,;\r
                                                 integer pPrinter   ,; \r
                                                 INTEGER cbBuf      ,;\r
                                                 INTEGER @pcbNeeded \r
\r
DECLARE INTEGER GetProfileString IN kernel32     STRING  lpApp            ,;\r
                                                 STRING  lpKey            ,;\r
                                                 STRING  lpDefault        ,; \r
                                                 STRING  @lpReturnedString,;\r
                                                 INTEGER nSize \r
\r
\r
DECLARE INTEGER GetLastError     IN kernel32 \r
DECLARE         RtlMoveMemory    IN kernel32     AS      CopyMemory    ; \r
                                                 STRING  @ Destination,; \r
                                                 INTEGER SOURCE       ,; \r
                                                 INTEGER nLength \r
\r
DECLARE INTEGER GetProcessHeap   IN kernel32 \r
\r
DECLARE INTEGER HeapFree         IN kernel32     INTEGER hHeap  ,; \r
                                                 INTEGER dwFlags,; \r
                                                 INTEGER lpMem \r
\r
DECLARE INTEGER HeapAlloc        IN kernel32     INTEGER hHeap  ,; \r
                                                 INTEGER dwFlags,; \r
                                                 INTEGER dwBytes \r
\r
\r
FUNC buf2dword (lcBuffer) \r
RETU          Asc(SUBSTR(lcBuffer,  1 , 1 ))      +; \r
    BitLShift(Asc(SUBSTR(lcBuffer,  2 , 1 )),   8 ) +; \r
    BitLShift(Asc(SUBSTR(lcBuffer,  3 , 1 )),  16 ) +; \r
    BitLShift(Asc(SUBSTR(lcBuffer,  4 , 1 )),  24 ) \r
\r
FUNC GetStr (lnAddr) \r
LOCAL ;\r
     lcBuffer \r
     lcBuffer                     = REPLI(CHR( 0 ),  128 ) \r
   = CopyMemory (@lcBuffer, lnAddr, LEN(lcBuffer)) \r
  IF AT(CHR( 0 ), lcBuffer) <>  0  \r
     lcBuffer                     = SUBSTR(lcBuffer,  1 , AT(CHR( 0 ), lcBuffer)- 1 ) \r
ENDI \r
RETU lcBuffer \r
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Printer / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]