如何初始化TColumnEh
How to initialize TColumnEh
这是一个简单的问题。
如何初始化变量Column以进行如下语句。
procedure TfmSomeForm.grdSomeGridDblClick(Sender: TObject);
var
Column: TColumnEh;
IsSomething: Boolean;
begin
inherited;
//Initialize Column
IsSomething := False;
if Column.FieldName = 'SOMETHING' then
IsSomething := True;
以这种方式初始化列
Column := grdSomeGrid.Columns.FindColumnByName('SOMETHING');
没有意义,可能会导致异常
或我必须在这里做
procedure TfmSomeForm.grdSomeGridCellClick(Column: TColumnEh);
begin
inherited;
FIsSomething := False;
if Column.FieldName = 'SOMETHING' then
FIsSomething := True;
end;
问题是我需要这个标志 onDblClick 并且我不想让它成为全局的。
你没有说你的 grdSomeGrid
是哪种数据类型。但是,对于普通的 TDBGrid,您似乎想做的事情在 DblClick 事件本身中很简单。
procedure TForm1.DBGrid1DblClick(Sender: TObject);
var
ACol : Integer;
Pt : TPoint;
CellValue : String;
begin
{ pick up the mouse cursor pos and convert to DBGrid's internal coordinates }
Pt.X := Mouse.CursorPos.X;
Pt.Y := Mouse.CursorPos.Y;
Pt := DBGrid1.ScreenToClient(Pt);
{ find the column number of the double-clicked column}
ACol := DBGrid1.MouseCoord(Pt.X, Pt.Y).X - 1;
if DBGrid1.Columns[ACol].FieldName = 'SOMETHING' then
{ do what you want}
end;
更新:Victoria 有帮助地提到了 SelectedIndex
,这是获取当前列的另一种方法,但我总是设法忘记它,因为它的名称不包括Column
并且该行没有直接对应项(因为行操作基于书签,而不是行索引)。
所以,我按照我的方式来做,因为它提醒我如何获取活动的列和行索引,并且很容易编写一个同时获取两者的独立函数,如下所示:
type
TRowCol = record
Row,
Col : Integer;
end;
function GetRowCol(Grid : TDBGrid) : TRowCol;
var
Pt : TPoint;
begin
{ pick up the mouse cursor pos and convert to DBGrid's internal coordinates }
Pt.X := Mouse.CursorPos.X;
Pt.Y := Mouse.CursorPos.Y;
Pt := Grid.ScreenToClient(Pt);
Result.Row := Grid.MouseCoord(Pt.X, Pt.Y).Y;
Result.Col := Grid.MouseCoord(Pt.X, Pt.Y).X;
{ adjust Col value to account for whether the grid has a row indicator }
if dgIndicator in Grid.Options then
Dec(Result.Col);
end;
这是一个简单的问题。 如何初始化变量Column以进行如下语句。
procedure TfmSomeForm.grdSomeGridDblClick(Sender: TObject);
var
Column: TColumnEh;
IsSomething: Boolean;
begin
inherited;
//Initialize Column
IsSomething := False;
if Column.FieldName = 'SOMETHING' then
IsSomething := True;
以这种方式初始化列
Column := grdSomeGrid.Columns.FindColumnByName('SOMETHING');
没有意义,可能会导致异常 或我必须在这里做
procedure TfmSomeForm.grdSomeGridCellClick(Column: TColumnEh);
begin
inherited;
FIsSomething := False;
if Column.FieldName = 'SOMETHING' then
FIsSomething := True;
end;
问题是我需要这个标志 onDblClick 并且我不想让它成为全局的。
你没有说你的 grdSomeGrid
是哪种数据类型。但是,对于普通的 TDBGrid,您似乎想做的事情在 DblClick 事件本身中很简单。
procedure TForm1.DBGrid1DblClick(Sender: TObject);
var
ACol : Integer;
Pt : TPoint;
CellValue : String;
begin
{ pick up the mouse cursor pos and convert to DBGrid's internal coordinates }
Pt.X := Mouse.CursorPos.X;
Pt.Y := Mouse.CursorPos.Y;
Pt := DBGrid1.ScreenToClient(Pt);
{ find the column number of the double-clicked column}
ACol := DBGrid1.MouseCoord(Pt.X, Pt.Y).X - 1;
if DBGrid1.Columns[ACol].FieldName = 'SOMETHING' then
{ do what you want}
end;
更新:Victoria 有帮助地提到了 SelectedIndex
,这是获取当前列的另一种方法,但我总是设法忘记它,因为它的名称不包括Column
并且该行没有直接对应项(因为行操作基于书签,而不是行索引)。
所以,我按照我的方式来做,因为它提醒我如何获取活动的列和行索引,并且很容易编写一个同时获取两者的独立函数,如下所示:
type
TRowCol = record
Row,
Col : Integer;
end;
function GetRowCol(Grid : TDBGrid) : TRowCol;
var
Pt : TPoint;
begin
{ pick up the mouse cursor pos and convert to DBGrid's internal coordinates }
Pt.X := Mouse.CursorPos.X;
Pt.Y := Mouse.CursorPos.Y;
Pt := Grid.ScreenToClient(Pt);
Result.Row := Grid.MouseCoord(Pt.X, Pt.Y).Y;
Result.Col := Grid.MouseCoord(Pt.X, Pt.Y).X;
{ adjust Col value to account for whether the grid has a row indicator }
if dgIndicator in Grid.Options then
Dec(Result.Col);
end;