Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по Embarcadero RAD Studio XE4

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39

Открыть новую тему     Написать ответ в эту тему

Drionn

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
deks

Цитата:
Данные на "каждый чих" перерисовывать не надо, надо кэшировать получающуюуся картинку, дополняя ее новыми данными.  

Как говорится - с этого места по подробней.
Чих у меня например - веду по графику визирку-курсор с окном типа THintWindow, в котором цифровые значения по линиям в текущем срезе. Так за этим расширенным курсором тянется вызов перерисовки всего окна графика. Идея была параллельно рисовать bitmap и с него восстанавливать след от наездов других окон. Чем-то кеш и есть. Ещё задумка - загружать свои Path в виде шейдеров.
Чуть помогло form1.FDoubleBuffered:=true;(vcl), но не так чтоб очень.
 

Цитата:
А вы не пробовали взять готовый компонент с графиками? Типа _http://steema.com/teechart/vcl

Нет, учитывая, что проекту более 15 лет, начинался с win311  and Delphi 2
Сейчас смотрю демы teechart. Впечатляет. Начинал б с нуля, то возможно купил бы.
Однако там ориентация на Презентацию, Диаграмму, Бизнес. А осуществить технический анализ, рассмотреть подробности графиков в сравнеии будет сложновато (хотя и можно). Не увидел ни одного примера с 4-6 осей по Y (которые кстати подписываются там не вертикально). Словом чарт он и есть чарт, а нужен специализированный промышленный  graph. (оно уже есть, только перевожу с D7 на ЕХ4, впрочем уже перевел, а перевожу на FM с надеждой на красоту )
 
deks, Спасибо и Вам за потраченное время.

Всего записей: 11 | Зарегистр. 18-12-2009 | Отправлено: 14:25 24-06-2013 | Исправлено: Drionn, 14:31 24-06-2013
deks



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Drionn
 
Ну у меня собственно и была мысль, что график можно рисовать в виде tiled bitmap.  каждый tile представляет собой фрагмент графика. Текущие данные выводить в "текущий" tile. Можно запоминать "исходные" данные для графика, которые связаны с этим тайлом. Когда текущий тайл "кончается", создавать новый тайл. Все текущие тайлы (под viewport и немного вокруг) оставлять в кэше. Тайлы, которые "совсем старые" или далеко от viewport - можно из памяти складывать на диск. Сверху каждого тайла можно помнить координаты "ключевых" точек, по которым можно по клику вывести доп информацию или пояснения (hint). "Карту" ключевых точек можно также выгружать из активной памяти на диск в виде какого нибудь json/yaml/или кастомного stream.  Аналогично "выгружаем" ненужные "исходные" данные.  
 
Если меняете масштаб изображения, то пересоздаем тайлы в новом масштабе на основе сохраненных исходных данных.
 
Такая техника может быть гибко тюнингована для возможностей мобильного устройства (планшет) или десктопа. Для десктопа можно делать очень большой кэш, чтобы с диском не связываться.  
 
Совет по поводу "выгрузки" кэша на диск - выгружайте тайлы не "один за одним", а пачками: так быстрее в среднем получается: диск таки пока еще инетрная штука, не у всех  ssd!

Всего записей: 857 | Зарегистр. 09-10-2003 | Отправлено: 15:40 24-06-2013
sergionn

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Drionn
В чем проблема то, тебе нужно положить на форму Timage, обработчики не создавать,
создать TextLayout:
 pTextLayout := TTextLayout.Create(канва от TImage или без канвы);
 pTextLayout.BeginUpdate;
 pTextLayout.Text := 'dsdfsfdfd';
 pTextLayout.HorizontalAlign := TTextAlign.taCenter;
 pTextLayout.VerticalAlign := TTextAlign.taCenter;
 pTextLayout.Font.Size := Self.Size;
 pTextLayout.Font.Family := Self.Family;
 pTextLayout.Font.Style := [];
 pTextLayout.EndUpdate;
 
 pTextLayout.RenderLayout(Канва) => также можно также отрисовать на заданной канве,
выводить в него текст, а на tbitmap рисовать когда нужно как показал.
Затем Image.Repaint - для обновления вручную.
Форма будет сама обновлять картинку на форме, а в битмап рисуй по мере необходимости.
Если есть проблемы с канвой попробуй режим gdi+:
в заглавном файле проекта *.dpr
 добавь uses  FMX.Types;
 добавь FMX.Types.GlobalUseDirect2D := False;
 перед Application.Initialize;
все должно работать без проблем........
 
да, шейдеры тут вообще не причем - это совсем другая песня.........
а path рисуй также в теле begin...endscene

Всего записей: 472 | Зарегистр. 02-11-2011 | Отправлено: 15:55 24-06-2013 | Исправлено: sergionn, 17:35 24-06-2013
delover

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Рисовал весь вечер, старался, правда XE3, есть подозрения и XE4
Подробнее...
Там где цифирь на коментариях - не работает, а хотел просто Caption  который знает как себя кешировать.
 
Добавлено:
Ктото обещал счётчик ссылок на объекты далее, думаю поможет.

Всего записей: 1395 | Зарегистр. 25-06-2007 | Отправлено: 19:24 24-06-2013
Drionn

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
sergionn

Цитата:
создать TextLayout:

TTextLayout содержит абстрактный метод DoRenderLayout, поэтому  pTextLayout.EndUpdate; вызывает ошибку.
К несчастью я таки не понял, чем отличается Ваш код от кода в штатной процедуре TCanvas.FillText...., кроме как в способе создании TextLayout.
 
Может кто-то объяснить? почему этот код:
procedure TForm1.Button3Click(Sender: TObject);
var ARect:TRectF;
begin
  Image1.Bitmap.Create(Round(Image1.Width), Round(Image1.Height));
  ARect.Create(10, 40, image1.Bitmap.Canvas.Width,image1.Bitmap.Canvas.Height);
  image1.Bitmap.Canvas.BeginScene;
  image1.Bitmap.Canvas.FillText( ARect, 'GFDSA',  false, 0.2,    [TFillTextFlag.ftRightToLeft],   TTextAlign.taTrailing, TTextAlign.taLeading );
  image1.Bitmap.Canvas.EndScene;
end;
 
Визуальный результат на экране отличается от правильного:
{PB: TPaintBox;}
procedure TForm1.PBPaint(Sender: TObject; Canvas: TCanvas);
var ARect:TRectF;
begin
ARect.Create(10, 40, Canvas.Width,Canvas.Height);
Canvas.BeginScene;
Canvas.FillText( ARect, 'GFDSA',  false, 0.2,    [TFillTextFlag.ftRightToLeft],   TTextAlign.taTrailing, TTextAlign.taLeading );
Canvas.EndScene;
end;
 
Подозреваю, что дело в опциях фонта, но перепробовал все, как мне кажется, и безрезультатно.
 
deks
На самом деле вывод не так уж медлителен. Вполне устраивает скорость вывода просто bitmap целиком разрешения HD. А вот его прорисовка с вычислениями и масштабированием по 1 млн. точек на кривую (редко, но и такое бывает) существенный тормоз.
ЗЫ. Если кому интересно, то такой опыт: если перед тем как вывести точку проверить пиксель, в который будет вывод, и если он уже занят, то не выводить. Такая оптимизация, несмотря на дополнительные вычисления, дает прирост скорости в 5 раз (на моих данных).

Всего записей: 11 | Зарегистр. 18-12-2009 | Отправлено: 07:59 25-06-2013 | Исправлено: Drionn, 09:48 25-06-2013
delover

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Рисовал весь вечер

Тото и оно Explicit не был использован в пользу примера, а не эффективного решения. Мысль сложная, даже для меня.
 
Добавлено:
Хочу выразить личное видение. Классовые операторы - это будущее. Это просто то что будет в каждой программе. А вот хелперы держатся не долго. Если начинать синтез операторов с ООП стоит попробовать сначала на хелперах. Для ООП достаточно что ООП незыблем.  

Цитата:
чем отличается Ваш код  

Не в мой пост, но ничем не отличается.
 
Добавлено:
Мне кажется это более интересно чем Ваша тема
http://forum.ru-board.com/topic.cgi?forum=33&topic=13743&start=20#lt

Всего записей: 1395 | Зарегистр. 25-06-2007 | Отправлено: 19:06 25-06-2013
deks



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
delover
 
Я абсолютно точно уверен, что вас понимаю не вполне! )  
 
"Кто ясно мыслит, тот ясно излагает" (ц)

Всего записей: 857 | Зарегистр. 09-10-2003 | Отправлено: 10:39 26-06-2013
delover

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
deks
Это да, иногда язык который проще русского сложнее чем разработка RAR и ZIP с нуля, выводы были в теме.
 
Добавлено:
Кзус. Вы там не читайте пожалуйста в теме. Для Вас пусто. Главное это очень хочется чтобы классовые операторы хэлперов были только в implementation.
 
Попробую объяснить.
myType := 'blabla'
Очень удобно, но это мой pas файлик. Что-то изменится - мой гемор, поправлю. А вот ктото будет чесать извилины, а почему в interface ошибка.

Всего записей: 1395 | Зарегистр. 25-06-2007 | Отправлено: 19:24 26-06-2013
Drionn

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
deks
delover
Странно. Наверно мой немецкий ещё проще или там реальные практики или больше юзеров. На их форуме всё разрешилось. Мои вопросы закрылись там результативно.
Спасибо за желание помочь.

Всего записей: 11 | Зарегистр. 18-12-2009 | Отправлено: 20:35 26-06-2013
LGTeam

Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Drionn, расскажи к чему пришел

Всего записей: 46 | Зарегистр. 20-12-2012 | Отправлено: 22:48 26-06-2013
Frodo_Torbins

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Drionn
Там однозначно больше пользователей айфонов и маков, а значит и тех, кто реально работал с FM тоже больше.

Всего записей: 2318 | Зарегистр. 24-05-2007 | Отправлено: 12:40 27-06-2013
delover

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Не знаю, возможно ли такое в XE4. Я понимаю есть кнопка "Опции Проекта", но я не знаю там ни одной галочки и не умею ими пользоваться. Однако каждый день мне приходится вырубать и врубать общую остановку отладчика при вызовах Exception. Если я просто добавлю это исключение в список то потом забуду не только как оно называлось, а ещё и то что его добавил. Пробовал написать свой ToolsAPI, чтобы вытащить эту кнопочку в меню Run - эта опция не поименована, и интерфейсы отладчика весьма краткие. Когда я знаю что там в библиотеке произойдёт 100 раз Exception, прежде чем я увижу результат, по неволе научишся лазить в опции, и поймёшь что из них нужна одна единственная.  
 
пс
Извиняюсь (c)

Всего записей: 1395 | Зарегистр. 25-06-2007 | Отправлено: 05:29 28-06-2013
Drionn

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
LGTeam
Чтобы нарисовать текст в BitMap (в ЕХ4 FM) на TImage нужно, к примеру, в formcreate создать этот bitmap.
Но этого не достаточно. Нужно ещё его инициализировать. Ну там какие-то палитры + цвета прозрачности.
Вот эти две необходимые строки:
 
  Image1.Bitmap.Create(Round(Image1.Width), Round(Image1.Height));
  Image1.Bitmap.Canvas.Clear(claWhite);
 
И Image1.Bitmap.Canvas.FillText(...) будет работать штатно.
 
Моя заморока была, в том, что я писал:
Image1.Bitmap.Canvas.Clear;
or
Image1.Bitmap.Canvas.Clear(0);
 
А нужен не "0", а любой цвет, не обязательно claWhite.
Иначе прозрачность в FillText ведёт себя не управляемо + нарисованные буковки окаймляются канвой/бахрамой, цвет которой так же не управляем.  
 
Я вынужден рисовать на bitmap, потому что мне не известен способ взять цвет пикселя под курсором мыша с другого типа canvas.
 
PS. win7 - 64, корпоративная. (может в других случаях этого нет)

Всего записей: 11 | Зарегистр. 18-12-2009 | Отправлено: 15:00 28-06-2013
delover

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Drionn
Не удивляйтесь, когда я пишу с переводчиком, меня точно никто не поймёт, а бывает работу предлагают.
 
Добавлено:
С экономлю бумагу, можно подумать что будь то заняться больше нечем

Всего записей: 1395 | Зарегистр. 25-06-2007 | Отправлено: 21:30 28-06-2013 | Исправлено: delover, 10:44 29-06-2013
delover

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ну и плюс я хотел написать ещё что-то, что такое Режим в Русской истории.

Всего записей: 1395 | Зарегистр. 25-06-2007 | Отправлено: 00:55 29-06-2013
Spy686



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
скиньте пожалуйста библиотеки SSL.  
 
Две уже качал - выдает ошибку

Всего записей: 193 | Зарегистр. 17-12-2010 | Отправлено: 17:25 30-06-2013
Frodo_Torbins

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Spy686
А вам для чего? Инди? Какой версии?

Всего записей: 2318 | Зарегистр. 24-05-2007 | Отправлено: 17:30 30-06-2013
Spy686



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
А вам для чего?

Для авторизации в twitter.
 

Цитата:
Инди?

get := IdHTTP1.get('http://twitter.com/');
только начал изучать Delphi.
 

Цитата:
Какой версии?

  gsIdVersion = '10.6.0.0'; {do not localize}
 
Гдето прочитал что для indy 10 стабильно работала openssl-0.9.8h.tar
скачал, но ненашел там ниодной dll. как их там найти?
 
Добавлено:

Цитата:
скиньте пожалуйста библиотеки SSL.  
 
Две уже качал - выдает ошибку  

 
 
 
скачал
http://ru.originaldll.com/file/libeay32.dll/20035.html
http://ru.originaldll.com/file/ssleay32.dll/20037.html
Версия: 0.9.8h
 
и ошибка пропала

Всего записей: 193 | Зарегистр. 17-12-2010 | Отправлено: 17:38 30-06-2013 | Исправлено: Spy686, 20:15 30-06-2013
Frodo_Torbins

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Spy686
Если вдруг еще понадобится: ftp://indy.fulgan.com/SSL/

Всего записей: 2318 | Зарегистр. 24-05-2007 | Отправлено: 00:13 01-07-2013
Spy686



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Frodo_Torbins
спс

Всего записей: 193 | Зарегистр. 17-12-2010 | Отправлено: 07:19 01-07-2013
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по Embarcadero RAD Studio XE4


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru