TMS SOFTWARE  
TADVSTRINGGRID  
DEVELOPERS GUIDE 
151 | Page 
TAdvStringGrid disjunct row, column and cell selection 
In normal circumstances, setting goRangeSelect to true in grid.Options enables selecting multiple 
cells in the grid but all selected cells are within a rectangle. With TAdvStringGrid, it is possible to 
select disjunct rows, columns or cells. This is enabled by setting either DisjunctRowSelect, 
DisjunctColSelect or DisjunctCellSelect in grid.MouseActions to true. Note that the use of these 
selection methods is mutually exclusive. Where the selected cells can normally be retrieved using 
the grid.Selection: TGridRect property, new properties are introduced to get or set the disjunct 
selected rows, columns or cells. 
Disjunct row selection 
To enable disjunct row selection, set grid.MouseActions.DisjunctRowSelect to true as well as 
goRowSelect in grid.Options. Disjunct row selection is done by Ctrl + left mouse click on the rows to 
toggle the selection. 
Programmatical row selection control is done with following methods: 
procedure ClearRowSelect;  
Removes selection from all rows 
procedure SelectRows(RowIndex, RCount: Integer);  Selects RCount rows starting from RowIndex 
property RowSelect[RowIndex]: Boolean; 
Property with which row selection can be get 
or set for row RowIndex 
property RowSelectCount: Integer; 
Retrieves the total number of selected rows 
procedure RemoveSelectedRows 
Removes all selected rows in the grid 
procedure RemoveUnSelectedRows 
Removes all not selected rows in the grid 
function SelectedRowCount: integer 
Returns the number of disjunct selected rows 
in the grid 
property SelectedRow[n: integer]: integer 
Returns the row index of the n’th selected 
row 
Example: Looping through all disjunct selected rows: 
With this code, a cell in the row is marked with ‘*’ when the row is selected: 
var 
i,idxinteger
begin 
for i := 0 to AdvStringGrid1.SelectedRowCount - 1 do 
begin 
idx := AdvStringGrid1.SelectedRow[i]; 
AdvStringGrid1.Cells[0,i] := AdvStringGrid1.Cells[0,i] + '*'
end
end
Disjunct column selection 
To enable disjunct column selection, set grid.MouseActions.DisjunctColSelect to true. Disjunct 
column selection is done by Ctrl + left mouse click on the columns to toggle the selection. 
Programmatical column selection control is done with following methods: 
procedure ClearColSelect;  
Removes selection from all columns 
procedure SelectCols(ColIndex, CCount: Integer);  Selects CCount rows starting from ColIndex 
property ColSelect[ColIndex]: Boolean; 
Property with which column selection can be 
get or set for column ColIndex 
Pdf links - insert, remove PDF links in C#.net, ASP.NET, MVC, Ajax, WinForms, WPF
Free C# example code is offered for users to edit PDF document hyperlink (url), like inserting and deleting
pdf link open in new window; add hyperlink to pdf acrobat
Pdf links - VB.NET PDF url edit library: insert, remove PDF links in vb.net, ASP.NET, MVC, Ajax, WinForms, WPF
Help to Insert a Hyperlink to Specified PDF Document Page
pdf link to attached file; add hyperlinks pdf file
TMS SOFTWARE  
TADVSTRINGGRID  
DEVELOPERS GUIDE 
152 | Page 
property ColSelectCount: Integer; 
Retrieves the total number of selected columns 
procedure RemoveSelectedCols 
Removes all selected columns in the grid 
Procedure RemoveUnselectedCols 
Removes all unselected columns in the grid 
Disjunct cell selection 
The methods and properties to be used for this are:  
Grid.MouseActions.DisjunctCellSelect: Boolean; Setting this true enables disjunct cell selection with 
Ctrl mouse clicks 
Grid.SelectedCells[col,row: Integer]: Boolean; Property to allow setting or clearing selection on a 
single cell 
Grid.SelectedCellsCount: Integer; Returns the number of disjunct selected cells (read-only) 
Grid.SelectedCell[i: Integer]: TGridCoord; Returns the i'th selected cell grid coordinates (read-only) 
Grid.ClearSelectedCells; Clears all disjunct selected cells in the grid 
Example: checkerboard cell selection 
To make a checkerboard disjunct cell selection, following code was written :
var 
i,j: Integer; 
begin 
AdvStringGrid1.ClearSelectedCells; 
with AdvStringGrid1 do 
for i := 1 to ColCount - 1 do 
for j := 1 to RowCount - 1 do 
SelectedCells[i,j] := (odd(i) and odd(j)) or (not odd(i) and not 
odd(j)); 
end; 
This is the method to show a list of selected cells in a listbox :
var 
i: Integer; 
gc: TGridCoord; 
begin 
listbox1.Items.Clear; 
listbox1.Items.Add('Nr. of cells : + 
IntToStr(AdvStringGrid1.SelectedCellsCount)); 
for i := 1 to AdvStringGrid1.SelectedCellsCount do 
begin 
gc := AdvStringGrid1.SelectedCell[- 1]; 
listbox1.Items.Add(IntToStr(gc.X)+':'+IntToStr(gc.Y)); 
end; 
end; 
C# PDF Convert to HTML SDK: Convert PDF to html files in C#.net
Embed zoom setting (fit page, fit width). Turn PDF form data to HTML form. Export PDF images to HTML images. Embed PDF hyperlinks to HTML links.
convert doc to pdf with hyperlinks; add a link to a pdf in acrobat
C# Image: Tutorial for Document Management Using C#.NET Imaging
more detailed C# tutorials on each part by following the links respectively are dedicated to provide powerful & profession imaging controls, PDF document, image
pdf edit hyperlink; pdf reader link
TMS SOFTWARE  
TADVSTRINGGRID  
DEVELOPERS GUIDE 
153 | Page 
TAdvStringGrid cell check architecture 
A mechanism is available to provide cell value checking, error marking and cell autocorrecting 
components with TAdvStringGrid. This opens the capability to add spell checking components to 
TAdvStringGrid as in this case an interface is provided to use the Addict Spell Checking product with 
TAdvStringGrid.  
The main concept is that a TAdvStringGridCheck derived component can be attached to the 
CellChecker property of TAdvStringGrid. When a Checker component is attached, TAdvStringGrid 
will call its base methods MarkError and Correct at the right time to make checking and correcting 
possible after inplace editing is finished or when a programmatic call to the various new Check 
methods is made. 
This is the base class for the Checker component from which all custom checker components must 
be derived :
TAdvStringGridCheck = class(TComponent) 
public 
function MarkError(ACol,ARow: Integer; s:string):string; virtual; 
function Correct(ACol,ARow: Integer; s:string):string; virtual; 
procedure StartCheck; virtual; 
procedure StopCheck; virtual; 
published 
property AutoCorrect: Boolean read FAutoCorrect write FAutoCorrect; 
property AutoMarkError: Boolean read FAutoMarkError write FAutoMarkError; 
property GotoCell: Boolean read FGotoCell write FGotoCell; 
property UseCorrect: Boolean read FUseCorrect write FUseCorrect; 
property UseMarkError: Boolean read FUseMarkError write FUseMarkError; 
end; 
The purpose of the properties AutoCorrect and AutoMarkError is to set whether the Checker 
component should be used to perform auto correction or auto error marking after editing each cell. 
The UseCorrect and UseMarkError properties control whether the correction or error marking is used 
when calling the grid's various Check methods, ie. CheckCell, CheckCells, CheckCol, CheckRow and 
CheckGrid. Optionally, the GotoCell is used to activate each cell when doing multiple cell checks 
with the various Check methods to give a visual indication to the user which cell is being checked.  
In this base class, the methods Correct and MarkError do nothing. They simply return the cell 
content as is. With a real checker, these methods should either return the corrected cell's value or 
the cell's value with markers for words with errors. Error Markers (ie. red line under words with 
errors) can be applied by using the built-in HiLight function in the base TAdvStringGridCheck 
component.  
As a sample implementation, a Checker component has been provided that does nothing more than 
capitalize each first letter of a string. The TCapitalCheck component is thus derived from 
TAdvStringGridCheck and implements only one method, ie. the Correct method in following way:
function TCapitalCheck.Correct(ACol,ARow: Integer;s: string): string; 
var 
Prev,PrevPrev:Char; 
i: Integer; 
begin 
Prev := ' '; 
PrevPrev := '.'; 
 for i := 1 to Length(s) do 
begin 
.NET PDF Document Viewing, Annotation, Conversion & Processing
PDF Write. Insert text, text box into PDF. Edit, delete text from PDF. Insert images into PDF. Edit, remove images from PDF. Add, edit, delete links. Form Process
add link to pdf acrobat; add hyperlink to pdf in preview
VB.NET PDF Convert to HTML SDK: Convert PDF to html files in vb.
Turn PDF images to HTML images in VB.NET. Embed PDF hyperlinks to HTML links in VB.NET. Available zoom setting (fit page, fit width).
add link to pdf; add links to pdf acrobat
TMS SOFTWARE  
TADVSTRINGGRID  
DEVELOPERS GUIDE 
154 | Page 
if (Prev = ' ') and (PrevPrev in ['!','?','.']) and (s[i] <> 
Upcase(s[i])) then 
s[i] := UpCase(s[i]); 
PrevPrev := Prev; 
Prev := s[i];  
end; 
Result := s; 
end; 
It will auto-correct an entered value of "this is a test. i should start with a capital" to "This is a test. 
I should start with a capital" 
Based on this architecture, a component TAddictCheck is provided that uses the Addict Spell 
Checker to perform spell checking in TAdvStringGrid or other TAdvStringGrid based products. Again 
this is all possible without writing any code, just drop the Addict Spell Checker components on your 
form, set all Addict properties to your preferences, add a TAddictCheck component on the form and 
assign the TAddictSpell component to the TAddictCheck's AddictSpell property. Next, assign the 
TAddictSpell component to the TAdvStringGrid's CellChecker property. Control with the 
AutoCorrect, AutoMarkError, GotoCell, UseCorrect, UseMarkError and ShowDialog properties how 
the Addict Spell Checker should be used with TAdvStringGrid. 
C# PDF Convert to Word SDK: Convert PDF to Word library in C#.net
keeps the elements (like images, tables and chats) of original PDF file and maintains the original text style (including font, size, color, links and boldness
add a link to a pdf; add hyperlink pdf
How to C#: Basic SDK Concept of XDoc.PDF for .NET
XDoc.PDF for .NET allows C# developers to edit hyperlink of PDF document, including editing PDF url links and quick navigation link in bookmark/outline.
pdf link open in new window; adding links to pdf
TMS SOFTWARE  
TADVSTRINGGRID  
DEVELOPERS GUIDE 
155 | Page 
TAdvStringGrid add-on dialogs 
TAdvStringGrid comes with a number of add-on dialogs: 
TAdvGridPrintSettingsDialog: dialog to configure the various printsettings of the grid 
TAdvGridHTMLSettingsDialog: dialog to configure the various HTML export settings of the grid 
TAdvPreviewDialog: dialog to show a print preview 
TAdvGridReplaceDialog: find & replace dialog 
TAdvGridFindDialog: find dialog 
TAdvGridImportDialog: CSV/text file import dialog 
The concept of the add-on dialogs is simple. The dialog components can be dropped on the form 
and their Grid property is assigned to the TAdvStringGrid instance on the form. The dialogs are 
displayed with the Execute method.  
The TAdvGridImportDialog has two methods : OpenAndExecute and Execute. When calling 
OpenAndExecute, it will first show a file open dialog to pick a .TXT or .CSV file and preview the file 
in the dialog. From there, the delimiter or column positions can be set. Choosing OK will load the 
file in the associated grid. 
VB.NET PDF: Basic SDK Concept of XDoc.PDF
XDoc.PDF for .NET allows VB.NET developers to edit hyperlink of PDF document, including editing PDF url links and quick navigation link in bookmark/outline.
add hyperlinks to pdf; add links to pdf file
C# Create PDF Library SDK to convert PDF from other file formats
file. Create and save editable PDF with a blank page, bookmarks, links, signatures, etc. Create fillable PDF document with fields.
active links in pdf; chrome pdf from link
TMS SOFTWARE  
TADVSTRINGGRID  
DEVELOPERS GUIDE 
156 | Page 
TAdvStringGrid Unicode support 
TAdvStringGrid has built-in support to display, print, edit and sort Unicode strings on Windows NT, 
2000, XP and Vista on Delphi versions prior to Delphi 2009. From Delphi 2009 all strings in 
TAdvStringGrid are by default Unicode and the specific Unicode support is therefore deprecated in 
Delphi 2009. Note that in order to use Unicode, a font that supports the full Unicode character set is 
required. The Microsoft “Arial Unicode MS” is such a font. The interface to put Unicode strings in a 
grid cell is done through the property: 
Grid.WideCells[Col,Row]: widestring; 
Unicode editing 
TAdvStringGrid has support for inplace editing of Unicode cells with a normal edit control and a 
dropdown combobox and dropdownlist combobox. The inplace editors are specified with the 
OnGetEditorType event where these 3 types are defined: 
edUniEdit: Unicode inplace editor 
edUniEditBtn: Unicode inplace editor with attached button 
edUniComboEdit: Unicode dropdown combobox 
edUniComboList: Unicode dropdownlist combobox 
edUniMemo: Unicode memo editor 
The Unicode inplace editors can be directly accessed with  
Grid.UniEdit : the instance of the inplace Unicode edit control 
Grid.UniCombo : the instance of the inplace Unicode combobox control 
Grid.UniMemo: the instance of the inplace Unicode memo control 
Example: using 3 different Unicode inplace editors in TAdvStringGrid 
procedure TForm1.AdvStringGrid1GetEditorType(Sender: TObject; ACol, 
ARow: Integer; var AEditor: TEditorType); 
begin 
case ACol of 
1:AEditor := edUniEdit; 
2:begin 
AEditor := edUniComboEdit; 
AdvStringGrid1.UniCombo.Items.Clear; 
AdvStringGrid1.UniCombo.Items.Add(‘London’); 
AdvStringGrid1.UniCombo.Items.Add(‘New York’); 
AdvStringGrid1.UniCombo.Items.Add(‘Paris’); 
end;   
3:begin 
AEditor := edUniComboList; 
AdvStringGrid1.UniCombo.Items.Clear; 
AdvStringGrid1.UniCombo.Items.Add(‘United Kingdom’); 
AdvStringGrid1.UniCombo.Items.Add(‘United States’); 
AdvStringGrid1.UniCombo.Items.Add(‘France’); 
end; 
end; 
end; 
TMS SOFTWARE  
TADVSTRINGGRID  
DEVELOPERS GUIDE 
157 | Page 
Unicode sorting 
Enabling sorting in TAdvStringGrid that takes Unicode into account is done by instructing the sort 
function to use Unicode for the selected columns. This is done through the OnGetFormat event with 
the Unicode sort style: ssUnicode 
Example: setting sort style for selected columns to Unicode 
procedure TForm1.AdvStringGrid1GetFormat(Sender: TObject; ACol: Integer; 
var AStyle: TSortStyle; var aPrefix, aSuffix: String); 
begin 
if (ACol in [2,4]) then 
AStyle := ssUnicode; 
end; 
Please note that this is deprecated when used with Delphi 2009 / C++Builder 2009 or later versions 
as the default string type is always Unicode in these versions. 
Unicode virtual cell text 
The event OnGetDisplWideText can be used to set virtual cell Unicode text in grid cells. 
Unicode hints 
The event OnGridWideHint can be used to set a Unicode hint text for a cell 
TMS SOFTWARE  
TADVSTRINGGRID  
DEVELOPERS GUIDE 
158 | Page 
TAdvStringGrid Undo/Redo add-on component 
To facilitate Undo/Redo handling of editing in cells, the TAdvGridUndoRedo component can be 
used. Drop this component on the form and assign it to the TAdvStringGrid UndoRedo property. If 
the property MaxLevel of the Undo/Redo component is 0, this means it will store all values for an 
unlimited Undo/Redo otherwise it will only remind the latest changes for Undo/Redo.  
To perform the undo and redo actions, the methods  
TAdvGridUndoRedo.Undo 
and 
TAdvGridUndoRedo.Redo 
are available.  
The public property TAdvGridUndoRedo.Level normally points to the latest performed editing action 
in the grid. Upon calling Undo, the Level property is decremented to point to the previous action. 
With a Redo, the Level is incremented again until it has reached the last action.  
Note: Undo/Redo applies to cell editing only. Other changes like setting cell properties for example 
is not maintained in the TadvGridUndoRedo component.  
TMS SOFTWARE  
TADVSTRINGGRID  
DEVELOPERS GUIDE 
159 | Page 
TAdvStringGrid column state persistence 
Often it is desirable to allow that the user can resize columns, move columns, hide columns of a 
grid. After a user customizes the view of the grid this way, it is convenient to persist this setting 
and when the application is restarted, these customizations of the user are restored exactly as the 
user left the application. TAdvStringGrid offers saving column sizes with grid.SaveColSizes and 
offers saving positions of columns with grid.SaveColPositions. With these 2 methods, it is possible to 
save column widths & column positions either to registry or to an INI file. The location where the 
settings are persisted is defined in grid.ColumnSize. 
An even easier and more convenient method to persist column size, column position and column 
visibility is available through two methods: grid.ColumnStatesToString:string and 
grid.StringToColumnStates(s: string). This way, the full column state can be persisted in a registry 
key, INI file value or database field. One key function for persisting column order is to set a 
reference column order. The method ColumnStatesToString saves the column ordering relative to 
the reference order so it is important that during grid initialization, the reference order is set by 
calling grid.SetColumnOrder.  
Example: grid with column sizing & moving enabled and two buttons to save & restore state 
procedure TForm1.FormCreate(Sender: TObject); 
var 
i: integer; 
begin 
{no fixed columns in grid} 
advstringgrid1.FixedCols := 0; 
advstringgrid1.ColCount := 10; 
advstringgrid1.RowCount := 50; 
{fill grid with easy to recognize data for this demo} 
advstringgrid1.LinearFill(false); 
advstringgrid1.AutoNumberRow(0); 
{enable column moving & column sizing} 
advstringgrid1.Options := advstringgrid1.Options + [goColSizing, 
goColMoving]; 
{add buttons in the column header cells that will allow column hiding} 
for i := 0 to AdvStringGrid1.ColCount - 1 do 
advstringgrid1.AddButton(i,0,16,16,'X',haRight,vaTop); 
{make sure that buttons on a readonly cell are not disabled} 
advstringgrid1.ControlLook.NoDisabledButtonLook := true; 
{important call to set the reference column order of the grid} 
advstringgrid1.SetColumnOrder; 
end; 
procedure TForm1.SaveBtnClick(Sender: TObject); 
var 
inifile: TInifile; 
begin 
inifile := TIniFile.Create('.\grid.ini'); 
inifile.WriteString('GRID','SETTINGS',advstringgrid1.ColumnStatesToStri
ng); 
inifile.Free; 
end; 
procedure TForm1.LoadBtnClick(Sender: TObject); 
var 
inifile: TInifile; 
s: string; 
TMS SOFTWARE  
TADVSTRINGGRID  
DEVELOPERS GUIDE 
160 | Page 
begin 
inifile := TIniFile.Create('.\grid.ini'); 
:= inifile.ReadString('GRID','SETTINGS',''); 
inifile.Free; 
if s <> '' then 
AdvStringGrid1.StringToColumnStates(s); 
end
Note: the grid has methods SetColumnOrder and ResetColumnOrder. As explained, a reference 
column order can be set by calling grid.SetColumnOrder, for example during grid initialization. If 
column moving is allowed (by setting goColMoving = true in grid.Options) you can automatically 
reset the column to the original reference column order by calling grid.ResetColumnOrder. 
Documents you may be interested
Documents you may be interested