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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.04.2022, 18:17   #11
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

Используйте вот эту программу и, возможно, вам что-то станет более понятно.

Достаточно посмотреть на доступ к объектам во время открытия и закрытия диалогового окна.
macomics вне форума Ответить с цитированием
Старый 23.04.2022, 18:47   #12
Kronos913
Форумчанин
 
Регистрация: 10.02.2021
Сообщений: 623
По умолчанию

Цитата:
Сообщение от Kronos913 Посмотреть сообщение
А как работает PrintDialog ?

Я никакой обработки не сделал из того что было введено в диалоговом окне, при этом сохранились все настройки (выбор принтера, размер страницы)
Я уточняю моменты, потому что нужно так, чтобы код нормально работал на любом ПК

Потому хотел бы узнать, как вообще работает PrintDialog, куда сохраняются все введенные в него изменения?
Kronos913 вне форума Ответить с цитированием
Старый 23.04.2022, 19:01   #13
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

см. подробнее здесь

Этот диалог организуется функцией API, которая будет работать в любой версии Windows после минимально доступной.

Последний раз редактировалось macomics; 23.04.2022 в 19:04.
macomics вне форума Ответить с цитированием
Старый 23.04.2022, 19:24   #14
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

Если хотите проверить, то можете вызвать диалог через соответствующий компонент формы изменить что-нибудь, а потом вызвать этот же диалог через эту функцию.

Наоборот может не сработать т.к. заполнение структуры параметров функции в компоненте может загружать значения по умолчанию в окно, но использование функции напрямую загрузит параметры с последними внесенными изменениями.

Набор параметров по умолчанию задается в свойствах компонента. Они сохранены в рамках вашей исполняемой программы. Тогда как вызов напрямую потребует от вас составления такого же набора параметров вручную.
macomics вне форума Ответить с цитированием
Старый 25.04.2022, 06:33   #15
Foreseen
Техножрец
Форумчанин
 
Аватар для Foreseen
 
Регистрация: 04.07.2014
Сообщений: 289
По умолчанию

Цитата:
Сообщение от Kronos913 Посмотреть сообщение
Код:
  label1.Caption:=IntToStr(Printer.PageHeight);
  label2.Caption:=IntToStr(Printer.PageWidth);
Выдало 6600 и 5100
Каково происхождение этих чисел?

Они особо не вяжется с 21 х 29 см стандартного А4
Так Вы описание то читайте того, с чем работаете
Цитата:
PageHeight : Высота холста страницы в пикселях
PageWidth : Ширина холста страницы в пикселях
— Двери есть везде. Просто нужно знать, как в них войти.
Foreseen вне форума Ответить с цитированием
Старый 25.04.2022, 06:58   #16
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

А потом еще dpi и дюймы в сантиметры.
macomics вне форума Ответить с цитированием
Старый 25.04.2022, 09:32   #17
Foreseen
Техножрец
Форумчанин
 
Аватар для Foreseen
 
Регистрация: 04.07.2014
Сообщений: 289
По умолчанию

Разумеется, мой Microsoft print to PDF выдает 7016 и 4961. 7016/600*25.4=297.01 Вполне вяжется
— Двери есть везде. Просто нужно знать, как в них войти.
Foreseen вне форума Ответить с цитированием
Старый 03.05.2022, 14:33   #18
Kronos913
Форумчанин
 
Регистрация: 10.02.2021
Сообщений: 623
По умолчанию

Тестирую настройки принтера
Код:
  If PrinterSetupDialog1.Execute then begin
    Label1.Caption:=IntToStr(GetDeviceCaps(Printer.Handle, LOGPIXELSX));
    Label2.Caption:=IntToStr(GetDeviceCaps(Printer.Handle, LOGPIXELSX));

    Label3.Caption:=IntToStr(Printer.PageHeight);
    Label4.Caption:=IntToStr(Printer.PageWidth);

    Label5.Caption:=IntToStr(Printer.Canvas.TextHeight('hp'));
  End;
И вот что заметил: если при настройках выпадет dpi не 600, а 200, количество пикселей в символе останется тем же...
Изображения
Тип файла: png изображение_2022-05-03_143227618.png (4.6 Кб, 0 просмотров)
Тип файла: png изображение_2022-05-03_143316714.png (5.0 Кб, 0 просмотров)
Kronos913 вне форума Ответить с цитированием
Старый 03.05.2022, 15:08   #19
Kronos913
Форумчанин
 
Регистрация: 10.02.2021
Сообщений: 623
По умолчанию

Еще одна загадка

Работает криво
Код:
    with Printer do begin
      k_x:=GetDeviceCaps(Handle, LOGPIXELSX)/25.4;
      k_y:=GetDeviceCaps(Handle, LOGPIXELSY)/25.4;
      m_t:=trunc(m_top*k_y);
      m_l:=trunc(m_left*k_x);

      y:=Canvas.TextHeight('hp');
      x:=Canvas.TextWidth('Ж');

      mx:=(PageWidth - m_l - trunc(m_right*k_y)) div x;
      my:=(PageHeight - m_t - trunc(m_down*k_y)) div y;
    end;
Поменял порядок строк, и всё стало работать нормально
Код:
    with Printer do begin
      y:=Canvas.TextHeight('hp');
      x:=Canvas.TextWidth('Ж');

      k_x:=GetDeviceCaps(Handle, LOGPIXELSX)/25.4;
      k_y:=GetDeviceCaps(Handle, LOGPIXELSY)/25.4;
      m_t:=trunc(m_top*k_y);
      m_l:=trunc(m_left*k_x);

      mx:=(PageWidth - m_l - trunc(m_right*k_y)) div x;
      my:=(PageHeight - m_t - trunc(m_down*k_y)) div y;
    end;
Код вычисляет размеры одного символа, количество строк и символов, которые поместятся на страницу, и переводит поля в нужные единицы

Получается, вызов GetDeviceCaps сбивает какие-то настройки для Canvas.TextHeight?

Последний раз редактировалось Kronos913; 03.05.2022 в 15:13.
Kronos913 вне форума Ответить с цитированием
Старый 03.05.2022, 15:51   #20
Kronos913
Форумчанин
 
Регистрация: 10.02.2021
Сообщений: 623
По умолчанию

Кстати, еще одну проблему нашел - через canvas.TextOut не отображаются символы табуляции
Kronos913 вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Считывание из поля Memo Qwerik Помощь студентам 8 07.11.2012 11:29
Поля MEMO и тэги форматирования Wind-up Bird Microsoft Office Access 10 10.09.2012 12:54
Свойство Lines поля Memo Jaga_89 Общие вопросы Delphi 8 16.02.2012 18:11
Загрузка Memo поля в Hint Gulik БД в Delphi 1 03.07.2011 00:54
Помещать поля таблицы БД в MEMO ulala Помощь студентам 16 24.10.2010 20:38