単純な質問かもしれませんが、思うように制御できないのでご教授下さい。
グリッド内の、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;
「TStringGridで内容を変更するには」のソースに近いんだけど・・・
流用しているのか?
名前を変えてるのか?
同じ会社の人なのか?
[goEditing] は全てのセルに対して有効です。個々のセルに対しては出来ません
早速コメありがとうございます。
これ、分からなくって困ってたので、smilyさんのソースを参考にさせてもらいました。
もしかしたら、内容が似てるので同じ会社にいるのかもしれませんが・・・
このような場合、個々のセルに対して設定することって出来るのでしょうか?
これで設定不要を入力したセルには入力モードになりません
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;
ありがとうございます。
編集しない列に対して“+[goEditing]”とすればよかったんですね。
やはり、単純ミスでした。すみません。
ちなみに、EditorModeというプロパティも‘セルすべて’になってしまうのでしょうか?
ヘルプを見ても、いまいちよく分からなくて・・・
ツイート | ![]() |