Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
3-35200
sokoloff
2002-07-22 13:07
2002.08.12
Фильтры в виде дерева


1-35322
Leran2002
2002-07-29 08:05
2002.08.12
TWebBrowser


1-35351
Abelevich
2002-07-29 19:56
2002.08.12
ShowModal


4-35515
skiph
2002-06-06 05:39
2002.08.12
C и Delphi


14-35434
lak_b
2002-07-17 13:42
2002.08.12
Комп буйствует





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский