ab.com コミュニティ

ActiveBasicを通したコミュニケーション
現在時刻 - 2024年4月27日(土) 14:53

全ての表示時間は UTC+09:00 です




返信する
ユーザー名:
件名:
メッセージ本文:
メッセージを入力してください。60000 字まで入力できます。 

フォントサイズ:
フォントカラー
オプション:
BBCode: ON
[img]: ON
[flash]: OFF
[url]: ON
スマイリー: OFF
BBCode を無効にする
URL を自動的にパースしない
クイズ
お手数ですがカタカナで「エービー」と4文字を入力してください。:
答えを正確に入力してください。答えられるかどうかでスパムボットか否かを判定します。
   

トピックのレビュー - ファイルオープンダイアログが呼び出されない
作成者 メッセージ
  記事の件名:   引用付きで返信する
File.abというファイルを探したところ、ライブラリーの中にあったので、そのディレクトリを指定したところ、ファイルオープンダイアログは呼び出されず、
例外処理(code:&H000006BA)
スレッド(&H168)でアクセス違反がありました(EIP=&H77E6078A/ESP=&H0012FB9C)。

がデバッグウィンドウに表示されました。よろしくお願いいたします。
投稿記事 Posted: 2008年10月27日(月) 16:37
  記事の件名:   引用付きで返信する
 ありがとうございます。
 buffer = String$(MAX_PATH, Ex"\0")、ofn.hwndOwner=0にして、
If GetOpenFileName(ofn)=0 Thenの行でステップオーバーすると、
デバッグウィンドウで
例外処理(code:&H000006BA)
スレッド(&HF04)でアクセス違反がありました(EIP=&H77E6078A/ESP=&H0012E070)。
と表示され、
「"File.ab"が見つかりません。格納されているディレクトリを指定してください」というダイアログが出現しました。
投稿記事 Posted: 2008年10月15日(水) 17:42
  記事の件名:   引用付きで返信する
buffer = String$(MAX_PATH, Ex"\0")とすると動きました。String$にEx"\0"とするのが真にZeroStringと等しいです。
String$(MAX_PATH, "0")だと"00000000000000000000..."という文字列になり,そんな名前のファイルがないということでエラーになったのではないかと思います。

ところで,ZeroStringがエラーになるということですが,次のCPか何かではAB4で可能だった(今回のような)使い方ができるように戻そうかなと考えています。そのほうがAB4との互換性が保てますし。

あと,ofn.hwndOwnerはGetDesktopWindow()ではなく,単に0で十分です。むしろそっちのほうが好ましいです。
投稿記事 Posted: 2008年10月15日(水) 17:08
  記事の件名:  ファイルオープンダイアログが呼び出されない  引用付きで返信する
 Win32プログラミング講座Step8構造体とファイルオープンダイアログhttp://www.activebasic.com/help_center/index.html?win32の「OPENFILENAME構造体とGetOpenFileName関数」に掲載されているサンプルを実行したところ、ダイアログが表示されません。
 「If GetOpenFileName(ofn)=0 Then」の行でステップインを実行しても、GetOpenFileNameの中に入っていかずに、ExitProcess(0)に行ってしまいます。
 buffer=ZeroString(MAX_PATH)はコンパイルでエラーになったので、buffer=String$(MAX_PATH,"0")に書き換えました。
 ActiveBasic5.0.0.5、WindowXPHomeSP3です。よろしくお願いいたします。
コード:
Dim ofn As OPENFILENAME
Dim FileFilter As String
Dim buffer As String

'OPENFILENAME構造体の初期化
FillMemory(VarPtr(ofn),Len(ofn),0)
ofn.lStructSize=Len(ofn)                '構造体のサイズ
ofn.hwndOwner=GetDesktopWindow()        '親ウィンドウ(ここではデスクトップ ウィンドウを指定)
FileFilter="テキスト ファイル(*.txt)" + Chr$(0) + "*.txt" + Chr$(0) + _
                "すべてのファイル(*.*)" + Chr$(0) + "*" + Chr$(0)
ofn.lpstrFilter=StrPtr(FileFilter)
ofn.nFilterIndex=1                      'ファイル フィルターの数
'buffer=ZeroString(MAX_PATH)             'パスを格納するための文字列バッファを確保
buffer=String$(MAX_PATH,"0")             'パスを格納するための文字列バッファを確保
ofn.lpstrFile=StrPtr(buffer)
ofn.nMaxFile=MAX_PATH                   'バッファのバイト数
ofn.lpstrTitle="ファイルを開く"         'タイトル
ofn.Flags=OFN_FILEMUSTEXIST or OFN_HIDEREADONLY or OFN_PATHMUSTEXIST

'「ファイルを開く」ダイアログ ボックスを表示
If GetOpenFileName(ofn)=0 Then
	'キャンセル ボタンが押されたとき(プロセス終了)
	ExitProcess(0)
End If

MessageBox(0,ofn.lpstrFile,"選択されたファイルのパス",MB_OK)

'プロセス終了
ExitProcess(0)
投稿記事 Posted: 2008年10月15日(水) 13:33

全ての表示時間は UTC+09:00 です


ページ移動:  
Powered by phpBB® Forum Software © phpBB Limited
Japanese translation principally by ocean