• ベストアンサー

モーダルの掛け方

自分で作成したダイアログウィンドウにモーダルを掛けるため、表示時に   XXXX.show vbModal としているのですが、これでは、アプリケーションモーダルとなります。 システムモーダルを掛けたい場合は、どのようにすればいいのでしょうか。知っている方、教えて下さい。 なお、使用している環境は、W2K・VB6です。

質問者が選んだベストアンサー

  • ベストアンサー
  • haporun
  • ベストアンサー率40% (230/562)
回答No.2

昔はSetSysModalWindowというAPIでできたのですが、32ビットになってできなくなったようです。 そもそも、このような機能を使ったアプリケーションが強制終了してしまったとき、大変なことになります。 また、ほかのウィンドウを触れないというのは、ユーザーにとってこの上なく不満です。 プログラマが自由にしたいことは、決してユーザーにとって自由でないことを覚えておいてください。

参考URL:
http://www.microsoft.com/JAPAN/developer/library/jpuipf/_win32_setsysmodalwindow.htm
Lara-Port
質問者

お礼

ご回答、ありがとうございます。 やはり、SetSysModalWindow以外やる方法はないですか。 どうしてもWindowsカーネル以外をLockしなくてはいけない状況が仕様上発生するのですが、現在、プロトタイプを作成しているので、本来行う複雑な処理を行わず、とりあえず、システムモーダルにして、同じような状態にしたかったのです。 あきらめて、別途、考えます。 ご意見、ありがとうございました。

その他の回答 (1)

  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.1

こんにちは。maruru01です。 やりたいことは、ダイアログを常に前面に表示しておきつつ、後ろのフォームのテキストボックスなどを編集出来るように、ということでしょうか。 つまり、Wordなどの検索ダイアログボックスのような表示です。 それなら、Showメソッドに第2引数を指定すれば出来ます。 ダイアログフォーム名.Show vbModeless, オーナーフォーム名 オーナーフォームは元のフォームです。 では。

Lara-Port
質問者

補足

maruru01さん。ご回答有り難うございます。 言葉足らずで申し訳ありませんでした。 やりたいことは、単純です。 自分のダイアログを表示したら、その他のアプリケーション及び自分のアプリケーションから開いたウィンドウが前に出てくることなく、且つ、他のアプリケーションの処理を止めたいのです。 MsgBoxの第2引数であるbutton(ボタンの種類、数などを指定する引数)で、「vbSystemModal」を与える事ができますよね。 それと同じ事を、自分で作成したDialogFormオブジェクトを表示したときにやりたいのです。 手法がお解りの方、よろしくお願いいたします。

関連するQ&A

  • [VB6]オーナーウィンドウを設定したShowメソッド

    こんにちは。 XP(SP2),VB6(SP6)で 親フォーム -> 子ダイアログ -> 孫ダイアログを表示する処理を作成し実行すると、 子ダイアログを閉じた際、親フォームが他のアプリケーションの下 にもぐってしまいます。 (例えばメモ帳上で実行して、子ダイアログを閉じた時にメモ帳の下に隠れてしまう、デバッグ時ならばVBの下に隠れる) 孫ダイアログを表示させずに、子を閉じるとこの様に減少は起こりません。 なぜこの様になるのでしょうか? 又、回避策はあるでしょうか?ご存じの方、教えてください。 以下、現象再現用のテストプログラムです。 親フォーム Private Sub Command1_Click() dlg1.Show vbModeless, Me End Sub 子ダイアログ(dlg1) Private Sub Command1_Click() dlg2.Show vbModal, Me End Sub Private Sub CancelButton_Click() Unload Me End Sub 孫ダイアログ(dlg2) Private Sub CancelButton_Click() Unload Me End Sub

  • VB6のvbModalに関して

    お世話になります VB6のvbModalに関して教えていただけないでしょうか やりたいこと Form1のモーダルとしてForm2を起動 Form2のモーダルとしてForm3を起動 Form3が閉じられるまで、Form1とForm2はいじれない様にしたいのですが、 単純に、以下の様にコーディングしたら、エラーとなってしまいました。 Form1から Form2.Show vbModal … これは正常に動作 Form2から Form3.Show vbModal … 以下のエラー発生 「子フォームはモーダルにできません」 vbModalのネストはできないのでしょうか? できない場合、別の解決策はございますでしょうか?

  • vb6を使用しています。VBAの構文をvb6に置き換えて作りましたがう

    vb6を使用しています。VBAの構文をvb6に置き換えて作りましたがうまくいきません。 VBAの構文はプリンターのダイアログボックスを表示するもので Application.Dialogs(xlDialogPrinterSetup).Show これをvb6で下記のようにしました Set objXL = CreateObject("Excel.Application") objXL.Dialogs(xlDialogPrinterSetup).Show ところがxlDialogPrinterSetupの部分で「変数が定義されてません」とでます。 どうすればいいのでしょう?

  • VB.NETで作成したフォームをXPスタイルで表示したい

    win2000 と VB.NET を利用して開発を行っていますが、 作成したアプリケーションを XP上で実行してもXPスタイルで表示できません。 ・対象のコントロールの「FlatStyle」を「system」にする ・exeと同じ場所に xxxx.exe.manifest を作成する。 の2点を行ったのですが、上手く動いてくれません。 なにかコツのようなものがあれば、ご教授お願いします。

  • ファイル選択ダイアログについて

    VB.net(2003)で作成したアプリケーションに ファイルを開くダイアログ関数(OpenFileDialog関数)を使用して、 ファイルを取り込む機能を作成しましたが、 ファイルを開く画面の左側にあるデスクトップを選択した際、 又は1つ上のフォルダへをクリックしてデスクトップの場所を表示した際に アプリケーションとダイアログが消えてしまう現象が発生しました。 原因となる事象がわかる方がおりましたら、ご教授願います。  動作環境 OS : WindowsXP SP3

  • VB6のアプリケーションで入力した値をASPで表示する方法を探しています。

    質問させていただきます。 VB6で作成したアプリケーションからASPのページを呼び出す プログラムを作成しています。 アプリケーション側で入力した値を引数として渡し、 ASPのページで表示させたいのですが、どのようにすれば いいでしょうか? 方法や参考になるサイトなどありましたらお願いします。 開発環境は Windows2000 VB6 IIS5.0 です。

  • ファイル保存時のダイアログ表示フォルダを変更したい

    ファイル保存時にネットワーク上のフォルダを表示するダイアログを表示するには どのように記述すればよろしでしょうか。ご教授よろしくお願い致します。 以下、教えていただいたコードですが Const PathName = "\\●●\○○\" Call SetCurrentDirectory(PathName) Application.Dialogs(xlDialogSaveAs).Show このコードでファイルを開くダイアログを記述すると 設定したネットワーク上のフォルダを表示するのですが Application.Dialogs(xlDialogOpen).Show  ---OK ファイル保存のダイアログを記述すると では、デスクトップがダイアログに表示されます。 Application.Dialogs(xlDialogSaveAs).Show ---NG Application.Dialogs(xlDialogSaveAs).Show の場合(保存ダイアログ表示)は どのように記述すれば、ネットワーク上のフォルダを表示できますでしょうか。 よろしくお願い致します。

  • VC++  Windowsアプリケーション作成

    【VC++ 2005 ExpressEdition】使用 ●今回、上記の環境を用いて簡単なWindows用ツールでも作成しようと思っております。  実際起動し、新しいプロジェクトの開始で、Windowsフォームアプリケーションを選択したのですが、初めから様々なcppファイルやらヘッダファイルがあり、プログラムもすでに大量に書かれていてどこにWinMainがあり、どこから書いていけばよいのか分かりません。 試しにボタンをフォームデザインで作成し、ダブルクリックによりイベントを作成してみたのですが、 private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) このような文が表示されました。 過去にBolandの開発環境を使い1からウィンドウを作成したことがあり、BN_CLICKEDなどのメッセージが使われるのだろうと思っていたのですが全く意味が分かりませんでした。参考書やサイトに書いてあるプログラムもどこに書いてよいのか分かりません。 VC++でのWindowsアプリケーションの作成時の使い方をどなかた教えていただけないでしょうか。 尚、VC#、VBでのWindowsアプリケーション作成、C++でのWinAPIについては、かじった程度の経験はあります。

  • 新しいフォームへのデータを渡したい

    Visual studio 2005にてフォームアプリケーションを作成しています。 メインとなるフォーム(form.vb)と、ダイアログ表示用のフォーム(dialog.vb)を使い、メインでの値をダイアログ用のフォームの方で表示させたいのです。 メインのTextBox1にテキストを入力させ、「実行」ボタンを押すとダイアログ表示用フォームが立ち上がり、ダイアログのTextBox1に同じものを表示させたい・・・という寸法です。 できるだけ簡素なコードでこれを行うにはどうすればいいでしょうか? よろしくお願いします。

  • VB2005でのSourceSafeの使用について

    SourceSafe6.0のデータベースをVisual Studio2005で使用しています。 ネットワークユーザー名と、SourceSafeのログインユーザー名が違うため ログインダイアログ?が出てきてしまいます。 VB6の時は環境変数にSSPWDとSSUSERを設定すれば VB6から使用しても、SourceSafe単体で起動してもダイアログは表示され 無かったのですがVB2005から使用した場合、SourceSafe単体起動では のダイアログは出て来ないのですがVB2005からの場合は ログインダイアログが出てきてしまいます。 出てこないようにする設定をご存知の方がいらっしゃいましたら お教えください。 よろしくお願いします。

専門家に質問してみよう