📄 x_opengl.~pas
字号:
unit X_OpenGL;
{$WARN SYMBOL_PLATFORM OFF}
interface
uses
ComObj, ActiveX,OpenGL,messages,ExtCtrls,UserMsg,SysUtils, StdVcl,X_StdLib_TLB,Forms,Windows;
type
TX_GL = class(TAutoObject, IX_GL)
private
procedure glFormPaint(Sender:TObject);
procedure glFormResize(Sender:TObject);
procedure SetUpRC(handle:integer);
protected
procedure _glClear(mask: Integer); safecall;
procedure _glClearColor(red, green, blue, alpha: Single); safecall;
procedure _glFlush; safecall;
procedure _xglutCreateWindow(const title: WideString); safecall;
procedure _InitGraphicApp(Handle: Integer); safecall;
procedure _xglutDisplayFunc(const f: WideString); safecall;
procedure _xglutMainLoop; safecall;
procedure _glViewport(x, y, width, height: Integer); safecall;
procedure _glMatrixMode(mode: Integer); safecall;
procedure _glLoadIdentity; safecall;
procedure _glOrtho(left, right, bottom, top, zNear, zFar: Integer);
safecall;
procedure _glRectf(x1, y1, x2, y2: Single); safecall;
procedure _xglutReshapeFunc(const f: WideString); safecall;
procedure _SwapBuffers; safecall;
procedure _glColor3f(red, green, blue: Single); safecall;
procedure _glPushMatrix; safecall;
procedure _glRotatef(angle, x, y, z: Single); safecall;
procedure _glBegin(mode: Integer); safecall;
procedure _glEnd; safecall;
procedure _glPopMatrix; safecall;
procedure _glVertex3f(x, y, z: Single); safecall;
{ Protected declarations }
end;
var
glForm:TForm=nil; //主窗体对象
timer:Ttimer=nil;
AppHandle:Integer;
implementation
uses ComServ;
procedure TX_GL._glClear(mask: Integer);
begin
glClear(mask);
end;
procedure TX_GL._glClearColor(red, green, blue, alpha: Single);
begin
glClearColor(red, green, blue, alpha);
end;
procedure TX_GL._glFlush;
begin
glFlush;
end;
procedure TX_GL._xglutCreateWindow(const title: WideString);
begin
if not assigned(glForm) then
begin
glForm:=TForm.create(nil);
timer:=Ttimer.Create(glform);
SetUpRC(glform.Handle);
end;
glForm.caption:=title;
// glForm.OnPaint:=glFormPaint;
// glForm.OnResize:=glFormResize;
timer.Enabled:=false;
timer.Interval:=1;
// timer.OnTimer:=glFormPaint;
glForm.show;
end;
procedure TX_GL.glFormPaint(Sender:TObject);
begin
Sendmessage(AppHandle,cardinal(WM_GLFORMPAINT),0,0);
end;
procedure TX_GL._InitGraphicApp(Handle: Integer);
begin
AppHandle:=Handle;
end;
procedure TX_GL._xglutDisplayFunc(const f: WideString); //
var ds: TCopyDataStruct;
s:string;
begin
glForm.OnPaint:=glFormPaint;
s:=f;
ds.dwData:=0;
ds.cbData := Length(s) + 1;
GetMem(ds.lpData, ds.cbData); //为传递的数据区分配内存
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -