Форум: "Основная";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.01.14;
Скачать: [xml.tar.bz2];




Вниз

Как быстро выводить (прорисовывать) графическую информацию на 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 явно не помещатся на экране. Что то не то в постановке, да и при современной цене компьютеров может стоит смотреть с этой стороны?




Форум: "Основная";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.01.14;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.75 MB
Время: 0.026 c
1-42421           @andrew               2001-12-26 16:42  2002.01.14  
Привет Всем. Есть вопросик по TStringGrid.


1-42411           Bar                   2001-12-25 20:34  2002.01.14  
GetVolumeInformation неодинаково ведет себя под 98/Me и NT


4-42591           MIFI                  2001-11-09 17:31  2002.01.14  
Народ помогите разобраться


4-42638           Jazzy$                2001-11-10 23:17  2002.01.14  
Фокус ввода.


1-42433           Scorpion_SJ           2001-12-23 22:04  2002.01.14  
Помогите написать DLL ресурс