|
完成図 |
以前、解凍ソフトを作りましたが、「圧縮ソフトもぜひ」、と言う声があったので、今回は圧縮ソフトを作ってみます。前回作った解凍ソフトのコードがかなりの部分使えますので、作成したC++Builder
のプロジェクト(Project1)に圧縮部分のコードを追加していく形で進めたいと思います。
解凍ソフトのヘッダーファイル(Unit1.h),
ソースファイル(Unit1.cpp)の OnActivate, OnDestory
で記述したコードはそのまま圧縮ソフトでも使えます。この部分の解説は繰り返しになりますので、ここでは省きます。(解凍ソフトを見ないで)こちらの解説を最初に見られた方は、解凍ソフトは難しい! を参照してください。
圧縮ファイルは、前回同様 LHA
形式のみを考慮します。
圧縮ソフト作成のポイント
●LoadLibrary/GetProcAddress などの API 関数の使い方。
●提供される DLL の情報・仕様の読解力。
で、前回と同じですね。
それではさっそくフォームの作成から見ていくことにします。
前回作成した Form の "書庫ファイル展開" ボタンを右に移動して、圧縮で使うボタン("書庫ファイル作成")を追加します。コンポーネントの一覧では、今回追加した部分を赤色の太字で示してあります。
コンポーネント |
Name |
説明 |
TMemo |
Memo1 |
圧縮・解凍の結果を表示します。 |
TOpenDialog |
OpenDialog1 |
ファイル及び圧縮ファイルを指定します。 |
TPopupMenu |
PopupMenu1 |
ダミーとして使います。 |
TButton |
CompressBtn,
ExtractBtn,
ExitBtn |
Caption を各々 "書庫ファイル作成"、"書庫ファイル展開"、"終了"
としてください。 |
先ほども書いたように、ヘッダーファイル(Unit1.h),
ソースファイル(Unit1.cpp)の OnActivate, OnDestory
で記述したコードは今回もまったく同じに使用できます。なのでソースファイルに追加するのは、CompressBtn
の OnClick イベントだけです。
この部分の説明は次回になります。
一通りコードを記述しておきますので、見ておいてください(フォルダの圧縮には未対応です)。
void __fastcall TForm1::CompressBtnClick(TObject *Sender)
{
AnsiString ArchiveName, //書庫名
CompressName,//圧縮するファイル名
cmdLine; //コマンド変数
//圧縮用のフィルタを設定する。
OpenDialog1->Filter = "すべてのファイル (*.*)|*.*";
//ファイルが選択されなければ処理終わり
if (!OpenDialog1->Execute()) return;
//選択したファイル名を圧縮ファイル名として使う
CompressName = OpenDialog1->FileName;
ArchiveName = ChangeFileExt(CompressName, ".lzh");//書庫名
//コマンドライン作成(空白パスなどには未対応)
cmdLine = "a " + ArchiveName //書庫名
+ " " + CompressName; //圧縮するファイル名
//Unlha 操作
Unlha(Application->Handle, cmdLine.c_str(), "", 0);
//結果表示用 Memo1 をクリア
Memo1->Lines->Clear();
Memo1->Lines->Add("ファイル \"" + ArchiveName +
"\" が作成されました。");
}
|
続く・・・。
|
|