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

Вниз

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

Наверх





Память: 0.47 MB
Время: 0.002 c
15-1426491623
patrick1968
2015-03-16 10:40
2015.10.25
Не работает команда


3-1305619583
Aybolit
2011-05-17 12:06
2015.10.25
SQL в BDE


15-1426195804
Юрий
2015-03-13 00:30
2015.10.25
С днем рождения ! 13 марта 2015 пятница


2-1400840818
rumma
2014-05-23 14:26
2015.10.25
mainmenu popup


15-1425936604
Юрий
2015-03-10 00:30
2015.10.25
С днем рождения ! 10 марта 2015 вторник





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