喫茶XRAYトップページ

[スレッド全体
]

[7607] Re:StringGridと格闘中…結果報告返信 削除
2014/5/19 (月) 09:05:00 おかぽん
▼ takiさん

タイマーとかあまり使わないので、暴走した経験はありませんが
イカはどうでしょう?

procedure TForm1.StrGrid1SelectCell(Sender: TObject; ACol,
  ARow: Integer; var CanSelect: Boolean);
begin
  //列が0から1へ移動しようとしており、同一行であるかの判定
  if (StrGrid1.Col = 0) and (ACol = 1) and
     (StrGrid1.Row = AROw) then begin
    //商品コードから商品名を取得し入力
    StrGrid1.Cells[1, ARow] := DBmodoki(StrGrid1.Cells[0, ARow]);
    //ここではセル移動を行わない
    CanSelect := False;
    //数量列に移動
    StrGrid1.Col := 2;
  end;
end;

セルの移動前に、移動先のセルの値を書き換えるので、
> キャレット(カーソル)があるセルに対してコードで文字を書き込むとループします。
には、あてはまらないと思います。

Delphi 5 のコードですけど、参考になれば幸いです。

[7608] Re2:StringGridと格闘中…結果報告返信 削除
2014/5/19 (月) 10:37:16 taki
▼ おかぽんさん

ありがとうございます。

> セルの移動前に、移動先のセルの値を書き換えるので、
> > キャレット(カーソル)があるセルに対してコードで文字を書き込むとループします。
> には、あてはまらないと思います。
>
> Delphi 5 のコードですけど、参考になれば幸いです。


Delphi XE4 では

procedure TForm1.StringGrid1SelectCell(Sender: TObject; ACol, ARow: Integer;
  var CanSelect: Boolean);
begin
 //列が0から1へ移動しようとしており、同一行であるかの判定
  if (StringGrid1.Col = 0) and (ACol = 1) and
      (StringGrid1.Row = ARow) then begin
     //商品コードから商品名を取得し入力
    StringGrid1.Cells[1, ARow] := DBmodoki(StringGrid1.Cells[0, ARow]);
     //ここではセル移動を行わない
    CanSelect := False;
     //数量列に移動
    StringGrid1.Col := 2;
  end;
end;

で正常(かつ理想通り)に動くことを確認しました。

OnSelectCellイベントはグリッド内のセルが選択される前に発生します。
CanSelect パラメータを false に設定すると,セルを選択できなくすることができます。

地雷を踏む前に検知してフタをして飛び越えたらいいんですね。なるほど。



[▼次のスレッド]
INCM/CMT
Cyclamen v3.82