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

Вниз

OpenGL + TFrame. Как????   Найти похожие ветки 

 
@!!ex ©   (2012-04-05 15:36) [0]

Задача: на TFrame реализовать вывод OpenGL картинки.

- Сам TFrame окном не является. У него нету ни onCreate ни onPaint. И(самое главное) нет HWND из которого можно было бы получить HDC для инициализации OGL. onCreate в итоге я получил перекрыв конструктор. Но не уверен, что это верное решение.

- Логично разместить какой нибудь TPaintBox и рисовать на нем! Однако: TPaintBox меняет HDC каждый раз при возникновении события WM_PAINT. Надо бы установить CS_OWNDC и получить хэндл самостоятельно... Но у TPaintBox нету HWND.

- Пробуем TPanel. делаю наследника. Создаю ему обработчик WM_PAINT и через CreateParams выставляю CS_OWNDC. Результат: onPaint дергается постоянно, даже если окно не меняется. Ничего не рисуется. Может быть надо

Поэтому и пишу сюда. Господа! Как правильно выводить OGL графику на TFrame??


 
@!!ex ©   (2012-04-05 15:57) [1]

Проблема в создании OGL контекста в конструкторе TFrame.
Надо у фрейма делать отдельно InitGL метод и вызываеть его в конструкторе формы, на которой находится фрейм.
Тогда все работает.

Осталась проблема с перерисовкой.
у меня WM_PAINT на фрейм приходит постоянно. не знаю почему.


 
Ega23 ©   (2012-04-05 15:59) [2]


>  Но у TPaintBox нету HWND.


Но у него есть Canvas


 
@!!ex ©   (2012-04-06 17:32) [3]


> Но у него есть Canvas

И это никак не помогает в ситуации использования OpenGL.

Фреймы не нужны. делаем форму, BorderStyle=bsNone, помещаем ее куда нужно. И никаких фреймов, все возможности формы доступны.
Минусов два:
1) Только один экземпляр. Несколько и не нужно.
2) В дизайн тайме нельзя разместить. Не значительный минус. Все равно кода по прикручиваю OpenGL больше чем кода по перемещению формы.


 
Ega23 ©   (2012-04-06 17:59) [4]


> И это никак не помогает в ситуации использования OpenGL.


У канваса HDC есть. Если чё.


 
Юрий Зотов ©   (2012-04-06 18:13) [5]

> Сам TFrame окном не является.

Насколько помню, TFrame наследуется по цепочке TWinControl. Если так, то окном он является и HWND у него есть.


 
@!!ex ©   (2012-04-06 18:13) [6]


> У канваса HDC есть. Если чё.

Который не контролируемо меняется, если не установить OWNDC.
А установить OWNDC нельзя, потому что нету Handle


 
Юрий Зотов ©   (2012-04-06 18:20) [7]


> @!!ex ©   (06.04.12 18:13) [6]
> нету Handle

Проверьте. Должен быть.


 
DVM ©   (2012-04-06 23:36) [8]


>  потому что нету Handle

У TWinControl далеким потомком которого является TFrame Handle разумеется есть, но свойство protected, в TFrame видимость не повышалась до public, но это можно сделать в потомке Tframe.


 
Юрий Зотов ©   (2012-04-07 11:11) [9]


> @!!ex ©   (05.04.12 15:36)  

Стало быть, задача решается элементарно:

type
 TMyFrame = class(TFrame)
 ...
 public
   property Handle;
 end;


А если есть желание, то можно добавить и свойство Canvas (пример есть в TCustomForm).


 
Дмитрий С ©   (2012-04-08 17:40) [10]

Хелпером можно также


 
Cobalt ©   (2012-04-08 18:08) [11]

Мне отчего-то кажется, что необходимость непосредственно во фрейме нет.
Если отрисовывать надо фон, поверх которого лежат контролы, то вполне подойдет потомок TPanel
А если поверх ничего не лежит, то опять же подойдет потомок TPanel.



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

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

Наверх




Память: 0.49 MB
Время: 0.007 c
15-1426049877
SKIPtr
2015-03-11 07:57
2015.10.25
выполнить действие в зависимости от подключения к интернету


4-1273744194
StriderMan
2010-05-13 13:49
2015.10.25
Ввод с клавиатуры в неактивное окно


15-1426018967
Jeer
2015-03-10 23:22
2015.10.25
Приглашаю друзей..


15-1426109401
Юрий
2015-03-12 00:30
2015.10.25
С днем рождения ! 12 марта 2015 четверг


11-1260545241
tippa
2009-12-11 18:27
2015.10.25
побайтно записать файл из массива