Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
145 / 100 / 6
Регистрация: 11.03.2010
Сообщений: 477

и снова печатаем.. :)

24.03.2010, 12:34. Показов 1367. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
вобщем нашел в пимерах в книге печать, где все обьекты формы и все все все выводилось на канву принтера, в целом пример меня удовлетворяет, но возник серьезный проблем...

как правильнее пересчитывать например координаты нахождения обьекта на форме в принтерные координаты ? или может лучше не пересчитывать а так указывать целочисленными значениями ?

поделитесь опытом, кто как выводит на печать ?

C++
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
float dpiX, dpiY; // разрешение принтера по X и Y
float kx, ky; // коэф. пересчета координат экрана
// в координаты принтера по X и Y
// таблица
int p[5]; // позиции колонок
int x1,y1,x2,y2; // границы таблицы
int px, py, lf, tp; // указатель точки вывода
int i, j, z;
 
 
#define LEFT_MARGIN 1.5 // отступ слева 2 см
#define TOP_MARGIN 1.5 // отступ сверху 2 см
 
//---------------------------------------------------------------------------
 
void __fastcall TForm1::SpeedButton1Click(TObject *Sender)
{
 TPrinter *Prn; // принтер
 
if (PrintDialog1->Execute())   // щелчок на кнопке Печать
  ProgressBar1->Visible = true;
 
/* Разрешение экрана и принтера разное,
поэтому чтобы добиться соответствия
размеров изображения на экране и принтере,•
координаты точек экрана надо преобразовать
з координаты принтера, умножить на коэф.,
значение которого зависит от разрешения принтера.
Например, если разрешение принтера 300 dpi,
то значение коэффициента равно 3.125, т. к.
разрешение экрана - 96 dpi */
Prn = Printer();
/* ф-я GetDeviceCaps позволяет получить характеристики
устройства. LOGPIXELSX - кол-во пикселов на дюйм по X
 */
dpiX = GetDeviceCaps(Prn->Handle,LOGPIXELSX);
dpiY = GetDeviceCaps(Prn->Handle,LOGPIXELSY);
 
kx = dpiX / Screen->PixelsPerInch;
ky = dpiY / Screen->PixelsPerInch;
 
px = LEFT_MARGIN / 2.54 * dpiX;
py = TOP_MARGIN / 2.54 * dpiY;
lf = px;
tp = py;
// вычислим "принтерные" координаты колонок таблицы
p[0] = px;
for (i = 1; i < 5; i++ )
p[i] = p[i-1] + StringGrid1->ColWidths[i-1]* kx + i;
 
Prn->BeginDoc(); // открыть печать
 ProgressBar1->Position = 10;
 
Prn->Canvas->Font->Name = Label1->Font->Name;
Prn->Canvas->Font->Size = Label1->Font->Size;
Prn->Canvas->TextOut(px,py,Label1->Caption);
 ProgressBar1->Position = 20;
 
//Label 2
 px =  px + (Label1->Width * kx);
Prn->Canvas->Font->Name = Label2->Font->Name;
Prn->Canvas->Font->Size = Label2->Font->Size;
Prn->Canvas->TextOut(px,py,Label2->Caption);
                          ProgressBar1->Position = 30;
 
//Label 7
px = lf + (Label1->Width * kx) + (Label2->Width * kx) + 10;
py = tp + 25;
Prn->Canvas->Font->Name = Label7->Font->Name;
Prn->Canvas->Font->Size = Label7->Font->Size;
Prn->Canvas->Font->Style = Label7->Font->Style;
Prn->Canvas->TextOut(px,py,Label7->Caption);
ProgressBar1->Position = 40;
неужели нету способа попроще ?
1
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
24.03.2010, 12:34
Ответы с готовыми решениями:

Снова хром, снова сапопроизвольно открывается, снова bkrfdf.xyz и казино
Здравствуйте! Собственно, проблема уже не новая, хотя, как показывают сообщения форума, за последние дни выскочившая у многих. Через...

Как сделать чтобы таймер дойдя до 0 стартовал снова и снова?
Здравствуйте :) Как сделать чтобы таймер дойдя до 0 стартовал снова и снова? TimerSec = 59; TimerMin = 6; for(int i = TimerSec;...

Создаем очередь FIFO и печатаем сначала первые 5 элементов, затем первые 7 (с выделением памяти)
Помогите пожалуйста исправить ошибки в программе и запустить ее. Компилятор нашел одну &lt;&lt;использована неинициализированная локальная...

1
Покинул форум
3189 / 1368 / 109
Регистрация: 29.01.2010
Сообщений: 2,887
24.03.2010, 15:55
Добавить нечего.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
24.03.2010, 15:55
Помогаю со студенческими работами здесь

HP 625 снова и снова перезагружается в безопасный не заходит
Ребята помогите , проблема вот какая врубаю я ноут он доходит до заставки майкрософта и снова перезагружается в безопасный не заходит, ...

Снова ТИС и снова делемма
Привет Ребята! Имею сканер-штрих-кода, который дал дамам на склад. Представьте себе такую ситуацию: Есть ручки, которые бывают...

Снова. Снова этот repaint()
Всем привет. Сколько дней уже пытаюсь, нечего не выходит. Метод repaint не срабатывает. Как я понимаю, ошибка появляется в методе redraw...

и снова .htaccess и снова rewriterule
Добрый день. Недавно столкнулся с проблемой преобразования URL, в связи с чем пришлось перерыть кучу материала по данной теме, но вопрос...

Снова поток. Снова синхронизация
Приветствую всех. Тема измусолена до дыр, поэтому прошу не пинать. В программе создан поток. В каких случаях поток может работать с...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 01.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 31.01.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru