⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 unit1.~pas

📁 经纬球的缩放旋转
💻 ~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 + -