|
Подбор ширины колонки перед печатью
|
|||
---|---|---|---|
#18+
Здравствуйте! Есть данные в колонке DataWindow(DW). Необходимо узнать, сколько по ширине будет занимать печатаемый текст, чтобы выделить для его колонки в DW соответствующую ширину. Может кто поможет "добрым кодом"? Заранее спасибо! ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2009, 23:20 |
|
Подбор ширины колонки перед печатью
|
|||
---|---|---|---|
#18+
Bagzoid , можно начать от сюда . ... |
|||
:
Нравится:
Не нравится:
|
|||
07.11.2009, 00:09 |
|
Подбор ширины колонки перед печатью
|
|||
---|---|---|---|
#18+
Да, есть такая функция: private function boolean GetTextExtentPoint32 (long hDC, string lpString, long cbString, ref SIZE lpSize) ALIAS FOR "GetTextExtentPoint32A" LIBRARY "GDI32.DLL" Вот бы примерчик, как получить hDC принтера (первый параметр функции). ... |
|||
:
Нравится:
Не нравится:
|
|||
07.11.2009, 11:12 |
|
Подбор ширины колонки перед печатью
|
|||
---|---|---|---|
#18+
Бьюсь над изменением рабочего кода с определения ширины статик текста на определение ширины текста для принтера. SelectObject возвращает ошибку (0). Код: 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
07.11.2009, 16:35 |
|
Подбор ширины колонки перед печатью
|
|||
---|---|---|---|
#18+
BagzoidЗдравствуйте! Есть данные в колонке DataWindow(DW). Необходимо узнать, сколько по ширине будет занимать печатаемый текст, чтобы выделить для его колонки в DW соответствующую ширину. Может кто поможет "добрым кодом"? Заранее спасибо! Я чего-то не понял, зачем Вы к принтеру вообще лезете? Все содержимое DataWindow на принтере тоже все сами отрисовывать будете? Определяйте размер в контексте экарана, а функция print() отмасштабирует его на принтер при печати самостоятельно. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.11.2009, 19:57 |
|
Подбор ширины колонки перед печатью
|
|||
---|---|---|---|
#18+
Локшин Марк, дело в том, что в контексте экрана определяется правильно для экрана. Когда дело доходит до принтера (начиная с preview), рассчитанной ширины не хватает - текст обрезается (если без пробелов) либо переносится на другую строку (включен Autosize height). По этому, сложилось впечатление, что необходимо рассчитывать в контексте принтера. Но не всегда расчет неверен. Например, для шрифта Times New Roman, в зависимости от размера шрифта: 8 - верный расчет 9 - неверный расчет 10 - неверный расчет 11 - верный расчет 12 - неверный расчет ... |
|||
:
Нравится:
Не нравится:
|
|||
07.11.2009, 20:15 |
|
Подбор ширины колонки перед печатью
|
|||
---|---|---|---|
#18+
Прикладываю снимок, что получается при расчете ширины сейчас. Включил бордер, чтоб было видно границы объекта. С первого взгляда - ширина колонки точно соответствует ширине содержимого этой колонки (максимальная ширина текста для каждой строки DW с учетом текста в шапке). Но в каждой строке есть пустое место. Если распечатать отчет или поставить Zoom 120%, то можно увидеть какие колонки увеличились по высоте или другими словами - каким колонкам не хватило выделенной ширины. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.11.2009, 09:40 |
|
Подбор ширины колонки перед печатью
|
|||
---|---|---|---|
#18+
Прикладываю также пример увеличенного отчета (Zoom 120%), при котором видны проблемные колонки. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.11.2009, 09:43 |
|
Подбор ширины колонки перед печатью
|
|||
---|---|---|---|
#18+
Пример отчета, как он выглядит без preview. В этом варианте он выглядит правильно, чего и хочется добиться при печати. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.11.2009, 11:27 |
|
Подбор ширины колонки перед печатью
|
|||
---|---|---|---|
#18+
Bagzoid, не доводилось с таким сталкиваться, но определенная логика поведения есть, в строках где пробелы. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.11.2009, 11:32 |
|
Подбор ширины колонки перед печатью
|
|||
---|---|---|---|
#18+
maxATC, логика там только в том, что их возможно переносить на следующую строку из-за наличия пробелов (перенос по словам). Если поставить в preview zoom 140%, то это намного ближе к тому, что будет на бумаге по факту печати. Теперь виден не влезший текст, в котором нет пробелов: ... |
|||
:
Нравится:
Не нравится:
|
|||
08.11.2009, 12:03 |
|
Подбор ширины колонки перед печатью
|
|||
---|---|---|---|
#18+
Bagzoid, Ну вот по последнему посту и видна проблема. Смотри General->Units, догадываюсь у тебя что нибудь типа Inch стоят, а не PowerBuilder. Это в выпадающем списке. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.11.2009, 15:20 |
|
Подбор ширины колонки перед печатью
|
|||
---|---|---|---|
#18+
maxATC, посмотрел, units=0 (PowerBuilder) Если бы было что-то отличное от 0, то проблема была, наверное, и при отображении данных без preview. Обратите внимание, что проблема начинается тогда, когда дело к печати идет (preview, сама печать). Как я понимаю, выполняется какой-то пересчет с учетом текущих характеристик выбранного принтера (принтера по умолчанию) и, как оказывается, то, что хорошо отображалось на экране, уже не соответствует тому, что пойдет на печать на этом принтере. Никому не приходилось ранее подобным заниматься или ограничивались расчетом ширины для экрана? Будут какие-то еще идеи? Вообще, возможен ли расчет ширины текста в контексте принтера или неправильно выбран способ решения? P.S. Как временное решение, подберу для каждого проблемного размера шрифта константу в процентах, на которую буду увеличивать рассчитанную ширину колонки. Но боюсь, как бы мне это боком не вышло... Да и минус, если будет необходимость выбора шрифта отчета самостоятельно пользователем, то константы на все варианты не предусмотришь. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.11.2009, 16:16 |
|
Подбор ширины колонки перед печатью
|
|||
---|---|---|---|
#18+
Bagzoid, >Если бы было что-то отличное от 0, то проблема была, наверное, и при отображении данных без preview. Как раз и нет, данная проблема возникает только при масштабировании в preview, если бы было что-то отличное от 0. Типично Ваша проблема. >Будут какие-то еще идеи? Установи другой драйвер принтера и сделай его по умолчанию. Посмотри, будет ли такая же проблема. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.11.2009, 18:02 |
|
Подбор ширины колонки перед печатью
|
|||
---|---|---|---|
#18+
мне кажется проблема несколько надуманная. сождаешь datawindow с необходимой шириной. если надо привязаться к размеру бумаги, можно выставить юниты - сантиметры. если у тебя есть колонки с длинным текстом - ширину оставляешь как есть и выставляешь autosize height. если выставлять ширину колонки под текст, можно неуложиться в ширину листа или получить достаточно кривой отчет... ... |
|||
:
Нравится:
Не нравится:
|
|||
08.11.2009, 20:04 |
|
Подбор ширины колонки перед печатью
|
|||
---|---|---|---|
#18+
maxATCBagzoid, Установи другой драйвер принтера и сделай его по умолчанию. Посмотри, будет ли такая же проблема. В системе были еще стандартные Fax и Microsoft XPS Document Writer - с ними все тоже самое. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.11.2009, 20:36 |
|
Подбор ширины колонки перед печатью
|
|||
---|---|---|---|
#18+
Dmitry.. если выставлять ширину колонки под текст, можно неуложиться в ширину листа или получить достаточно кривой отчет... Почему же так пессимистично? Вполне можно уложиться в ширину листа и получить ничуть не кривой отчет! :) ... |
|||
:
Нравится:
Не нравится:
|
|||
08.11.2009, 20:46 |
|
Подбор ширины колонки перед печатью
|
|||
---|---|---|---|
#18+
1. Возможно у Вас есть расчетные параметры (x, ширина и т.п.) столбцов/полей, и поэтому при изменении масштаба в этих формулах идет округление и дает такой результат. Кстати, ширина столбца не всегда одно и тоже с шириной колонки, и здесь может формироваться та дельта ошибки. 2. Произвольное изменение масштаба (я так думаю) скверно стыкуется с пропорциональным изменением шрифта и по факту, а не расчету подставляется тот, который ближе к расчетному. Возможно можно отловить закономерность при смене типа шрифта. 3. Возможно необходимо выдержать очередность действий: сначала установить масштаб для DW либо установить новый размер шрифта, а потом выполнять вычисления по определению длины строки и установлению параметров столбца, ну и в конце прорисовать заново. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.11.2009, 23:09 |
|
Подбор ширины колонки перед печатью
|
|||
---|---|---|---|
#18+
BagzoidДа, есть такая функция: private function boolean GetTextExtentPoint32 (long hDC, string lpString, long cbString, ref SIZE lpSize) ALIAS FOR "GetTextExtentPoint32A" LIBRARY "GDI32.DLL" Вот бы примерчик, как получить hDC принтера (первый параметр функции). Функция то есть, но применить её помню не так просто оказалось, т.е. "с нахрапа" у меня тоже когда-то она считала не верно. Я делал всплывающую подсказку для DW, аналогичную LVview, т.е. если строка вся не видна, то на месте столбца появляется подсказка необходимой длины и с идентичным шрифтом. Вроде и делал правильно, но шрифт подставлялся похожий и соответственно эта "подсказка" не ложилась чётко на столбец, а была больше (например) и текст весь не помещался. Благо можно было тут же со столбцом сравнивать. Даже при добалении лишней буквы к результату проблема все равно когда-нибудь, но появлялась. Всё это я про то, что возможно вы не правильно применяете данную функцию и весь алгоритм расчета. Вот часть кода, что-то типа "примерчика" (покрайней мере в таком виде у меня всё заработало): Код: 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
09.11.2009, 00:10 |
|
Подбор ширины колонки перед печатью
|
|||
---|---|---|---|
#18+
Кстати! Чтобы получить hdc принтера надо пользоват ф-ю Код: plaintext 1. 2. 3. 4. 5.
ф-я OpenPrinter не возвращает HDC ;-) PS: Удачи. Хотя все еще не вижу в этом смысла... ... |
|||
:
Нравится:
Не нравится:
|
|||
09.11.2009, 04:29 |
|
Подбор ширины колонки перед печатью
|
|||
---|---|---|---|
#18+
Dmitry.., спасибо за подсказку с функцией. Теперь код по определению ширины текста отработал, да вот только результат идентичен определению ширины для экрана. Что-то я упускаю в происходящем... ... |
|||
:
Нравится:
Не нравится:
|
|||
09.11.2009, 10:42 |
|
Подбор ширины колонки перед печатью
|
|||
---|---|---|---|
#18+
BagzoidDmitry.., спасибо за подсказку с функцией. Теперь код по определению ширины текста отработал, да вот только результат идентичен определению ширины для экрана. Что-то я упускаю в происходящем... Так происходит потому, что при масштабировании появляются округления. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.11.2009, 11:43 |
|
Подбор ширины колонки перед печатью
|
|||
---|---|---|---|
#18+
Локшин МаркТак происходит потому, что при масштабировании появляются округления. А что если для ДВ включить сантиметровые или дюймовые юниты. По идее тогда при выводе на экран будет преобразование, а при печати будет печататься как есть. Ну еще возможно придется значения полученные через GetTextExtentPoint32 переводить в сантиметры, если они для контекста принтера уже не в сантиметрах. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.11.2009, 22:00 |
|
Подбор ширины колонки перед печатью
|
|||
---|---|---|---|
#18+
Anatoly MoskovskyЛокшин МаркТак происходит потому, что при масштабировании появляются округления. А что если для ДВ включить сантиметровые или дюймовые юниты. По идее тогда при выводе на экран будет преобразование, а при печати будет печататься как есть. Ну еще возможно придется значения полученные через GetTextExtentPoint32 переводить в сантиметры, если они для контекста принтера уже не в сантиметрах. Как мне кажется, нужно размерность в DataWindpw поставить в пикселях и переводить с учетом коэффициента который получается из DPI принтера деленных на DPI экрана. Или воспользоваться моноширинным шрифтом, там картина должна получше выглядеть. С True type шрифтами одновременно и на экране и на принтере не получится. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2009, 10:00 |
|
Подбор ширины колонки перед печатью
|
|||
---|---|---|---|
#18+
Приводу DPI принтера и экрана. dpi_printer = 600 dpi_screen = 96 Кэффициент получается 600/96=6,25 Попытался подобрать для одного шрифта коэффициент, на который умножаю после расчета ширины текста. Для разных размеров шрифта разный коэффициент, а в случае использования коэффициента с соотношением DPI ведь будет всегда один коэффициент? Получается, я не выйду на примерно полученные коэффициенты: Код: plaintext 1. 2.
... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2009, 17:48 |
|
|
start [/forum/topic.php?fid=15&fpage=30&tid=1336114]: |
0ms |
get settings: |
8ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
41ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
114ms |
get tp. blocked users: |
2ms |
others: | 12ms |
total: | 209ms |
0 / 0 |