Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Printer
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. Почему принтер печатает в ОЧЕНЬ маленьком масштабе? Нужно как-то указать Printer-у нормальный масштаб, но как? ... через какие проперти? Код: plaintext 1. 2. 3. Помогите плиз. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2003, 11:11 |
|
||
|
Printer
|
|||
|---|---|---|---|
|
#18+
Потому что PaintTo рисует попиксельно. Хорошее начало - разобраться с кодом TCustomForm.Print. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2003, 11:20 |
|
||
|
Printer
|
|||
|---|---|---|---|
|
#18+
разбирался.... TCustomForm.Print как раз попиксельно и печатает ... что меня не устраивает. Я же если даже делаю что-то вроде Printer.BeginDoc; Rectangle(Printer.Handle, 0, 0, 100, 100); Printer.EndDoc; всё равно очень мелко печатает ... нужно как-то задать масштаб принтеру ... как? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2003, 11:27 |
|
||
|
Printer
|
|||
|---|---|---|---|
|
#18+
Насколько я помню (сейчас посмотрю) - три варианта вывода там, один из которых попиксельно... но самое интересное - это функция StretchDIBits, она практически гарантирует отрисовку при печати, поскольку Printer.CopyRect(Rect(x1, y1, x2, y2), Panel1.Canvas, Panel1.Canvas.ClipRect), где x1, y1, x2, y2 (куда печатать) все-таки придется посчитать самому, исходя из текущего разрешения принтера и нужных размеров на бумаге, - так вот такое прокатывает далеко не всегда, на экране, пожалуйста, а на принтер - не всякий драйвер позволяет такое. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2003, 12:09 |
|
||
|
Printer
|
|||
|---|---|---|---|
|
#18+
но это ведь опять таки попиксельная прорисовка!? кто нибудь знает как сделать Printer.TextOut( ... ); чтоб нормально печатало? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2003, 12:51 |
|
||
|
Printer
|
|||
|---|---|---|---|
|
#18+
неужели ни у кого не было подобной проблемы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2003, 16:09 |
|
||
|
Printer
|
|||
|---|---|---|---|
|
#18+
Ну была. Я в свойствах принтера узнавал Rect - область печати. Затем StrechDraw выводил пропорционально этой области. Поскольку это в относительном виде, а не абсолютном, то печатается так как задумано, в половину листа, в четверть или с любым другим масштабом. Конкретный алгоритм на вскидку привести не могу - не помню тонкостей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2003, 16:23 |
|
||
|
Printer
|
|||
|---|---|---|---|
|
#18+
Да вот лентяи все - генераторы отчетов используем... - попробуй .ChangeScale - или используй класс TMetaFile - там размеры ив пикселях, и в метрах указывать можно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2003, 16:28 |
|
||
|
Printer
|
|||
|---|---|---|---|
|
#18+
Размеры в пикселях, метрах, миллиметрах... в любой канве (Canvas) использовать можно. На экране, окне, форме, принтере... в любом DC. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2003, 16:33 |
|
||
|
Printer
|
|||
|---|---|---|---|
|
#18+
Малиновский Владимир: чем мне может помочь ChangeScale? Zmeishe, Малиновский Владимир: Кому указать эти размеры? у TPrinter есть только пропети Printer.PageHeight и Printer.PageWidth и те ReadOnly. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2003, 16:39 |
|
||
|
Printer
|
|||
|---|---|---|---|
|
#18+
Эти проперти служат отправной точкой для расчёта масштаба и размеров прямоугольника в который хочешь вывести изображение. Этот расчитанный прямоугольник передаёшь в функцию StrechDraw. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2003, 16:43 |
|
||
|
Printer
|
|||
|---|---|---|---|
|
#18+
ты наверно имееш ввиду StretchDIBits ... но с её изображение получается попиксельным. (т.е. качество текста очень плохое) ... Word явно не эту функцию использует ... :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2003, 16:46 |
|
||
|
Printer
|
|||
|---|---|---|---|
|
#18+
Я имею ввиду void __fastcall StretchDraw(const TRect &Rect, TGraphic* Graphic); она в любой канве есть, в том числе и в канве принтера TPrinter->Canvas->StretchDraw(const TRect &Rect, TGraphic* Graphic); Я из BLOB полей базы данных jpeg-и таскал и на принтере растягивал или ужимал в любом масштабе от спичечной этикетки до хрен знает скольки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2003, 16:54 |
|
||
|
Printer
|
|||
|---|---|---|---|
|
#18+
Я когда-то давно столкнулся с проблемой вывода текста. Решалось это либо переключеним системы координат принтера, по моему в TWIPS, либо созданием TBitmap, выводом текста в эту bitmap, затем её печать через StretchDraw т.е. с растягиванием или ужиманием. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2003, 17:02 |
|
||
|
Printer
|
|||
|---|---|---|---|
|
#18+
Какую-бы Stretch не использовать (или "коэффициенты масштабирования") - все одно, текст будет грубо натянут, не так поступает Word... По-хорошему, нужно отрисовку на экране (я, например, облюбовал TImage) и на принтере делать одним и тем-же кодом вручную, ориентируясь на нужные метрические размеры и текущее разрешение канвы DrawWhole(Canvas..., PixelsPerSm...) или DrawPart(Canvas..., PixelsPerSm..., HorzShiftSm, VertShiftSm...) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.09.2003, 08:12 |
|
||
|
Printer
|
|||
|---|---|---|---|
|
#18+
т.е. вся картинка должна быть известна в см, например, а при отрисовке все пересчитывать в пикселы, тогда будет как в Ворде... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.09.2003, 09:06 |
|
||
|
Printer
|
|||
|---|---|---|---|
|
#18+
Наконец-то я нарыл в старых записях. Есть такая API функция. Попробуй установить режим DC принтера MM_TEXT Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.09.2003, 09:12 |
|
||
|
Printer
|
|||
|---|---|---|---|
|
#18+
Zmeishe, по смыслу вроде то что мне нужно, но реально НОЛЬ эффэкта. то есть не работает почемуто :( попробывал и SetMapMode(Printer.Handle, MM_TEXT) и SetViewportExtEx(Printer.Handle, 10, 10, @ts) и SetWindowExtEx(Printer.Handle, 10, 10, @ts) всё одно, ничего не помогает :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2003, 09:51 |
|
||
|
Printer
|
|||
|---|---|---|---|
|
#18+
Если это поможет, то вот (только код на С++). У меня была форма, на которой сидел TChart и его я печатал на почти полный лист так: if(!DlgPrint->Execute()) return; TColor BrColor; float k=0.857*min(Printer()->PageWidth/Chart->Width,Printer()->PageHeight/Chart->Height); TRect Rect=TRect(0.5*(Printer()->PageWidth-Chart->Width*k), 0.5*(Printer()->PageHeight-Chart->Height*k), 0.5*(Printer()->PageWidth+Chart->Width*k), 0.5*(Printer()->PageHeight+Chart->Height*k)); Printer()->BeginDoc(); BrColor=Printer()->Canvas->Brush->Color; Printer()->Canvas->Brush->Color=Chart->Color; Printer()->Canvas->FillRect(Rect); Printer()->Canvas->Brush->Color=BrColor; Chart->PrintPartialCanvas(Printer()->Canvas,Rect); Printer()->EndDoc(); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2003, 12:58 |
|
||
|
|

start [/forum/topic.php?fid=58&fpage=2005&tid=2116745]: |
0ms |
get settings: |
8ms |
get forum list: |
18ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
26ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
69ms |
get tp. blocked users: |
2ms |
| others: | 220ms |
| total: | 361ms |

| 0 / 0 |
