Форум: "Основная";
Текущий архив: 2002.08.12;
Скачать: [xml.tar.bz2];
Внизпросмотр перед печатью Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.006 c