📄 unit1.~pas
字号:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Menus,OpenGL, ExtCtrls, StdCtrls, ComCtrls;
type
TForm1 = class(TForm)
Panel1: TPanel;
TrackBar1: TTrackBar;
TrackBar2: TTrackBar;
Label1: TLabel;
Label2: TLabel;
TrackBar3: TTrackBar;
Label3: TLabel;
Bevel1: TBevel;
RadioButton1: TRadioButton;
RadioButton2: TRadioButton;
RadioButton3: TRadioButton;
CheckBox1: TCheckBox;
Button1: TButton;
Button2: TButton;
Timer1: TTimer;
Bevel2: TBevel;
procedure FormShow(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure FormPaint(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure TrackBar1Change(Sender: TObject);
procedure TrackBar2Change(Sender: TObject);
procedure TrackBar3Change(Sender: TObject);
procedure CheckBox1Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure RadioButton1Click(Sender: TObject);
procedure RadioButton2Click(Sender: TObject);
procedure RadioButton3Click(Sender: TObject);
private
{ Private declarations }
dc:hdc;
rc:hglrc;
dnum:integer;
k,angle:double;
m_bplay:boolean;
m_bhide:boolean;
m_pattern:integer;
mat:array[0..3] of GLDouble;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormShow(Sender: TObject);
var
pfd:tpixelformatdescriptor;
chosenpixelformat:integer;
begin
dc:=getdc(self.Handle);
fillchar(pfd,sizeof(tpixelformatdescriptor),0);
with pfd do
begin
nsize:=sizeof(tpixelformatdescriptor);
nversion:=1;
dwflags:=pfd_draw_to_window or pfd_support_opengl or pfd_doublebuffer;
ipixeltype:=pfd_type_rgba;
ccolorbits:=24;
cdepthbits:=32;
ilayertype:=pfd_main_plane;
end;
chosenpixelformat:=choosepixelformat(dc,@pfd);
if chosenpixelformat=0 then
raise exception.Create('choosepixelformat failed.');
setpixelformat(dc,chosenpixelformat,@pfd);
rc:=wglcreatecontext(dc);
wglmakecurrent(dc,rc);
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
wglmakecurrent(0,0);
wgldeletecontext(dc);
deleteobject(dc);
end;
procedure TForm1.FormPaint(Sender: TObject);
begin
glclearcolor(1,1,1,1);
glclear(gl_color_buffer_bit);
glcolor3f(127,0,0);
case m_pattern of
1:
glpolygonmode(gl_front_and_back,gl_point);
2:
glpolygonmode(gl_front_and_back,gl_line);
3:
glpolygonmode(gl_front_and_back,gl_fill);
end;
glviewport(100,-50,450,450);
glmatrixmode(gl_modelview);
glclipplane(gl_clip_plane1,@mat[0]);
if m_bhide then
glenable(gl_clip_plane1)
else
glenable(gl_clip_plane1);
glpushmatrix;
gltranslated(0.3,0,0);
glrotatef(45,1,0,0);
glrotatef(angle,0,0,1);
glscalef(k,k,k);
glusphere(glunewquadric,0.6,dnum,dnum);
glpopmatrix;
swapbuffers(dc);
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
if m_bplay then
begin
angle:=angle+1;
if angle=360 then
angle:=0;
invalidate;
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
dnum:=24;
trackbar1.Position:=24;
k:=1;
trackbar2.Position :=10;
angle:=0;
trackbar3.Position:=180;
m_bplay:=false;
radiobutton2.Checked:=true;
m_pattern:=2;
checkbox1.Checked:=true;
m_bhide:=true;
mat[0]:=0;
mat[1]:=0;
mat[2]:=-1;
mat[3]:=0;
controlstyle:=controlstyle+[csopaque];
end;
procedure TForm1.TrackBar1Change(Sender: TObject);
begin
dnum:=trackbar1.Position ;
invalidate;
end;
procedure TForm1.TrackBar2Change(Sender: TObject);
begin
k:=trackbar2.Position/10;
invalidate;
end;
procedure TForm1.TrackBar3Change(Sender: TObject);
begin
angle:=angle+trackbar3.Position -180;
invalidate;
end;
procedure TForm1.CheckBox1Click(Sender: TObject);
begin
m_bhide:=checkbox1.Checked;
invalidate;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
m_bplay:=true;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
m_bplay:=false;
end;
procedure TForm1.RadioButton1Click(Sender: TObject);
begin
if sender=radiobutton1 then
m_pattern:=1 ;
invalidate;
end;
procedure TForm1.RadioButton2Click(Sender: TObject);
begin
if sender=radiobutton2 then
m_pattern:=2;
invalidate;
end;
procedure TForm1.RadioButton3Click(Sender: TObject);
begin
if sender=radiobutton3 then
m_pattern:=3 ;
invalidate;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -