Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.02.2024, 15:53   #1
hexor_boo
Разъяснятор
Форумчанин
 
Аватар для hexor_boo
 
Регистрация: 21.04.2022
Сообщений: 106
Вопрос Delphi 7 : Объект Printer - как напечатать CheckBox?

Вопрос по заголовку темы. При попытке напечатать CheckBox с помощью PDF принтера от FoxIt (физический принтер у меня не работает, поэтому проверить не могу на другом) печатается только текст CheckBox'а, а квадратик от него не печатается, что с галочкой, что без галочки.

Делаю так:
Код:
 If dlgPrint.Execute Then
  With Printer do
    begin
      BeginDoc;
      pgcPrint.Pages[0].PaintTo(Handle, 10, 10);
      EndDoc;
    end;
Как быть?

Последний раз редактировалось hexor_boo; 04.02.2024 в 16:00.
hexor_boo вне форума Ответить с цитированием
Старый 04.02.2024, 16:21   #2
hexor_boo
Разъяснятор
Форумчанин
 
Аватар для hexor_boo
 
Регистрация: 21.04.2022
Сообщений: 106
По умолчанию

Код:
frmMain.Print;
Печатает CheckBox'ы, однако у меня на форме расположена TPanel, которую я проматываю TScrollBar'ом. А именно так: я продвигаю TPanel снизу вверх за пределы формы, т.к. TPanel намного больше формы. Результат - frmMain.Print печатает только видимую область формы с видимой частью TPanel. По идее содержимое TPanel нужно разбивать на несколько страниц. Однако
Код:
pgcPrint.Pages[0].PaintTo(Handle, 10, 10);
не печатает значки TCheckBox'ов

Изучаю тему дальше
hexor_boo вне форума Ответить с цитированием
Старый 04.02.2024, 16:40   #3
hexor_boo
Разъяснятор
Форумчанин
 
Аватар для hexor_boo
 
Регистрация: 21.04.2022
Сообщений: 106
По умолчанию

Код:
  With Printer Do
   Begin
    BeginDoc;
    frmMain.pnlBase.PaintTo(Printer.Canvas, 10, 10);
    EndDoc;
   End;
Печатает TPanel целиком, однако CheckBox'ы по-прежнему без галочек.
hexor_boo вне форума Ответить с цитированием
Старый 04.02.2024, 16:58   #4
NetSpace
Участник клуба
 
Аватар для NetSpace
 
Регистрация: 03.06.2009
Сообщений: 1,814
По умолчанию

вот такое чудо - печать формы я вижу впервые. даже не знаю, для чего она используется - отчёт какой-то готовится или демонтстрация нового программного продукта?
----------------
а чего бы программно не делать скриншот, виртуально нажимая клавиши, и его не печатать уже, как простой рисунок, где все элементы формы видны? а если форма длинная, то прокручивать её опять же виртуальными клавишами и снова скрин+печать.
Программирование - это единственный способ заставить компьютер делать то, что тебе хочется, а не то, что приходится.
NetSpace вне форума Ответить с цитированием
Старый 04.02.2024, 17:28   #5
hexor_boo
Разъяснятор
Форумчанин
 
Аватар для hexor_boo
 
Регистрация: 21.04.2022
Сообщений: 106
По умолчанию

Код:
  With Printer Do
   Begin
    BeginDoc;
    frmMain.pnlBase.PaintTo(Printer.Canvas, 10, 10);
    EndDoc;
   End;
Этот способ печатает TPanel целиком, однако CheckBox'ы по-прежнему без галочек. А мне очень нужно пропечатывать, как пустые чекбоксы, так и с галочками.
hexor_boo вне форума Ответить с цитированием
Старый 04.02.2024, 17:33   #6
hexor_boo
Разъяснятор
Форумчанин
 
Аватар для hexor_boo
 
Регистрация: 21.04.2022
Сообщений: 106
По умолчанию

Цитата:
Сообщение от NetSpace Посмотреть сообщение
а чего бы программно не делать скриншот
У меня TPanel сейчас длиннее экрана в несколько раз. Да, мне нужна распечатка отчёта. Поставил FastReports 6.9.14, так мало того, что там чекбокс - это кривая галочка на пустом месте и "будь любезен сам нарисуй границы квадратика", так ещё этот обозначенный Reports - просто очешуеть, какой "простой для понимания". Не смог вчера осилить перенос простых строчных данных в него из тела программы.

Последний раз редактировалось hexor_boo; 04.02.2024 в 17:36.
hexor_boo вне форума Ответить с цитированием
Старый 04.02.2024, 17:35   #7
DIONISKA
Форумчанин
 
Регистрация: 07.11.2011
Сообщений: 161
По умолчанию

Не проще так:
Код:
var
  DC:HDC;
//...
 With Printer Do
   Begin
    BeginDoc;
      DC:=GetDC(frmMain.pnlBase.handle);
      BitBlt(Canvas.Handle,0,0,width,Height,DC,0,0,SRCCOPY);
    EndDoc;
   End;
? Или получить изображение формы через GetFormImage и печатать через канвас принтера?
DIONISKA вне форума Ответить с цитированием
Старый 04.02.2024, 19:20   #8
hexor_boo
Разъяснятор
Форумчанин
 
Аватар для hexor_boo
 
Регистрация: 21.04.2022
Сообщений: 106
По умолчанию

Не знаю. Нашёл базовый принцип работы с FastReports: тут
hexor_boo вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Напечатать все слова, второй символ в которых гласный. Напечатать номера этих слов Transcend Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 0 14.04.2013 15:35
Delphi. Объект checkbox и radiobutton Pudge Помощь студентам 6 19.01.2012 00:51
Delphi. Печать. Не работает Printer.Canvas.TextOut Alexander Karpenko Общие вопросы Delphi 4 02.03.2010 23:39
Printer MAcK Общие вопросы Delphi 1 29.04.2008 11:22