StringGridの編集を制御するには

解決


MA  2007-12-12 21:48:41  No: 28930

単純な質問かもしれませんが、思うように制御できないのでご教授下さい。
グリッド内の、3列目をダブルクリックしたとき、中の文字列を変更し、
場合によっては、編集不可にしたくて、下記のようなソースを書きました。

グリッド内の他の列は編集可能だったり編集不可だったりと、
処理を変える予定ですが、
他の列は、すべて編集可能で、
3列目をクリックした後は、すべての列が編集不可能になってしまいます。

なぜか分からないので教えてください。
まだプログラムを始めたばかりで、単純なミスなのかもしれませんが、
どなたか、よろしくお願い致します。

uses
・・・・・・・
resourcestring
  NOT_PRT_WORD = '印刷しない';
  PRT_WORD = '印刷する';
  NOT_WORD = '設定不要';

procedure TForm1.StringGrid1DblClick(Sender: TObject);
var
  ACol             : Integer;
  ARow             : Integer;
  Text             : String;
begin
  with StringGrid1 do begin
      //3列目  設定不要だったら→編集不可、印刷する⇔印刷しないを変える処理
    if StringGrid1.Col = 3 then begin
      if StringGrid1.Cells[3,StringGrid1.Row] = NOT_WORD then begin
        StringGrid1.Options := StringGrid1.Options - [goEditing];
      end else begin
        ACol := StringGrid1.Col;
        ARow := StringGrid1.Row;
        Text := StringGrid1.Cells[ACol,ARow];
        if Text = PRT_WORD then begin
          StringGrid1.Cells[ACol,ARow] := NOT_PRT_WORD;
          StringGrid1.Options := StringGrid1.Options - [goEditing];
        end;
        if Text = NOT_PRT_WORD then begin
          StringGrid1.Cells[ACol,ARow] := PRT_WORD;
          StringGrid1.Options := StringGrid1.Options - [goEditing];
        end;
      end;
    end;
  end;
end;


KHE00221  2007-12-12 22:04:59  No: 28931

「TStringGridで内容を変更するには」のソースに近いんだけど・・・

流用しているのか?
名前を変えてるのか?
同じ会社の人なのか?

[goEditing]  は全てのセルに対して有効です。個々のセルに対しては出来ません


MA  2007-12-12 22:12:42  No: 28932

早速コメありがとうございます。

これ、分からなくって困ってたので、smilyさんのソースを参考にさせてもらいました。
もしかしたら、内容が似てるので同じ会社にいるのかもしれませんが・・・

このような場合、個々のセルに対して設定することって出来るのでしょうか?


KHE00221  2007-12-12 22:20:40  No: 28933

これで設定不要を入力したセルには入力モードになりません

procedure TForm4.StringGrid1SelectCell(Sender: TObject; ACol, ARow: Integer;
  var CanSelect: Boolean);
begin
    if StringGrid1.Cells[ACol,ARow] = '設定不要' then
    begin
      StringGrid1.Options := StringGrid1.Options - [goEditing];
    end
    else
    begin
      StringGrid1.Options := StringGrid1.Options + [goEditing];
    end;
end;


MA  2007-12-12 22:32:58  No: 28934

ありがとうございます。

編集しない列に対して“+[goEditing]”とすればよかったんですね。
やはり、単純ミスでした。すみません。

ちなみに、EditorModeというプロパティも‘セルすべて’になってしまうのでしょうか?
ヘルプを見ても、いまいちよく分からなくて・・・


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加