![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как быстро выводить (прорисовывать) графическую информацию на Canvas?
dimonf © (2001-12-24 17:15:00)Господа програмисты, я рисую на 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?
Или еще как нибуть извратиться?
Anatoly Podgoretsky (2001-12-25 15:10:00) [1]Все равно, что то не то, данные поступают по компорту, значит их не может быть много за секунду, изменяются явно не все 960, ну я бы не сказал, что StringGrid медленно работает на старых компьютерах, тем более что все 960 явно не помещатся на экране. Что то не то в постановке, да и при современной цене компьютеров может стоит смотреть с этой стороны?
Фе (2001-12-25 14:27:00) [2]Все равно не ВЕРЮ.
Надо искать методически правильные решения, а не устраивать гонки а"ля
Интел - Окошки.
При разрешении 1024х768 в окно влезет ~24 строки и допустим 10 столбцов.
Это всего 240 ячеек.
В памяти хранить массив значений от прибора считываемых за цикл.
Измениться между циклами могут и не все.
Отображать изменившиеся.
Ну и тд.
valery_f (2001-12-25 13:43:00) [3]2 Polevi & Фе. Grid действительно проще, но при частой смене данных моргание будет большим. К тому же - ноутбук дохлый (не забыли?), а посему мограние и медленность отрисовки вылезут в полный рост. Давно ли вы терзали грид на медленной тачке? Да еще чтобы обмен не страдал?
Polevi (2001-12-25 13:06:00) [4]Действительно - проще всего использовать TStringGrid
Если уж хочется ручками рисовать - можно делать это в TStringGrid.OnDrawCell
Фе (2001-12-25 12:56:00) [5]1.Если идет съем сигналов с приборов, вполне может потребоваться последующий анализ данных - для этого и совет дан - вести лог файл.
Если это не надо, значит не надо.
2. Первый раз слышу, что нужна какая-то особенная скорость вывода текста для просмотра(а понимать-то чел успеет то, что выводится ?).
И сколько строк и колонок надо вывести ? 10 тыс х 10 тыс ?
Или это просто самоцель ?
Пользуйся TStringGrid или ломайся дальше.
Мне кажется, задача искусственно выморочена.
EAlexander (2001-12-25 12:40:00) [6]A CanvasMetafile использовать не судьба. :) И рисовать на нем достаточно быстро и в файлик сохранить можно. :)
valery_f (2001-12-25 12:00:00) [7]Рисование будет долгим и мигающим, т.к. вывод идет непосредственно в "видимый" канвас и при каждом TextOut оно будет пытаться перерисоваться. Посему нужно у этой панели:
1) перебить WM_ERASEBACKGROUND, чтобы он не затирал картинку.
2) в методе Paint рисовать во внутренний битмап и BitBlt"ом отплевывать прямо на DC компонента за один шаг:
BitBlt(Canvas.Handle,0,0,Width,Height,TempBmp.Canvas.Handle,0,0,SRCCOPY);
Это будет быстрее всего и не будет мигать. Что касается грида, то при смене содержимого КАЖДОЙ ячейки он будет перерисовываться - это очень долго.
2Фе> городить файлы на пустом месте... еще можно откидывать данные в Exel :)))))
Фе (2001-12-24 23:24:00) [8]С помощью "дохлого" ноутбука считываешь данные с N приборов объемом M тактов и записываешь в текст. файл из M строк, где каждая строка
есть множество значений снятых с N приборов, разделенное символом DLM.
Передаешь файл на обработку в свою прогу.
Что она умеет:
Считывать из текст файла j-строку, парсить по DLM на N-слов и записывать в StringGrid.Cells[i,j].
Вот и все остальное - на автомате.
Св-ва FixedCols и FixedRows по 1 - в них заносишь свою шапку и нумерацию строк.
dimonf (2001-12-24 22:37:00) [9]Моя задача выводить данные полученные с прибора который подключен к Com порту.
Данные надо выводить на белом фоне в таблицу. Точно также как они должны
быть на листе после распечатки. Вверху должена быть шапка с рашифровкой пораметров. При просмотре данных с помощью ScrollBox шапка должна быть неподвижной. (Прихоть заказчика).
Связываться с базой нельзя, так как снимаю распечатки с приборов с помощью дохлого ноутбука.
Все то, что мне перечислили вверху я использовал. Не подходит :(
Вот я и полез в TCanvas.
Получаеться, но я завяз. Создал TPanel на которую хочу выводить данные. Но при прорисовке Canvasa TPanel-и с поможью OnPaint у меня (если таблица большая и много информации) таблица начинает дергаться. Придумал что надо сделать MyCanvas:=TCanvas.Create(self); потом рисовать один раз таблицу с данными в памяти. А при выводе на TPanel (имею введу ее Canvas) с помощью OnPaint, определять кусок Canvas-а, который я реально увижу в окне (а не весь Canvas) и копировать его из памяти в TPanel c помощью CopyRect.
Но это теория а на практике полный завал. Немогу сформировать TCanvas в памяти.
Помогите плиз. :)))
SergVlad (2001-12-24 22:10:00) [10]Полный отстой, господин хороший, Ваши мысли, да и дела, судя по всему.
Для вывода в таблицы существует TStringGrid.
Для вывода в таблицы из баз данных - TDBGrid, соответственно.
QReport, FastReport (FreeReport - вообще бесплатная ветка FR), Crystal Report, Report Smith и пр. вообще не для Вас, похоже, создавались.
Задачу - на стол.
Тогда и будем говорить.
dimonf (2001-12-24 21:57:00) [11]Я бы с удовольствием воспользовался TRichEdit-ом но он к сожелению не делает таблиц, а мне нужно позарез выводить данные в таблицу.
Базы данных мне не подходят, вообще ни как :(((
А компаненты типа FreeReport вообще полной отстой. Правда у меня Demo версия, а полный дистрибутив для меня дорог.
Так что приходиться писать самому ручками на TCanvas.
SergVlad (2001-12-24 21:05:00) [12]Для вывода текста существуют компоненты типа TRichEdit.
Рисовать "лобовыми" методами на TCanvas - это для практики начинающим.
Хотите найти быстрые решения - создайте собственный DirectX.
А стоит ли ?
dimonf (2001-12-24 20:55:00) [13]Народ, неужели ни кто не знает???
dimonf (2001-12-24 18:03:00) [14]Нет мыслей?