|
|
|
The printable area of the page
|
|||
|---|---|---|---|
|
#18+
Имеем PowerBuilder 10.5.2 Build 7564 . Можно как-то получить размер области печати для DataWindow с установленными Orientation и Paper.Size свойствами? Тут уже поднимался и обсуждался данный вопрос, но что-то не канает меня идея добавлять по одному объекту и смотреть увеличивается количество листов или нет. Седня рылся в Тырнете, ничего умного не нашел. Казалось бы вот это должно работать: Код: 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. Засада в том, что GetDeviceCaps возвращает всегда НОЛЬ . ХЗ почему. На данный момент, размер области печати получаем следующим образом: Код: 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. Ну и вызов этой функции: Код: 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. По сути ничего умного здесь не написано: взяли лист A4 или Letter , его ориентацию, физические размеры известны - дальше перевели все в PowerBuilder units. Все бы хорошо, но здесь есть некая ошибка, при широких отчетах - это сильно видно. Ну и с PDF принтером лажа полная. Вообщем, посоветуйте чего-нибудь, плиЗЗ. P.S.: Прошу прощения, что тут много буквЪ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2008, 20:59 |
|
||
|
The printable area of the page
|
|||
|---|---|---|---|
|
#18+
Black SavageЗасада в том, что GetDeviceCaps возвращает всегда НОЛЬ. ХЗ почему. Сдается мне, что даже если будет и не 0, то результат будет все равно Black Savageно здесь есть некая ошибка, при широких отчетах - это сильно видно т.к. мнение программистов из Sybase о том что этот объект нужно начать печатать с новой страницы или нет может расходиться с вашими вычислениями. Не стоит основываться на каких-то внутренних недокументированных особенностях построения отчетов в PB которые могут измениться в любом релизе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2008, 10:05 |
|
||
|
The printable area of the page
|
|||
|---|---|---|---|
|
#18+
Локшин Маркт.к. мнение программистов из Sybase о том что этот объект нужно начать печатать с новой страницы или нет может расходиться с вашими вычислениями. Не стоит основываться на каких-то внутренних недокументированных особенностях построения отчетов в PB которые могут измениться в любом релизе . Да я уже давно говорю нОчальству, что надо прекращать делание навороченного объекта для печати. Постоянно лезет какая-то хрень. Дак ведь, хто ж меня будет слушать то? Вот и пытаюсь сделать невозможное возможным... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2008, 11:58 |
|
||
|
The printable area of the page
|
|||
|---|---|---|---|
|
#18+
Sorry guys, I don't know the russian language, so I'll post in english (I'll paste a little google translation at the end). I can't find this anywhere on the web, and seems like you got it to work! Black Savage, have you successfully used the GetDeviceContest in PB? I'm trying to use it here, same script as yours, but I always get 0 (zero) for any call I make to it! :( Please, do you have any ideas?? I've tried PB 8.0.4 Build 1051 and PB 10.2.1 Build 9914 Please, try to help me!!! :( /* Local External Functions */ Function Long GetDeviceCaps (uLong aul_DC, Long al_Index) Library "GDI32.DLL" FUNCTION boolean ClosePrinter( ulong aul_printerhandle ) Library "Winspool.drv" // PB8 FUNCTION boolean OpenPrinter( string as_printername, ref ulong aul_printerhandle, ulong aul_printerdefaults) Library "Winspool.drv" Alias For "OpenPrinterA" // PB10 FUNCTION boolean OpenPrinter( string as_printername, ref ulong aul_printerhandle, ulong aul_printerdefaults) Library "Winspool.drv" Alias For "OpenPrinterA;ansi" /* My Script */ Constant Long HORZRES = 8 Constant Long VERTRES = 10 Constant Long LOGPIXELSX = 88 Constant Long LOGPIXELSY = 90 Constant Long PHYSICALWIDTH = 110 Constant Long PHYSICALHEIGHT = 111 Constant Long PHYSICALOFFSETX = 112 Constant Long PHYSICALOFFSETY = 113 Long ll_resolution_X, ll_resolution_Y, ll_printorigin_X, ll_printorigin_Y, ll_pagerect_Left, ll_pagerect_Right, ll_pagerect_Top, ll_pagerect_Bottom uLong lul_null, lul_Printer String ls_PrinterName SetNull(lul_Null) // Get Current Printer Name ls_PrinterName = PrintGetPrinter() ls_PrinterName = Left(ls_PrinterName, Pos(ls_PrinterName, "~t") - 1) // Open Current Printer and get Handle to it IF OpenPrinter( ls_PrinterName, lul_Printer, lul_Null ) THEN ll_resolution_X = GetDeviceCaps( lul_Printer, HORZRES ) ll_resolution_Y = GetDeviceCaps( lul_Printer, VERTRES ) ll_printorigin_X = GetDeviceCaps( lul_Printer, PHYSICALOFFSETX ) ll_printorigin_Y = GetDeviceCaps( lul_Printer, PHYSICALOFFSETY ) ll_pagerect_Left = 0 ll_pagerect_Right = GetDeviceCaps( lul_Printer, PHYSICALWIDTH ) ll_pagerect_Top = 0 ll_pagerect_Bottom = GetDeviceCaps( lul_Printer, PHYSICALHEIGHT ) // Clean Up ClosePrinter(lul_Printer) END IF Google Russian: Извините ребята, я не знаю русский язык, поэтому я пост на английском (я пасты мало google перевод на конце). Я не могу найти это в любом месте сети, и, по-видимому, как и вы получили его на работе! Черный Savage, вы успешно используется в GetDeviceContest PB? Я пытаюсь использовать его здесь, тот же сценарий, как ваша, но я всегда получите 0 (ноль) на любой призыв я делаю на него! :( Пожалуйста, есть ли у вас каких-либо идей? Я попытался PB 8.0.4 Build 1051 и PB 10.2.1 Build 9914 Пожалуйста, попробуйте мне помочь! :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.08.2008, 01:27 |
|
||
|
The printable area of the page
|
|||
|---|---|---|---|
|
#18+
To Daniel Ferreira I have resolved the issue in the following way: 1. Get a rough width of the printable area. I used my examples above. 2. Correct the value. I add an object on a paper and move it to the right on 1 PB unit. Check if the report has an additional paper after that. The implementation works correctly for all our complicated reports. If you have any questions, please don't hesitate to ask me directly. If you don't mind, we may continue this discussion over e-mails... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.08.2008, 09:01 |
|
||
|
The printable area of the page
|
|||
|---|---|---|---|
|
#18+
Попытаюсь сформулировать свою мысль, Черный Savage! :-))))))))))))) Может, мы шли не совсем правильным путём, когда для широких отчетов расчитывали каждый лист самостоятельно, т.е. как отдельную единицу? Может, надо учитывать предыдущие листы, чтобы не набегала ошибка округления? Я извиняюсь за нечеткое формулирование мысли, т.к. в данный момент имею только некие ощущения проблемы, а не точное понимание. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.08.2008, 09:05 |
|
||
|
The printable area of the page
|
|||
|---|---|---|---|
|
#18+
Мысь, в принципе верная, тока она тоже не поможет в старой реализации. Я весь твой код переделал. Только добавление объекта и проверка появления новой страницы дает более или менее надежный результат. Это работает стопудово, даже для PDF, Microsoft XPS Document Writer и Microsoft Office Document Image Writer принтеров. Идею позаимствовал у Марк, где-то мне об этом написал. P.S.: Кстате, urvas теперь окно Print Preview даже мне порой нравится по своему функци аналу и работе... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.08.2008, 09:23 |
|
||
|
The printable area of the page
|
|||
|---|---|---|---|
|
#18+
Bro, thank you for the "technical resource" :-) I´ll try to implement this asap! TY!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.08.2008, 16:59 |
|
||
|
The printable area of the page
|
|||
|---|---|---|---|
|
#18+
To Daniel Ferreira I see your problem. As I wrote above your code will not work. So, you have my example when a rough width of a printable area is received. Please, look at below. This is a piece of code to shift the temporary object, which is used to detect that a new paper has appeared: Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2008, 09:02 |
|
||
|
|

start [/forum/topic.php?fid=15&msg=35159738&tid=1336578]: |
0ms |
get settings: |
7ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
47ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
43ms |
get tp. blocked users: |
1ms |
| others: | 10ms |
| total: | 135ms |

| 0 / 0 |

Извините, этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
... ля, ля, ля ...