2008年02月11日

データの暗号化と複合化

昔に比べて、年々「セキュリティ」が重要視されてきています。
システム開発においては、重要なデータを暗号化処理する機会もあると思います。
そこで今回はハッシュ関数による暗号化/複合化のサンプルプログラムを作ってみました。

◆ライブラリ選定
暗号化のロジックをイチから考えるのは時間のムダなので、有名どころのライブラリを使うことにしました。
C/C++系で特に有名なのは「Crypt++」のようです。
http://www.cryptopp.com/

このライブラリはWindowsに組み込まれているので、今回はこれを使うことにしました。
(Windows Crypto API)

◆ハッシュについて
暗号化のアルゴリズムには標準的なハッシュを使うことにします。
中でも「MD5」や「SHA1」などが有名ですが、「MD5」より「SHA1」のほうがセキュリティ強度が高いとされているので、今回は「SHA1」を使うことにします。

ただ、「MD5」や「SHA1」は過去に解読の攻撃を受けたという記事が発表されたことがあるのに対して、「SHA2」は、まだ攻撃を受けたという記事は発表されていないようです。
そんなことから、本当は「SHA2」を使ってみたかったのですが、現状の環境(WinXp + BCB6)では標準でサポートされていないようです。ふらふら

◆サンプルプログラム
 1つのファイルを暗号化するプログラムと、
 複合化のプログラムを作ってみました。

 暗号化の手順は次のようになります。
 sha1_encode_image.jpg
 ・「encode.exe」を実行します。
 ・暗号化するファイル名を入力します。
 ・暗号化した結果を出力するファイル名を入力します。
 ・パスワードには適当な値を入力します。
 ・「Encode」ボタンを押します。
 ・出力されたファイルは暗号化されているので
  中を見てもゴミデータにしか見えません。

 複合化の手順は次のようになります。
 sha1_decode_image.jpg
 ・「decode.exe」を実行します。
 ・暗号化されたファイル名を入力します。
 ・複合化後に出力するファイル名を入力します。
 ・暗号化時に入力したパスワードを入力します。
 ・「Decode」ボタンを押します。
 ・出力されたファイルは暗号化する前の内容と同じになります。
 ・尚、パスワードに間違った値を入力した場合、
  出力されるファイルの内容はグシャグシャになります。

◆暗号化のプログラム
 ・sha1_encode_src.zip
 ・sha1_encode_exe.zip

◆複合化のプログラム
 ・sha1_decode_src.zip
 ・sha1_decode_exe.zip


・・・もしよかったら、右上のバナー広告をクリックしてほしいな・・・。
 m(_ _)m
 
posted by かねやん at 04:48| Comment(1) | TrackBack(0) | C++Builder6 | このブログの読者になる | 更新情報をチェックする

2007年10月08日

DateTimeToStr()の不思議 Part2

0時ジャストに DateTimeToStr() を呼ぶと、時刻データが欠落するする件、C++Builder2007 や Delphi2007でも試してみた。
(RAD Studio 2007 のトライアル版を使用)

前回同様、ボタン押下で現在日時を画面に表示するプログラムを作成して確認することにした。

◆C++Builder2007での実験
 「23:59:59」では問題なし。
 bcb2007_now_test_image1.jpg

 「00:00:00」では・・・問題あり!
 bcb2007_now_test_image2.jpg

 「00:00:01」では問題なし。
 bcb2007_now_test_image3.jpg

◆Delphi2007での実験
 結果は C++Builder2007 と一緒。
 del2007_now_test_image1.jpg

 del2007_now_test_image2.jpg

 del2007_now_test_image3.jpg

◆実験結果
結果は、前回のC++Builder6の時と一緒。

一応、誤解の無いように明記しておくが、0時ジャストで時刻が欠落するのはコンパイラ ライブラリの仕様らしい(ヘルプに記載)。

・・・なんか改善の余地ありって感じ・・・。

◆ソース/実行ファイル
 ・BCB2007
  bcb2007_now_test_src.zip
  bcb2007_now_test_exe.zip

 ・DELPHI2007
  del2007_now_test_src.zip
  del2007_now_test_exe.zip


・・・もしよかったら、右上のバナー広告をクリックしてほしいな・・・。
 m(_ _)m
 
posted by かねやん at 01:53| Comment(2) | TrackBack(0) | C++Builder6 | このブログの読者になる | 更新情報をチェックする

2007年10月03日

DateTimeToStr()の不思議

Borland系コンパイラにおいて、Now() 関数にバグがあるというウワサを聞いた。
(Now()は現在日時を取得する関数)

そのウワサによると、0時ジャストに Now() を呼ぶと、日付データのみになり、時刻データが欠落するらしい。

普通に考えたら、それは明らかにおかしい。
PC内部では日時の値をカウントアップしているだけで、Now() 関数はその値を返すだけと思われるからだ。

早速、そのナゾを解明する為、テストプログラムを作成してみた。
(ボタン押下で現在日時を画面に表示するプログラムを作成)

・C++Builder6での実験
 「23:59:59」では問題なし。
  bcb6_now_test_image1.jpg

 「00:00:00」では・・・問題あり!
  bcb6_now_test_image2.jpg

 「00:00:01」では問題なし。
  bcb6_now_test_image3.jpg

「00:00:00」で Now() を呼んだ際、DateTimeToStr()の戻り値で時刻が返ってこない。
ウワサの原因はこれか!?

・C++Builder5での実験
 結果は C++Builder6 と一緒。
 bcb5_now_test_image1.jpg

 bcb5_now_test_image2.jpg

 bcb5_now_test_image3.jpg

・Delphi7での実験
 結果は C++Builder6 と一緒。
 del7_now_test_image1.jpg

 del7_now_test_image2.jpg

 del7_now_test_image3.jpg

・実験結果
ナゾは解けた。
Now() は問題ない。
DateTimeToStr() に問題があるのだ。

そんなことから、DateTimeToStr()は使わないほうが無難だ。

ついでに、TimeToStr() で、0時以上10時未満の時、時刻の「時」の部分が1桁になるのでこの関数も使いたくない・・・。


・ソース/実行ファイル
 ・BCB5
  bcb5_now_test_src.zip
  bcb5_now_test_exe.zip

 ・BCB6
  bcb6_now_test_src.zip
  bcb6_now_test_exe.zip

 ・DELPHI7
  del7_now_test_src.zip
  del7_now_test_exe.zip


サイレントアップデート(こっそり修正)でもいいので、なんとかしてほしいな・・・。


・・・もしよかったら、右上のバナー広告をクリックしてほしいな・・・。
 m(_ _)m
 
posted by かねやん at 12:47| Comment(0) | TrackBack(0) | C++Builder6 | このブログの読者になる | 更新情報をチェックする

2007年06月02日

BCB6: delay timer

時には、処理を実行した際の「処理時間」を求めることがある。
当然正確な値を必要とする為、ミリ秒単位で算出する必要がある。
そんな時「GetTickCount()」をよく使う。

そこで今回は「GetTickCount()」を使ったプログラムを紹介する。
といっても、ただ「GetTickCount()」を呼び出しているだけ。

・実行ファイル
 GetTickCount_exe.zip

・ソース
 GetTickCount_src.zip


・・・もしよかったら、右上のバナー広告をクリックしてほしいな・・・。
 m(_ _)m
 
posted by かねやん at 20:17| Comment(0) | TrackBack(0) | C++Builder6 | このブログの読者になる | 更新情報をチェックする

2007年05月27日

CodeGearブランド

C++Builder の開発元であるボーランドのIDE事業が「CODE GEAR ブランド」として生まれ変わるようです。

CodeGear.jpg

なんかゲームっぽい名前でカッコイイかも。
http://www.borland.com/jp/products/ide.html

そして C++Builderは、Windows Vistaに対応して、C++Builder 2007 が発売になるようです (2007年6月発売予定)。

c++builder2007.jpg

なかなかシンプルなパッケージですなぁ。

ただ、トライアル版が、まだ公開されておらず、試用はできていない状態。

HPにおいては、以前より開発系の記事がまとまったので見やすくなった感があります(過去製品も含めて)。

懸念事項としては、メモリ使用量とコンパイル速度ぐらいでしょうか?
あと、インストールにおける必要条件も気になるなぁ・・。
http://dn.codegear.com/article/36532

PCがそこそこ高スペックじゃないと「遅〜っ」ってなりそう・・。

気になる お値段 は いくら なんでしょうねぇ!?
これまでの製品から想定できるぐらいと信じてますけど。

一応、CDN (CodeGear Developer Network) には登録しておきました。ぴかぴか(新しい)
https://members.codegear.com/newuser.aspx?returnurl=http://www.codegear.com/jp/

そんな感じで、今の私は「トライアル版 待ち」って感じです。

[Borland]
http://www.borland.co.jp/

[CODE GEAR]
http://www.codegear.com/jp/


・・・もしよかったら、右上のバナー広告をクリックしてほしいな・・・。
 m(_ _)m
 
posted by かねやん at 02:35| Comment(0) | TrackBack(2) | C++Builder6 | このブログの読者になる | 更新情報をチェックする

2007年03月21日

BCB6: ロケールに対応してみる

久々に C++Builder のサンプルプログラムを作成してみた。

システムを開発する上で、日本語環境と英語環境の両方で動くハイブリッドなプログラムを書くことがある。

今回は、ロケール情報を表示するサンプルプログラムを紹介する。

ロケール情報を得るためには次の WindowsAPI を使う。
 ・GetUserDefaultLCID() : ユーザーのロケール識別子を取得
 ・GetLocaleInfo() : ロケール情報を取得

いきなりですが完成したソースと実行ファイルを添付。
 ・src.zip
 ・exe.zip


まずは実行してみる。
result_jp.jpg

・・・普通の 日本語版 WindowsXP という感じ。

コントロールパネル「地域と言語のオプション」からロケールを米国に変えてみる。
locale_us.jpg

そして実行。

result_us.jpg

・・米国の情報を取得できた。


・・・もしよかったら、右上のバナー広告をクリックしてほしいな・・・。
 m(_ _)m
 
posted by かねやん at 01:01| Comment(0) | TrackBack(0) | C++Builder6 | このブログの読者になる | 更新情報をチェックする

2006年08月19日

BCB6: ナンバープレイス解析プログラム

以前「ナンプレ(ナンバープレイス)」のパズルにハマっていたことがあり、一時期、向かうところ敵無しぐらいに、どんな問題もスラスラ解けていた(ような気がする)。

そして少し前に全米や巷で流行っているとの情報がTVで放送されていた。

ナンプレってパターンが分かれば わりと簡単に解けることから、プログラム化できると考え、ロジックのヒントをネットで調べてたら、それらしいものはすでにあった・・。

以前、日経ソフトウェア 2003年10月号 にプログラムが載っていたようだ。
ここ

地球にやさしいアルゴリズム 第1回 ナンプレを解いてみよう
記事で紹介したサンプル・プログラム
algo0310.zip

さっそくダウンロードしてみた。
動かすためには Cのコンパイラが必要だ。
推奨は Borland C++ Compiler だったので、もちろん、BCB6でもOKだ。

一応、無償で使えるコマンドライン用のコンパイラ「C++Builder Compiler」は、ここ からダウンロードできる(以前は Borland Turbo C++ 5.5と呼ばれていたが・・)。

とりあえず、下記のナンプレを解いてみようと考えて、目的のナンプレ(盤面)をプログラム中の配列に放り込み、コンパイルしてみた。

・・・エラーで怒られること無く、サクッとコンパイルできた。

  4  6   9
 1   2 8 
    98 41
4 71  3  
         
  9  34 8
76 32    
 3 9   2 
1   8  5 


すかさず実行!!

解析の情報がパラパラと表示されつつスクロールアウトした後、解答結果が表示された。

ジャン!

nanpre_cmd_image1.JPG

ズバリ正解です!よくできました!って感じです。

でも、コンソールアプリでは使いにくいので、自分専用にGUI化してみた。

nanpre_gui_image1.JPG

そして実行!

nanpre_gui_image2.JPG

うん、うん、よくできてる。
なかなかすばらしいアルゴリズムだと思う。

単純なナンプレだったら、たいがいの問題はこのプログラムで解けそうだ。
単純なナンプレだったら・・・。

ナンプレの難易度が高くなると「ある値を当てはめて答えを予測する」ような考え方も必要になる。
現時点のアルゴリズムにはこういった思考が組み込まれていない為、注意が必要だ。
「注意が必要だ」というのは、今回のプログラムでは間違った解答を算出する可能性がありうることを意味する。
そんなことから、本屋で売っているクロスワードの本とかを買ってきて次々ナンプレをプログラムで解いて、どんどん懸賞に応募したりするのは よろしくない。

尚、著作権上の理由により、今回はソース等を公開できない。
ダウンロード元のソースは著作権で守られているんだそうだ。
ちょっとケチくさいけどね。

今回9×9の盤面固定のプログラムになっているので、もっと汎用的に改善したいな・・・。


・・・もしよかったら、右上のバナー広告をクリックしてほしいな・・・。
・・・もしくは、人気blogランキング をクリックしてほしいな・・・。
 m(_ _)m
 
posted by かねやん at 20:56| Comment(1) | TrackBack(4) | C++Builder6 | このブログの読者になる | 更新情報をチェックする

2006年08月12日

BCB6: カレンダー

いまさらだけど、カレンダーのプログラムを作ってみた。

◆プログラムの概要
 年と月の値を入力し、表示ボタンでカレンダーを表示する。
 calender_image1.jpg

◆処理内容
 ・指定された年月から TDateTime値 を取得する。
 ・指定された月の1日目の曜日を取得する。
  →先頭の空白数を決定する為に使用。
 ・指定された月の最終日を取得する。
  →1〜最終日を文字列化する為に使用。
 ・指定された月の最終曜日を取得する。
  →最後の空白数を決定する為に使用。
  (これは無くても動作上問題なし)
 ・上記の情報から「空白+1〜最終日までの文字列+空白」の文字列を作成。
 ・上記で作成した文字列を1週間分ずつ分割して表示。

◆ファイル
 ・calender_src.zip
 ・calender_exe.zip


・・・もしよかったら、右上のバナー広告をクリックしてほしいな・・・。
・・・もしくは、人気blogランキング をクリックしてほしいな・・・。
 m(_ _)m
 
posted by かねやん at 23:22| Comment(1) | TrackBack(0) | C++Builder6 | このブログの読者になる | 更新情報をチェックする

2006年07月23日

BCB6: 指定のファイルのPATH存在チェック

たまに、指定のDLLファイルにパスが通っているかどうかチェックしたい時がある。

その度に環境変数PATHをチェックするのは面倒なので、指定ファイルが環境変数「PATH」のフォルダ内に存在するかチェックするプログラムを作ってみた。

◆実行イメージ
 path_check_image1.jpg

◆実行ファイル
 path_check_exe.zip


ついでに VECTOR にも登録しておこうかな...。


・・・もしよかったら、右上のバナー広告をクリックしてほしいな・・・。
・・・もしくは、人気blogランキング をクリックしてほしいな・・・。
 m(_ _)m
 
posted by かねやん at 17:21| Comment(1) | TrackBack(0) | C++Builder6 | このブログの読者になる | 更新情報をチェックする

2006年05月23日

BCB6: グラフの描画

仕事上では統計情報をグラフ表示する機会もあるでしょう。
ということで、今回はグラフ表示のサンプルプログラムを掲載します。

とりあえずグラフは「折れ線グラフ」としてサンプルプログラムを作成してみました。
・マーカーなし
 chart_test_image1.jpg

・マーカーあり
 chart_test_image2.jpg

昔はグラフを描く場合、枠や線の描画など、ほとんど自作しなければならなかったのに対して「TChart」コンポーネントって便利だな〜と感じました。

・ダウンロード
 ・chart_test_src.zip
 ・chart_test_exe.zip


・・・もしよかったら、右上のバナー広告をクリックしてほしいな・・・。
・・・もしくは、人気blogランキング をクリックしてほしいな・・・。
 m(_ _)m
 
posted by かねやん at 00:08| Comment(3) | TrackBack(0) | C++Builder6 | このブログの読者になる | 更新情報をチェックする

2006年05月19日

BCB6: アナログ時計

昔、C言語を覚えたての頃「アナログ時計」のプログラムを作ったことがあった。PC-9801のMS-DOS上で。

今回、「アナログ時計」のプログラムを C++Builder6 で再現してみることにした。

とりあえず完成したプログラムは次のとおり。

analog_clock_image1.jpg

シンプルな画面から処理もシンプルと予測されがちだがアナログ時計の針の軌道における座標計算はちょっとめんどくさい。
これにはサイン(SIN)とコサイン(COS)の特性を利用して座標を割り出す方法がベターだ。

0時の時角度=  0度SIN( 0) = 0COS( 0) = 1
3時の時角度= 90度SIN( 90) = 1COS( 90) = 0
6時の時角度=180度SIN(180) = 0COS(180) = -1
9時の時角度=270度SIN(270) = -1COS(180) = 0


秒針の値は 0〜59 の範囲なので、これに 6 を掛けることで角度が求まる。
長針(分)の場合も同様。
短針(時)の場合は、0〜11の値なので少しやっかいだ(ソース参照)。

・ファイル
 ・analog_clock_src.zip
 ・analog_clock_exe.zip


・・・もしよかったら、右上のバナー広告をクリックしてほしいな・・・。
・・・もしくは、人気blogランキング をクリックしてほしいな・・・。
 m(_ _)m
 
posted by かねやん at 09:23| Comment(4) | TrackBack(0) | C++Builder6 | このブログの読者になる | 更新情報をチェックする

2006年05月17日

BCB6: Socket Client プログラム 〜再び〜

以前「TClientSocket」コンポーネントを使って、TCP/IP通信における Socketクライアントのプログラムを作成したが、今回、少し見栄えを良くして再構築してみた。

socket_client_image2.jpg

・ファイル
 ・socket_client_src2.zip
 ・socket_client_exe2.zip


・・・もしよかったら、右上のバナー広告をクリックしてほしいな・・・。
・・・もしくは、人気blogランキング をクリックしてほしいな・・・。
 m(_ _)m
 
posted by かねやん at 01:05| Comment(2) | TrackBack(0) | C++Builder6 | このブログの読者になる | 更新情報をチェックする

2006年05月16日

BCB6: Socket Server プログラム 〜再び〜

以前「TServerSocket」コンポーネントを使って、TCP/IP通信における Socketサーバーのプログラムを作成したが、今回、少し見栄えを良くして再構築してみた。

socket_server_image2.jpg

・ファイル
 ・socket_server_src2.zip
 ・socket_server_exe2.zip


・・・もしよかったら、右上のバナー広告をクリックしてほしいな・・・。
・・・もしくは、人気blogランキング をクリックしてほしいな・・・。
 m(_ _)m
 
posted by かねやん at 00:07| Comment(4) | TrackBack(0) | C++Builder6 | このブログの読者になる | 更新情報をチェックする

2006年05月14日

Windows 2003 Server で BDE を使う方法

Windows 2003 Server SP1上でBDE(Borland Database Engine)アプリケーションを多重起動した場合、BDEのエラーが発生する。

Windows 2003 SP1上で、MS-IMEに関するモジュールが「BDEが使用する仮想メモリのアドレス」をロックしてしまう事が原因らしい。

主な回避策は次のようなことが考えられる。
・SP1を使わない
 →SP2が出るまで待つ
・MS-IME2002 Ver.8.1をアンインストールする
 →MS-IME2002 Ver.8.1とは別のバージョンのIMEを使用する
・「rebase.exe」を利用してIDAPI32.DLLのIMAGEBASEのアドレス空間をずらす
 →rebase.exeは「Microsoft Win32 Platform SDK」や「Microsoft Visual Studio」などに付属する。

詳細は以下のサイトを参照されたい。
BDEエラー回避方法について
Delphi Q & A 掲示板
Borland Site


・・・もしよかったら、右上のバナー広告をクリックしてほしいな・・・。
・・・もしくは、人気blogランキング をクリックしてほしいな・・・。
 m(_ _)m
 
posted by かねやん at 01:58| Comment(1) | TrackBack(0) | C++Builder6 | このブログの読者になる | 更新情報をチェックする

2006年05月12日

BCB6: FTPサーバーを作ってみた

一般的に「FTPクライアント」のソースは検索すると簡単に出てくるのに対して「FTPサーバー」のソースは、なかなか見かけることが無い気がする。
そんなことから、今回は「FTPサーバー」のプログラムを作ってみた。

少し前に「Indy」コンポーネントを新しくしたこともあり「TIdFTPServer」を使って「FTPサーバー」のサンプルプログラムを作成してみた。

・・とりあえず、なんだかんだでそれらしく動くようになった。
クライアントはコマンドプロンプトからのFTPコマンドを使用した。

ftpd_image1.jpg

でも、ちょっとヘンなことをすると、すぐにエラーが発生する。
(・・まぁ、いいかサンプルなんだし・・。)

<問題点>
現在確認されている問題点は以下のとおり。
そのうち修正するかも。
・コマンドのオプションなど細かい点に対応していない為、FTPクライアントソフト(FFFTPなど)は使えないかも。
・FTPサービスを停止する場合クライアントのセッションを先に切る必要あり。
・などなど・・。


・・なんか今回は中途半端なモノをアップしてしまった感じ・・。


・・・もしよかったら、右上のバナー広告をクリックしてほしいな・・・。
・・・もしくは、人気blogランキング をクリックしてほしいな・・・。
 m(_ _)m
 
posted by かねやん at 00:56| Comment(1) | TrackBack(0) | C++Builder6 | このブログの読者になる | 更新情報をチェックする

2006年05月10日

BCB6: フリーの「Indy」コンポーネントを使う

C++Builder6でFTPサーバーでも作ってみようかなと思い、Indyの「IdFTPServer」コンポーネントを使おうと思ったら・・・・・無かった。

Delphi7Proには標準で入っているのに、C++Builder6には標準で入っていないことに今気づいた。

そんなことから、Indyコンポーネントをアップデートして「IdFTPServer」コンポーネントを使えるようにすることにした。
その方法は以下のとおり。

@まずは既存のIndyコンポーネントを削除する。
・コントロールパネル「プログラムの追加と削除」を開く。
・「Borland C++ Builder 6」を選択後、変更を選択する(BCBのCDが必要)。
・プログラムファイルから Indy を「インストールしない」に変えて続行する。

AIndyコンポーネントをダウンロードしてコピーする。
・「Download Indy 9.0」より「9.0.17 Source code distribution」の ZIP をダウンロードする。
・ZIPファイルを展開して「Fullc6.bat」を実行する。
・1つ上のフォルダに「C6」のフォルダが作成される。
・「C6」フォルダの内容を「C:\Program Files\Borland\CBuilder6\Source\Indy」に上書きコピーする。
・「C6」フォルダの「dclIndy60.bpl」を「C:\Program Files\Borland\CBuilder6\Bin」にコピーする。

BBCB6に組み込む。
・BCB6を起動する。
・メニュー「ツール」→「環境オプション」→「ライブラリ」を選択する。
・「ライブラリパス」に「$(BCB)\Source\Indy」を追加する。
・↑ボタンで「$(BCB)\Source\Indy」を一番先頭にする。

CBCB6のパスを設定する。
・メニュー「プロジェクト」→「オプション」→「ディレクトリ/条件」を選択する。
・「インクルードパス」に「$(BCB)\Source\Indy」を追加する。
・↑ボタンで「$(BCB)\Source\Indy」を一番先頭にする。
・「プロジェクトオプション」ダイアログの「デフォルト」にチェックしておく。

DBCB6にパッケージを追加する。
・メニュー「コンポーネント」→「パッケージのインストール」を選択する。
・「追加」ボタンを押下して「C:\Program Files\Borland\CBuilder6\Bin\dclIndy60.bpl」を指定する。

Eヘルプを更新する。
Indy Docs のサイトから「Indy-9-0-Help-WinHelp.zip」をダウンロードする。
・ZIPファイルの中身を「C:\Program Files\Borland\CBuilder6\Help」にコピーする。


アップデートした Indyコンポーネント は標準のものよりビジュアル的にかっこいいと思う。
Bcb6IndyImage.jpg

とりあえず今回の記事は自分用のメモとして掲載しておくことにした。


・・・もしよかったら、右上のバナー広告をクリックしてほしいな・・・。
・・・もしくは、人気blogランキング をクリックしてほしいな・・・。
 m(_ _)m
 
posted by かねやん at 00:27| Comment(1) | TrackBack(0) | C++Builder6 | このブログの読者になる | 更新情報をチェックする

2006年05月08日

BCB6: WindowsXPビジュアルスタイル(LUNAスタイル)に対応する

当たり前のことだが、C++Builder6で普通に作成したプログラムを実行した場合、従来のフォームスタイルで表示される。

Delphi7の場合、フォームに「TXPManifest」を貼り付けるだけでWindowsXPスタイルのプログラムを作成することができるものの、C++Builder6 には、このコンポーネントが用意されていない。

今回は、従来のフォームスタイルのプログラム(EXEファイル)を、WindowsXPスタイル(LUNAスタイル)で表示させる方法と、EXEファイルに組み込む方法を紹介する。

まずは、普通のプログラム(Project1.exe)を実行した場合の画面は次のとおり。
XpManifestImage1.jpg

上記の画面を XPスタイル で表示させるためには、EXEファイルと同じフォルダにマニフェストファイル(Project1.exe.manifest)を用意する。
Project1.exe.manifest.jpg

実行結果は以下のとおり。
XpManifestImage2.jpg

ただ、上記の場合だと、実行プログラムを配布する場合、EXEファイルとともにマニフェストファイルも一緒に配布する必要がある。
しかし、マニフェスト情報をEXEファイルに組み込むことで、配布をEXEファイルのみにすることができる。
その方法は以下のとおり。

@マニフェストファイル(Project1.exe.manifest)を用意する。
A専用のリソースファイル(manifest.rc)を作成する。
 manifest.rc.jpg

Bプロジェクトに manifest.rc を追加する。
CコンパイルしてEXEファイルを作成する。

【最後に】
実行時の画面イメージを見てもらえれば分かると思うが、全コンポーネントが対応しているわけではないことに注意して頂きたい。
また、こと細かく動作確認をしたわけではないので、これらの対応で不具合が発生する可能性が考えられるので個人の責任で実行して頂きたい。
あと、当然、Windowsデスクトップのテーマは「Windows XP」にしておかないと効果は期待できない。

【ファイル】
 ・対応前のEXEファイル(manifest_old_exe.zip)
 ・対応後のEXEファイル(manifest_new_exe.zip)
 ・対応後のソース(manifest_new_src.zip)

【関連サイト】
 ・Windows XP ビジュアル スタイルの使用
 ・Windows フォーム上のコントロールで Windows XP のビジュアル スタイルを使用する方法


・・・もしよかったら、右上のバナー広告をクリックしてほしいな・・・。
・・・もしくは、人気blogランキング をクリックしてほしいな・・・。
 m(_ _)m
 
posted by かねやん at 01:09| Comment(1) | TrackBack(0) | C++Builder6 | このブログの読者になる | 更新情報をチェックする

2006年05月03日

BCB6: ライフゲームを14年ぶりに再現

今年も新入社員が入って、OJT (※1) による教育が大変だ。
毎年、春になると「自分の仕事+教育」という過酷な使命を強いられて死にそうになっているエンジニアが沢山いるのではないかと思う。

ふと、私自身が新入社員の頃を振り返ってみたら、なぜか「ライフゲーム」を思い出した。
C言語を覚えたての頃「ライフゲーム」などのプログラムを作ったことがあった。PC-9801のMS-DOS上で。
その頃のソースは忘却の彼方へと消滅したと思うが・・。

おそらく最近の若い人で「ライフゲーム」について知っている人は少ないのではないかと思われる。

そんなことから、今回は「ライフゲーム」のプログラムを C++Builder6 で再現してみることにした。

【ライフゲームとは】
まず、ライフゲームとは、タイトルに「ゲーム」と付くものの、操作して遊ぶためのものではなく、生命の誕生と消滅のシミュレーション・プログラムである。

プログラム上では生命を「●」で表現する。

プログラムのアルゴリズムは単純で、3つの法則から成り立つ。
◆誕生の法則
 消滅している生命の周囲に3つの生命が生存している場合は次の世代で誕生する。
◆生存の法則
 生存しているセルの周囲に2つか3つの生命が生存している場合は次の世代でも生存する。
◆消滅の法則
 上記2つの条件に当てはまらない場合は消滅する。

プログラム実行時の画面イメージは以下のとおり。

lifegame_image1.jpg

左クリックで指定位置に生命を誕生させることが可能。右クリックで消滅。

【言い訳】
これらにあまり時間をかけたくなかったので最も簡単なロジックで作成した。
描画分の配列を用意して1マスずつ全マスを毎回判定する方法だ。
最も簡単な手法である反面、最も処理速度が遅い手法とも言える。

もっと本格的に処理を行う場合、判定すべきマスのみをピックアップしてリスト化したり、複数のアルゴリズムを用意して生命の分布状況に応じて判定アルゴリズムを使い分けるなど、処理の方法は様々だ。

でも、ソースには、おせっかいなくらいコメントを入れたので分かりやすい内容になっていると思う。

【関連ファイル】
 ・lifegame_src.zip
 ・lifegame_exe.zip


【※1】
OJTとは「On the Job Training」の略で、実際に仕事をしながら学んでいくタイプの教育手法だ。
日本国内企業の大半は中小企業で成り立っているので、OJT はメジャーな教育手法の1つだと思う。
研修費用を抑えて即戦力となる人材を迅速に育成するのに有効な手段だ。

P.S.
 つい最近まで記事の更新を1ヶ月以上サボっていたので、今回は掲載記事の内容を頑張った(つもり)。


・・・もしよかったら、右上のバナー広告をクリックしてほしいな・・・。
・・・もしくは、人気blogランキング をクリックしてほしいな・・・。
 m(_ _)m
 
posted by かねやん at 00:21| Comment(0) | TrackBack(1) | C++Builder6 | このブログの読者になる | 更新情報をチェックする

2006年03月25日

BCB6: 設計時と実行時を判別する

システム開発を行う上で、IDE上からデバッグする機会があります。

そして、EXEを直接実行した場合(実行時)と IDE上から実行した場合(設計時)のソースを別々に記述するケースでは、実行時か設計時かを判別する必要があります。

そんなことから、実行時と設計時を判別する方法を掲載しようと思ったのですが、・・・今回は失敗です。

以前は、以下のコードで判別できていたのですが、今の私の環境ではダメみたい・・・。

(なぜだろう?OSが悪いのかコンパイラが悪いのか?・・まぁそのうち解決するさっ。)

【C++Builderの場合】
 if (ComponentState.Contains(csDesigning)) {
   ShowMessage("設計時の動作");
 } else {
   ShowMessage("実行時の動作");
 }

【Delphiの場合】
 if not (csDesigning in ComponentState) then
 begin
   ShowMessage('実行時の動作');
 end else begin
   ShowMessage('設計時の動作');
 end;


・・・もしよかったら、右上のバナー広告をクリックしてほしいな・・・。
・・・もしくは、人気blogランキング をクリックしてほしいな・・・。
 m(_ _)m
 
posted by かねやん at 20:43| Comment(1) | TrackBack(5) | C++Builder6 | このブログの読者になる | 更新情報をチェックする

2006年02月27日

BCB6: アラート画面を作ってみた

あるセキュリティソフトを使っていると、たまにアラートが通知される。

そのアラートは、画面の右下からニョキニョキと現れる。

今回のプログラムでは、そのアラートの表示のされ方をマネてみた。

【画面】
alert_image1.jpg

「Show」ボタンを押下すると、下の画面がニュ〜っと出てくる。

alert_image2.jpg

【ファイル】
 ・alert_src.zip
 ・alert_exe.zip


・・・もしよかったら、右上のバナー広告をクリックしてほしいな・・・。
・・・もしくは、人気blogランキング をクリックしてほしいな・・・。
 m(_ _)m
 
posted by かねやん at 23:54| Comment(1) | TrackBack(0) | C++Builder6 | このブログの読者になる | 更新情報をチェックする

広告


この広告は60日以上更新がないブログに表示がされております。

以下のいずれかの方法で非表示にすることが可能です。

・記事の投稿、編集をおこなう
・マイブログの【設定】 > 【広告設定】 より、「60日間更新が無い場合」 の 「広告を表示しない」にチェックを入れて保存する。


×

この広告は1年以上新しい記事の投稿がないブログに表示されております。