Class TCastleControl

Unit

Declaration

type TCastleControl = class(TCustomOpenGLControl)

Description

Control to render everything (3D or 2D) with Castle Game Engine.

See https://castle-engine.io/control_on_form for a documentation how to use this.

You can use this with TCastleView, following https://castle-engine.io/control_on_form instructions. In this case, all user interface creation and event handling should be inside some view.

You can also add any user-interface controls to the Controls property. User-interface controls are any TCastleUserInterface descendants, like TCastleImageControl or TCastleButton or TCastleViewport. Use their events like TCastleUserInterface.OnPress to react to input. Use event TCastleUserInterface.OnUpdate to do something continuously.

By default, the control is filled with simple color from Container.BackgroundColor.

This control is an alternative to rendering things using TCastleWindow. Note that you cannot use both TCastleControl and TCastleWindow within the same application.

Hierarchy

  • TObject
  • TPersistent
  • TComponent
  • TLCLComponent
  • TControl
  • TWinControl
  • TCustomOpenGLControl
  • TCastleControl

Overview

Fields

Public class var MainControl: TCastleControl deprecated 'this should no longer be useful, if you change views using MyControl.Container.View := .. or MyControl.Container.PushView(...)';

Methods

Protected procedure DestroyHandle; override;
Protected procedure DoExit; override;
Protected procedure Resize; override;
Protected procedure KeyDown(var Key: Word; Shift: TShiftState); override;
Protected procedure UTF8KeyPress(var UTF8Key: TUTF8Char); override;
Protected procedure KeyUp(var Key: Word; Shift: TShiftState); override;
Protected procedure MouseDown(Button: Controls.TMouseButton; Shift:TShiftState; X,Y:Integer); override;
Protected procedure MouseUp(Button: Controls.TMouseButton; Shift:TShiftState; X,Y:Integer); override;
Protected procedure MouseMove(Shift: TShiftState; NewX, NewY: Integer); override;
Protected function DoMouseWheel(Shift: TShiftState; WheelDelta: Integer; MousePos: TPoint): Boolean; override;
Protected procedure DoUpdate; virtual;
Public constructor Create(AOwner: TComponent); override;
Public destructor Destroy; override;
Public function Controls: TInternalChildrenControls;
Public function MakeCurrent(SaveOldToStack: boolean = false): boolean; override;
Public procedure Invalidate; override;
Public procedure Paint; override;
Public function Pressed: TKeysPressed; deprecated 'use Container.Pressed';
Public function MousePressed: TCastleMouseButtons; deprecated 'use Container.MousePressed';
Public procedure ReleaseAllKeysAndMouse;
Public function Fps: TFramesPerSecond; deprecated 'use Container.Fps';
Public procedure SaveScreen(const Url: String); overload; deprecated 'use Container.SaveScreen';
Public function SaveScreen: TRGBImage; overload; deprecated 'use Container.SaveScreen';
Public function SaveScreen(const SaveRect: TRectangle): TRGBImage; overload; deprecated 'use Container.SaveScreen';
Public function SaveScreenBuffer: TColorBuffer;
Public function Rect: TRectangle;
Public function DesignedComponent(const ComponentName: String): TComponent; deprecated 'use Container.DesignedComponent';

Properties

Protected property GLInitialized: boolean read FGLInitialized;
Public property MousePosition: TVector2 read GetMousePosition write SetMousePosition; deprecated 'use Container.MousePosition';
Published property Align;
Published property Anchors;
Published property BorderSpacing;
Published property Enabled;
Published property OpenGLMajorVersion;
Published property OpenGLMinorVersion;
Published property MultiSampling;
Published property AlphaBits;
Published property DepthBits;
Published property StencilBits default DefaultStencilBits;
Published property AUXBuffers;
Published property Options;
Published property OnChangeBounds;
Published property OnConstrainedResize;
Published property OnDblClick;
Published property OnDragDrop;
Published property OnDragOver;
Published property OnEnter;
Published property OnExit;
Published property OnMouseEnter;
Published property OnMouseLeave;
Published property OnShowHint;
Published property PopupMenu;
Published property ShowHint;
Published property Visible;
Published property TabOrder;
Published property TabStop default true;
Published property AutoFocus: Boolean read FAutoFocus write FAutoFocus default false;
Published property Container: TCastleControlContainer read FContainer;
Published property AutoRedisplay: boolean read FAutoRedisplay write SetAutoRedisplay default true;
Published property DesignUrl: String read GetDesignUrl write SetDesignUrl stored false; deprecated 'use Container.DesignUrl';

Description

Fields

Public class var MainControl: TCastleControl deprecated 'this should no longer be useful, if you change views using MyControl.Container.View := .. or MyControl.Container.PushView(...)';

Warning: this symbol is deprecated: this should no longer be useful, if you change views using MyControl.Container.View := .. or MyControl.Container.PushView(...)

Central control.

This is only important now if you use deprecated way of setting TCastleView, using class properties/methods TCastleView.Current, TCastleView.Push. If instead you use new way of setting TCastleView, using container properties/methods TCastleContainer.Current, TCastleContainer.Push, then this value isn't useful.

This means that in new applications, you probably have no need to set this value.

Methods

Protected procedure DestroyHandle; override;

This item has no description.

Protected procedure DoExit; override;

This item has no description.

Protected procedure Resize; override;

This item has no description.

Protected procedure KeyDown(var Key: Word; Shift: TShiftState); override;

This item has no description.

Protected procedure UTF8KeyPress(var UTF8Key: TUTF8Char); override;

This item has no description.

Protected procedure KeyUp(var Key: Word; Shift: TShiftState); override;

This item has no description.

Protected procedure MouseDown(Button: Controls.TMouseButton; Shift:TShiftState; X,Y:Integer); override;

This item has no description.

Protected procedure MouseUp(Button: Controls.TMouseButton; Shift:TShiftState; X,Y:Integer); override;

This item has no description.

Protected procedure MouseMove(Shift: TShiftState; NewX, NewY: Integer); override;

This item has no description.

Protected function DoMouseWheel(Shift: TShiftState; WheelDelta: Integer; MousePos: TPoint): Boolean; override;

This item has no description.

Protected procedure DoUpdate; virtual;

This item has no description.

Public constructor Create(AOwner: TComponent); override;

This item has no description.

Public destructor Destroy; override;

This item has no description.

Public function Controls: TInternalChildrenControls;

List of user-interface controls currently active. You can add your TCastleUserInterface instances (like TCastleViewport, TCastleButton and much more) to this list. We will pass events to these controls, draw them etc. See TCastleContainer.Controls for details.

Public function MakeCurrent(SaveOldToStack: boolean = false): boolean; override;

This item has no description.

Public procedure Invalidate; override;

This item has no description.

Public procedure Paint; override;

This item has no description.

Public function Pressed: TKeysPressed; deprecated 'use Container.Pressed';

Warning: this symbol is deprecated: use Container.Pressed

Keys currently pressed.

Public function MousePressed: TCastleMouseButtons; deprecated 'use Container.MousePressed';

Warning: this symbol is deprecated: use Container.MousePressed

This item has no description.

Public procedure ReleaseAllKeysAndMouse;

This item has no description.

Public function Fps: TFramesPerSecond; deprecated 'use Container.Fps';

Warning: this symbol is deprecated: use Container.Fps

Application speed.

Public procedure SaveScreen(const Url: String); overload; deprecated 'use Container.SaveScreen';

Warning: this symbol is deprecated: use Container.SaveScreen

Capture the current control contents to an image.

Public function SaveScreen: TRGBImage; overload; deprecated 'use Container.SaveScreen';

Warning: this symbol is deprecated: use Container.SaveScreen

This item has no description.

Public function SaveScreen(const SaveRect: TRectangle): TRGBImage; overload; deprecated 'use Container.SaveScreen';

Warning: this symbol is deprecated: use Container.SaveScreen

This item has no description.

Public function SaveScreenBuffer: TColorBuffer;

Color buffer where we draw, and from which it makes sense to grab pixels. Use only if you save the screen using low-level SaveScreen_NoFlush function. Usually, you should save the screen using the simpler SaveScreen method, and then the SaveScreenBuffer is not useful.

Public function Rect: TRectangle;

Rectangle representing the inside of this container. Always (Left,Bottom) are zero, and (Width,Height) correspond to container sizes.

Public function DesignedComponent(const ComponentName: String): TComponent; deprecated 'use Container.DesignedComponent';

Warning: this symbol is deprecated: use Container.DesignedComponent

This item has no description.

Properties

Protected property GLInitialized: boolean read FGLInitialized;

This item has no description.

Public property MousePosition: TVector2 read GetMousePosition write SetMousePosition; deprecated 'use Container.MousePosition';

Warning: this symbol is deprecated: use Container.MousePosition

Current mouse position. See TTouch.Position for a documentation how this is expressed. Get and set Container.MousePosition instead.

Published property Align;

Be cafeful about comments in the published section. They are picked up and shown automatically by Lazarus Object Inspector, and it has it's own logic, much much dumber than what PasDoc sees. There seems no way to hide comment there.

We publish most, but not all, stuff from inherited TCustomOpenGLControl.

Exceptions: - Don't publish these, as not every widgetset has them: property RedBits; property GreenBits; property BlueBits;

- Don't publish these, as we have our own events for this: property OnResize; property OnClick; property OnKeyDown; property OnKeyPress; property OnKeyUp; property OnMouseDown; property OnMouseMove; property OnMouseUp; property OnMouseWheel; property OnMouseWheelDown; property OnMouseWheelUp; property OnPaint;

- Don't use, engine handles this completely: property OnMakeCurrent; property AutoResizeViewport;

Published property Anchors;

This item has no description.

Published property BorderSpacing;

This item has no description.

Published property Enabled;

This item has no description.

Published property OpenGLMajorVersion;

This item has no description.

Published property OpenGLMinorVersion;

This item has no description.

Published property MultiSampling;

This item has no description.

Published property AlphaBits;

This item has no description.

Published property DepthBits;

This item has no description.

Published property StencilBits default DefaultStencilBits;

This item has no description.

Published property AUXBuffers;

This item has no description.

Published property Options;

This item has no description.

Published property OnChangeBounds;

This item has no description.

Published property OnConstrainedResize;

This item has no description.

Published property OnDblClick;

This item has no description.

Published property OnDragDrop;

This item has no description.

Published property OnDragOver;

This item has no description.

Published property OnEnter;

This item has no description.

Published property OnExit;

This item has no description.

Published property OnMouseEnter;

This item has no description.

Published property OnMouseLeave;

This item has no description.

Published property OnShowHint;

This item has no description.

Published property PopupMenu;

This item has no description.

Published property ShowHint;

This item has no description.

Published property Visible;

This item has no description.

Published property TabOrder;

This item has no description.

Published property TabStop default true;

This item has no description.

Published property AutoFocus: Boolean read FAutoFocus write FAutoFocus default false;

Automatically make this control focused (receiving key input) when user clicks on it.

If this is True, consider showing it in some way, e.g. draw something special in OnRender when this control is focused. You can check "Focused" property ( https://lazarus-ccr.sourceforge.io/docs/lcl/controls/twincontrol.focused.html ) or FormXxx.ActiveControl or register OnEnter / OnExit LCL events.

Published property Container: TCastleControlContainer read FContainer;

Access Castle Game Engine container properties and events, not specific for Lazarus LCL.

Published property AutoRedisplay: boolean read FAutoRedisplay write SetAutoRedisplay default true;

Should we automatically redraw the window all the time, without the need for an Invalidate call. If True (the default), render events will be called as often as reasonable on this system, usually 60 times per second.

If your game may have a still screen (nothing animates), then this approach is a little unoptimal, as we use CPU and GPU for drawing, when it's not needed. In such case, you can set this property to False, and make sure that you call Invalidate always when you need to redraw the screen. Note that the engine components always call Invalidate when necessary, so you really only need to call Invalidate yourself if you make custom rendering in some TCastleUserInterface.OnRender.

Published property DesignUrl: String read GetDesignUrl write SetDesignUrl stored false; deprecated 'use Container.DesignUrl';

Warning: this symbol is deprecated: use Container.DesignUrl

Load and show the design (.castle-user-interface file). You can reference the loaded components by name using DesignedComponent.

If you have more complicated control flow, we recommend to leave this property empty, and split your management into a number of views (TCastleView) instead. In this case, load design using TCastleView.DesignUrl. This property makes it however easy to use .castle-user-interface in simple cases, when TCastleControl just shows one UI.

The design loaded here is visible also at design-time, when editing the form in Lazarus/Delphi. Though we have to way to edit it now in Lazarus/Delphi (you have to use CGE editor to edit the design), so it is just a preview in this case.


Generated by PasDoc 0.16.0-snapshot.