• ベストアンサー

Delphi6 ループ中にキー入力

Delphi 6 です。 for next などのループの中で、stringgridのセルをEnterキーで選択させたい時、選択されるまで(キーが押されるまで)処理を進めたくない方法は、どうするんでしょうか? flg:=false; for i:=1 to 100 do begin ~諸々の処理で flg:=true; ~ if flg=true then x[i]:= stringgridの選択されたRow番号(はじめからフォーカスされている番号でなく) ~諸々の処理で flg:=false; ~ end;

質問者が選んだベストアンサー

  • ベストアンサー
  • techa
  • ベストアンサー率60% (41/68)
回答No.2

>>Application.ProcessMessage(); >これは、メッセージボックスを表示させるってことでしょうか? ちがいます。 for文などのループでCPUのパワーを使い切ってしまうから他の処理ができないわけですから、一旦Windowsの他の処理に処理する時間をあげようというわけです。 ProcessMessage関数はこのWindowsに処理をもどす関数です。

situmonnsya
質問者

お礼

ProcessMessage関数 またひとつ新しい知識を得ました。 ありがとうございます。

その他の回答 (1)

  • techa
  • ベストアンサー率60% (41/68)
回答No.1

わたしはC++Builderしか使わないのでうまくいくかどうかは微妙なんですが Application.ProcessMessage(); をループ内で設定すればなんとかなるようにおもいます。 ただ、所定の処理はそれでいいのでしょうが、ことイベントドリブンなソフトか?といわれれば、おそらくは反則の部類に入るようにおもいます。 むしろ、GridのKeyPressや、KeyDownイベントで処理関数をコール、という方法を考えるべきだとはおもいますよ。

situmonnsya
質問者

補足

ありがとうございます。 >Application.ProcessMessage(); これは、メッセージボックスを表示させるってことでしょうか? DelphiもMessageDigやInputBoxがありますが・・・・ s:=1; ~~~ //---------------- flg:=false; for i:=s to 100 do begin ~諸々の処理で flg:=true; ~ if flg=true then begin s:=i+1; break; // 他のルーチンでx[i]:= stringgridの選択されたRow番号をセット後もう一度ループさせる end; ~諸々の処理 ~ end; //-------------- こんな方法でやってみます。

関連するQ&A