Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.08.12;
Скачать: CL | DM;

Вниз

просмотр перед печатью   Найти похожие ветки 

 
valdn   (2002-07-25 17:02) [0]

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


 
TTCustomDelphiMaster ©   (2002-07-25 17:22) [1]


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


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


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

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


 
TTCustomDelphiMaster ©   (2002-07-25 17:49) [3]

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


 
TTCustomDelphiMaster ©   (2002-07-25 18:24) [4]

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


 
Proton ©   (2002-07-26 03:45) [5]

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


 
Dmk ©   (2002-07-26 05:34) [6]

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


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

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


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

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


 
EyeDiver ©   (2002-07-26 13:55) [9]

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


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

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


 
Proton ©   (2002-07-26 19:21) [11]

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


 
TTCustomDelphiMaster ©   (2002-07-26 20:36) [12]

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

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

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


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

Вариант 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. Тут уже не раз обсуждалась проблема локальных БД , и большинство, как я понял, склоняется к варианту данные хранить в файлах, а наборы данных создавать в памяти, используя специальные компоненты. Мой вариант - как логическое продолжение этого направления - выбрасывается лишнее звено :).



Страницы: 1 вся ветка

Текущий архив: 2002.08.12;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.013 c
3-35185
***
2002-07-23 11:29
2002.08.12
форматирование целого типа


1-35282
TAN_K
2002-07-31 15:46
2002.08.12
Помогите начинающему в Delphi


3-35230
BJValentine
2002-07-24 14:58
2002.08.12
Копирование данных


7-35476
roadstar
2002-05-29 14:23
2002.08.12
Как програмно открыть папку


1-35354
Sour
2002-07-30 14:22
2002.08.12
SWAP