2017-06-23 26 views
0

これは簡単な質問です。 変数を初期化する方法次のステートメントを作成するには、列をクリックします。TColumnEhの初期化方法

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と私はそれをグローバルにしたくありません。

+1

'Column:= grdSomeGrid.Columns.FindColumnByName( 'SOME') 'でどのような問題が予想されますか?もちろん、ColumnはNilであることを確認する必要があります。 – MartynA

答えて

2

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; 

更新:ビクトリアは親切現在の列を取得するための別の方法をある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; 
+0

これはカスタムグリッドですが、ほぼ同じです。私は世話をする列インデックスOnCellClickグローバル変数FColumnIndex:= Column.Index;しかし、私はよりエレガントに見えるこの方法を試してみます。すみません、私の英語は完璧ではありません。ありがとうございました。 –

+1

'TDBGrid'の場合は、[SelectedIndex](http://docwiki.embarcadero.com/Libraries/en/Vcl.DBGrids.TCustomDBGrid.SelectedIndex)も役立ちます。 [TDBGridEh](http://www.ehlib.com/online-help/frames.html?frmname=topic&frmfile=DBGridEh_TDBGridEh.html)は類似していません。 – Victoria

+1

@Victoria:確かに。あなたの1k +でBtwのお祝い – MartynA

関連する問題