From: Kamil K. <kkr...@us...> - 2001-08-08 20:20:37
|
Update of /cvsroot/pythianproject/PythianProject/Source/glPanel In directory usw-pr-cvs1:/tmp/cvs-serv17649 Added Files: GLDEMO.DOF GLDEMO.DPR GLDEMO.RES GLPANEL.DCR GLPanel.pas GLUNIT.DFM GLUNIT.PAS glPanelPkg.cfg glPanelPkg.dof glPanelPkg.dpk glPanelPkg.res Log Message: kk ... everything --- NEW FILE --- [Compiler] A=1 B=0 C=0 D=1 E=0 F=0 G=1 H=1 I=1 J=1 K=0 L=1 M=0 N=1 O=1 P=1 Q=0 R=0 S=0 T=0 U=0 V=1 W=0 X=1 Y=0 Z=1 ShowHints=0 ShowWarnings=0 UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; [Linker] MapFile=0 OutputObjs=0 ConsoleApp=1 DebugInfo=0 MinStackSize=16384 MaxStackSize=1048576 ImageBase=4194304 ExeDescription= [Directories] OutputDir= SearchPath= Conditionals= [Parameters] RunParams= --- NEW FILE --- ///////////////////////////////////////////////////////////////////////// // Industrial Software Solutions // 4205 Hideaway // Arlington, Texas 76017 // Mitchell E. James // May 18, 1996 // mj...@cy... // http://www.cyberhighway.net/~mjames/ program gldemo; uses Forms, GLUnit in 'GLUnit.pas' {Form1}; {$R *.RES} begin Application.Initialize; Application.CreateForm(TForm1, Form1); Application.Run; end. --- NEW FILE --- --- NEW FILE --- --- NEW FILE --- ///////////////////////////////////////////////////////////////////////// // Industrial Software Solutions // 4205 Hideaway // Arlington, Texas 76017 // Mitchell E. James // May 18, 1996 // mj...@cy... // http://www.cyberhighway.net/~mjames/ // note: When running under the Delphi 2.0 debugger the Windows GL subsystem errors out randomly. // note: The Windows GL subsystem seems to work fine running Delphi GL executables. // note: I haven't been running with a palette. Not sure if that works. unit GLPanel; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, OpenGL, ExtCtrls; type TPFDPixelType = (GLp_TYPE_RGBA, GLp_TYPE_COLORINDEX); TPFDLayerType = (GLL_MAIN_PLANE, GLL_OVERLAY_PLANE, GLL_UNDERLAY_PLANE); // PIXELFORMATDESCRIPTOR flags TPFDFlag = (GLf_DOUBLEBUFFER, GLf_STEREO, GLf_DRAW_TO_WINDOW, GLf_DRAW_TO_BITMAP, GLf_SUPPORT_GDI, GLf_SUPPORT_OPENGL, GLf_GENERIC_FORMAT, GLf_NEED_PALETTE, GLf_NEED_SYSTEM_PALETTE, GLf_SWAP_EXCHANGE, GLf_SWAP_COPY); TPFDPixelTypes = set of TPFDPixelType; TPFDLayerTypes = set of TPFDLayerType; TPFDFlags = set of TPFDFlag; TGLPanel = class(TCustomPanel) private DC: HDC; hrc: HGLRC; Palette: HPALETTE; FFirstTimeInFlag: Boolean; FPFDChanged: Boolean; FPixelType: TPFDPixelTypes; FLayerType: TPFDLayerTypes; FFlags: TPFDFlags; GPixelType: Word; GLayerType: Cardinal; GFlags: Word; FColorBits: Cardinal; FDepthBits: Cardinal; FOnGLDraw: TNotifyEvent; // pointer to users routine of GL draw commands FOnGLInit: TNotifyEvent; // pointer to users routine for GL initialization FOnGLPrep: TNotifyEvent; // pointer to users routine for static setup procedure ResetFlags (Value: TPFDFlags); procedure ResetPixelType (Value: TPFDPixelTypes); procedure ResetLayerType (Value: TPFDLayerTypes); procedure SetDCPixelFormat; procedure NewPaint; protected procedure CheckCurrent; function GetFlags : TPFDFlags; function GetPixelType: TPFDPixelTypes; function GetLayerType: TPFDLayerTypes; function GetColorBits: Cardinal; function GetDepthBits: Cardinal; procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override; procedure MouseMove(Shift: TShiftState; X, Y: Integer); override; procedure MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override; procedure Paint; override; procedure Resize; override; procedure SetFlags (Value: TPFDFlags); procedure SetPixelType (Value: TPFDPixelTypes); procedure SetLayerType (Value: TPFDLayerTypes); procedure SetColorBits (Value: Cardinal); procedure SetDepthBits (Value: Cardinal); public constructor Create(AOwner: TComponent); override; destructor Destroy; override; procedure GLReDraw; procedure NewGLPrep; published property Align; property Alignment; // property BevelInner; // property BevelOuter; // property BevelWidth; // property BorderWidth; // property BorderStyle; property DragCursor; property DragMode; property Enabled; // property Caption; // property Color; property GLColorBits: Cardinal read GetColorBits write SetColorBits default 24; // property Ctl3D; property GLDepthBits: Cardinal read GetDepthBits write SetDepthBits default 32; property GLFlags: TPFDFlags read Getflags write SetFlags default [GLf_DRAW_TO_WINDOW , GLf_SUPPORT_OPENGL]; // property Font; property GLLayerType: TPFDLayerTypes read GetLayerType write SetLayerType default [GLL_MAIN_PLANE]; property Locked; // property ParentColor; // property ParentCtl3D; // property ParentFont; property ParentShowHint; property GLPixelType: TPFDPixelTypes read GetPixelType write SetPixelType default [GLp_TYPE_RGBA]; property PopupMenu; property ShowHint; property TabOrder; property TabStop; property Visible; property OnClick; property OnDblClick; property OnDragDrop; property OnDragOver; property OnEndDrag; property OnEnter; property OnExit; property OnMouseDown; property OnMouseMove; property OnMouseUp; property OnResize; property OnStartDrag; property OnGLDraw: TNotifyEvent read FOnGLDraw write FOnGLDraw; property OnGLInit: TNotifyEvent read FOnGLInit write FOnGLInit; property OnGLPrep: TNotifyEvent read FOnGLPrep write FOnGLPrep; end; procedure Register; implementation procedure TGLPanel.CheckCurrent; begin if (wglGetCurrentContext <> hrc) then begin wglMakeCurrent(DC, hrc); if Assigned(OnGLPrep) then OnGLPrep(self); end; end; procedure TGLPanel.Resize; begin CheckCurrent; inherited Resize; if Assigned(OnResize) then OnResize(self); end; procedure TGLPanel.SetDCPixelFormat; var hHeap: THandle; nColors, i: Integer; lpPalette: PLogPalette; byRedMask, byGreenMask, byBlueMask: Byte; nPixelFormat: Integer; pfd: TPixelFormatDescriptor; begin FillChar(pfd, SizeOf(pfd), 0); with pfd do begin nSize := sizeof(pfd); // Size of this structure nVersion := 1; // Version number dwFlags := GFlags; // Flags iPixelType:= GPixelType; // RGBA pixel values cColorBits:= FColorBits; // 24-bit color cDepthBits:= FDepthBits; // 32-bit depth buffer iLayerType:= GLayerType; // Layer type end; nPixelFormat := ChoosePixelFormat(DC, @pfd); SetPixelFormat(DC, nPixelFormat, @pfd); DescribePixelFormat(DC, nPixelFormat, sizeof(TPixelFormatDescriptor), pfd); if ((pfd.dwFlags and PFD_NEED_PALETTE) <> 0) then begin nColors := 1 shl pfd.cColorBits; hHeap := GetProcessHeap; lpPalette := HeapAlloc(hHeap, 0, sizeof(TLogPalette) + (nColors * sizeof(TPaletteEntry))); lpPalette^.palVersion := $300; lpPalette^.palNumEntries := nColors; byRedMask := (1 shl pfd.cRedBits) - 1; byGreenMask := (1 shl pfd.cGreenBits) - 1; byBlueMask := (1 shl pfd.cBlueBits) - 1; for i := 0 to nColors - 1 do begin lpPalette^.palPalEntry[i].peRed := (((i shr pfd.cRedShift) and byRedMask) * 255) DIV byRedMask; lpPalette^.palPalEntry[i].peGreen := (((i shr pfd.cGreenShift) and byGreenMask) * 255) DIV byGreenMask; lpPalette^.palPalEntry[i].peBlue := (((i shr pfd.cBlueShift) and byBlueMask) * 255) DIV byBlueMask; lpPalette^.palPalEntry[i].peFlags := 0; end; Palette := CreatePalette(lpPalette^); HeapFree(hHeap, 0, lpPalette); if (Palette <> 0) then begin SelectPalette(DC, Palette, False); RealizePalette(DC); end; end; end; procedure TGLPanel.ResetFlags (Value: TPFDFlags); begin GFlags := 0; if GLf_DOUBLEBUFFER in Value then GFlags := GFlags or PFD_DOUBLEBUFFER; if GLf_STEREO in Value then GFlags := GFlags or PFD_STEREO; if GLf_DRAW_TO_WINDOW in Value then GFlags := GFlags or PFD_DRAW_TO_WINDOW; if GLf_DRAW_TO_BITMAP in Value then GFlags := GFlags or PFD_DRAW_TO_BITMAP; if GLf_SUPPORT_GDI in Value then GFlags := GFlags or PFD_SUPPORT_GDI; if GLf_SUPPORT_OPENGL in Value then GFlags := GFlags or PFD_SUPPORT_OPENGL; if GLf_GENERIC_FORMAT in Value then GFlags := GFlags or PFD_GENERIC_FORMAT; if GLf_NEED_PALETTE in Value then GFlags := GFlags or PFD_NEED_PALETTE; if GLf_NEED_SYSTEM_PALETTE in Value then GFlags := GFlags or PFD_NEED_SYSTEM_PALETTE; if GLf_SWAP_EXCHANGE in Value then GFlags := GFlags or PFD_SWAP_EXCHANGE; if GLf_SWAP_COPY in Value then GFlags := GFlags or PFD_SWAP_COPY; end; procedure TGLPanel.ResetPixelType (Value: TPFDPixelTypes); begin if GLp_TYPE_RGBA in Value then GPixelType := PFD_TYPE_RGBA; if GLp_TYPE_COLORINDEX in Value then GPixelType := PFD_TYPE_COLORINDEX; end; procedure TGLPanel.ResetLayerType (Value: TPFDLayerTypes); begin if GLL_MAIN_PLANE in Value then GLayerType := PFD_MAIN_PLANE; if GLL_OVERLAY_PLANE in Value then GLayerType := PFD_OVERLAY_PLANE; if GLL_UNDERLAY_PLANE in Value then GLayerType := PFD_UNDERLAY_PLANE; end; procedure TGLPanel.SetFlags(Value: TPFDFlags); begin if FFlags <> Value then begin FFlags := Value; if not (csDesigning in ComponentState) then begin ResetFlags (Value); FPFDChanged := True; end; end; end; procedure TGLPanel.SetPixelType (Value: TPFDPixelTypes); begin if FPixelType <> Value then begin FPixelType := Value; if not (csDesigning in ComponentState) then begin ResetPixelType (Value); FPFDChanged := True; end; end; end; procedure TGLPanel.SetLayerType (Value: TPFDLayerTypes); begin if FLayerType <> Value then begin FLayerType := Value; if not (csDesigning in ComponentState) then begin ResetLayerType (Value); FPFDChanged := True; end; end; end; procedure TGLPanel.SetColorBits (Value: Cardinal); begin FColorBits := Value; end; procedure TGLPanel.SetDepthBits (Value: Cardinal); begin FDepthBits := Value; end; function TGLPanel.GetFlags : TPFDFlags; begin GetFlags := FFlags; end; function TGLPanel.GetPixelType: TPFDPixelTypes; begin GetPixelType := FPixelType; end; function TGLPanel.GetLayerType: TPFDLayerTypes; begin GetLayerType := FLayerType; end; function TGLPanel.GetColorBits: Cardinal; begin GetColorBits := FColorBits; end; function TGLPanel.GetDepthBits: Cardinal; begin GetDepthBits := FDepthBits; end; procedure TGLPanel.Paint; begin end; procedure TGLPanel.NewGLPrep; begin if Assigned(OnGLPrep) then OnGLPrep(self); if Assigned(OnResize) then OnResize(self); end; procedure TGLPanel.NewPaint; var ps : TPaintStruct; begin // inherited; if not (csDesigning in ComponentState) then begin // Draw the scene. if FPFDChanged then SetDCPixelFormat; if FFirstTimeInFlag then begin FFirstTimeInFlag := False; // Create a rendering context. InitOpenGL; {If you get a compile error on this} DC := GetDC(Handle); {line, you need to go in to the} SetDCPixelFormat; {delphi5\source\rtl\win\ folder and} hrc := wglCreateContext(DC); {rename opengl.pas to opengl_old.pas} {and delete the delphi5\lib\opengl.dcu} CheckCurrent; {Also, make sure the pythian } {source\units is in your lib path} if Assigned(OnGLInit) then OnGlInit(self); { if Assigned(OnGLPrep) then OnGLPrep(self); if Assigned(OnResize) then OnResize(self);} end else CheckCurrent; BeginPaint(Handle, ps); if Assigned(OnGLDraw) then OnGLDraw(self); if GLf_DOUBLEBUFFER in FFlags then SwapBuffers(DC); EndPaint(Handle, ps); end; end; constructor TGLPanel.Create(AOwner: TComponent); begin inherited Create(AOwner); FPFDChanged := False; FPixelType := [GLp_TYPE_RGBA]; FFlags := [GLf_DRAW_TO_WINDOW, GLf_SUPPORT_OPENGL, GLf_DOUBLEBUFFER]; FLayerType := [GLL_MAIN_PLANE]; FColorBits := 24; FDepthBits := 32; ResetFlags(FFlags); ResetPixelType(FPixelType); ResetLayerType(FLayerType); FFirstTimeInFlag := True; end; destructor TGLPanel.Destroy; begin if not (csDesigning in ComponentState) then begin // Clean up and terminate. IF not(FFirstTimeInFlag) then begin wglMakeCurrent(0, 0); wglDeleteContext(hrc); end; if (Palette <> 0) then DeleteObject(Palette); end; inherited; end; procedure TGLPanel.GLReDraw; begin NewPaint; end; procedure TGLPanel.MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin CheckCurrent; inherited; end; procedure TGLPanel.MouseMove(Shift: TShiftState; X, Y: Integer); begin CheckCurrent; inherited; end; procedure TGLPanel.MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin CheckCurrent; inherited; end; procedure Register; begin RegisterComponents('Pythian', [TGLPanel]); end; end. --- NEW FILE --- ÿ Font.ColorclWindowTextFont.Heightõ Font.Name MS Sans Serif Font.Style TextHeight Font.ColorclMaroonFont.Heightí Font.NameArial Font.StylefsBoldfsItalic ParentFont Font.ColorclMaroonFont.Heightí Font.NameArial Font.StylefsBoldfsItalic ParentFont Font.ColorclMaroonFont.Heightí Font.NameArial Font.StylefsBoldfsItalic ParentFont --- NEW FILE --- ///////////////////////////////////////////////////////////////////////// // Industrial Software Solutions // 4205 Hideaway // Arlington, Texas 76017 // Mitchell E. James // May 18, 1996 // mj...@cy... // http://www.cyberhighway.net/~mjames/ unit GLUnit; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, ComCtrls, Gl, Glu, StdCtrls, GLPanel; const DRAWCUBE = 1; type TForm1 = class(TForm) Panel1: TPanel; Panel2: TPanel; Panel3: TPanel; Panel4: TPanel; Timer1: TTimer; TrackBar1: TTrackBar; Label1: TLabel; Label2: TLabel; Label3: TLabel; Label4: TLabel; Label5: TLabel; GLPanel1: TGLPanel; procedure GLPanel1GLDraw(Sender: TObject); procedure Timer1Timer(Sender: TObject); procedure TrackBar1Change(Sender: TObject); procedure GLPanel1GLInit(Sender: TObject); procedure GLPanel1GLPrep(Sender: TObject); procedure SetProjection(Sender: TObject); private { Private declarations } Angle: GLfloat; public { Public declarations } end; var Form1: TForm1; implementation {$R *.DFM} procedure TForm1.GLPanel1GLDraw(Sender: TObject); var i, j, k: GLdouble; begin // // Clear the color and depth buffers. // glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT); // // Define the modelview transformation. // glMatrixMode(GL_MODELVIEW); glLoadIdentity; glTranslatef(0.0, 0.0, -32.0); glRotatef(30.0, 1.0, 0.0, 0.0); glRotatef(Angle, 0.0, 1.0, 0.0); // // Draw a three-dimensional array of cubes. // i := -3.0; while (i <= 3.0) do begin j := -3.0; while (j <= 3.0) do begin k := -3.0; while (k <= 3.0) do begin glPushMatrix; glTranslatef(i, j, k); glCallList(DRAWCUBE); glPopMatrix; k := k + 3.0; end; j := j + 3.0; end; i := i + 3.0; end; end; procedure TForm1.Timer1Timer(Sender: TObject); begin Angle := Angle + 2.0; if (Angle >= 90.0) then Angle := 0.0; Label1.Caption := FloatToStr(Timer1.Interval); GLPanel1.GLReDraw; end; procedure TForm1.TrackBar1Change(Sender: TObject); begin Timer1.Interval := TrackBar1.Position * 10; end; procedure TForm1.GLPanel1GLInit(Sender: TObject); const glfLightAmbient : Array[0..3] of GLfloat = (0.1, 0.1, 0.1, 1.0); glfLightDiffuse : Array[0..3] of GLfloat = (0.7, 0.7, 0.7, 1.0); glfLightSpecular: Array[0..3] of GLfloat = (0.0, 0.0, 0.0, 1.0); begin // // Enable depth testing and backface culling. // glEnable(GL_DEPTH_TEST); glEnable(GL_CULL_FACE); Timer1.Interval := TrackBar1.Position * 10; // // Add a light to the scene. // glLightfv(GL_LIGHT0, GL_AMBIENT, @glfLightAmbient); glLightfv(GL_LIGHT0, GL_DIFFUSE, @glfLightDiffuse); glLightfv(GL_LIGHT0, GL_SPECULAR,@glfLightSpecular); glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); end; procedure TForm1.SetProjection(Sender: TObject); var gldAspect : GLdouble; begin // Redefine the viewing volume and viewport when the window size changes. gldAspect := GLPanel1.Width / GLPanel1.Height; glMatrixMode(GL_PROJECTION); glLoadIdentity; gluPerspective(30.0, // Field-of-view angle gldAspect, // Aspect ratio of viewing volume 1.0, // Distance to near clipping plane 100.0); // Distance to far clipping plane glViewport(0, 0, GLPanel1.Width, GLPanel1.Height); InvalidateRect(Handle, nil, False); end; procedure TForm1.GLPanel1GLPrep(Sender: TObject); const glfMaterialColor: Array[0..3] of GLfloat = (0.0, 0.0, 1.0, 1.0); begin glNewList(DRAWCUBE, GL_COMPILE); // // Define the reflective properties of the cube's faces. // glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, @glfMaterialColor); // // Draw the six faces of the cube. // glBegin(GL_POLYGON); glNormal3f(0.0, 0.0, 1.0); glVertex3f(1.0, 1.0, 1.0); glVertex3f(-1.0, 1.0, 1.0); glVertex3f(-1.0, -1.0, 1.0); glVertex3f(1.0, -1.0, 1.0); glEnd; glBegin(GL_POLYGON); glNormal3f(0.0, 0.0, -1.0); glVertex3f(1.0, 1.0, -1.0); glVertex3f(1.0, -1.0, -1.0); glVertex3f(-1.0, -1.0, -1.0); glVertex3f(-1.0, 1.0, -1.0); glEnd; glBegin(GL_POLYGON); glNormal3f(-1.0, 0.0, 0.0); glVertex3f(-1.0, 1.0, 1.0); glVertex3f(-1.0, 1.0, -1.0); glVertex3f(-1.0, -1.0, -1.0); glVertex3f(-1.0, -1.0, 1.0); glEnd; glBegin(GL_POLYGON); glNormal3f(1.0, 0.0, 0.0); glVertex3f(1.0, 1.0, 1.0); glVertex3f(1.0, -1.0, 1.0); glVertex3f(1.0, -1.0, -1.0); glVertex3f(1.0, 1.0, -1.0); glEnd; glBegin(GL_POLYGON); glNormal3f(0.0, 1.0, 0.0); glVertex3f(-1.0, 1.0, -1.0); glVertex3f(-1.0, 1.0, 1.0); glVertex3f(1.0, 1.0, 1.0); glVertex3f(1.0, 1.0, -1.0); glEnd; glBegin(GL_POLYGON); glNormal3f(0.0, -1.0, 0.0); glVertex3f(-1.0, -1.0, -1.0); glVertex3f(1.0, -1.0, -1.0); glVertex3f(1.0, -1.0, 1.0); glVertex3f(-1.0, -1.0, 1.0); glEnd; glEndList (); end; end. --- NEW FILE --- -$A+ -$B- -$C+ -$D+ -$E- -$F- -$G+ -$H+ -$I- -$J+ -$K- -$L+ -$M- -$N+ -$O+ -$P+ -$Q- -$R- -$S- -$T- -$U- -$V+ -$W- -$X+ -$YD -$Z1 -cg -AWinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; -H+ -W+ -M -$M16384,1048576 -K$00400000 -LNe:\program files\borland\delphi4\Lib -Z --- NEW FILE --- [Compiler] A=1 B=0 C=1 D=1 E=0 F=0 G=1 H=1 I=0 J=1 K=0 L=1 M=0 N=1 O=1 P=1 Q=0 R=0 S=0 T=0 U=0 V=1 W=0 X=1 Y=1 Z=1 ShowHints=1 ShowWarnings=1 UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; [Linker] MapFile=0 OutputObjs=0 ConsoleApp=1 DebugInfo=0 RemoteSymbols=0 MinStackSize=16384 MaxStackSize=1048576 ImageBase=4194304 ExeDescription= [Directories] OutputDir= UnitOutputDir= PackageDLLOutputDir= PackageDCPOutputDir= SearchPath= Packages= Conditionals= DebugSourceDirs= UsePackages=0 [Parameters] RunParams= HostApplication= [Version Info] IncludeVerInfo=1 AutoIncBuild=0 MajorVer=1 MinorVer=0 Release=0 Build=0 Debug=0 PreRelease=0 Special=0 Private=0 DLL=0 Locale=1033 CodePage=1252 [Version Info Keys] CompanyName= FileDescription= FileVersion=1.0.0.0 InternalName= LegalCopyright= LegalTrademarks= OriginalFilename= ProductName= ProductVersion=1.0.0.0 Comments= --- NEW FILE --- package glPanelPkg; {$R *.RES} {$R 'Glpanel.dcr'} {$ALIGN ON} {$ASSERTIONS ON} {$BOOLEVAL OFF} {$DEBUGINFO ON} {$EXTENDEDSYNTAX ON} {$IMPORTEDDATA ON} {$IOCHECKS OFF} {$LOCALSYMBOLS ON} {$LONGSTRINGS ON} {$OPENSTRINGS ON} {$OPTIMIZATION ON} {$OVERFLOWCHECKS OFF} {$RANGECHECKS OFF} {$REFERENCEINFO ON} {$SAFEDIVIDE OFF} {$STACKFRAMES OFF} {$TYPEDADDRESS OFF} {$VARSTRINGCHECKS ON} {$WRITEABLECONST ON} {$MINENUMSIZE 1} {$IMAGEBASE $400000} {$IMPLICITBUILD OFF} requires vcl40; contains GLPanel in 'Glpanel.pas'; end. --- NEW FILE --- |