こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

コモンダイアログのshowopenについて

CommonDialog1.Filter = "テキスト(*.txt)|*.txt"
CommonDialog1.FilterIndex = 1
CommonDialog1.Flags = cdlOFNFileMustExist
CommonDialog1.ShowOpen
上記のようなプログラムを書いて「ファイルを開く」
ダイアログを表示させてます。
しかし、開いたダイアログのファイル名を入力する欄が
テキストではなく、コンボボックスになっています。
私はファイル名はテキストでただ入力しかできないよう
にしたいのですが、どのように設定すればよいのでしょうか?

それと、左側に「履歴」「デスクトップ」「マイコンピュータ-」「マイネッ
トワーク」のアイコンが表示されているのですがこれも消したいのです。
過去ログを検索しましたが似たような質問がなかったので
質問させていただきました。
よろしくお願い致します。

投稿日時 - 2004-03-17 13:15:26

QNo.808052

困ってます

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

>APIはまったく使ったことがなく、よくわかりません。

いきなりこのAPIは結構厳しいかも・・・

>どのDLLを使い、どのようにプログラムを書くのでしょうか?教えていただけると助かります。

順番が違いますね。
DLLを探すではなく、使用API関数を探すのが先です。
APIが見つかったら、どこのDLLのにあるかを探します。

で、ファイルを開くダイアログを表示するには、
GetOpenFileName
というAPIを使用します。
詳細は、MSDNを見てください。

とりあえず、APIでファイルを開くコモンダイアログを表示するサンプルです。

http://homepage1.nifty.com/MADIA/vb/API/GetOpenFileName.htm

>私はファイル名はテキストでただ入力しかできないよう
>にしたいのですが、どのように設定すればよいのでしょうか?

こっちはあきらめたほうがいいですよ。
単純にAPIを使うだけではないので。


>それと、左側に「履歴」「デスクトップ」「マイコンピュータ-」
>「マイネッ トワーク」のアイコンが表示されているのですがこれも消したいのです。

こっちなんですが、この左側の部分自体がVB6以降のOSであるWindows2000以降の機能なので、特別な対応が必要です。

urlのところにあるサンプルの中の、OPENFILENAME構造体をWindows2000用に変更する必要があります。


'OPENFILENAME構造体
Public Type OPENFILENAME
lStructSize As Long '構造体のサイズ
hwndOwner As Long 'ウインドウのハンドル
hInstance As Long 'インスタンスハンドル
lpstrFilter As String 'フィルター
lpstrCustomFilter As String 'カスタムフィルター
nMaxCustFilter As Long 'カスタムフィルターのサイズ
nFilterIndex As Long 'フィルタのインデックス
lpstrFile As String 'ファイル名のバッファ
nMaxFile As Long 'ファイル名のバッファのサイズ
lpstrFileTitle As String 'フルパス用のバッファ
nMaxFileTitle As Long 'フルパス用のバッファのサイズ
lpstrInitialDir As String 'ディレクトリを指定
lpstrTitle As String 'ダイヤログボックスのタイトル
flags As Long '定数(OFN_××参照)
nFileOffset As Integer 'フルパスの中のファイル名までのオフセット
nFileExtension As Integer '拡張子までのオフセット
lpstrDefExt As String 'デフォルトの拡張子
lCustData As Long 'lpfnHookで渡すデータ
lpfnHook As Long 'フック関数のポインタ
lpTemplateName As String 'テンプレート名
'---ここから追加---
pvReserved As Long
dwReserved As Long
FlagsEx As Long
'---ここまで追加---
End Type


「ここから追加」から、「ここまで追加」の間の行を追加してください。

あと、
Public Const OFN_EX_NOPLACESBAR = &1

という1行を追加して定数を宣言してください。

で、呼び出すところのEnd Withの前の行に、

.FlagsEx = OFN_EX_NOPLACESBAR

と記述すれば左側の部分が消えるはずです。

#このあたりの説明は、#1の参考urlに書いてあります。

理解していただけましたか?

投稿日時 - 2004-03-17 18:50:05

お礼

回答ありがとうございます。
教えてもらったとうりに書くとできました。
しかもAPI関数をたくさんのせてるサイトまで
教えてもらってさっそくブックマークに追加しました。

ファイル名は今回はあきらめます。
教えてもらったサイトでAPIのことを勉強します。
ありがとうございました。

投稿日時 - 2004-03-17 20:31:11

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

>私はファイル名はテキストでただ入力しかできないよう
>にしたいのですが、どのように設定すればよいのでしょうか?

標準のコモンダイアログのインターフェイスを使うのでしたら不可能です。
#コモンダイアログコントロールではなくWindowsAPIを使用するのでしたら何とかなりますが。

>それと、左側に「履歴」「デスクトップ」「マイコンピュータ-」
>「マイネッ トワーク」のアイコンが表示されているのですがこれも消したいのです。

コモンダイアログコントロールを使用している場合は不可能です。
WindowsAPIを直接使用している場合は可能です。

参考までにWinAPIを使用するときの構造体の設定内容を。
http://yokohama.cool.ne.jp/chokuto/urawaza/struct/OPENFILENAME.html

参考URL:http://yokohama.cool.ne.jp/chokuto/urawaza/struct/OPENFILENAME.html

投稿日時 - 2004-03-17 14:11:19

補足

回答ありがとうございます。
APIはまったく使ったことがなく、よくわかりません。
どのDLLを使い、どのようにプログラムを書くのでしょうか?教えていただけると助かります。
少し調べましたがSPIビューアでDeclear宣言を書いてくれるとありますがどのDLLを
選んでよいのかわかりません。

投稿日時 - 2004-03-17 15:16:13

あなたにオススメの質問