Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

просмотр перед печатью [D5, Win95/98]


valdn ©   (2002-07-25 17:02:00) 

Уважаемые знатоки !
Проблема такая : отчет выводится напрямую на принтер, используя свойство Printer.Canvas. Всё замечательно, но иногда этот отчет нужно печатать не сразу, а сначала просмотреть с экрана и затем уже принимать решение о печати. Если прорисовывать его на форме, используя Form.Canvas, то возникают 2 нехороших момента :
1)поскольку отчет большой , в размеры формы он не помещается, а горизонтальную и вертикальную полосы прокрутки на чистой форме создать не удается;
2)чтобы отчет прорисовывался при изменении размеров формы , его формирование приходится помещать в обработчик события OnPaint, и это приводит к задержкам при перерисовке формы, поскольку отчет формируется достаточно долго.
Подскажите, пожалуйста, каким образом можно сделать что-то вроде QReport, когда отчет формируется 1 раз, а затем его сколько угодно можно разглядывать с экрана, используя горизонтальную и вертикальную полосы прокрутки.
Заранее благодарен всем ответившим.


valdn   (2002-07-29 11:44:00) [1]

Вариант Scrollbox + Image работает хорошо. Правда, приходится использовать следующую цепочку :
BitMap:=Graphics.TBitmap.Create;
BitMap.LoadFromFile("c:\vedomost.bmp");

BitMap.Height:=Height1;
Image.Height:=Height1;
BitMap.Width:=Width1;
Image.Width:=Width1;

Picture:=TPicture.Create;
Picture.Graphic:=BitMap;
Image.Picture:=Picture;
И если убрать загрузку BitMap из файла (загружается пустая картинка), то в этом случае программа работать не хочет - наверное, после создания BitMap нужно задавать ему еще какие-то параметры.

>Dmk
Отдельное спасибо за исходники.

>pasha676,proton
Все репорты работают под стандартные БД, а я, нахлебавшись с Paradox, решил извратиться :) и сделать локальную БД на файлах прямого доступа, перекачивая их содержимое после соответствующей выборки сразу в StringGrid. Тут уже не раз обсуждалась проблема локальных БД , и большинство, как я понял, склоняется к варианту данные хранить в файлах, а наборы данных создавать в памяти, используя специальные компоненты. Мой вариант - как логическое продолжение этого направления - выбрасывается лишнее звено :).


TTCustomDelphiMaster   (2002-07-26 20:36:00) [2]

sok (26.07.02 09:28)
pasha676 (26.07.02 15:06)
Proton © (26.07.02 19:21)

Ага и переписывать всю программу. Если у человека отчет выводиться на canvas, то почему бы его не вывести на canvas TImage. Какие тут сложности?
А в следующей программе может он и воспользуется предложенными вами компонентами.

PS: И вообще, не видите что ли человек пробует, не надо ему мешать. Кто опаздал - тот не успел. :)


Proton   (2002-07-26 19:21:00) [3]

или fastreport"ом или freereprort"ом или preport"ом ?
или еще чем, зачем сложности такие ?


pasha676   (2002-07-26 15:06:00) [4]

А че бы не воспользоваться КвикРепортом?


EyeDiver   (2002-07-26 13:55:00) [5]

После изменения размеров формы и скроллинге инвалидейтится только часть окна. Поэтому только она и перерисовывется. Для отрисовки всего окна необходимо вызвать InvalidateRect на WM_SIZE, WM_VSCROLL, WM_HSCROLL с параметрами ClientRect (инвалидейтить всю клиентскую область), правда появится эффект мерцания, но перерисовываться все будет грамотно


sok   (2002-07-26 09:28:00) [6]

Попробуйте использовать компонент TPrintPreview www.delphiarea.com


valdn   (2002-07-26 08:39:00) [7]

Спасибо всем ответившим.Идеи есть - буду пробовать.


Dmk   (2002-07-26 05:34:00) [8]

Я делал подобное. Могу исходники кинуть по почте. Размерчик Zip"a только 1.84 Mb.


Proton   (2002-07-26 03:45:00) [9]

картинку (TImage) можно поместить в scrollbox


TTCustomDelphiMaster   (2002-07-25 18:24:00) [10]

valdn
Только что на голову упало яблоко и родилась идея.
Создаешь на форме TImage, задаешь ему размеры, рисуешь на его canvas отчет, а дальше не твои заботы.


TTCustomDelphiMaster   (2002-07-25 17:49:00) [11]

valdn (25.07.02 17:36)
Значит криво написан обработчик onPaint или onPaint не происходит при скроллинге (проверь). Вообще для увеличения быстодействия отчет можно нарисовать например на canvas"е TBitmap и копировать нужный кусок на canvas формы.


valdn   (2002-07-25 17:36:00) [12]

>TTCustomDelphiMaster
Размещал Panel для пробы, полоса прокрутки появлялась, но при перемещении с помощью полосы скрытые части отчета почему-то не прорисовываются - они прорисовываются только при изменени размера формы.


TTCustomDelphiMaster   (2002-07-25 17:22:00) [13]


> valdn (25.07.02 17:02)
> Уважаемые знатоки !
> 1)поскольку отчет большой , в размеры формы он не помещается,
> а горизонтальную и вертикальную полосы прокрутки на чистой
> форме создать не удается;


А что на форму нельзя поместить что нибуть маленькое, прозрачненькое пониже и поправее?


Наверх

Титульная страница Поиск, карта сайта Написать письмо