実行順がおかしい

 投稿者:しばっち  投稿日:2019年 8月30日(金)19時57分4秒
  10 LET G$=CONFIRM$("よろしいですか(1)")
20 INPUT  PROMPT "メッセージ(1) ":A$
30 PRINT A$
40 LET G$=CONFIRM$("よろしいですか(2)")
50 INPUT  PROMPT "メッセージ(2) ":B$
60 PRINT B$
70 END

実行順が
10行 → 20行 → 40行 → 30行 → 50行 → 60行 → 70行
となっている。
 

Re: 実行順がおかしい

 投稿者:SHIRAISHI Kazuo  投稿日:2019年 8月31日(土)08時08分23秒
  > No.4699[元記事へ]

ご報告ありがとうございました。
CONFIRM$関数(独自拡張)の不具合です。
修正します。


> 10 LET G$=CONFIRM$("よろしいですか(1)")
> 20 INPUT  PROMPT "メッセージ(1) ":A$
> 30 PRINT A$
> 40 LET G$=CONFIRM$("よろしいですか(2)")
> 50 INPUT  PROMPT "メッセージ(2) ":B$
> 60 PRINT B$
> 70 END
>
> 実行順が
> 10行 → 20行 → 40行 → 30行 → 50行 → 60行 → 70行
> となっている。
>
 

Re: 実行順がおかしい

 投稿者:しばっち  投稿日:2019年 9月 1日(日)07時20分28秒
  > No.4699[元記事へ]

下記の実行順もおかしい
ループ(繰り返し)にすると実行順がおかしくなるようです。
FOR文を外すと正しく動きます。
ステップ実行では問題ありません。

FOR I=1 TO 3
   SELECT CASE  MESSAGEBOX("よろしいですか "&STR$(I))
   CASE 1
      PRINT "OK"
   CASE 2
      PRINT "CANCEL"
   END SELECT
NEXT I
END

EXTERNAL  FUNCTION MESSAGEBOX(M$)
!flagの値

LET MB_OK=00000000                   ![OK]
LET MB_OKCANCEL=00000001             ![OK][キャンセル]
LET MB_ABORTRETRYIGNORE=00000002     ![中止][再試行][無視]
LET MB_YESNOCANCEL=00000003          ![はい][いいえ][キャンセル]
LET MB_YESNO=00000004                ![はい][いいえ]
LET MB_RETRYCANCEL=00000005          ![再試行][キャンセル]

!定数名    値   ボタンの種類
!IDOK=      1   !OK
!IDCANCEL=  2   !キャンセル
!IDABORT=   3   !中止
!IDRETRY=   4   !再試行
!IDIGNORE=  5   !無視
!IDYES=     6   !はい
!IDNO=      7   !いいえ

!定数名                      値           アイコンの種類
LET MB_ICONSTOP=16          !0x00000010   停止のアイコン
LET MB_ICONQUESTION=32      !0x00000020   疑問符のアイコン
LET MB_ICONEXCLAMATION=48   !0x00000030   感嘆符のアイコン
LET MB_ICONINFORMATION=64   !0x00000040   吹き出しに「i」のアイコン
LET MESSAGEBOX=MESSBOX(0,M$,"BASIC",BITOR(MB_OKCANCEL,MB_ICONEXCLAMATION))
END FUNCTION

EXTERNAL  FUNCTION MESSBOX(OWNER,TEXT$,CAPTION$,FLAG)
ASSIGN "user32.dll","MessageBoxA"
END FUNCTION

-----------------------------------------------------
下記の実行順もおかしい

FOR I=1 TO 3
   LOCATE CHOICE:A
   PRINT I;":";
   PRINT A
NEXT I
END
------------------------------------------------------
下記の実行順もおかしい

FOR I=1 TO 3
   PRINT I;":";
   LOCATE VALUE ,RANGE 0 TO 100:A
   PRINT A
NEXT I
END

別ウィンドゥを出して繰り返すと実行順が狂うようです

 

Re: 実行順がおかしい

 投稿者:SHIRAISHI Kazuo  投稿日:2019年 9月 1日(日)20時56分46秒
  > No.4705[元記事へ]

LOCATE VALUE, LOCATE CHOICEは修正可能です。
ASSIGN文は,対象がGUI要素かどうか判断するのが難しいので,
BASICAccに準じて ,GUI オプションを追加することで対応します。


> 下記の実行順もおかしい
> ループ(繰り返し)にすると実行順がおかしくなるようです。
> FOR文を外すと正しく動きます。
> ステップ実行では問題ありません。
>
> FOR I=1 TO 3
>    SELECT CASE  MESSAGEBOX("よろしいですか "&STR$(I))
>    CASE 1
>       PRINT "OK"
>    CASE 2
>       PRINT "CANCEL"
>    END SELECT
> NEXT I
> END
>
> EXTERNAL  FUNCTION MESSAGEBOX(M$)
> !flagの値
>
> LET MB_OK=00000000                   ![OK]
> LET MB_OKCANCEL=00000001             ![OK][キャンセル]
> LET MB_ABORTRETRYIGNORE=00000002     ![中止][再試行][無視]
> LET MB_YESNOCANCEL=00000003          ![はい][いいえ][キャンセル]
> LET MB_YESNO=00000004                ![はい][いいえ]
> LET MB_RETRYCANCEL=00000005          ![再試行][キャンセル]
>
> !定数名    値   ボタンの種類
> !IDOK=      1   !OK
> !IDCANCEL=  2   !キャンセル
> !IDABORT=   3   !中止
> !IDRETRY=   4   !再試行
> !IDIGNORE=  5   !無視
> !IDYES=     6   !はい
> !IDNO=      7   !いいえ
>
> !定数名                      値           アイコンの種類
> LET MB_ICONSTOP=16          !0x00000010   停止のアイコン
> LET MB_ICONQUESTION=32      !0x00000020   疑問符のアイコン
> LET MB_ICONEXCLAMATION=48   !0x00000030   感嘆符のアイコン
> LET MB_ICONINFORMATION=64   !0x00000040   吹き出しに「i」のアイコン
> LET MESSAGEBOX=MESSBOX(0,M$,"BASIC",BITOR(MB_OKCANCEL,MB_ICONEXCLAMATION))
> END FUNCTION
>
> EXTERNAL  FUNCTION MESSBOX(OWNER,TEXT$,CAPTION$,FLAG)
> ASSIGN "user32.dll","MessageBoxA"
> END FUNCTION
>
> -----------------------------------------------------
> 下記の実行順もおかしい
>
> FOR I=1 TO 3
>    LOCATE CHOICE:A
>    PRINT I;":";
>    PRINT A
> NEXT I
> END
> ------------------------------------------------------
> 下記の実行順もおかしい
>
> FOR I=1 TO 3
>    PRINT I;":";
>    LOCATE VALUE ,RANGE 0 TO 100:A
>    PRINT A
> NEXT I
> END
>
> 別ウィンドゥを出して繰り返すと実行順が狂うようです
>
>
 

戻る