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

Вниз

Отображение графики   Найти похожие ветки 

 
bestolkov   (2011-12-09 12:40) [0]

Всем привет! Делаю следующее:
interface
uses
 Windows,GDIPAPI,GDIPOBJ, SysUtils,jps_msg;
type
 TViewer = class(TObject)
private
//ïåðåìåííûå GDI+
 graphics : TGPGraphics;
 Bitmap : TGpBitmap;
 MplayBack : TGPGraphics;
 cBitmap: TGPCachedBitmap;
 Pen: TGPPen;
 FontFamily: TGPFontFamily;
 Font: TGPFont;
 FontBold: TGPFont;
 SolidBrush:TGPSolidBrush;
 // protected

public
 constructor Create (Playback : HDC);
 destructor  Destroy; override;
 procedure ViewParam ();

end;

implementation

constructor TViewer.Create (Playback : HDC);
begin
  Bitmap:= TGpBitmap.Create(1000 ,1000,2498570);//áèòîâàÿ êàðòà(ïàìÿòü)
  graphics := TGPGraphics.Create(Bitmap);
  graphics.Clear(aclBlack);
  MplayBack :=TGPGraphics.Create(Playback);
  Pen := TGPPen.Create(MakeColor(55, 55, 55));
  Pen.SetDashStyle(DashStyleDot);
  FontFamily := TGPFontFamily.Create("Lucida Console");
  Font       := TGPFont.Create(FontFamily, 14, FontStyleRegular, UnitPixel);
  FontBold   := TGPFont.Create(FontFamily, 16, FontStyleBold, UnitPixel);

  SolidBrush := TGPSolidBrush.Create(MakeColor(0, 255, 0));

  inherited Create;
end;

destructor  TViewer.Destroy;
begin
           Pen.Free;
      Font.Free;
    Bitmap.Free;
  graphics.Free;
 MplayBack.Free;
FontFamily.Free;
SolidBrush.Free;
FontBold.Free;
inherited Destroy;
end;

procedure TViewer.ViewParam ();

begin
 DrawSTR("Hello world");
 cBitmap:= TGPCachedBitmap.Create(bitmap,MplayBack);
 MplayBack.DrawCachedBitmap(cBitmap, 0, 0);
 cBitmap.Free;
end;

end.


Затем в коде отображающей пограммы:

procedure TForm1.Button1Click(Sender: TObject);
var Viewer: TViewer;

begin
Viewer:=TViewer.Create(PaintBox1.Canvas.Handle);
Viewer.ViewParam()

GyroHorizon.Free;

end;

Все работает. А вот если экзмепляр объекта создавать в OnCreate формы, а отображать в Button1Click, то ничего не видно.. В чем проблема? и как задачи вывода на экран графики и текста правильно решать?


 
Сергей М. ©   (2011-12-09 12:53) [1]


> В чем проблема?


В том что в момент выполнения обработчика OnCreate окна формы еще не существует.


 
bestolkov   (2011-12-09 12:56) [2]

А в целом концепция верная?


 
bestolkov   (2011-12-09 12:59) [3]

Т.е. что я хотел вообще сделать: есть таймер, который следит за некоторыми параметрами и в случае изменения этих параметров, на PaintBoxе рисуются строки. Еесли таймер выключен, то строки рисуются со значениями по умолчанию.


 
Ega23 ©   (2011-12-09 13:01) [4]

Рисуй не по таймеру, а по факту наступления события.


 
bestolkov   (2011-12-09 13:02) [5]

События возникают очень часто (100 гц), поэтому не хотелось бы так быстро


 
Сергей М. ©   (2011-12-09 13:09) [6]


> концепция верная?


Неверная.
У пейнтбокса есть событие OnPaint - в нем и следует рисовать на его канве.
При необходимости срочной перерисовки (например, по наступлению события таймера) следует вызвать один из методов Refresh, Repaint или Invalidate, в зависимости от контекста.


 
Сергей М. ©   (2011-12-09 13:11) [7]


> События возникают очень часто (100 гц)


Прелюбопытно)
И что же это за события ?


 
bestolkov   (2011-12-09 13:11) [8]


> Сергей М. ©   (09.12.11 13:09) [6]

Пытаюсь так делать, однако все страшно мигает)))


 
bestolkov   (2011-12-09 13:11) [9]


> Сергей М. ©   (09.12.11 13:11) [7]

Опрос ком-порта


 
Сергей М. ©   (2011-12-09 13:16) [10]


> Опрос ком-порта


и накой шиш нужно его дрючить с такой бешеной скоростью, если он сам может сообщить о поступлении новых данных от подключенного к нему дивайса ?)


 
bestolkov   (2011-12-09 13:18) [11]

девайс передает 100 гц


 
bestolkov   (2011-12-09 13:20) [12]

Главное после Вашего ответа забыл спросить)) : когда же создается PaintBox.canvas. handle?


 
bestolkov   (2011-12-09 13:21) [13]

и как избавиться от мерцания, если не секрет?))


 
Сергей М. ©   (2011-12-09 13:21) [14]


> девайс передает 100 гц


А человеческий глаз способен реагировать на частоту в 4 раза меньшую ...


 
bestolkov   (2011-12-09 13:23) [15]

в том-то и дело, что отображаю в таймере 0.25 ГЦ, а не по факту изменения состояния


 
Сергей М. ©   (2011-12-09 13:42) [16]

> отображаю в таймере 0.25 ГЦ

Стандартный TTimer не поддерживает разрешение в 25 гц.


 
bestolkov   (2011-12-09 14:03) [17]

Я ошибся, 4 герца, конечно же. Всё страшно мерцает при изменении размеров окна, как бороться, если не секрет?


 
Сергей М. ©   (2011-12-09 14:13) [18]

в обработчик OnCreate формы помести
DoubleBuffered = True


 
Anatoly Podgoretsky ©   (2011-12-09 14:31) [19]


> Я ошибся, 4 герца, конечно же. Всё страшно мерцает при изменении
> размеров окна, как бороться, если не секрет?

4 гц <> 0,25 "nj d 16! раз выше


 
bestolkov   (2011-12-09 14:31) [20]

Пробывал, не помогает((( и крайний вопрос: когда же все таки создется paintbox.canvas.handle?


 
Сергей М. ©   (2011-12-09 14:47) [21]


> Пробывал, не помогает


Значит что-то еще криво или несуразно делаешь.


> когда же все таки создется paintbox.canvas.handle?


Да не важно когда он создается.
Твое дело - рисовать на его канве не иначе как в его обработчике OnPaint, остальное тебя вообще заботить не должно.


 
bestolkov   (2011-12-09 14:53) [22]

Я понял Вас. Тем не менее хотелось бы один раз создать объект и один раз его освободить.. Или это совсем не  обязательно?


 
Сергей М. ©   (2011-12-09 15:11) [23]


> хотелось бы один раз создать объект и один раз его освободить


А зачем ему при конструировании передавать именно хендл канвы пейнтвокса ? Создай битмап и передай его хендл - пусть туда рисует, а при OnPaint канву битмапа копируй на канву пейнтбокса.



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

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

Наверх




Память: 0.52 MB
Время: 0.008 c
15-1322553415
_qwerty_
2011-11-29 11:56
2012.03.25
вопрос к знатокам английского


6-1254316524
Абрамов Игорь
2009-09-30 17:15
2012.03.25
Отправка почты Exchange Server


3-1252904459
ruslan_as
2009-09-14 09:00
2012.03.25
dbf файл - не видно чисел


15-1322512202
Юрий
2011-11-29 00:30
2012.03.25
С днем рождения ! 29 ноября 2011 вторник


15-1322552540
OW
2011-11-29 11:42
2012.03.25
Так просто ,вопрос об амбициях