procedure TGLForm.InitForm;
begin
stParams := TStrings.Create;
Perspective := 40.0;
AngleX := 0.0;
AngleY := 0.0;
DC := GetDC(Handle); <<-- вот тут ты его включаешь
SetDCPixelFormat;
hrc := wglCreateContext(DC);
wglMakeCurrent(DC, hrc);
InitializeRC;
InitText;
end;
А вот как можно сделать:
procedure TGLForm.InitDC(Handle: HWND) //Прошлый твой InitForm;
begin
stParams := TStrings.Create;
Perspective := 40.0;
AngleX := 0.0;
AngleY := 0.0;
DC := GetDC(Handle);
SetDCPixelFormat;
hrc := wglCreateContext(DC);
wglMakeCurrent(DC, hrc);
InitializeRC;
InitText;
end;
и как там у тебя
// вызов в наследниках:
...
procedure TfmMap.FormCreate(Sender: TObject);
begin
inherited;
InitDC(Self.Handle) // InitForm;
tMain.Open;
SetLength(arPoint, tMain.RecordCount);
InitMap;
Timer.Enabled := True;
end;
...
где InitDC(Self.Handle) Дескриптор твой формы.
Я бы на твоем месте реализовал (а точнее так и делал раньше) класс в который можно передать HWND любого окна и т.п.
Типа
type
TOpenGLRender = class
.......
hDC: HDC;
hWnd: HWND;
fGLRC: HGLRC;
public
.....
procedure InitDC(hwnd: HWND);
....
end;
А потом:
procedure ....();
var
oglr: TOpenGLRender;
begin
oglr := TOpenGLRender.Create;
oglr.InitDC(Self.Handle);
end;
Не знаю. Может если вставить вместо hwnd 0, то получиться рендерить на рабочем столе?
Have fun!