ホーム
|
アプリケーション | Tips | ダウンロード | プログラム
| コラム

CBアプリ工房


  アプリケーション > 解凍ソフトは難しい![ 1 | 2 ]

解凍ソフトは難しい! - 2/2

更新 : 2009/01/05

 


OnDestroy イベントに、終了時の処理を書いておきます。

FreeLibrary 関数に、LoadLibrary 関数で得たハンドルを引数として渡し、DLL が使っていたメモリを解放しています。


void __fastcall TForm1::FormDestroy(TObject *Sender)
{
    //DLLの解放
    if (hDll) FreeLibrary(hDll);
} 

次はいよいよ解凍ソフトのメイン部分、
ExtractBtn のクリックイベントです。

最初に
今後必要になる変数(圧縮ファイル名・スイッチ類)を宣言しておきます。
OpenDialog の Filter をセットします(これはプロパティで設定してもよいです)。OpenDialog を表示してファイルが選択されなければ解凍処理を終わりにします。

ファイル名を取得したら、コマンドラインを作成します。Unlha にコマンドラインを渡して、解凍を実行します。

コマンドラインの様式は、
UNLHA32.DLL のドキュメントに書かれています。今回は解凍に必要な最低限のスイッチを記述しておきます。

Memo1 をクリアして、Unlha を実行した結果を表示させます。


//書庫ファイル展開
void __fastcall TForm1::ExtractBtnClick(TObject *Sender)
{    
    AnsiString lzhName, //書庫名               
               cmdLine; //コマンド変数

    OpenDialog1->Filter = "圧縮ファイル (*.lzh)|*.lzh";

    //ファイルが選択されなければ処理終わり
    if (!OpenDialog1->Execute()) return;

    lzhName = OpenDialog1->FileName;//解凍ファイル名    

    //コマンドライン作成(空白パスなどには未対応)
    cmdLine = "x "  + lzhName;//解凍する書庫名

    //Unlha 操作
    Unlha(Application->Handle, cmdLine.c_str(), "", 0);

    //結果表示用 Memo1 をクリア
    Memo1->Lines->Clear(); 
    Memo1->Lines->Add("ファイル \"" + lzhName +
                      "\" の解凍が終了しました。");
}

最後に終了ボタンのイベントを記述します。


void __fastcall TForm1::ExitBtnClick(TObject *Sender)
{
    Close();
}

以上ですべてのコーディングが終わりました。お疲れ様でした。
コンパイルして実行してみてください。圧縮ファイルが解凍できたでしょうか? 



ひとこと:
今回作成したのは、解凍専用ソフトでしたが、圧縮機能も追加したいところです。
時間のある方は UNLHA32.DLL 付属のドキュメントをよく読んで機能を追加してみてください。

以上のコードは、ご自由にお使いいただいて結構です。ただし、コードを使用した結果、問題が生じても責任はいっさい負いかねますのでご了承ください。
 



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