![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
Visual C++でカレンダーを作っています
前後矢印のボタンを押せば、カレンダーがそれぞれ前後の月に移動し
それに伴いカレンダー脇に表示される画像も変更される、
というプログラムなのですが、デバッグではキチンと動くのに
いざアプリケーション単体では動作しません。
素人ながら思うには、プログラム中では
private: void Hyouji(System::Object^ sender, System::EventArgs^ e) {
DateTime tm=DateTime(myYear,myMonth,1);
String^ FileName="Gazou/"+filename[myMonth-1]+".jpg";
monthCalendar1->SelectionStart=tm;
monthCalendar1->SelectionEnd=tm;
pictureBox1->Image=gcnew Bitmap(FileName);
this->Invalidate();
}
として、Gazouフォルダ内の画像を参照しているから起動しているのであって
アプリケーション単体ではそれができていないのだと思うのですが、
はたしてそれで合っていますでしょうか。
もしそうならば
プログラム中に画像ファイルを埋め込むことができれば解決すると思うのですが、
それにはどうすれば良いか、ご教授願えますでしょうか
よろしくお願いします
No.2ベストアンサー
- 回答日時:
"Gazou/"+filename[myMonth-1]+".jpg";
は「相対パス」ですよ。
「どこからの相対パス」なのかと言うと「現在の作業フォルダ」からの相対パスです。
で、デバッグ時は「デバッガが、実行ファイル(自分自身)のパスを、現在の作業フォルダに設定してくれる」ので
"Gazou/"+filename[myMonth-1]+".jpg";
は
実行ファイル(自分自身)のパス+"Gazou/"+filename[myMonth-1]+".jpg"
になる為、デバッグ時には正しく動作します。
しかし「エクスプローラでプログラムをダブルクリックした時」には「現在の作業フォルダ」は「エクスプローラーが勝手に設定したどこかの場所」になってしまいます。
なので
"Gazou/"+filename[myMonth-1]+".jpg";
は
エクスプローラーが勝手に設定したどこかの場所+"Gazou/"+filename[myMonth-1]+".jpg"
になってしまい、そこには「Gazouと言うフォルダは存在しない」のです。
やるなら
String^ FileName="Gazou/"+filename[myMonth-1]+".jpg";
は
String^ FileName=実行ファイル(自分自身)のパスを取得した文字列変数+"/Gazou/"+filename[myMonth-1]+".jpg";
と書くべきでしょう。
実行ファイル(自分自身)のパスは
http://www.ujasiri.com/prglib/vc/filectrl/vc_Get …
のサンプルを使えば獲得できます。
あとは「exeと同じフォルダにGazouフォルダがあればOK」です。
この回答への補足
"Gazou/"+filename[myMonth-1]+".jpg"; が相対パスというのも理解できました。
しかし現在私が知りたいのは実行ファイル単独で実行できないか、ということでして…
No.3
- 回答日時:
追記。
http://www.ujasiri.com/prglib/vc/filectrl/vc_Get …
の方法は「同じモジュール名のプログラムが複数動いていた時」に、嘘を返す可能性があります。
例えば
C:\MYTOOL\PROGRAM1\TEST.EXE
と
C:\Program Files\Test\TEST.EXE
の両方が同時に実行されている場合、どちらも「アプリケーション名はTEST」です。
ここで「TEST.exeのモジュール・ハンドルを取得する」と
C:\MYTOOL\PROGRAM1\TEST.EXE
か
C:\Program Files\Test\TEST.EXE
か、どちらか片方のハンドルしか返って来ません。
つまり
C:\Program Files\Test\TEST.EXE
で実行したのに
C:\MYTOOL\PROGRAM1\TEST.EXE
のハンドルが返って来たり、その逆が起こったりして、自分自身のパス位置を間違えます。
可能ならば「もっと確実な方法」を使って下さい(「実行時コマンドラインの取得」などでネットで探せば見付かります)
No.1
- 回答日時:
Bitmapコンストラクタでファイル名を渡す方法だと、実行時にそのファイルパスが有効でないとエラーになります。
フォームアプリケーションならばマネージリソースに画像を埋め込んで利用することができます。
フォームにresxファイルがありませんか?そこにイメージを追加し、メッセージハンドラに以下のようなコードで動的にリソースを読み込みます。
System::ComponentModel::ComponentResourceManager^ resources = gcnew System::ComponentModel::ComponentResourceManager(Form1::typeid);
this->pictureBox1->Image = safe_cast<System::Drawing::Image^>(resources->GetObject("nazo"));
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) EXCELのグラフを画像(JPG形式)で保存、通常実行がうまく行かない。ステップインはうまく行く 3 2022/08/30 12:06
- Excel(エクセル) エクセルのマクロについて教えてください。 2 2023/02/21 13:29
- Visual Basic(VBA) 【VBA】写真の縦横比を変えずに貼り付ける 5 2023/06/13 11:42
- PHP 掲示板を資料を参考にして開発中ですが、画像がアップされません? 1 2022/11/21 06:44
- C言語・C++・C# Windows Formアプリからコンソールを呼び出して文字を出力させたい 8 2023/05/09 10:53
- Visual Basic(VBA) Visual Basic : ImageListの画像がそろったときにメッセージを表示 1 2023/07/20 13:53
- その他(コンピューター・テクノロジー) PCの画面が動かなくやってしまいました…。。 5 2022/10/02 03:23
- C言語・C++・C# 大量のデータを読み込んで表示する速度を改善したい 8 2023/05/07 13:29
- Visual Basic(VBA) VBAが止まります。 2 2022/09/02 14:02
- HTML・CSS トリミングで表示した画像をクリックで元どおりにしたい 3 2022/12/16 18:49
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
visual studio2019でデバッグが...
-
eclipseでプログラムが実行でき...
-
Eclipseのブレークポイントが○...
-
C言語での開発でエラーが出て困...
-
ビルド時のエラー(書き込みで...
-
visual studio 2008 のデバッグ...
-
ASP.NETでデバッグができない
-
VC++でSQL Serverに接続するに...
-
Apache-TomcatとJakarta-Tomcat...
-
VC#での参照の追加が上手くいき...
-
デバッグとビルドは何が違うの...
-
Release版のexeが動きません
-
標準関数が見つからない
-
DLL参照時に指定されたモジュー...
-
Windows10エンタープライズ版をインス...
-
ソリューションをまたがるデバ...
-
RichTextBox使用で...
-
Visual Studio 2008(ASP.net) ...
-
Visual studio2017で、2回目の...
-
vbprojファイルが開けません
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
デバッグとビルドは何が違うの...
-
visual studio2019でデバッグが...
-
Eclipseのブレークポイントが○...
-
DLL参照時に指定されたモジュー...
-
eclipseでプログラムが実行でき...
-
visual studio 2008 のデバッグ...
-
Visual studio2017で、2回目の...
-
VB.netを実行するとデバック プ...
-
デバッガでステップ実行してい...
-
eclipseでデバックするとエラー...
-
ソリューションをまたがるデバ...
-
起動時に何のダイアログも表示...
-
C言語での開発でエラーが出て困...
-
RichTextBox使用で...
-
Release版のexeが動きません
-
Visual Studio 2017 ビルドする...
-
ブレークポイントは現在の設定...
-
VB6.0を使用しています
-
C# リソースに埋め込んだ.exeフ...
-
ビルド時のエラー(書き込みで...
おすすめ情報