[リストへもどる]
一括表示

投稿時間:2003/09/10(Wed) 15:06
投稿者名:tak
Eメール:
URL :
タイトル:
form.show vbmodal 文法の仕様・・??
こんにちは。当方WIN2000Pro_SP4 + VB6.0_SP5で開発している者です。
現在、タスクトレイ常駐型ツールを作っています。
「スタートアップ」に登録しておき、パソコンが起動したらタスクトレイにぴょこんとアイコンが
表示されるようにしています。(ここまではなんとか作りこみました。)

以下にソースを抜粋します。なお、スタートアップは標準モジュールの「main」プロシージャです。
フォームが閉じられた後、常にラベル「ExitProc」にて終了処理を行おうとしています。

標準モジュール
Sub main()

'ここでINIファイルの内容を構造体に退避する処理を行っています。


Load Form1
Form1.Show vbModal
GoTo ExitProc

ExitProc:

'@
'ここでAPIの「ZeroMemory」にてINIファイル退避構造体をクリアしています。

End Sub

Private Sub Form_Activate()

    'フォームがアクティブになったら常にテキストボックスにフォーカスを当てます。
    Text1.SetFocus
    
    'タスクトレイにアイコンを追加し、フォームを隠します。
    Call TaskTrayAddIcon(Me.hwnd, Me.Icon, Me.Caption)
    'A
    Me.Visible = False
    
End Sub


上記の場合、Form1をモーダルで「Show」メソッドを走らせて、Form1の「Activate」イベントが走ります。
そこまでは意図通りなのですが、そのまま、「GoTo ExitProc」→「@」ステップに行ってしまいます。
本来なら、フォーム上の「×」ボタンなり「終了」ボタンを押下した時のみ「GoTo ExitProc」ステップに
行くようになると思ったんですが、どうも上手くいきませんでした・・。
この後、タスクトレイからツールを起動してもINIファイルの内容が構造体に退避されていませんでした・・。
(@ステップが処理されているのですから当然なのですよね・・。)

ちなみに「A」ステップにて「Me.Visible = True」とする事で、ユーザが終了しようとした時にのみ終了処理を
走らせるという流れは上手くいきました。

「Me.Visible = False」にしているとどうしてもスルーしてしまうものなのでしょうか??

投稿時間:2003/09/10(Wed) 15:42
投稿者名:nanashi
Eメール:
URL :
タイトル:
Re: form.show vbmodal 文法の仕様・・??
> 「Me.Visible = False」にしているとどうしてもスルーしてしまうものなのでしょうか??

ヘルプは見ましたか?

 "モーダル" ダイアログ ボックスは、終了 (非表示またはアンロード) しない限り
 次の操作に進むことができないダイアログ ボックスです。
 (MSDN抜粋)

つまり、非表示にすれば次の操作に進むということです。

投稿時間:2003/09/10(Wed) 15:45
投稿者名:魔界の仮面弁士
Eメール:
URL :
タイトル:
Re: form.show vbmodal 文法の仕様・・??
> Form1.Show vbModal
Form1がアンロードされるか、もしくは非表示になった時に、この次の行が実行されます。

> GoTo ExitProc
> ExitProc:
GoToステートメントは、できる限り使わない事をお奨めします。
それに、提示されたコードだと、GoToを使う意味が無いような……。

投稿時間:2003/09/16(Tue) 10:33
投稿者名:tak
Eメール:
URL :
タイトル:
解決しました
こんにちは。
木曜日から金曜日までちょっとインターネットがつかえない状況にありまして、亀レスになってしまいました。
すみません、今、お返事するとこのスレがあがって邪魔になりそうですが・・。

nanashiさん、魔界の仮面弁士さん、レスどうもありがとうございます。
>nanashiさん
アンロード時にのみ次の操作に移ると思い込んでいました・・。
初歩的なミスにご指摘ありがとうございました。

>魔界の仮面弁士さん
GoToステートメントは、個人的に便利で好きなので、よく使用しますが、使わない方がいいとの事ですね。
ちなみに今回では省いていますが、実は

GoTo ExitProc
ErrProc:
ExitProc:

と、いうように間にエラー時処理を入れて、このような流れになっています。
多分、複数のラベルを使うのも好ましくなさそうですね・・(;^^