NiceGrid

From Lazarus wiki
Revision as of 13:16, 24 June 2023 by Wp (talk | contribs) (Initial version (still incomplete))
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigationJump to search

The following text is based on the web site of the original author of the component, Priyatna. The web site is no longer available.

Introduction

NiceGrid is a Delphi and Lazarus component that aimed to be a standard string grid replacement. It is written from scratch, not descended from TStringGrid. The main reason why I write this component is to have a grid component that nice and smooth. Here's some feature of NiceGrid:

  • Headers can be merged and or multilined.
  • Smooth scrolling, not aligned to top left cell coordinate.
  • All aspect of grid colors can be customized: header light color, header dark color, header color, grid color, text color, etc.; resulting a real nice looking grid.
  • Alternate row color.
  • Can be customized at design time.
  • Each column can have its own horizontal and vertical alignment, color, and font.
  • Each column can be hidden.
  • Can be auto fit to width.
  • Can be auto calculate column width.
  • BeginUpdate and EndUpdate methods for bulk cells access.

Since it is a new component, there are several main differences between NiceGrid and TStringGrid:

  • Headers are excluded from cells, unlike TStringGrid that treats fixed rows as regular cells (Row 0, for example), Cells[0,0] in NiceGrid will access the top left editable cells, not fixed cell.
  • The only way to access the data is using Cells property or using direct array referencing style: NiceGrid1[0,0]. There are no Cols or Rows properties.
  • Replacements: FixedRows -> Header, FixedCols -> Gutter.

License

This library is released under Mozilla Public License. You can use it in your freeware, shareware or commercial softwares. You can send your modification to me, and if I decide to include it in the main distribution, I will add your name as a contributor. You can read full licensing information in the file "License.txt" in the NiceGrid installation folder.

Version History

Version 2.20

  • Bug fixed: OnCellChange event and friends only fired by user input, not by code (It seems that this behavior conforms with VCL design. I just get the point. ;-)
  • Bug fixed: messing up with accelerator keys. NiceGrid can't capture chars that already defined as accelerators of other control. This is fixed now.
  • C++ Builder port by C. S. Phua <csphua@teledynamics.com.my>.

Version 2.10

  • Problems in clipboard operations with some hidden columns, fixed.
  • OnAddRow event added, makes possible to set default values to new added row.
  • DeleteRow method added.
  • CanResize property in Column, this will control column width when FitToWidth property is set.
  • Some drawing enhachements.

Version 2.00

  • Bitmap buffering is removed. Believe me, this is not as easy as I thought.
  • Lots of enhanchement in editing capabilities and clipboard operations, most of them are adapted from well-known Microsoft Excel™.
  • Header's Title is more flexible now. It doesn't have to be complete. Just remember two basic rules: ';' for multiline and '|' for each header cell. Header and gutter have their own font.
  • Fill Down and Fill Right feature. This feature is actually created for my own purpose, but I think it's not a bad idea. To fill down a column, try to type something and then end with '*' and press ENTER. To fill right a row, use '>'.
  • Each column can be hidden. But use this feature wisely, because paste operation (from clipboard) will be applied also to hidden columns. It may make confuse end-user. I'll try to patch this later.
  • Cell editing can be done at design time via Column.Strings property.
  • Filter, Validation and Notification features: OnFilterChar, OnValidate, OnCellChanging, OnCellChange events; also EnableValidation/DisableValidation methods.

Installation

In Lazarus, open the NiceGridLaz.lpk file in the package editor ("Package" > "Open Package File (.lpk)", click "Use" > "Install", and let the IDE recompile itself.

In Delphi, there is no special process to install it. Just open NiceGridD7.dpk in the Delphi IDE and press the Install button. I use Delphi 7. If you use another Delphi version, you may have to make some minor changes.

Light bulb  Note: A dedicated package for a more recent Delphi version is included as NiceGridDXE11; it should work for all other Delphi versions as well.

The component will appear on the priyatna.org palette tab.

Working with Headers

All features explained below are available at design time, but I will cover it using codes, for easy following.

NiceGrid will automatically scan column title and make appropriate merging and multilining. The only thing you must do is setting each column's Title property. This is a string type property. To make a multi-lined caption, use ';' (semicolon) character.

For example:

NiceGrid1.Columns[0].Title := 'First Line;Second Line';

will make

First Line
Second Line

HeaderLine property determines how many lines will be allocated for headers. Each line in headers can be set also via column's Title property, separated by '|' character.

For example:

NiceGrid1.HeaderLine := 2;
NiceGrid1.Columns[0].Title := 'First Line|Second Line';

will make

First Line
Second Line

To merge two header cells, set each cell to exactly same value, including ';' characters if they are multi-lined.

For example:

NiceGrid1.HeaderLine := 2;
NiceGrid1.ColCount := 2;
NiceGrid1.Columns[0].Title := 'One|Two';
NiceGrid1.Columns[1].Title := 'One|Three';

will make

One
Two Three

Using a combination of '|' and ';' characters, we can make a complex header.

For example:

NiceGrid1.HeaderLine := 2;
NiceGrid1.ColCount := 5;
NiceGrid1.Columns[0].Title := 'Merged;Multilined|Merged;Multilined';
NiceGrid1.Columns[1].Title := 'First Group|One';
NiceGrid1.Columns[2].Title := 'First Group|Two';
NiceGrid1.Columns[3].Title := 'Second Group|Three';
NiceGrid1.Columns[4].Title := 'Second Group|Four';

will make

Merged
Multilined
FirstGroup SecondGroup
One Two Three Four