dポイントプレゼントキャンペーン実施中!

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;

A 回答 (2件)

>>Application.ProcessMessage();


>これは、メッセージボックスを表示させるってことでしょうか?

ちがいます。
for文などのループでCPUのパワーを使い切ってしまうから他の処理ができないわけですから、一旦Windowsの他の処理に処理する時間をあげようというわけです。
ProcessMessage関数はこのWindowsに処理をもどす関数です。
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/06/09 11:47

わたしはC++Builderしか使わないのでうまくいくかどうかは微妙なんですが


Application.ProcessMessage();
をループ内で設定すればなんとかなるようにおもいます。

ただ、所定の処理はそれでいいのでしょうが、ことイベントドリブンなソフトか?といわれれば、おそらくは反則の部類に入るようにおもいます。

むしろ、GridのKeyPressや、KeyDownイベントで処理関数をコール、という方法を考えるべきだとはおもいますよ。

この回答への補足

ありがとうございます。

>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;
//--------------

こんな方法でやってみます。

補足日時:2006/05/25 17:43
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!