VB6(SP4)をWin2000で使用しています。(下記問題はWinMeでも生じます)

フォームを一度消した後、処理をして、処理の終了後、再度表示すると最前面にならずに、タスクバー上のボタンやフォームのタイトルバーが点滅するだけになってしまいます。どのようにすれば、ちゃんと最前面になるのでしょうか?

プログラムの内容は
Private Sub Command1_Click()
  Me.Visible = False
  ※処理(他のAPを起動し、そのAPが終了するまで待機する)
  Me.Visible = True
  Me.SetFocus
End Sub

よろしくお願いします。

A 回答 (1件)

フォームを常に最前面に表示する関数が公開されています。


これを流用することで最前面表示が可能になると思います。

参考URL:http://www.users.skynet.be/sky56526/VBrsvp98/tec …
    • good
    • 0
この回答へのお礼

ありがとうございました。上手くいきました。
紹介していただいたホームページ、以前よく利用していたのですがいつのまにか凍結されていいたのですね。。

お礼日時:2001/04/04 15:01

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QSub ***( ) と Private Sub ***( ) の違い

初歩的な質問で申し訳ありませんが・・・

自分でコードを書いていても、イベントが発生したりした時の処理で、コードのウィンドウで上のドロップダウンリストで選択できる時の処理などは自動的に[Private Sub Command1_Click( )]などと出てくるのでそのまま使っています。自分で別途プロシージャーを作成する時は[Sub ****( )]としています。
ですがその違いを理解しないまま、自分で作成する時は[Private Sub]ではなくて[Sub]を使っています。

Sub ***( ) と Private Sub ***( ) の違いは何なんでしょうか?
どなたか説明頂けませんか?
よろしくお願いします。

Aベストアンサー

「Sub」の部分にカーソルを置いて[F1]を押せばヘルプが起動します。
「指定項目」のところに「Public」と「Private」の説明がありますよ。
省略して「Sub hogehoge()」とした場合は「Public」とみなされます。

Publicは「すべてのモジュールから呼び出せるプロシージャ」ということになります。
Privateとすると「同じモジュールの中からしか呼び出せないプロシージャ」となります。

もしExcelをお持ちでしたらExcelのVBEで標準モジュールを追加し、「Sub Test1()」と「Private Sub Test2()」を作成してみてください。
そしてExcelの[ツール]-[マクロ]-[マクロ(Alt+F8)]でマクロ実行のダイアログを表示させてみるとわかります。
ここには実行できるプロシージャの一覧が表示されますが、Test1は表示されているけれどTest2は表示されません。
Test1はPublicで、Test2はPrivateだからです。

Q呼び出したフォームが最前面に表示されない

いつもお世話になっております。
現在、医療システムの保守・メンテナンス業務を行っております。
先日、顧客より通常展開される画面上で入力した事項に対する、
チェック機能を追加し、チェックに引っかかった場合は、
新たな画面を起動して、その画面上で警告メッセージを表示すると共に、
チェックに対する修正を加えられるようにしたいとの要望を受けました。
現在、対応中ですが、どうしてもその画面が最前面に表示されません。

開発元に問い合わせれば済む話なのですが、基本的に回答が遅い為、
できることならこちら側で対処したいと思っております。
現在まで、社員の方の意見や本、インターネットで調べ「SetWindowsPos」等を試みましたが成功しませんでした。
元のシステムの仕様に問わず、100%最前面にフォームを表示させる
方法がございましたら、ご教授頂けますようお願い申し上げます。
なお、端末はWindows NT4.0、言語はVB5です。現在、プログラマーとして
生計をたてておりますが、経験が浅いため、知恵をお借りしたく
存知ます。何卒よろしくお願い申し上げます。

いつもお世話になっております。
現在、医療システムの保守・メンテナンス業務を行っております。
先日、顧客より通常展開される画面上で入力した事項に対する、
チェック機能を追加し、チェックに引っかかった場合は、
新たな画面を起動して、その画面上で警告メッセージを表示すると共に、
チェックに対する修正を加えられるようにしたいとの要望を受けました。
現在、対応中ですが、どうしてもその画面が最前面に表示されません。

開発元に問い合わせれば済む話なのですが、基本的に回答が遅い為、
...続きを読む

Aベストアンサー

> 試みましたが成功しませんでした。
SetWindowsPosを利用しますね。どういうふうに「成功しませんでした」なんでしょうか?

VB5とのことですから、SPなどが適応していないのかな?

Shell32.dllがVer4.71以降なら、Shellオブジェクトの「全ウィンドウを最小化」が利用できるかも?(Minimize.All)
その上で、必要なウィンドウだけ「元のサイズに」「アクティブ」にでどうでしょうか。

Qフォームの最前面が効かない

開発、コンパイル環境
VB.net 2008
ターゲットCPU:x86
Framework2.0
OS:Windows7

上記で作成したアプリで、
1、自作フォーム(Form1)をスタートアップオブジェクトに指定
2、参照設定に他社作成DLL(FormTest1含)を追加
3、Form1からFormTest1を起動

    ボタンクリックイベント
    Dim frm As New FormTest1
    frm.TopMost = True
    frm.Show()

おおむね上記のようなことを行っています。
問題は、自作アプリの起動後1回目の「FormTest1」起動だけ「Form1」の後ろに立ち上がります。
2回目以降は「Form1」の前面に立ち上がります。←これが希望しているの動作です。
実行PCはWindows7です。

散々調べたのですが解決策が見つかりませんでした。
この問題に解決策はあるのでしょうか?
どなたかご存じでしたらご教授願います。

Aベストアンサー

> Dim frm As New FormTest1
をボタンクリックイベント内でなくパブリックにしておいてメイン等で定義し、イベントの中で
frm.TopMost = True
frm.Show()
を行うではどうでしょうか。
Newが完了する前にTopMostが指定されていて最初は間に合わないような気もします。

あるいは
frm.Show(Me)
ではどうなるでしょうか。

Qフォームを最前面に表示したいです。

VB.NET、WinXPなのですが、
form1のボタンを押して、指定のフォルダを開いた後に
再度そのボタンのあるform1を最前面に表示したいのですが、
 System.Diagnostics.Process.Start("C:\WINDOWS")
 Me.Activate()
などとしてファイルがたくさんあるフォルダを開くと完了まで時間がかかり
次のMe.Activate()の命令が無視されてしまうようで
form1がアクティブにならないまま終わってしまいます。

少し待機しようと
 System.Diagnostics.Process.Start("C:\WINDOWS")
 System.Threading.Thread.Sleep(500)
 Me.Activate()
とすると正常に開くのですが、ファイルが少なくても
高速なマシンでも一律0.5秒停止してしまうのではなく、
表示が完了されているかどうかを判定するようにしたいのですが、

 Dim P As Object
P = CreateObject("Shell.application")
P.open("c:\windows")
 Do While P.Busy = True : Loop

などのように待機する方法があったら教えて頂きたいです。↑はエラーになってしまいました。

フォルダを開くコードを
 CreateObject("Shell.Application").Open("C:\WINDOWS")
に置き換えてみたり、
 Me.Focus()やMe.show()

などを試してみたのですが、うまくいきませんでした。
毎回申し訳ありませんが、よろしくお願いいたします。

VB.NET、WinXPなのですが、
form1のボタンを押して、指定のフォルダを開いた後に
再度そのボタンのあるform1を最前面に表示したいのですが、
 System.Diagnostics.Process.Start("C:\WINDOWS")
 Me.Activate()
などとしてファイルがたくさんあるフォルダを開くと完了まで時間がかかり
次のMe.Activate()の命令が無視されてしまうようで
form1がアクティブにならないまま終わってしまいます。

少し待機しようと
 System.Diagnostics.Process.Start("C:\WINDOWS")
 System.Threading.Thr...続きを読む

Aベストアンサー

Me.TopMost = True
'何かの処理

でいかがでしょう。

QエクセルVBAのフォームを最前面にする方法を教えてください。

エクセルVBAなのですが、UserForm1を最前面に表示して、
他のどのウインドウをアクティブにしても消えない状態にしたいのですが、
どのようなコードを書けばできるでしょうか。
VB.NETで表すとMe.TopMost = Trueとなると思うのですが、
エクセルVBAだとそのような書き方はないようです。

もうしわけございませんがご教示頂きたく、お願いいたします。m(__)m

Aベストアンサー

あらかじめ、フォームのプロパティの[ShowModal]をFalseにしておいて、以下のような方法ではダメでしょうか?
画面のアクティブイベントを利用するのは、個人的に嫌いなのですが。。。


Private Declare Function GetForegroundWindow Lib "user32" () As Long
Private Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
Private Const HWND_TOPMOST As Long = -1
Private Const SWP_NOSIZE As Long = &H1&
Private Const SWP_NOMOVE As Long = &H2&


Private Sub UserForm_Activate()
Call SetWindowPos(GetForegroundWindow, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE)
End Sub

あらかじめ、フォームのプロパティの[ShowModal]をFalseにしておいて、以下のような方法ではダメでしょうか?
画面のアクティブイベントを利用するのは、個人的に嫌いなのですが。。。


Private Declare Function GetForegroundWindow Lib "user32" () As Long
Private Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
Private Const HWND_TOPMOS...続きを読む


このカテゴリの人気Q&Aランキング

おすすめ情報