田楽dllの"SHOWDIALOG"についてNo.03923
さくら さん 03/10/29 20:26
 
はじめまして、お世話になります。
田楽dllからダイアログを表示させた直後の”while文"が理解出来ません(dgdll.mac
によると、お約束の処理とのことですが....)。
御多忙中のところ誠に恐縮ですが、解説していただければ幸いです。

if (!dllfunc("SHOWDIALOG",hidemaruhandle(0),1)) goto ERROR;
while (1) {
 $name = "";
 while (strlen($name) == 0) $name = dllfuncstr("WAITCTRLNOTIFY",10);
 if ($name == "0" || $name == "1") break
...........

さくら

[ ]
RE:03923 田楽dllの"SHOWDIALOG"についてNo.03924
杉浦 まさき さん 03/10/30 07:41
 
さくらさん、はじめまして。
田楽DLLの作者の杉浦 まさきと申します。
#当方現在長期出張中にて回答が滞りがちになってしまうと
 思いますが、ご了解いただきますようお願いいたします。

>田楽dllからダイアログを表示させた直後の”while文"が理解出来ません(dgdll.ma
>cによると、お約束の処理とのことですが....)。

この while 文は、ダイアログに配置したボタンやリストなどの
コントロールからの通知コードを待ち、通知コードが届いたら
そのコードをチェックして適切な処理を行うためのループです。

さくらさんがコピペされていた

>while (1) {
> $name = "";
> while (strlen($name) == 0) $name = dllfuncstr("WAITCTRLNOTIFY",10);
> if ($name == "0" || $name == "1") break
>...........

の、内側の while ループが「コントロールからの通知コードを待つ」
処理を行っています。具体的には、WAITCTRLNOTIFY() 関数を呼び出して
10ミリ秒だけ通知コードの到着を待ち、通知コードが届いたら
(= $name に何か文字列が代入されたら)ループを抜けます。

それ以後のコードは $name の中身(通知コード)を調べています。
ダイアログに okcancel コントロールを配置した場合、それらの
「OK」「キャンセル」ボタンにはデフォルトで "1", "0" という
通知コードが割り当てられていて、ユーザーがそれらのボタンを
クリックすると、"1" または "0" が $name に代入されます。
直後の if 文はその場合をチェックしていて、(「OK」または
「キャンセル」ボタンが押されたらダイアログを閉じるのが
普通なので)条件に一致したら外側のループを抜けてダイアログを
閉じる処理(ENDDIALOG() 関数の呼び出し)に進みます。

…てな感じですが、答になっているでしょうか?

[ ]
RE:03924 田楽dllの"SHOWDIALOG"についてNo.03925
さくら さん 03/10/30 10:19
 
杉浦 まさき様
 お世話になります。
 田楽dll作者御本人様からの迅速なる御返答に感激しております!
 非常にご丁寧な解説をしていただき、私にも理解することが出来ました。
 ありがとうございました。

 この機会にもう一つ質問させて下さい。
 while (strlen($name) == 0) と while ($name=="")
は同じと考えていいのでしょうか?

さくら


[ ]
RE:03925 田楽dllの"SHOWDIALOG"についてNo.03926
杉浦 まさき さん 03/10/30 16:36
 
ども、杉浦 まさきです。

> この機会にもう一つ質問させて下さい。
> while (strlen($name) == 0) と while ($name=="")
>は同じと考えていいのでしょうか?

はい、同じ意味です。
#速度の違いは若干あるかもしれませんが、この場合
 誤差範囲だと思います。

[ ]