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

Вниз

Как быстро выводить (прорисовывать) графическую информацию на Canvas?   Найти похожие ветки 

 
dimonf   (2001-12-24 17:15) [0]

Господа програмисты, я рисую на TPanel с помощью Canvas. На Canvas я вывожу 960 записей из таблицы.

Для рисования я использую Paint:
procedure TPanel.Paint;
begin
MyRect.Left:=40 ; MyRect.Top:=80; MyRect.Right:=247; MyRect.Bottom:=107;
For Count:=1 to 960 do
begin
Canvas.TextOut(Rect.Right,Rect.Top+30,"Demos");
end;
end;

Почему-то у меня долго идет формирование
изображения. И довольно заметно прорисовываеться Canvas, если я начинаю его двигать с помощью ScrollBox.

Может надо дополнительно использовать: MyCanvas : TCanvas?
Рисовать вначале на MyCanvas а потом копировать на TPanel?

Или еще как нибуть извратиться?


 
dimonf   (2001-12-24 18:03) [1]

Нет мыслей?


 
dimonf   (2001-12-24 20:55) [2]

Народ, неужели ни кто не знает???


 
SergVlad ©   (2001-12-24 21:05) [3]

Для вывода текста существуют компоненты типа TRichEdit.
Рисовать "лобовыми" методами на TCanvas - это для практики начинающим.
Хотите найти быстрые решения - создайте собственный DirectX.
А стоит ли ?


 
dimonf   (2001-12-24 21:57) [4]

Я бы с удовольствием воспользовался TRichEdit-ом но он к сожелению не делает таблиц, а мне нужно позарез выводить данные в таблицу.
Базы данных мне не подходят, вообще ни как :(((
А компаненты типа FreeReport вообще полной отстой. Правда у меня Demo версия, а полный дистрибутив для меня дорог.
Так что приходиться писать самому ручками на TCanvas.


 
SergVlad ©   (2001-12-24 22:10) [5]

Полный отстой, господин хороший, Ваши мысли, да и дела, судя по всему.
Для вывода в таблицы существует TStringGrid.
Для вывода в таблицы из баз данных - TDBGrid, соответственно.
QReport, FastReport (FreeReport - вообще бесплатная ветка FR), Crystal Report, Report Smith и пр. вообще не для Вас, похоже, создавались.
Задачу - на стол.
Тогда и будем говорить.


 
dimonf   (2001-12-24 22:37) [6]

Моя задача выводить данные полученные с прибора который подключен к Com порту.
Данные надо выводить на белом фоне в таблицу. Точно также как они должны
быть на листе после распечатки. Вверху должена быть шапка с рашифровкой пораметров. При просмотре данных с помощью ScrollBox шапка должна быть неподвижной. (Прихоть заказчика).
Связываться с базой нельзя, так как снимаю распечатки с приборов с помощью дохлого ноутбука.
Все то, что мне перечислили вверху я использовал. Не подходит :(
Вот я и полез в TCanvas.
Получаеться, но я завяз. Создал TPanel на которую хочу выводить данные. Но при прорисовке Canvasa TPanel-и с поможью OnPaint у меня (если таблица большая и много информации) таблица начинает дергаться. Придумал что надо сделать MyCanvas:=TCanvas.Create(self); потом рисовать один раз таблицу с данными в памяти. А при выводе на TPanel (имею введу ее Canvas) с помощью OnPaint, определять кусок Canvas-а, который я реально увижу в окне (а не весь Canvas) и копировать его из памяти в TPanel c помощью CopyRect.
Но это теория а на практике полный завал. Немогу сформировать TCanvas в памяти.
Помогите плиз. :)))


 
Фе   (2001-12-24 23:24) [7]

С помощью "дохлого" ноутбука считываешь данные с N приборов объемом M тактов и записываешь в текст. файл из M строк, где каждая строка
есть множество значений снятых с N приборов, разделенное символом DLM.

Передаешь файл на обработку в свою прогу.
Что она умеет:
Считывать из текст файла j-строку, парсить по DLM на N-слов и записывать в StringGrid.Cells[i,j].
Вот и все остальное - на автомате.
Св-ва FixedCols и FixedRows по 1 - в них заносишь свою шапку и нумерацию строк.


 
valery_f   (2001-12-25 12:00) [8]

Рисование будет долгим и мигающим, т.к. вывод идет непосредственно в "видимый" канвас и при каждом TextOut оно будет пытаться перерисоваться. Посему нужно у этой панели:
1) перебить WM_ERASEBACKGROUND, чтобы он не затирал картинку.
2) в методе Paint рисовать во внутренний битмап и BitBlt"ом отплевывать прямо на DC компонента за один шаг:
BitBlt(Canvas.Handle,0,0,Width,Height,TempBmp.Canvas.Handle,0,0,SRCCOPY);
Это будет быстрее всего и не будет мигать. Что касается грида, то при смене содержимого КАЖДОЙ ячейки он будет перерисовываться - это очень долго.

2Фе> городить файлы на пустом месте... еще можно откидывать данные в Exel :)))))


 
EAlexander   (2001-12-25 12:40) [9]

A CanvasMetafile использовать не судьба. :) И рисовать на нем достаточно быстро и в файлик сохранить можно. :)


 
Фе   (2001-12-25 12:56) [10]

1.Если идет съем сигналов с приборов, вполне может потребоваться последующий анализ данных - для этого и совет дан - вести лог файл.
Если это не надо, значит не надо.
2. Первый раз слышу, что нужна какая-то особенная скорость вывода текста для просмотра(а понимать-то чел успеет то, что выводится ?).
И сколько строк и колонок надо вывести ? 10 тыс х 10 тыс ?
Или это просто самоцель ?

Пользуйся TStringGrid или ломайся дальше.
Мне кажется, задача искусственно выморочена.


 
Polevi ©   (2001-12-25 13:06) [11]

Действительно - проще всего использовать TStringGrid
Если уж хочется ручками рисовать - можно делать это в TStringGrid.OnDrawCell


 
valery_f   (2001-12-25 13:43) [12]

2 Polevi & Фе. Grid действительно проще, но при частой смене данных моргание будет большим. К тому же - ноутбук дохлый (не забыли?), а посему мограние и медленность отрисовки вылезут в полный рост. Давно ли вы терзали грид на медленной тачке? Да еще чтобы обмен не страдал?


 
Фе   (2001-12-25 14:27) [13]

Все равно не ВЕРЮ.
Надо искать методически правильные решения, а не устраивать гонки а"ля
Интел - Окошки.
При разрешении 1024х768 в окно влезет ~24 строки и допустим 10 столбцов.
Это всего 240 ячеек.
В памяти хранить массив значений от прибора считываемых за цикл.
Измениться между циклами могут и не все.
Отображать изменившиеся.
Ну и тд.


 
Anatoly Podgoretsky ©   (2001-12-25 15:10) [14]

Все равно, что то не то, данные поступают по компорту, значит их не может быть много за секунду, изменяются явно не все 960, ну я бы не сказал, что StringGrid медленно работает на старых компьютерах, тем более что все 960 явно не помещатся на экране. Что то не то в постановке, да и при современной цене компьютеров может стоит смотреть с этой стороны?



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

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

Наверх




Память: 0.5 MB
Время: 0.011 c
3-42364
Hermit
2001-12-11 20:25
2002.01.14
Interbase


4-42617
Art
2001-10-31 13:19
2002.01.14
Как можно увидеть запущен ли exe?


1-42412
RoadRunner
2001-12-26 17:17
2002.01.14
Проблема с записью в файл


4-42632
AlexKniga
2001-11-15 13:42
2002.01.14
Тип PChar и пустая строка


3-42338
Smile
2001-12-10 09:59
2002.01.14
Может быть глупый вопрос, но ....