![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| RN3QGA |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 73 Регистрация: 28.11.2005 Где: Воронежская обл. Репутация: нет Всего: нет |
Добрый день уважаемы ппрограммисты.
Никак не могу добиться, чтобы распечатать вcе содержание своего Sting grida. Использую вот такой код (взят из DRKB)
В принципе все работает, но печатается только первые 42 строки моего SGrida, а уменя их может быть более 500. Не хотелось бы использовать Reportы и передавать в MS EXel. Может дадите свои комментарии к коду,что там и где делается, пока сам разобраться не могу или как его подправить. Спасибо! |
|||
|
||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 192 Всего: 484 |
Тогда ты сам должен отслеживать, сколько строк у тебя помещается на страницу. Создавать новую страницу и продолжать на ней. |
|||
|
||||
| RN3QGA |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 73 Регистрация: 28.11.2005 Где: Воронежская обл. Репутация: нет Всего: нет |
А немогли бы Вы сделать комментарии к коду, мне так легче будет разобраться что там и где, (думаю на этом примере поучиться), а уж дальше постараюсь сам.
Спасибо! (извините я самоучка приходиться грызть). |
|||
|
||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 192 Всего: 484 |
Все, что не влазит на канву принтера, на принтер не пойдет. Нужно расчитывать, не вылвзит ли за канву принтера, и, если вылазит, дробить на следующий лист. Также читай про TPrinter. |
|||
|
||||
| RN3QGA |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 73 Регистрация: 28.11.2005 Где: Воронежская обл. Репутация: нет Всего: нет |
Огромное спасибо ! Буту терзать !
|
|||
|
||||
| RN3QGA |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 73 Регистрация: 28.11.2005 Где: Воронежская обл. Репутация: нет Всего: нет |
Доброй ночи или дня.
"Терзал, терзал" и ничего не натерзал. С самим кодом разобрался но как расчитать то, что не помещается на канву и добавить новый лист не смог - видимо знаний слабовато. Не плохо бы посмотреть конкретный пример. Если есть таков то подскажите пожалуйста. Попробывал передавать данные в Exel, все получилось, все работает - но если нет его, вот и вопрос. Помогите кто может и кто не может! Спасибо! |
|||
|
||||
| Albinos_x |
|
|||
![]() Evil Skynet ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3288 Регистрация: 28.5.2004 Где: X-6120400 Y-1 4624650 Репутация: 26 Всего: 108 |
можно чуть преобразовать код:
не проверял, могут быть ошибки, но думаю идея понятна -------------------- "Кто владеет информацией, тот владеет миром" Уинстон Черчилль |
|||
|
||||
| Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 36 Всего: 329 |
Я бы сделал так:
Установливаем EhLib, там есть MemoTable В MemoTable создаем структуру таблицы (поля) и отправляем твой StringGrid в эту MemoTable К MemoTable подключены из этой же EhLib компонент для печати и сетка Как ты сетку (DBGridEh) настроишь, так все и будет на листе при предварительном просмотре, т.е. размер колонок, шрифты, цвета и т.д. Очень удобно. |
|||
|
||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 192 Всего: 484 |
Так низя. Иначе ты начнешь новый документ, только закончив первый столбец. Да и к тому же начнешь сначала. Так что получишь гору бумаги с первой колонкой. Здесь нужно менять вложения циклов. В цикл, перебирающий строки, нужно вкладывать цикл, перебирающий колонки. И вот, если внешний цикл дошел до края листа, заканчивать страницу, начинать новую, ризовать заголовок и дальше по циклу. |
|||
|
||||
| Albinos_x |
|
|||
![]() Evil Skynet ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3288 Регистрация: 28.5.2004 Где: X-6120400 Y-1 4624650 Репутация: 26 Всего: 108 |
да точно... думал об этом... но спешил, поэтому не написал... -------------------- "Кто владеет информацией, тот владеет миром" Уинстон Черчилль |
|||
|
||||
| RN3QGA |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 73 Регистрация: 28.11.2005 Где: Воронежская обл. Репутация: нет Всего: нет |
Ну коли так, а нельзя ли дописать (простите уж за невежливость).
Дело в том, что я вот по совету Dsergey скачал EhLib 4.0 для D7 и попробывал поставить, но не тут то было (Мой D7 ругается и выдает фат. ошибки) ну думаю придеться спрашивать как установить, а сам грешным делом не люблю браться за несколько дел сразу. Поэтому пока затею с установкой EhLib 4.0 для D7 оставил, хочу все таки разобраться с кодом. Уж будте добры напишите полную версию, хочется разобраться, а уж потом дальше. Спасибо![quote] Ученье свет, а неученье чуть свет и на работу !!! |
|||
|
||||
| Albinos_x |
|
|||
![]() Evil Skynet ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3288 Регистрация: 28.5.2004 Где: X-6120400 Y-1 4624650 Репутация: 26 Всего: 108 |
приблизительно так:
что изменено: вложение цикла, печать происходит по строчно, когда строка выходит за пределы страницы опять вызывается эта функция. -------------------- "Кто владеет информацией, тот владеет миром" Уинстон Черчилль |
|||
|
||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 192 Всего: 484 |
Ну не нужно этого делать. Никакая рекурсия здесь не нужна совсем. Снова ты делаешь гору листочков. Опять же печать заново начнется. |
|||
|
||||
| Albinos_x |
|
||||
![]() Evil Skynet ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3288 Регистрация: 28.5.2004 Где: X-6120400 Y-1 4624650 Репутация: 26 Всего: 108 |
не совсем, новая печать начнётся не с новой строки, а с той на которой остановились:
я задал как входной параметр переменную номер строчки с которой надо начинать печать и использую цикл не for, т.к. в нем нельзя изменять параметр i, а while... единственное в чём я сомневаюсь... это в окончании печати, вернее можно ли начинать новую печать не закончив старую... если можно, то этот код должен прокатить... если нет, то тогда придётся переписывать так, сначала вычисляем количество строк умещяющихся на листе, щитаем количество листов, открываем цыкл по количеству листов, потом код функции, только без рекурсии... -------------------- "Кто владеет информацией, тот владеет миром" Уинстон Черчилль |
||||
|
|||||
| RN3QGA |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 73 Регистрация: 28.11.2005 Где: Воронежская обл. Репутация: нет Всего: нет |
Добрый вечер.
Попробывал код, но теперь D7 ругается на Hight в строке if Printer.Canvas.Hight>Y2 then пишет, что : Undeclared identifier: 'Hight', во как, а как подправить? |
|||
|
||||
| Snowy |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 192 Всего: 484 |
|
||||
|
|||||
| Albinos_x |
|
|||
![]() Evil Skynet ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3288 Регистрация: 28.5.2004 Где: X-6120400 Y-1 4624650 Репутация: 26 Всего: 108 |
разобрался... печать новую начинать нельзя пока не закончил старую, плюс ещё кое-чего поменял. Этот код точно работает, проверил... предыдущий код писал в попыхах, там много ошибок... в этом всё исправлено, плюс добавлены переменные для печати сначала нового листа(coll) и определения создания нового документа или продолжения старого(ff), кроме того исправлены ошибки в вычислениях и убраны лишние операции... Это сообщение отредактировал(а) Albinos_x - 18.12.2005, 01:36 -------------------- "Кто владеет информацией, тот владеет миром" Уинстон Черчилль |
|||
|
||||
| RN3QGA |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 73 Регистрация: 28.11.2005 Где: Воронежская обл. Репутация: нет Всего: нет |
Добрый вечер !
Код проверил, действительно работает, но с оговоркой - после печати основных страниц (например 3-х листов) начинает печатать (повторять 3 лист) еще несколько раз (сколько не считал на 5 -м бумага закончилась, но предпологаю,что много (глянул в диспетчере висит число более 100 ), да и пришлось убрать в ( procedure PrintGrid(sGrid: TStringGrid; sTitle: В чем дело ? Спасибо. Это сообщение отредактировал(а) RN3QGA - 18.12.2005, 18:52 |
|||
|
||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 192 Всего: 484 |
Это из-за рекурсии.
Поправь так:
|
|||
|
||||
| RN3QGA |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 73 Регистрация: 28.11.2005 Где: Воронежская обл. Репутация: нет Всего: нет |
Спасибо! Все вроде бы работает, но еще досконально разберусь сообщу.
|
|||
|
||||
| Albinos_x |
|
||||||||||||
![]() Evil Skynet ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3288 Регистрация: 28.5.2004 Где: X-6120400 Y-1 4624650 Репутация: 26 Всего: 108 |
тож сначала такая проблема была, когда начал отладку кода, но потом исправил...видно при копировании исправленного кода, ты поменял только содержимое функции и не поменял строку:
на эту:
это происходило потому что переменная Col не изменялась при выходе из рекурсии, если же написать
то переменная изменяется и листы не повторяются. Но пердложенный вариант Snowy, тоже выход из положения. Добавлено @ 19:38 к тому же в той строке была опечатка:
по идее так она бы и не запустилась, а когда ты исправил на:
то как я написал, при выходе из процедуры, переменная Col оставалась такой же, как и при входе в неё, поэтому она делала кучу лишних листов. -------------------- "Кто владеет информацией, тот владеет миром" Уинстон Черчилль |
||||||||||||
|
|||||||||||||
| RN3QGA |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 73 Регистрация: 28.11.2005 Где: Воронежская обл. Репутация: нет Всего: нет |
Доброго времени всем!
С кодом разобрался полностью, Все подправил - работает, проверил окончательно! Спасибо огромное за помощь, пока вопросов нет, но думаю в процессе совершенствования своей проги могут возникнуть, за дальнейшую помощь СПАСИБО заранее. 73! SK |
|||
|
||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |