StringGrid1.Row := 2; StringGrid1.Col := 3; StringGrid1.SetFocus;
として特定のセルにフォーカスしたいのですがデバッガ例外が発生し、グリッドインデックスが範囲を越えてますとのメッセージがでます。
グリッドは10x10程度で十分範囲内なのですが。Delphi6、Win2Kです。
要はグリッドが表示された時に、マウスで特定のセルをクリックした際の状態
(背景色付でフォーカスされる→現状では薄い青)と同様の状態にしたいのですが。宜しくお願いします。
再現できませんでした。
StringGrid1(TStringGrid)を貼り付けて、Button1(TButton)のOnClickイベントで
procedure TForm1.Button1Click(Sender: TObject);
begin
StringGrid1.Row := 2;
StringGrid1.Col := 3;
StringGrid1.SetFocus;
end;
としましたが、正常に処理されます。
再現できるコードを提示してください。
それと、フォーカスされた辞典で、背景色は見えなくなると思いますが、Optionか何か変えてあります?
レスありがとうございます。
1)GridIndex云々のエラーメッセージの原因は
http://www2.big.or.jp/~osamu/Delphi/Tips/key.cgi?key=18#0029.txt
の色消しコードを入れていたためとわかりました。ここでIndexを制限したようです。
2)小生も新規にフォーマットを作成し、試験してみました。
配置したのはStringGrid、ボタン、ファイルオープンダイアログで、ファイルは外部からグリッドにデータを読ませるものです。「色消しコード?」は入れてません。ボタンに前記のコードを入れて実行するとたしかに不具合?は再現できず、フォーカスされます。
ところが、Formcreateの中に、前記コードを入れると今度は異なる例外、「無効/非表示ウィンドウではできません」旨の実行時エラーがでます。ボタンからはうまくいくのですが。FormCreateの中あるいは他の方法でフォーカスをあてる方法(要するにユーザがボタンを押さないで)はないでしょうか?
FormのOnCreateにはSetForcusは使用してはいけませんよ!
OnShowにでも記述されては如何でしょうか?
ありがとうございます。うまくいきました。
GRIDと命名したprocedureに3行入れて、FormのOnShowイベントで呼び出しました。
色がつかないのでGridのgoRowSelectoptionをTrueにしてRow全体を色つけしました。今回のプログラムでは行指定が主なので。rowを指定しないで別に用意した削除ボタンをうっかり押すと実行時エラーになるので困っておった次第です。
なお、FormCreate中で、setfocusコードを使用しなくともフォーカスするのですね。フォーカスとはなんぞやという新たな疑問がわきましたが次に進みたく今回は解決とします。ありがとうございました。
[Delphi-ML:20645]
http://www2.big.or.jp/~osamu/Delphi/delphi-browse.cgi?index=020645
このスレを参考にしてみてください。
ツイート | ![]() |