12 / 12 / 1
Регистрация: 13.01.2011
Сообщений: 71
1

Напечатать StringGrid!!!

15.02.2011, 11:52. Показов 3595. Ответов 9
Метки нет (Все метки)

Как распечатать таблицу StringGrid при помощи PrintDialog???
Если возможно приведите примеры
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.02.2011, 11:52
Ответы с готовыми решениями:

Вывести данные из StringGrid-ов на двух формах в StringGrid на третьей форме
Помогите,не разбираюсь,только учусь:(:wall:...Вообщем,имеется программа с 3 формами. На первой из...

Как соединить StringGrid с другим StringGrid (Rad xe8)
Здраствуйте. Проблема заключается в следующем: Есть таблица которая указана на 1 изображении ...

Сохранение из StringGrid массива в файл и загрузка из файла в StringGrid
Всем доброго времени суток =) У меня есть загрузка массива из StringGrid на Delphi 2010:...

Есть 2 StringGrid в С++ Builder, и нужно взять оттуда данные и заполнить ими 3 StringGrid, как бы сложить 2 та
Код C++ void __fastcall TForm1::Button1Click(TObject *Sender) { int i,j; float p,p1; for (i =...

9
145 / 100 / 6
Регистрация: 11.03.2010
Сообщений: 477
15.02.2011, 15:41 2
Цитата Сообщение от Aress0111 Посмотреть сообщение
Как распечатать таблицу StringGrid при помощи PrintDialog???
Если возможно приведите примеры
я когда то задавался такой темой, но вразумительного качества печати так ине получил никакими методами кроме одного:

- рисованием на канве линий, текста и всего прочего и потом выводом всего этого на печать.

Добавлено через 1 минуту
как один и быстрых вариантов можеш попробовать перенести свою табличку на новую пустую форму, и потом сделать Form1->print();

Добавлено через 5 минут
рисовать можно так

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
TPrinter *Prn; // принтер
float dpiX, dpiY; // разрешение принтера по X и Y
float kx, ky; // коэф. пересчета координат экрана
// в координаты принтера по X и Y
// таблица
int p[5]; // позиции колонок
int x1,y1,x2,y2; // границы таблицы
int px, py, lf, tp; // указатель точки вывода
 
if (PrintDialog1->Execute())   // щелчок на кнопке Печать
 
 
/* Разрешение экрана и принтера разное,
поэтому чтобы добиться соответствия
размеров изображения на экране и принтере,•
координаты точек экрана надо преобразовать
з координаты принтера, умножить на коэф.,
значение которого зависит от разрешения принтера.
Например, если разрешение принтера 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(); // открыть печать
 
 
 
 //Label 1   Накладная
Prn->Canvas->Font->Name = Label1->Font->Name;
Prn->Canvas->Font->Size = Label1->Font->Size;
Prn->Canvas->Font->Style = Label1->Font->Style;
Prn->Canvas->TextOut(px + 37*kx,py - 30*ky,Label1->Caption);
Prn->Canvas->TextOut(px + 37*kx,py + 505*ky,Label1->Caption);
 
Prn->Canvas->Pen->Width = 3;
Prn->Canvas->MoveTo(px + 35*kx,py + 110*ky);
Prn->Canvas->LineTo(px + 700*kx,py + 110*ky);
 
Prn->Canvas->MoveTo(px + 35*kx,py + 165*ky);
Prn->Canvas->LineTo(px + 700*kx,py + 165*ky);
 
Prn->Canvas->MoveTo(px + 35*kx,py + 195*ky);
Prn->Canvas->LineTo(px + 700*kx,py + 195*ky);
 
Prn->Canvas->MoveTo(px + 35*kx,py + 225*ky);
Prn->Canvas->LineTo(px + 700*kx,py + 225*ky);
 
Prn->Canvas->MoveTo(px + 35*kx,py + 255*ky);
Prn->Canvas->LineTo(px + 700*kx,py + 255*ky);
 
Prn->Canvas->MoveTo(px + 35*kx,py + 285*ky);
Prn->Canvas->LineTo(px + 700*kx,py + 285*ky);
1
12 / 12 / 1
Регистрация: 13.01.2011
Сообщений: 71
15.02.2011, 15:57  [ТС] 3
дело в том что таблица довольно большая((Как печать несколько страниц сразу???
0
145 / 100 / 6
Регистрация: 11.03.2010
Сообщений: 477
15.02.2011, 16:01 4
что-то мне подсказывает что тебе нужно попробовать копнуть в сторону экселя...

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

Почему так?

Я просто помню сколько времени я потратил что бы свести все пиксель к пикселю через приведенный метод, а если у тебя будет еще и многостраничная табличка, так ты алгоритм для нее напишеш только к новым веникам ну и + допиши камаз бумаги которую ты потратиш на черновики для проверки напечатанного.
0
68 / 68 / 9
Регистрация: 10.02.2011
Сообщений: 131
15.02.2011, 16:05 5
лучше перекинь таблицу через OLE в Ворд либо в Ексель, а потом уже печатай
работа с ОЛЕ сервером Ексель и Ворд
0
LK
Заблокирован
16.02.2011, 04:53 6
Лучший ответ Сообщение было отмечено как решение

Решение

C++
1
2
3
Printer()->BeginDoc();
this->StringGrid1->PaintTo(Printer()->Handle,10,10);
Printer()->EndDoc();
Добавлено через 7 часов 35 минут
Цитата Сообщение от Aress0111 Посмотреть сообщение
дело в том что таблица довольно большая((Как печать несколько страниц сразу???
Можно сделать еще одну форму(лучше Modal), назвать типа PreView, обозвать ее Parent для StringGrid и размещать StringGrid как должно быть видно на листе (можно и прокрутку спрятать заодно), далее PaintTo, потом сдвинуть видимые строки и опять PaintTo.
3
14 / 14 / 1
Регистрация: 22.09.2008
Сообщений: 46
17.02.2011, 17:27 7
LK, вариант сработает, но выведится в формате *xps. И что с ним дальше делать? Да еще с открыванием морока, надо спец. вьювер. Читал про этот формат, вроде как майкрософт пытается сделать его как альтернативу *pdf. Но кажется он так и останется экзотикой.
Но тема интересная.
1
145 / 100 / 6
Регистрация: 11.03.2010
Сообщений: 477
18.02.2011, 11:30 8
Цитата Сообщение от prom1856 Посмотреть сообщение
LK, вариант сработает, но выведится в формате *xps. И что с ним дальше делать? Да еще с открыванием морока, надо спец. вьювер. Читал про этот формат, вроде как майкрософт пытается сделать его как альтернативу *pdf. Но кажется он так и останется экзотикой.
Но тема интересная.
есть подозрение что у вас по умолчанию стоит принтер какойто из майкрософтовской семейки, который как раз и создает этот файл вместо печати.

попробуйде воткнуть на форму

PrintDialog1

и печатать вот так :

C++
1
2
3
4
if (PrintDialog1->Execute())
Printer()->BeginDoc();
this->StringGrid1->PaintTo(Printer()->Handle,10,10);
Printer()->EndDoc();
1
LK
Заблокирован
18.02.2011, 12:49 9
Цитата Сообщение от koldun Посмотреть сообщение
есть подозрение что у вас по умолчанию стоит принтер какойто из майкрософтовской семейки, который как раз и создает этот файл вместо печати.
- опция "Печатать в файл" ?
0
145 / 100 / 6
Регистрация: 11.03.2010
Сообщений: 477
18.02.2011, 13:11 10
Цитата Сообщение от LK Посмотреть сообщение
- опция "Печатать в файл" ?
как вариант, может и она.

в любом случае надо делать через принтердиалог.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.02.2011, 13:11
Помогаю со студенческими работами здесь

Перенос данных из одного StringGrid в другой StringGrid
Здравствуйте . Есть очередной вопрос с матрицами. Есть два StringGrid. В одном столбце первой...

Возможность вручную писать данные в ячейки StringGrid и заполнение ячеек StringGrid данными из файла после нажатия кнопки
Здравствуйте! Помогите, пожалуйста. Мне необходимо сделать следующее: реализовать возможность...

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

Delphi 7 Stringgrid Нужно сделать цикл для заполнения Stringgrid данными из другого Stringgrid
Нужно чтобы из Stringgrid1 данные переносились в Stringgrid2 Но ТОЛЬКО ПО УСЛОВИЮ Таблицы...

StringGrid: проверить, имеется ли строка с ключевым полем во втором StringGrid-е
Имеются два StringGrid'a, у каждого есть ключевое поле. В первом sg значения ключевого поля могут...

Как перенести строку из одного StringGrid в столбец другого StringGrid?
Всем добра уважаемые спецы в программировании! Не могу сообразить как сделать следующее в...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru