アプリ(中級) | アプリ(入門) | Tips | ダウンロード | プログラム
| コラム

CBアプリ工房


ホーム > アプリ(入門) > 圧縮ソフトも作りたい [ 1 | 2 ]

圧縮ソフトも作りたい - 1/2

更新 : 2009/01/14

 



実行中の圧縮ソフト 完成図

以前、解凍ソフトを作りましたが、「圧縮ソフトもぜひ」、と言う声があったので、今回は圧縮ソフトを作ってみます。前回作った解凍ソフトのコードがかなりの部分使えますので、作成した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 +
                      "\" が作成されました。");
}

続く・・・。



[ ホーム | ページトップ | 次へ | ブック | リンク | サイトマップ ]
Copyright(c) 2003 Shibu All rights reserved.