ab.com コミュニティ

ActiveBasicを通したコミュニケーション
現在時刻 - 2024年3月28日(木) 19:24

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




新しいトピックを投稿する  トピックへ返信する  [ 4 件の記事 ] 
作成者 メッセージ
投稿記事Posted: 2008年10月15日(水) 13:33 
 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日(水) 17:08 
オフライン

登録日時: 2005年5月31日(火) 17:59
記事: 899
お住まい: 東京都
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:42 
 ありがとうございます。
 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月27日(月) 16:37 
File.abというファイルを探したところ、ライブラリーの中にあったので、そのディレクトリを指定したところ、ファイルオープンダイアログは呼び出されず、
例外処理(code:&H000006BA)
スレッド(&H168)でアクセス違反がありました(EIP=&H77E6078A/ESP=&H0012FB9C)。

がデバッグウィンドウに表示されました。よろしくお願いいたします。


通報する
ページトップ
   
期間内表示:  ソート  
新しいトピックを投稿する  トピックへ返信する  [ 4 件の記事 ] 

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


オンラインデータ

このフォーラムを閲覧中のユーザー: Ahrefs [Bot], Google [Bot] & ゲスト[28人]


トピック投稿:  可
返信投稿:  可
記事編集: 不可
記事削除: 不可
ファイル添付: 不可

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