Documentation Index Fetch the complete documentation index at: https://mintlify.com/Steema/TeeGrid-VCL-FMX-Samples/llms.txt
Use this file to discover all available pages before exploring further.
Overview
TeeGrid for VCL provides native Windows grid components for Win32 and Win64 applications. The VCL implementation uses the Visual Component Library framework, delivering high-performance grids with native Windows look and feel.
VCL TeeGrid is implemented in the VCLTee.Grid unit and supports both RAD Studio/Delphi and Lazarus/FreePascal.
Installation
RAD Studio / Delphi
Add the VCL units to your project’s uses clause:
uses
VCLTee.Grid, // Main TTeeGrid component
VCLTee.Control, // Base control classes
VCLTee.Painter, // VCL rendering
Tee.GridData.DB; // Database support (automatically included)
Lazarus / FreePascal
TeeGrid supports Lazarus through the same VCLTee.Grid unit with FPC-specific conditional compilation:
uses
VCLTee.Grid,
db, dbf; // For database support
VCL TeeGrid is available for:
Windows : Win32 and Win64 platforms
Lazarus : Windows, Linux, and other FreePascal-supported platforms
Win32/Win64 (Delphi)
Lazarus/FPC
{$IFNDEF FPC}
{$IFDEF CONDITIONALEXPRESSIONS}
{$IF CompilerVersion>=23}
[ComponentPlatformsAttribute(pidWin32 or pidWin64)]
{$IFEND}
{$ENDIF}
{$ENDIF}
TTeeGrid= class (TScrollableControl)
Architecture
The VCL implementation consists of two main classes:
TVCLTeeGrid
Internal grid engine that handles core functionality:
TVCLTeeGrid= class (TCustomTeeGrid)
private
IEditor : TControl;
IEditorColumn : TColumn;
IEditorRow : Integer ;
Key responsibilities:
Cell editing with VCL controls
Scrolling and viewport management
Data change notifications
Clipboard operations (Copy/Paste)
TTeeGrid
Public component that developers use:
TTeeGrid= class (TScrollableControl)
private
FGrid : TVCLTeeGrid;
FPainter : TPainter;
Published properties:
Columns - Column definitions
DataSource - Data binding
Editing - Cell editing settings
Selected - Selection appearance and behavior
Standard VCL properties (Align, Anchors, etc.)
Rendering
VCL Painter
VCL uses Windows GDI/GDI+ for rendering through the TGDIPainter class:
GDI+ (Default)
GDI (Legacy)
// Default painter uses GDI+ for enhanced rendering
TeeGrid1.Painter := TGDIPainter.Create(TeeGrid1.Canvas);
Features:
Anti-aliased text and graphics
Gradient fills and transparency
High-quality image scaling
// Switch to plain GDI for compatibility
TeeGrid1.Painter := TGdiPainter.Create(TeeGrid1.Canvas);
Use when:
Maximum performance needed
Working with older Windows versions
Specific GDI features required
Custom Painting
The grid paints using a device context (HDC):
procedure PaintWindow (DC: HDC); override ;
VCL TeeGrid is double-buffered by default to eliminate flicker. Set DoubleBuffered := True in the published properties.
Cell Editing
VCL Editor Controls
VCL TeeGrid supports native VCL editor controls:
procedure TForm1.FormCreate (Sender: TObject);
begin
// Assign custom editor controls to columns
TeeGrid1.Columns[ 'Height' ].EditorClass := TTrackBar;
TeeGrid1.Columns[ 'BirthDate' ].EditorClass := TDateTimePicker;
TeeGrid1.Columns[ 'Vehicle' ].EditorClass := TComboBox;
TeeGrid1.Columns[ 'EyeColor' ].EditorClass := TComboBox;
TeeGrid1.Columns[ 'Holidays' ].EditorClass := TCheckBox;
TeeGrid1.Columns[ 'Happiness' ].EditorClass := TSpinEdit;
end ;
Editor Events
VCL-specific event signatures:
OnCellEditing
OnCellEdited
TCellEditingEvent = procedure(
const Sender: TObject;
const AEditor: TControl; // VCL TControl descendant
const AColumn: TColumn;
const ARow: Integer
) of object ;
procedure TForm1.TeeGrid1CellEditing (
const Sender: TObject;
const AEditor: TControl;
const AColumn: TColumn;
const ARow: Integer );
begin
if AEditor is TComboBox then
begin
TComboBox(AEditor).Style := csDropDown;
// Configure the combobox...
end ;
end ;
Database Integration
DataSource Binding
Connect to TDataSource or TDataSet directly:
uses
VCLTee.Grid, Tee.GridData.DB;
procedure TForm1.FormCreate (Sender: TObject);
begin
// Option 1: Use TDataSource
TeeGrid1.DataSource := DataSource1;
// Option 2: Direct TDataSet binding
TeeGrid1.DataSource := ClientDataSet1;
// Optimize for dataset scrolling
TeeGrid1.Selected.ScrollToView := True ;
end ;
Database Example
Complete VCL Database Example
unit Unit_DataSource;
interface
uses
Winapi.Windows, System.SysUtils, System.Classes,
Vcl.Controls, Vcl.Forms, Data.DB, Datasnap.DBClient,
VCLTee.Grid, Tee.GridData.DB;
type
TFormDatabase = class (TForm)
TeeGrid1: TTeeGrid;
ClientDataSet1: TClientDataSet;
DataSource1: TDataSource;
procedure FormCreate (Sender: TObject);
end ;
implementation
procedure TFormDatabase.FormCreate (Sender: TObject);
begin
// Bind to DataSource
TeeGrid1.DataSource := DataSource1;
// Cosmetic adjustments
TeeGrid1.Rows.Height.Value := 64 ;
TeeGrid1.Rows.Spacing.Value := 8 ;
TeeGrid1.Rows.RowLines.Hide;
// Center-align cell text
TeeGrid1.Cells.TextAlign.Vertical := TVerticalAlign.Center;
TeeGrid1.Selected.TextAlign.Vertical := TVerticalAlign.Center;
// Enable full row selection
TeeGrid1.Selected.FullRow := True ;
end ;
end .
Themes and Styling
VCL Theme Support
VCL TeeGrid integrates with VCL Styles (Windows themes):
uses
VCLTee.Grid.Themes, Vcl.Themes;
procedure TForm1.ApplyVCLStyle ( const StyleName: string );
begin
// Apply Windows VCL Style
TStyleManager.SetStyle(StyleName);
// Apply to TeeGrid
TVCLGridThemes.ApplyTo(TeeGrid1);
end ;
procedure TForm1.FormCreate (Sender: TObject);
var
Styles: TStringList;
begin
Styles := TStringList.Create;
try
// Get all available VCL themes linked to executable
TVCLGridThemes.Available(Styles);
// Load into UI
ListBox1.Items.Assign(Styles);
finally
Styles.Free;
end ;
end ;
Standard TeeGrid Themes
uses
Tee.Grid.Themes;
// Apply cross-platform TeeGrid themes
TGridThemes. Default .ApplyTo(TeeGrid1.Grid);
TGridThemes.iOS.ApplyTo(TeeGrid1.Grid);
TGridThemes.Android.ApplyTo(TeeGrid1.Grid);
TGridThemes.Black.ApplyTo(TeeGrid1.Grid);
VCL TeeGrid uses native Windows scrollbars:
TeeGrid1.ScrollBars := ssBoth; // Show both scrollbars
TeeGrid1.ScrollBars := ssVertical; // Vertical only
TeeGrid1.ScrollBars := ssHorizontal; // Horizontal only
TeeGrid1.ScrollBars := ssNone; // Hide scrollbars
// Mouse scrolling mode
TeeGrid1.Scrolling.Mode := TScrollingMode.Both; // Drag to scroll
Mouse and Keyboard
VCL-specific mouse and keyboard handling:
Mouse Events
Keyboard Events
procedure MouseDown (Button: TMouseButton; Shift: TShiftState; X, Y: Integer );
procedure MouseMove (Shift: TShiftState; X, Y: Integer );
procedure MouseUp (Button: TMouseButton; Shift: TShiftState; X, Y: Integer );
// Mouse wheel
function DoMouseWheelDown (Shift: TShiftState; MousePos: TPoint): Boolean ;
function DoMouseWheelUp (Shift: TShiftState; MousePos: TPoint): Boolean ;
Clipboard Operations
Copy and Paste
VCL-specific clipboard integration:
// Copy selected cells to clipboard
TeeGrid1.Grid. Copy ;
TeeGrid1.Grid. Copy (CustomSelection);
// Paste from clipboard
TeeGrid1.Grid.PasteSelected;
Design-Time Support
Visual Editor
Launch the visual TeeGrid editor at design-time or runtime:
uses
VCLTee.Editor.Grid;
procedure TForm1.ButtonEditClick (Sender: TObject);
begin
TTeeGridEditor.Edit(Self, TeeGrid1);
end ;
Windows Messages
VCL TeeGrid responds to Windows messages:
procedure WMEraseBkgnd ( var Message : TWmEraseBkgnd); message WM_ERASEBKGND;
procedure WMGetDlgCode ( var Message : TWMGetDlgCode); message WM_GETDLGCODE;
procedure WMSetFocus ( var Message : TWMSetFocus); message WM_SETFOCUS;
procedure WMKillFocus ( var Message : TWMKillFocus); message WM_KILLFOCUS;
procedure WMSize ( var Message : TWMSize); message WM_SIZE;
Component Palette
VCL TeeGrid appears in the component palette and can be dropped onto forms at design-time.
TeeGrid1.DoubleBuffered := True ; // Eliminates flicker
Optimize Dataset Scrolling
// Only respond to mouse down/up, not move
TeeGrid1.Grid.MouseActivity := [TGridMouseSense.Down, TGridMouseSense.Up];
Reduces CPU usage by ignoring mouse move events.
// Use plain GDI instead of GDI+ for maximum speed
TeeGrid1.Painter := TGdiPainter.Create(TeeGrid1.Canvas);
Lazarus-Specific Notes
FreePascal Compatibility
The VCL implementation includes FPC-specific code paths:
{$IFDEF FPC}
uses
LCLType, LCLIntf, LMessages;
procedure WMSize ( var Message : TLMSize); message LM_SIZE;
{$ELSE}
procedure WMSize ( var Message : TWMSize); message WM_SIZE;
{$ENDIF}
Lazarus Database Example
uses
VCLTee.Grid, db, dbf;
procedure TForm1.FormCreate (Sender: TObject);
begin
// Open DBF table
Dbf1.TableName := 'disco.dbf' ;
Dbf1.Open;
// Bind to TeeGrid (DataSource property set at design-time)
TeeGrid1.Selected.ScrollToView := True ;
end ;
Common Patterns
Full-Featured VCL Grid
Complete Example with All Features
unit Unit_Main;
interface
uses
Winapi.Windows, System.SysUtils, System.Classes,
Vcl.Controls, Vcl.Forms, Vcl.StdCtrls,
VCLTee.Grid, VCLTee.Painter, Data.DB, Datasnap.DBClient;
type
TFormMain = class (TForm)
TeeGrid1: TTeeGrid;
ClientDataSet1: TClientDataSet;
DataSource1: TDataSource;
procedure FormCreate (Sender: TObject);
procedure TeeGrid1CellEditing ( const Sender: TObject;
const AEditor: TControl; const AColumn: TColumn;
const ARow: Integer );
private
procedure SetupGrid ;
procedure SetupEditors ;
procedure ApplyTheme ;
end ;
implementation
uses
Tee.Grid.Themes, VCLTee.Grid.Themes, Vcl.Themes, Vcl.ComCtrls;
procedure TFormMain.FormCreate (Sender: TObject);
begin
SetupGrid;
SetupEditors;
ApplyTheme;
end ;
procedure TFormMain.SetupGrid ;
begin
// Bind data
TeeGrid1.DataSource := DataSource1;
// Performance
TeeGrid1.DoubleBuffered := True ;
TeeGrid1.Selected.ScrollToView := True ;
// Appearance
TeeGrid1.Rows.Height.Value := 32 ;
TeeGrid1.Cells.TextAlign.Vertical := TVerticalAlign.Center;
// Scrolling
TeeGrid1.ScrollBars := ssBoth;
TeeGrid1.Scrolling.Mode := TScrollingMode.Both;
// Selection
TeeGrid1.Selected.FullRow := True ;
end ;
procedure TFormMain.SetupEditors ;
begin
TeeGrid1.Editing.AutoEdit := True ;
TeeGrid1.Editing.AlwaysVisible := False ;
TeeGrid1.Editing.EnterKey := TEditingEnter.NextRow;
// Custom editors
TeeGrid1.Columns[ 'Date' ].EditorClass := TDateTimePicker;
TeeGrid1.Columns[ 'Status' ].EditorClass := TComboBox;
end ;
procedure TFormMain.ApplyTheme ;
begin
// Apply VCL Style
TStyleManager.SetStyle( 'Windows10' );
TVCLGridThemes.ApplyTo(TeeGrid1);
end ;
procedure TFormMain.TeeGrid1CellEditing (
const Sender: TObject;
const AEditor: TControl;
const AColumn: TColumn;
const ARow: Integer );
begin
if (AColumn. Name = 'Status' ) and (AEditor is TComboBox) then
begin
with TComboBox(AEditor) do
begin
Items.Clear;
Items. Add ( 'Active' );
Items. Add ( 'Inactive' );
Items. Add ( 'Pending' );
end ;
end ;
end ;
end .
See Also
FireMonkey Framework Cross-platform FMX implementation
Lazarus Framework FreePascal-specific features
Cell Editing Editor controls and customization
Themes Visual themes and styling