Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2012.03.25;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.003 c
2-1323424929
webpauk
2011-12-09 14:02
2012.03.25
Динамический массив


3-1273150836
Цукор5
2010-05-06 17:00
2012.03.25
вложенный запрос


15-1322570922
OW
2011-11-29 16:48
2012.03.25
Откуда пробел?


15-1322655766
Тут был я
2011-11-30 16:22
2012.03.25
Ввод тел. номера в Вебмани.


1-1273054167
Roman-555
2010-05-05 14:09
2012.03.25
Увеличение точности вычислений до 30-40 значащих цифр





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