ページ 11

ファイル選択画面を使う場合

Posted: 2007年6月01日(金) 08:43
by いとちゃん
いとちゃんといいます。いつも皆様のレスポンスには助けられております。

AB424にて、1つのDATファイルの内容を書き換えるプログラムができました。そこでは、Cドライブの直下にある特定のファイルについてのみ機能が確認されたのですが

Windowsで、よくあるファイル参照画面のようなものを今後組み込みたいと
思います。
APIの組み込みということになるのでしょうが、初歩的で恐れ入りますが
設定方法などご教示願えれば幸いです。

Posted: 2007年6月01日(金) 08:55
by ゲスト
OPENFILENAMEで検索してみてください。

ファイル選択画面

Posted: 2007年6月08日(金) 11:32
by いとちゃん
Type OPENFILENAME

みてみました。

具体的に使用方法をご教授いただける方、サンプルコードのようなものを
お願いいたします。


ファイル選択画面が出てくる
1個のファイルを選択する

選択されたファイルネームを変数に格納する
その変数を使ってOPENする・・・・

にしたいのです。

Posted: 2007年6月08日(金) 13:15
by konisi
今学校から適当に打ってるのですが、こんな感じでどうでしょう?

コード: 全て選択

Function OpenFileName() As *Byte
    Dim ofn As OPENFILENAME
    OpenFileName=calloc(MAX_PATH)
    
    'OPENFILENAME構造体の初期化
    FillMemory(VarPtr(ofn),Len(ofn),0)
    ofn.lStructSize=Len(ofn)
    ofn.lpstrFilter=Ex"(all file)\0*.*\0\0"
    ofn.nFilterIndex=1
    ofn.lpstrFile=OpenFileName
    ofn.nMaxFile=MAX_PATH
    ofn.lpstrTitle="ファイルを開く"
    ofn.Flags=OFN_FILEMUSTEXIST or OFN_PATHMUSTEXIST or OFN_EXPLORER
    ofn.lpstrDefExt="*"

    '「ファイルを開く」ダイアログボックスを表示
    If GetOpenFileName(ofn)=0 Then
        free(OpenFileName)
        OpenFileName=0
        Exit Sub
    End If
End Function


Dim FileName As *Byte

FileName=OpenFileName()
If FileName=0 then ExitProcess(0)
Open MakeStr(FileName) As #1
'  ...
Close #1
free(FileName)

Posted: 2007年6月08日(金) 17:25
by ゲスト
公式ヘルプのプログラミング講座にもサンプルがあります。
一度、目を通しておくとよいです。

"「開く」メニューイベント"のところです。

ブラボーデス!

Posted: 2007年6月08日(金) 18:41
by いとちゃん
Konishiさんへ

すばらしい!こういうことです。
おかげさまでできそうです。

誠にありがとうございます。


いとちゃん

ウインドウが開けたのはいいのですが・・・・・

Posted: 2007年6月09日(土) 12:06
by いとちゃん
ウインドウが開けたのはいいのですが・・・・・

メインのプログラムの後ろにウインドウが開いてしまいます。

実行の順番がいけないのかと思いましたが変えても、裏画面にひっこんで
表示されてしまいます。

ふつつかものですが、どなたかお分かりの方よろしくお願いいたします。

Re: ウインドウが開けたのはいいのですが・・・・・

Posted: 2007年6月09日(土) 12:54
by 7
> メインのプログラムの後ろにウインドウが開いてしまいます。
>
> 実行の順番がいけないのかと思いましたが変えても、裏画面にひっこんで
> 表示されてしまいます。
メインウィンドウが「最前面」で、OPENFILENAME構造体の hwndOwnerNULL になっていないでしょうか?
OPENFILENAME構造体の hwndOwner にはメインウィンドウのウィンドウハンドルを指定します。

恐れ入ります。

Posted: 2007年6月11日(月) 00:16
by いとちゃん
7様

ご指摘いただきありがとうございます。

しかし
>メインウィンドウが「最前面」で、OPENFILENAME構造体の hwndOwner が NULL になっていないでしょうか?
>OPENFILENAME構造体の hwndOwner にはメインウィンドウのウィンドウハンドルを指定します。


なのですが、メインウインドウのウインドウハンドルは、特に指定していない
状態です。

こんな場合、具体的にどうすればいいのでしょうか?

Posted: 2007年6月11日(月) 01:10
by konisi
上のOpenFileName関数で言うところの、
FillMemory関数以降If文以前の位置(ofnがたくさん書いてあるあたり)に
ofn.hwndOwner=hMainWnd
などと書いてみてはどうでしょう?

なるほどですね。

Posted: 2007年6月11日(月) 23:17
by いとちゃん
Konishiさんへ

そういうことですか。
できるみなさんから見れば当たり前のことなのですが
以外にわからないものです。

不明だけど、コードを入れてみて、少しかえてみて、ああなるほどという連続ですが今後ともよろしくお願い申し上げます。
私も早くいろいろ覚えて、細かく初心者が理解できる文章が書けるようになりたいなあと思います。
Konishiさんのような方の具体的記載のおかげで、この質問板が生きいると思います。

by いとちゃん

本題とは関係ないんですが。

Posted: 2007年6月11日(月) 23:49
by konisi
都合三回、konishiと間違えて呼ばれている件について。
どうでもいい事なんですが、何故か拘ってしまいます。

どうもすみませんでした。

Posted: 2007年6月12日(火) 18:29
by いとちゃん
konisiさんへ

いままで間違いに気づきませんでした。どうもすみませんでした。
他意はございませんのでお許しください。

他に比べて具体的かつ正しいメッセージを書いて
くださるkonisiさんには大変感謝しております。

ありがとうございます。

草々

いとちゃん