Форум — Ответы     (  К темам )
 ?  Георгий: неужели никто принтером не пользуется? (20-05-2003 10:50:13)
а если всётаки пользуетесь, то посмотрите:
http://www.cbuilder.ru/progi/forum_answer.php?id=2677&nn=0
  Игорь (20-05-2003 11:36:18)
Ты пробовал програмно проскролить стринггринд и снова отправить на печать и т.д.? Или у тебя видимый кусочек стринггрида (высота компонента) слишком мелкий и занимает на A4 мало места?
Если внешний вид печати должен быть хорошим, то такой вариант — наверняка корявый.
Все зависит от требований к оформлению(качеству оформления) печати.
Какие там требования?
 Георгий (20-05-2003 12:37:44)
изначально StringGrid у меня предназначался только для просмотра отчёта, а потом заказчик захотел его на бумаге видеть, ну я и сделал по самому простому.
Размеры окошка, в котором растянут StringGrid, может менять пользователь, но даже, если растянуть на весь экран, то всё не будет видно. Смущает то, что когда я "рисую" StringGrid на принтере, то почему то видимая область остаётся такой же как на экране.

на данный момент есть следующее:
1. экранное разрешении 800х600
2. печать в альбомной ориентации т.к. табличка по горизонтали большая
3. табличка действительно большая и не влазит целиком на экран и на 1 лист A4
4. число столбцов заранее не известно (оно даже не постоянное)
5. число строк такое, что на альбомный A4 влазит и даже место остаётся

хочу:
1. не зависеть от экранного разрешения
2. чтоб пречаталась табличка на бумаге без влияния на процесс печати со стороны видимой части StringGrid (во загнул — т.е. хочу, чтоб печаталось так же хорошо, как таблички в Excel)
3. чтоб постоянная часть таблицы печаталась на всех листах и была нумерация листов. Но это не обязательно
 Павел (20-05-2003 13:45:17)
Пользуемся отчетами, но я для построения практически любых
отчетов использую FastReport 2.47
и компоненты Table, Query из которых эти данные берутся.


---
Можно также придумать и что-то типа:

for(int j=0; j<StringGrid1->ColCount; j++){
RichEdit1->Lines->Add("---------------");
AnsiString s = "";
for(int i=0; i<StringGrid1->RowCount; i++){
s = s + " | " + StringGrid1->Cells[i][j];
}
RichEdit1->Lines->Add(s);
}
RichEdit1->Print("");

Таким путем можете вывести содержимое ячеек куда угодно,
(а это что угодно  — распечатать),

можно например сделать экспорт в Word или Excel,
у вас же данные хранятся в StringGrid1->Cells[i][j]
перенести программно их в Word Excel и программно распечатать
из своей программы (через Word Excel) несложно,
пример на сайте тут есть
http://www.rxlib.ru/WinLesson/bles1.htm

или воспользуйтесь компонентом F1Book, а его распечатать(см пример ниже)
или-же просто обходится без StringGrid, а использовать тот-же F1Book

или использовать
Table + DBGrid, а данные помещайте в .db файл (связанный с Table)
(тогда и печатать будет максимально просто, из того-же FastReport)

----

Пример

//---------------------------------------------------------------------------
// заносим данные в StringGrid
void __fastcall TForm1::Button2Click(TObject *Sender)
{
for(int i=0; i<StringGrid1->RowCount; i++){
for(int j=0; j<StringGrid1->ColCount; j++){
StringGrid1->Cells[j][i] = IntToStr(i)+IntToStr(j);
}
}
}
//---------------------------------------------------------------------------
// заносим их в F1Book, а оттуда печатаем
void __fastcall TForm1::Button1Click(TObject *Sender)
{
F1Book1->MaxRow = StringGrid1->RowCount;
F1Book1->MaxCol = StringGrid1->ColCount;
for(int i=0; i<StringGrid1->RowCount; i++){
for(int j=0; j<StringGrid1->ColCount; j++){
F1Book1->Row = i+1;
F1Book1->Col = j+1;
F1Book1->Text = StringGrid1->Cells[j][i];
}}
F1Book1->FilePrint(0);
}
//----------------------------------------------------------------------
 Георгий (20-05-2003 17:31:55)
любые table и Excel не подходят
буду пытаться использовать F1Book
кстати — что такое этот бук?
 Павел (20-05-2003 18:34:54)
ActiveX типа маленький Excel
 Alexander (20-05-2003 19:15:18)
Если хочешь полностью все контролировать, напиши класс, который будет таблички рисовать где угодно (на hDC). Через функцию WinAPI DrawText. Сначала вызываешь его с DT_CALCRECT и получаешь значение, сколько у тебя это занимает места.
Потом выбираешь шрифт (или сначала берешь подходящий). Параметры девайса (включая ширину и высоту страницы) легко находятся.
Например, можно сделать, чтобы всегда текст выводился на всю ширину страницы (плюс поля по краям) и дальше скроллировался вниз (т.е. на несколько страниц).