• ベストアンサー
  • 暇なときにでも

コモンダイアログの表示位置

コモンダイアログの「ファイルを開く」を実行すると 左上に表示されてしまいます。 大抵のソフトは中央に表示されていますが、どのよう にすれば中央に表示されるのでしょうか。 どなたか教えて下さい。

noname#4956
noname#4956

共感・応援の気持ちを伝えよう!

  • 回答数3
  • 閲覧数2553
  • ありがとう数7

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

  • ベストアンサー
  • 回答No.3

bakaさんが示した方法以外では、ダミーのウィンドウを作り、そこにコモンダイアログを配置して、ダミーのウィンドウの方の表示位置を指定してやれば簡単に実現できます。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

簡単に実現できる方法を教えて頂き、ありがとうございました。 早速使わさせていただきました。

関連するQ&A

  • コモンダイアログの表示

    VB.NETでエクセルをコントロールするS/Wを作っています保存時にコモンダイアログを表示させたいのですが、ツールBOXに見あたりません。どうすれば出てきますか。

  • コモンダイアログからExcelへ

    コモンダイアログから既存のExcelファイルを表示させたいのですが、わかりません。 コモンダイアログの「開く」を押すとフルパスが取得されるというのは理解できたのですが、実際にプログラムをどう書いていいのかわかりません。 ファイルのパスを使うとはどういうことでしょうか? またshell関数をどう使えばいいのでしょうか? 基本的な質問で申し訳ありませんが、よろしくお願いします。

  • コモンダイアログの設定

    コモンダイアログを表示させると「読み取り専用ファイルとして開く」というチェックボックスがダイアログの下のほうに出ていますが、このチェックボックスを表示させないようにするにはどうすればいいのでしょうか? コモンダイアログはGetOpenFileName関数で表示させています。 また、APIを利用する上で参考になるサイトをご存知でしたら教えてください。

その他の回答 (2)

  • 回答No.2
  • baka
  • ベストアンサー率83% (15/18)

Windows の仕様のようです。 まともな方法では無理だと思いますので、 諦めた方がよろしいでしょう。 一応試しに作ってはみましたが、決してお勧めしません。 ダイアログの位置を変えると、アプリを起動し直すまで その位置が確保されてしまう中途半端なものです。 サブクラス化に関しては、私自身ヘルプを参考に 作っただけで、コードの意味を熟知しておらず、 どんな弊害があるか知れません。もし実行される際は 十分注意してください。甚だ無責任ですが... (動作確認は VB 6 & Win 98) *フォームモジュールへ (オブジェクト名は "Form1" のままで、 CommonDialog コントロールおよび CommandButton コントロールを貼り付けてください。) Option Explicit Private Sub Form_Load() ghWnd = Me.hWnd CommonDialog1.DialogTitle = "ファイルを開く" End Sub Private Sub Command1_Click() Hook CommonDialog1.ShowOpen Unhook End Sub *標準モジュールへ Option Explicit Private Const GWL_WNDPROC = -4 Private Const WM_WINDOWPOSCHANGED = &H47 Private Const SWP_NOSIZE = &H1 Private Type RECT Left As Long Top As Long Right As Long Bottom As Long End Type Private Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long Private Declare Function GetWindowRect Lib "user32" (ByVal hWnd As Long, lpRect As RECT) 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 uFlags As Long) As Long Global ghWnd As Long Global lpPrevWndProc As Long Private blnOver As Boolean Public Sub Hook() lpPrevWndProc = SetWindowLong(ghWnd, GWL_WNDPROC, AddressOf WindowProc) End Sub Public Sub Unhook() SetWindowLong ghWnd, GWL_WNDPROC, lpPrevWndProc End Sub Private Function WindowProc(ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long If Msg = WM_WINDOWPOSCHANGED Then SetDialogPos WindowProc = CallWindowProc(lpPrevWndProc, hWnd, Msg, wParam, lParam) End Function Private Sub SetDialogPos() Dim hWnd As Long Dim RECT As RECT Dim X As Long Dim Y As Long If blnOver Then Exit Sub hWnd = FindWindow(vbNullString, Form1.CommonDialog1.DialogTitle) If hWnd = 0 Then Exit Sub GetWindowRect hWnd, RECT With RECT X = .Right - .Left Y = .Bottom - .Top End With With Screen X = (.Width / .TwipsPerPixelX - X) / 2 Y = (.Height / .TwipsPerPixelY - Y) / 2 End With SetWindowPos hWnd, ghWnd, X, Y, 0, 0, SWP_NOSIZE blnOver = True Unhook End Sub

共感・感謝の気持ちを伝えよう!

質問者からのお礼

ありがとうございました。 早速、サンプルプログラムを試みましたが強制終了してしまい実行できませんでした。(2度テストしました) 折角プログラムを組んでもらったのに残念です。 ご指摘通りシステムに問題があるみたいですね。

  • 回答No.1
noname#9414
noname#9414

それって、単純にソフトの仕様なのではない でしょうか。 フリーソフトやシェアウェアの場合、プログラムの 仕方次第で、ファイルダイアログの表示が、 画面中央にならない場合があります。 どうしても気になるというのであれば、 そのソフトの名前を補足していただければ、 確認してみますよ。ただし、市販ソフトの場合は、 購入しなければならないので、確認は 出来ません。 #持っていれば別ですが、そう偶然はないでしょう。 間違いがありましたらご指摘ください。 ではでは☆

参考URL:
どんなソフトの時になるのでしょうか。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

ソフトというのは未熟な私が作っている自作なのです。 確認していただけるという心尽くしに感謝しております。 ありがとうございました。

関連するQ&A

  • コモンダイアログを表示したい

    Windows98/VisualBasic5.0を使用しています。 ファイル名を指定させるために、コモンダイアログを表示したいのですが方法がわかりません。 コントロールを貼り付ければよいのでしょうか? 初歩的な質問で申し訳ありませんが、よろしくお願いします。

  • 新しくを開くときのウィンドウの位置

    特に困っているわけではありませんが、色々なソフトを起ち上げる時、画面中央に表示される場合とか、左上端に寄って配置される場合がありますが、これはどこで制御されているのでしょうか? できればどのファイル(ウィンドウ)も画面中央に表示できるように設定したいのですが…。 どなたかご存じの方みえましたら教えてください。よろしくお願いします。

  • コモンダイアログの表示座標

    フルスクリーンモードで、WinAPIの「GetOpenFileName」や 「GetSaveFileName」などのコモンダイアログを使用する際、 稀にダイアログが表示されない時がありました。 おそらくフルスクリーンモードで表示されている領域よりも外側に 表示されていると思うので、ダイアログを表示する座標を指定したいのですが、 その方法が分からず困っております。 ご存知の方いらっしゃいましたらお教えください、 宜しくお願い致します。

  • コモンダイアログを表示メニューが詳細になった状態で開きたい

    VB6で、コモンダイアログを表示したときのデフォルトの状態を、詳細表示モードにしたいのですが、どのようなオプションを指定してオープンすればよろしいのでしょうか。 教えてください。 よろしくお願いします。

  • 実行時にコモンダイアログのファイルの種類に任意のフィルタ条件

    言語:VB6 OS:WindowsXP 実行時にコモンダイアログの「ファイルの種類」欄に対して 任意のフィルタ条件を設定可能とする方法が分かりません。 例えば、コモンダイアログを開いた時に「ファイルの種類」が 編集可能になり、ユーザーが仮に「test*.txt」と設定すると 条件にあったファイル「text1.txt」や「test2.txt」が表示する と言ったものです。 実現方法をご存知の方がいましたら教えてください。 どうぞ宜しくお願い致します。

  • コモンダイアログの設定

    アプリのファイル保存の時にでてくるコモンダイアログですが、デフォルトだとマイドキュメントが押下された状態になっていますが、これをデスクトップに設定する方法はありますか?

  • Flashの表示位置について

    Flashで作ったムービーをHTMLに組み込むと、画面のも左上のほうに表示されます。 上下の位置はこのままで良いのですが、左右の表示を中央に表示させるには、どのようにすれば良いのでしょうか? ブラウザの表示サイズを変えても、Flashは常に画面中央に表示させたいのですが。 よろしく、お願いいたします。

    • ベストアンサー
    • Flash
  • コモンダイアログ・カラーの代替え

     コモンダイアログで、カラーを選択することができますよね。このコモンダイアログ・カラーを使用せずに、自分で同様なものを作成したいのですが、デフォルトで表示されてくる複数の色たちが、どのようにして決められているか解りません。  これらの色は、システムから取得できるのでしょうか?それとも、決めうちをしないといけないのでしょうか?  また、具体的に手法を教えていただければ幸いです。  なお、カスタムカラーを使用するつもりはないので、この部分を除いて、教えていただければ結構ですので、よろしくお願いします。

  • コモンダイアログでフォルダを固定したい

    コモンダイアログを使用するときに、初期表示フォルダを固定させたいのですが、良い方法はありますでしょうか?

  • ウィンドウの表示位置

    やり方ありますか? a.htmlをジャバスクリプトで、ステータスバーなどすべて消した状態で、画面中央に表示させます。そして、次に、a.htmlの中にあるアイコンで、b.htmlに変わり、b.htmlは表示位置が左上に変わる。 (ここまではやり方が分かっています) 悩んでいるのは、ここからなのですが、b.htmlの中にあるアイコンを押すと、a.htmlに移り、同時に、表示位置が画面中央に戻る。。。 そんな都合のよいやり方ありますか? 困っています。やり方があるのでしたらぜひお願いします。