名前 題名 ▼ takiさん > ▼ Mr.XRAYさん > > > > > お疲れ様です. > > 時間のある時にいじらせていただきますです (^^; > > おかぽんさんのコードで解決ずみですが、せっかくなので私が試したことを書きます。 > > procedure TForm1.StringGrid1GetEditText(Sender: TObject; ACol, ARow: Integer; > var Value: string); > begin > beep; // このイベントが発生したことを確認するため。本来不要 > wait1000; // もし暴走した時に暴走を緩やかにするため。本来不要 > > if ACol = 1 then begin > //------------------------------------------- キャレットが2列目に入ると > テストするコード > //------------------------------------------- > end; > end; > > 以下にテストしたコードです。 > > StringGrid1.Cells[1,ARow] := 'aaaaa'; // 無限ループ > -- > Value := 'aaaaa'; // セーフ しかも直ちに表示される。正当な方法と思われる。 > -- > ShowMessage('Help me!'); // 無限ループ > -- > Form2.ShowModal; // エラー表示 無限ループ > > 無限ループに入ると、そのコードの次のコードに制御が行かない。 > ErrSW:boolean;を定義しても > > StringGrid1.Cells[1,ARow] := 'aaaaa'; // 無限ループ > ErrSW := true; // ここへ制御が来ないのでErrSWはtrueにならない。 > > しかも、イベント発生(割り込み)→戻り先をスタックに積む→ > イベント発生(割り込み)→戻り先をスタックに積む→…になり、 > スタックがオーバーフローするみたいです。(未確認) > > StringGridがEditモードでない場合は無限ループになりません。 > -- > StringGrid1.Options := StringGrid1.Options - [goEditing,goAlwaysShowEditor]; > StringGrid1.Cells[1,ARow] := 'aaaaa'; // セーフ ただし確定後に表示 > StringGrid1.Options := StringGrid1.Options + [goEditing,goAlwaysShowEditor]; > -- > aaaaaは直ちに表示されず、キャレットが次のセルに移動した時に表示されます。 > [goEditing,goAlwaysShowEditor]は[goEditing]だけでも大丈夫みたいです。 > > -- > StringGrid1.Options := StringGrid1.Options - [goEditing]; > StringGrid1.Cells[1,ARow] := 'aaaaa'; > StringGrid1.Col := 2; // キャレットを3列目に移動 > StringGrid1.Options := StringGrid1.Options + [goEditing]; > -- > 上記のコードは一見良いように見えますが、2列目に文字列があるとそのゴーストが > 3列目に表示されます。 > 例えば、1列目に間違った商品コードを入れて、2列目に「商品未登録」となった時、 > 再び1列目に正しい商品コードを入れて、2列目に「きのこの山」と表示後、 > 3列目に「きのこの山」とゴーストが表示されます。(T_T) > > -- > StringGrid1.Options := StringGrid1.Options - [goEditing]; > StringGrid1.Cells[1,ARow] := 'aaaaa'; > StringGrid1.Perform(WM_KEYDOWN, VK_TAB, 1); > StringGrid1.Perform(WM_KEYUP, VK_TAB, 1); > StringGrid1.Options := StringGrid1.Options + [goEditing]; > -- > これも上と同じで、幽霊が見えます。 > > みなさん。無駄なことをしないでくださいね。 GIF,JPEG,PNG画像ファイル及びLZH,ZIPファイルをアップロードできます.600 x 1200 ピクセルを超える画像は縮小表示されます(画像クリックで拡大表示). (上限122000(120k)バイト) 削除キー Link