Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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 явно не помещатся на экране. Что то не то в постановке, да и при современной цене компьютеров может стоит смотреть с этой стороны?



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

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

Наверх




Память: 0.48 MB
Время: 0.005 c
1-42515
Simonaln
2001-12-26 11:32
2002.01.14
Расстояние между строками в Memo


1-42443
Пл.
2001-12-24 17:05
2002.01.14
Цикл


3-42386
Oleg_K
2001-12-08 12:42
2002.01.14
Работа со строками в DBGrid


1-42465
Smok_er
2001-12-20 04:37
2002.01.14
Вращение TImage


3-42375
Venus
2001-12-13 11:12
2002.01.14
DBLookupListBox





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский