Форум: "Основная";
Текущий архив: 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