こんにちは。
先日はお世話になりありがとうございました。
Windows XP
Delphi 7 で開発しています。
StringGridを利用してOracleデータテーブルにある特定のフィールドを
編集しようと思っています。
StringGridに表示をすることはできたのですが
特定のフィールドだけ編集できるようにできるのでしょうか。
現在は goEditingプロパティがFalseになっているため、全フィールドが
編集できません。逆にgoEditingプロパティをTrueにすると
全フィールドが編集可能になってしまします。
よろしくお願いいたします。
下記例では0〜2列のみ編集可能です。
procedure TForm1.StringGrid1SelectCell(Sender: TObject; ACol,
ARow: Integer; var CanSelect: Boolean);
begin
case ACol of
0..2: StringGrid1.Options := StringGrid1.Options + [goEditing];
else StringGrid1.Options := StringGrid1.Options - [goEditing];
end;
end;
皆様、お騒がせしました。
特定の列の編集が以下の内容で出来ました。
【SelectCellイベント】
//3列目(金額)を編集可能にして、それ以外を編集不可にする
if ACol = 2 then
StringGrid1.Options := StringGrid1.Options + [goEditing]
else
StringGrid1.Options := StringGrid1.Options - [goEditing];
ここでもう一つご質問ですが
この編集可能な列は数字のみしか入力できないようになりますか?
deldelさん、すれ違いでした。
書き込み中にご回答いただいたようです。
ありがとうございます。
ここでもう一つご質問ですが
この編集可能な列は数字のみしか入力できないようになりますか?
>この編集可能な列は数字のみしか入力できないようになりますか?
できるか,可能かというのであれば,できます.
(1) 可能なことが分かったので,ネット検索してみる
(2) 自分でテストコードを書いて実行してみる
(3) エラー等が発生したり,期待した動作がしない場合,
具体的なコードを示して,この掲示板で訊いてみる
と言った手順になると思います.
色々やり方はあると思いますが、以下はどうでしょうか?
procedure TForm1.StringGrid1KeyPress(Sender: TObject; var Key: Char);
begin
if not (Key in ['0'..'9', Char(VK_BACK), Char(VK_RETURN)]) then Key := #0;
end;
StringGridの入力時にはInplaceEditorと呼ばれる必要なときだけ表示されるEditが使われている
↓
Delphi 7ではInplaceEditorには直接アクセスできないが、方法はある(→Delphi StringGrid InplaceEditorで検索)
↓
TEditで入力文字を制限するにはOnKeyPressイベントで不要な文字を#0で潰せばいい
Mr.XRAYさん、deldelさん、通りすがりさん、ご回答ありがとうございます。
deldelさんのコードで一発で出来てしまいました。
楽をしてしまいました。
後が怖いな〜。
もっと努力しなくては・・・
ツイート | ![]() |