Update: it did not work. Below is my code using Selection property. On the ButtonClick event, I assign grid1.Selection.StartRow to a variable sr, grid1.Selection.EndRow to er, then display them in a message, and they both end up with the same value (ex.: if I select rows 2 through 5, both start row and end row equal 5). What am I doing wrong?
Note: in this case, unlike with RowSelectionCount, this code still DOES NOT work even when I have Enabled set to True (this feature seems to not have any effect here, while in the initial example it does).
unit Unit1;
interface
uses
System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.Edit,
FMX.Controls.Presentation, FMX.StdCtrls, FMX.TMSBaseControl, FMX.TMSGridCell,
FMX.TMSGridOptions, FMX.TMSGridData, FMX.TMSCustomGrid, FMX.TMSGrid;
type
TForm1 = class(TForm)
grid1: TTMSFMXGrid;
Button1: TButton;
Edit1: TEdit;
Edit2: TEdit;
procedure FormCreate(Sender: TObject);
procedure grid1CellDblClick(Sender: TObject; ACol, ARow: Integer);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
holdRow: integer;
implementation
{$R *.fmx}
procedure TForm1.Button1Click(Sender: TObject);
var mystr : string;
i : integer;
row : integer;
sr : integer;
er : integer;
rowcnt : integer;
begin
// Build a string of contents of the first column of selected range, show it
sr := grid1.Selection.StartRow;
er := grid1.Selection.EndRow;
showmessage(sr.ToString + ':' + er.ToString);
rowcnt := er - sr;
if (rowcnt = 0) then
showmessage('Select rows')
else
begin
for i := 0 to rowcnt - 1 do
begin
row := grid1.SelectedRow[i];
mystr := mystr + grid1.Cells[0,row] + '; ';
end;
showmessage(mystr);
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
var i : integer;
begin
// Fill the grid
for i := 0 to 100 do
grid1.Cells[0,i] := i.ToString;
end;
procedure TForm1.grid1CellDblClick(Sender: TObject; ACol, ARow: Integer);
var row1 : integer;
row2 : integer;
begin
if (edit1.Text = '') or (edit2.Text <> '') then
begin
// Unselect any rows currently selected
row1 := grid1.SelectedRow[0];
row2 := grid1.SelectedRow[grid1.RowSelectionCount - 1];
grid1.UnSelectRows(row1,row2);
// place contents of first cell in selection into edit
edit1.Text := grid1.Cells[0,ARow];
edit2.Text := '';
// Save first row of selection
holdRow := ARow;
end
else if edit2.Text = '' then
begin
edit2.Text := grid1.Cells[0,ARow];
// Select the range of rows
if holdRow <= ARow then
grid1.SelectRows(holdRow,ARow)
else
grid1.SelectRows(ARow,holdRow);
end;
end;
end.