初歩的
> file_pathは、どこに入力すればいいですか?
そうですね。ファイルを開いた時と保存した時、と書くと少し分かり辛かったかもしれません。
ファイルパスが取得できてないとファイルパスを格納できないってことは、分かりますよね?無い袖は振れませんからね。
ちなみに、○○ができてないから□□ができないんじゃないだろうか...、っていうのはデバッグで必要になる知識(思考?)です。
で、パスが取得できてないと格納できないんですから、パス取得後にグローバル変数file_pathに格納することになります。
ファイルパス取得後というのは、GetOpenFileName()関数,GetSaveFileName()関数がキャンセルされずにしっかりファイルを選択してからのことを指します。
ですから、これらの関数の処理が思惑通りに終わった後であれば結構適当な所にfile_pathを書いて構いません。
そして、何をfile_pathに格納するか、ですが、ファイルパス取得後のOPENFILENAME構造体のlpstrFileにファイルパスが格納されているので、これをグローバル変数のfile_pathに格納してやります。
今気付いたんですが、ActiveBasicのファイルを開いたり保存するサンプルありますが、その中のDim FileName[MAX_PATH-1] As Byteをグローバルにしてしまえばよさそうですね。
いちいち自分で格納する手間が省けますし。
逆にofn.lpstrFile=StrPtr(file_path)と書いてしまってもいいんですが...。
String型を指定するならあらかじめZeroString()関数でメモリをゼロクリアしておく必要があります。
そうですね。ファイルを開いた時と保存した時、と書くと少し分かり辛かったかもしれません。
ファイルパスが取得できてないとファイルパスを格納できないってことは、分かりますよね?無い袖は振れませんからね。
ちなみに、○○ができてないから□□ができないんじゃないだろうか...、っていうのはデバッグで必要になる知識(思考?)です。
で、パスが取得できてないと格納できないんですから、パス取得後にグローバル変数file_pathに格納することになります。
ファイルパス取得後というのは、GetOpenFileName()関数,GetSaveFileName()関数がキャンセルされずにしっかりファイルを選択してからのことを指します。
ですから、これらの関数の処理が思惑通りに終わった後であれば結構適当な所にfile_pathを書いて構いません。
そして、何をfile_pathに格納するか、ですが、ファイルパス取得後のOPENFILENAME構造体のlpstrFileにファイルパスが格納されているので、これをグローバル変数のfile_pathに格納してやります。
今気付いたんですが、ActiveBasicのファイルを開いたり保存するサンプルありますが、その中のDim FileName[MAX_PATH-1] As Byteをグローバルにしてしまえばよさそうですね。
いちいち自分で格納する手間が省けますし。
逆にofn.lpstrFile=StrPtr(file_path)と書いてしまってもいいんですが...。
String型を指定するならあらかじめZeroString()関数でメモリをゼロクリアしておく必要があります。
> もし違うのなら、手ほどきをお願いします。
笑わせようとしてますか?
全っ然違いますよっ。
いくらなんでもこれは...こっちもふざけたくなります。
急がば回れとも言ってみたいんですけどねぇ...。
変数には値を格納しておくことが可能で、かなり便利です。
で、変数に値を格納(代入)するには演算子を使います。
演算子は分かりますよね?+,-,=、などなどが演算子です。
※格納、代入という言い方がややこしいかもしれませんがニュアンスの違いで意味は同じです
左辺に変数、右辺に代入したい値を指定します。
デバッグするとLONG型変数iには100が格納されているはずです。
また、左辺に変数、右辺も変数という場合も同じようなものです。
デバッグするとiには100、jにも100が格納されているはずです。
変数jに変数iの内容を格納した訳です。
ただ、変数がポインタを指していたら簡単に扱えません。慣れれば問題ないんですけどね。
変数に代入する方法が分かった所で、何を代入するか。いいですか。
さっき書きましたが、OPENFILENAME構造体のlpstrFileをfile_pathに代入してやります。
You copy?
笑わせようとしてますか?
全っ然違いますよっ。
いくらなんでもこれは...こっちもふざけたくなります。
急がば回れとも言ってみたいんですけどねぇ...。
変数には値を格納しておくことが可能で、かなり便利です。
で、変数に値を格納(代入)するには演算子を使います。
演算子は分かりますよね?+,-,=、などなどが演算子です。
※格納、代入という言い方がややこしいかもしれませんがニュアンスの違いで意味は同じです
コード: 全て選択
Dim i As Long'LONG型変数iを宣言
i=100'代入演算子、イコールを使う
Debug
デバッグするとLONG型変数iには100が格納されているはずです。
また、左辺に変数、右辺も変数という場合も同じようなものです。
コード: 全て選択
Dim i As Long'LONG型変数iを宣言
Dim j As Long'LONG型変数jを宣言
'代入演算子、イコールを使う
i=100
j=i
Debug
変数jに変数iの内容を格納した訳です。
ただ、変数がポインタを指していたら簡単に扱えません。慣れれば問題ないんですけどね。
変数に代入する方法が分かった所で、何を代入するか。いいですか。
さっき書きましたが、OPENFILENAME構造体のlpstrFileをfile_pathに代入してやります。
You copy?
Re: おはようございます
>
> と、こういうことですか?
惜しい!正しくは下のようになります。
file_pathはグローバル変数として宣言してあります。エラーなど出ませんがプロシージャ内で宣言し直すのは賢いとは思いません。
Debugですが、これはデバッグ時でなければ消すかコメントアウトして構いません。
ここから下は余談です。難しいようだったら適当に読み飛ばして下さい。
構造体についてですが、構造体は色んな変数を一つにまとめた大きな変数だと自分は思っています。構造体の宣言も変数と変わりません。
今更ですが、DimとAsに挟まれたローマ字が変数名になります。必ずしもLONG型変数の変数名はiになる、OPENFILENAME型構造体の変数名はofnになる、という訳ではありません。
自分の分かりやすいように宣言して下さい。
※大勢でプログラミングするなら皆で分かりやすいものを決めましょう
ただアクセスの仕方が少し変わります。
普通の変数の場合、宣言した変数名に代入するだけですみますが、構造体の場合、宣言した変数名以外に構造体に元から含まれる変数名を把握する必要があります。
コード: 全て選択
Dim file_path As Long
> file_path=lpstrFile
> Debug
惜しい!正しくは下のようになります。
コード: 全て選択
file_path=ofn.lpstrFile
Debugですが、これはデバッグ時でなければ消すかコメントアウトして構いません。
ここから下は余談です。難しいようだったら適当に読み飛ばして下さい。
構造体についてですが、構造体は色んな変数を一つにまとめた大きな変数だと自分は思っています。構造体の宣言も変数と変わりません。
コード: 全て選択
Dim i As Long'LONG型変数の宣言
Dim ofn As OPENFILENAME'OPENFILENAME型構造体の宣言
自分の分かりやすいように宣言して下さい。
※大勢でプログラミングするなら皆で分かりやすいものを決めましょう
ただアクセスの仕方が少し変わります。
コード: 全て選択
i=100'LONG型変数iに100を代入
'OPENFILENAME構造体のDWORD型変数lStructSizeにOPENFILENAME構造体の大きさを代入
ofn.lStructSize=SizeOf(OPENFILENAME)
'一度にOPENFILENAME構造体を弄りたい場合はWith文が便利
With ofn'構造体の変数名を指定
.lStructSize=SizeOf(OPENFILENAME)
.hwndOwner=hMainWnd
End With