-
imp (24.09.10 09:41) [0]Создаю компонент, наследник TPanel, на котором должно быть окно
OpenGL.
constructor TClassName.Create(AOwner:TWinControl);
begin
inherited Create(AOwner);
DC := GetDC(Handle);
SetDCPixelFormat;
hrc := wglCreateContext(DC);
wglMakeCurrent(DC, hrc);
wglUseFontBitmaps (DC, 0, 255, GLF_START_LIST);
glSelectBuffer(sizeof(selectBuffer), @selectBuffer);
glClearColor (0.0, 0.0, 0.0, 1.0); // цвет фона
end;
ОДНАКО, Handle = 0 !!!!!!!!!!!!!!!!!!!!
Вопрос: КАК ЭТО ИСПРАВИТЬ.
PS. Подскажите где можно прочитать о механизме присвоения и создания Handle-компонентов в фОРТОЧКАХ. -
DC := GetDC(Handle);
МожетDC := GetDC(Canvas.Handle);
? -
Дрон (28.09.10 12:38) [2]Canvas.Handle это уже HDC, к нему неприменимо GetDC.
-
Дрон (28.09.10 12:45) [3]> imp (24.09.10 09:41)
Пока не присвоен Parent, нет никакого Handle. -
Чайник © (03.11.10 21:54) [4]Все, что связано с подключением OpenGL поместить в обработчик сообщения WM_CREATE, соответственно освобождение ресурсов - WM_DESTROY.
То есть, в секции Private должны быть созданы процедуры
procedure WMCreate(var msg : TMessage); message WM_CREATE;
procedure WMDestroy(var msg : TMessage); message WM_DESTROY;
По крайней мере у меня так работает. -
CrytoGen (04.11.10 07:51) [5]DC := GetDC(AOwner.Handle)
-
Чайник © (05.11.10 02:18) [6]
> DC := GetDC(AOwner.Handle)
В этом случае контекстом воспроизведения OpenGL станет не окно компонента, а окно владельца, соответственно весь вывод будет направлен туда.