名前 題名 ▼ takiさん > 続編です。 > ErrSWを無限ループに入る前にTrueにすればいいことに気が…遅いわ! > それと、戻り先を積んだスタックが気になって実験してみました。 > > procedure TForm1.StringGrid1GetEditText(Sender: TObject; ACol, ARow: Integer; > var Value: string); > begin > beep; // このイベントが発生したことを確認するため。本来不要 > wait1000; // もし暴走した時に暴走を緩やかにするため。本来不要 > > Listbox1.Items.Append('1'); > if ErrSW then exit; > // > Listbox1.Items.Append('2'); > if ACol = 1 then begin > //---------------------------------------- > ErrSW := true; // 先にTrueにする > Listbox1.Items.Append('3'); > StringGrid1.Cells[1,ARow] := 'aaaaa'; // 以前は無限ループした。 > Listbox1.Items.Append('4'); > //--------------------------------------- > end; > Listbox1.Items.Append('5'); > ErrSW := false; > end; > > 結果 > 1,2,5,1,2,5,1,2,3,1,4,5,1,2,5と記録されていました。 > > 1,2,3でイベントが発生し、戻り先をスタックに積んで再び1に来てexitした後、 > 積んだ戻り先へ帰ってきて4,5と制御が流れたようです。 > > という事で、無限ループは回避できました。スタックメモリもオーバーフロー > しなくて済みそうです。 > しか〜し、2列目(Col=1)には'aaaaa'は表示されませんでした。 > 不思議なことに、Button等をクリックして一度フォーカスを外すと'aaaaa'と > 表示されます。 > > StringGrid1.Cells[1,ARow] := 'aaaaa';の代わりにShowmessage()でも大丈夫 > でした。 GIF,JPEG,PNG画像ファイル及びLZH,ZIPファイルをアップロードできます.600 x 1200 ピクセルを超える画像は縮小表示されます(画像クリックで拡大表示). (上限122000(120k)バイト) 削除キー Link