unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Grids;
type
TForm1 = class(TForm)
StringGrid1: TStringGrid;
ComboBox1: TComboBox;
procedure ComboBox1Exit(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure StringGrid1SelectCell(Sender: TObject; ACol, ARow: Integer;
var CanSelect: Boolean);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.ComboBox1Exit(Sender: TObject);
begin
with sender as TCombobox do begin
hide;
if itemindex >= 0 then
with stringgrid1 do
cells[col, row] := items[itemindex];
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
combobox1.visible := false;
end;
procedure TForm1.StringGrid1SelectCell(Sender: TObject; ACol,
ARow: Integer; var CanSelect: Boolean);
var
R: TRect;
org: TPoint;
begin
with Sender as TStringgrid do
if (ACol = 1) and (ARow >= FixedRows) then begin
// entered the column associated to the combobox
// get grid out of selection mode
perform(WM_CANCELMODE, 0, 0);
// position the control on top of the cell
R := CellRect(Acol, Arow);
org := Self.ScreenToClient(ClientToScreen(R.topleft));
with combobox1 do begin
setbounds(org.X, org.Y, r.right - r.left, height);
itemindex := Items.IndexOf(Cells[acol, arow]);
Show;
BringTofront;
// focus the combobox and drop down the list
SetFocus;
DroppedDown := true;
end;
end;
end;
end.
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Grids;
type
TForm1 = class(TForm)
StringGrid1: TStringGrid;
ComboBox1: TComboBox;
procedure ComboBox1Exit(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure StringGrid1SelectCell(Sender: TObject; ACol, ARow: Integer;
var CanSelect: Boolean);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.ComboBox1Exit(Sender: TObject);
begin
with sender as TCombobox do begin
hide;
if itemindex >= 0 then
with stringgrid1 do
cells[col, row] := items[itemindex];
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
combobox1.visible := false;
end;
procedure TForm1.StringGrid1SelectCell(Sender: TObject; ACol,
ARow: Integer; var CanSelect: Boolean);
var
R: TRect;
org: TPoint;
begin
with Sender as TStringgrid do
if (ACol = 1) and (ARow >= FixedRows) then begin
// entered the column associated to the combobox
// get grid out of selection mode
perform(WM_CANCELMODE, 0, 0);
// position the control on top of the cell
R := CellRect(Acol, Arow);
org := Self.ScreenToClient(ClientToScreen(R.topleft));
with combobox1 do begin
setbounds(org.X, org.Y, r.right - r.left, height);
itemindex := Items.IndexOf(Cells[acol, arow]);
Show;
BringTofront;
// focus the combobox and drop down the list
SetFocus;
DroppedDown := true;
end;
end;
end;
end.