Форум — Ответы ( К темам )
? | Георгий: неужели никто принтером не пользуется? (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 и получаешь значение, сколько у тебя это занимает места. Потом выбираешь шрифт (или сначала берешь подходящий). Параметры девайса (включая ширину и высоту страницы) легко находятся. Например, можно сделать, чтобы всегда текст выводился на всю ширину страницы (плюс поля по краям) и дальше скроллировался вниз (т.е. на несколько страниц). |