ストリンググリッドで特定の列を入力不可にする方法

解決


リュウ  2004-09-30 21:25:14  No: 11222  IP: [192.*.*.*]

ストリンググリッドである列は入力可能、ある列は入力不可にしたいと思っていますが、列を入力不可にする方法とかあるのでしょうか?

編集    削除
LupinⅢ  URL  2004-10-01 01:20:08  No: 11223  IP: [192.*.*.*]

TStringGridのOnSelectCellやOnKeyPressイベントでなんとか出来そうな気がします。

編集    削除
にしの  2004-10-01 02:41:24  No: 11224  IP: [192.*.*.*]

微妙な動きなので申し訳ないですが^^;

  TMyStringGrid=class(TStringGrid)
  public
    property InplaceEditor;
  end;

を定義。

FormShowで、

  StringGrid1.SetFocus; // フォーカスを移す
  StringGrid1.EditorMode := True; // 編集モード開始(インプレースエディットが作成される)
  StringGrid1.EditorMode := False; // 編集モード終了
  Memo1.SetFocus; // 最初にフォーカスを与えるコントロールにしてください


とします。
あとは、SelectedCellで、

procedure TForm1.StringGrid1SelectCell(Sender: TObject; ACol,
  ARow: Integer; var CanSelect: Boolean);
begin
  if Assigned(TMyStringGrid(StringGrid1).InplaceEditor) then
    TMyStringGrid(StringGrid1).InplaceEditor.Enabled := (ACol and 1) = 1;
end;

とすれば、この場合は奇数列のみ入力を許可します。

編集    削除
jam  2004-10-01 17:24:32  No: 11225  IP: [192.*.*.*]

色々ありますね。こんなのも...(奇数列のみ編集可)
※起動時には呼ばれないので初期値はプロパティで設定しておくこと。

procedure TForm1.StringGrid1SelectCell(Sender: TObject; ACol,
  ARow: Integer; var CanSelect: Boolean);
begin
  with StringGrid1 do
  begin
    if (ACol mod 2) = 0 then
    begin
      Options := Options - [goEditing];
      EditorMode := false;
    end
    else
      Options := Options + [goEditing]
  end;
end;

編集    削除
リュウ  2004-10-02 07:20:19  No: 11226  IP: [192.*.*.*]

ありがとうございます。解決しました!

編集    削除