VCLZip 简单 Demo
之前写过 VCLZip + Multi-Thread 的简单 Demo,Now share it:
program ZipDemo;
uses
Forms,
Unit1 in 'Unit1.pas' {frm_Main};
{$R *.res}
begin
Application.Initialize;
Application.CreateForm(Tfrm_Main, frm_Main);
Application.Title:= '解压缩示例';
Application.Run;
end.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, VCLUnZip, VCLZip, StdCtrls, ComCtrls, Gauges, ExtCtrls;
const
WM_ZipDone = WM_USER + 111;
WM_ZipError = WM_USER + 112;
type
TZipThread = class(TThread)
_VCLZip: TVCLZip;
protected
procedure Execute; override;
end;
TUnZipThread = class(TThread)
_VCLUnZip: TVCLUnZip;
protected
procedure Execute; override;
end;
Tfrm_Main = class(TForm)
VCLZip1: TVCLZip;
VCLUnZip1: TVCLUnZip;
Dlg_OpenDlg: TOpenDialog;
Dlg_SaveDlg: TSaveDialog;
btn_Zip: TButton;
btn_UnZip: TButton;
Memo1: TMemo;
Label1: TLabel;
Shp1: TShape;
Shp2: TShape;
Shp3: TShape;
Shp4: TShape;
Shp5: TShape;
Tmr_FlashTip: TTimer;
procedure btn_ZipClick(Sender: TObject);
procedure btn_UnZipClick(Sender: TObject);
procedure Label1Click(Sender: TObject);
procedure Tmr_FlashTipTimer(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
FZipThread: TZipThread;
FUnZipThread: TUnZipThread;
FInProcess: Boolean;
public
{ Public declarations }
procedure SetTipShpsVisible(IsVisible: Boolean = True);
procedure ZipBegin;
procedure WM_ZipDone(var Msg: TMessage); message WM_ZipDone;
procedure WM_ZipError(var Msg: TMessage); message WM_ZipError;
end;
var
frm_Main: Tfrm_Main;
implementation
uses
QDialogs, ShellAPI;
const
ZipFlag = 1; //压缩
UnZipFlag = 2; //解压
ZipErrorInfo = '%s失败!失败原因:%s '; //压缩/解压、失败原因
{$R *.dfm}
procedure Tfrm_Main.btn_ZipClick(Sender: TObject);
var
SaveName: string;
i: Integer;
begin
Memo1.Lines.Clear;
if Dlg_OpenDlg.Execute then
begin
Update;
for i:= 0 to Dlg_OpenDlg.Files.Count - 1 do
Memo1.Lines.Add(Dlg_OpenDlg.Files.Strings);
end;
if Dlg_SaveDlg.Execute then
SaveName:= Dlg_SaveDlg.FileName
else
Exit;
with VCLZip1 do
begin
ZipName:= SaveName;
Password:= 'Simon.Hu'; //Here set your Password...
Recurse:= True;
Screen.Cursor:= crHourGlass;
for i:= 0 to Memo1.Lines.Count - 1 do
FilesList.Add(Memo1.Lines);
end;
ZipBegin;
FZipThread:= TZipThread.Create(True);
with FZipThread do
begin
FreeOnTerminate:= True;
_VCLZip:= VCLZip1;
Resume;
end;
end;
procedure Tfrm_Main.btn_UnZipClick(Sender: TObject);
var
i: Integer;
OpenName: string;
DestPath: WideString;
begin
Memo1.Lines.Clear;
if Dlg_OpenDlg.Execute then
OpenName:= Dlg_OpenDlg.FileName
else
Exit;
with VCLUnZip1 do
begin
ZipName:= OpenName;
Password:= 'Simon.Hu'; //Here set your Password...
Screen.Cursor:= crHourGlass;
ReadZip;
for i:= 0 to Count - 1 do
Memo1.Lines.Add(Filename + #9 + Pathname);
Screen.Cursor:= crDefault;
Exit;
DoAll:= True;
RecreateDirs:= True;
RetainAttributes:= True;
end;
FUnZipThread:= TUnZipThread.Create(True);
with FUnZipThread do
begin
FreeOnTerminate:= True;
_VCLUnZip:= VCLUnZip1;
Resume;
end;
end;
begin
ShellExecute(
0,
'Open',
'http://user.qzone.qq.com/395588677/infocenter',
nil,
nil,
SW_SHOW
);
end;
begin
if Shp1.Brush.Color = clGreen then
begin
Shp1.Brush.Color:= clFuchsia;
Shp2.Brush.Color:= clGreen;
Shp3.Brush.Color:= clFuchsia;
Shp4.Brush.Color:= clFuchsia;
Shp5.Brush.Color:= clFuchsia;
end
else if Shp2.Brush.Color = clGreen then
begin
Shp1.Brush.Color:= clFuchsia;
Shp2.Brush.Color:= clFuchsia;
Shp3.Brush.Color:= clGreen;
Shp4.Brush.Color:= clFuchsia;
Shp5.Brush.Color:= clFuchsia;
end
else if Shp3.Brush.Color = clGreen then
begin
Shp1.Brush.Color:= clFuchsia;
Shp2.Brush.Color:= clFuchsia;
Shp3.Brush.Color:= clFuchsia;
Shp4.Brush.Color:= clGreen;
Shp5.Brush.Color:= clFuchsia;
end
else if Shp4.Brush.Color = clGreen then
begin
Shp1.Brush.Color:= clFuchsia;
Shp2.Brush.Color:= clFuchsia;
Shp3.Brush.Color:= clFuchsia;
Shp4.Brush.Color:= clFuchsia;
Shp5.Brush.Color:= clGreen;
end
else if Shp5.Brush.Color = clGreen then
begin
Shp1.Brush.Color:= clGreen;
Shp2.Brush.Color:= clFuchsia;
Shp3.Brush.Color:= clFuchsia;
Shp4.Brush.Color:= clFuchsia;
Shp5.Brush.Color:= clFuchsia;
end;
end;
begin
if FInProcess then
begin
if Assigned(FZipThread) then
begin
FZipThread.Suspend;
Handle,
'正在压缩文件,您确定要退出吗? ',
'退出确认',
MB_YESNO + MB_ICONQUESTION
) = IDYES then
begin
FZipThread.Resume;
SendMessage(frm_Main.Handle, WM_USER + 111, 0, 0);
end
else
begin
FZipThread.Resume;
Action:= caNone;
end;
end
else
begin
FUnZipThread.Suspend;
if MessageBox(
Handle,
'正在解压文件,您确定要退出吗? ',
'退出确认',
MB_YESNO + MB_ICONQUESTION
) = IDYES then
begin
FUnZipThread.Resume;
SendMessage(frm_Main.Handle, WM_USER + 111, 0, 0);
end
else
begin
FUnZipThread.Resume;
Action:= caNone;
end;
end;
end;
end;
begin
FInProcess:= True;
btn_Zip.Enabled:= False;
btn_UnZip.Enabled:= False;
SetTipShpsVisible(True);
Shp1.Brush.Color:= clGreen;
Tmr_FlashTip.Enabled:= True;
end;
begin
Tmr_FlashTip.Enabled:= False;
SetTipShpsVisible(False);
if Assigned(FZipThread) then
FZipThread:= nil
else if Assigned(FUnZipThread) then
FUnZipThread:= nil;
btn_Zip.Enabled:= True;
btn_UnZip.Enabled:= True;
FInProcess:= False;
Screen.Cursor:= crDefault;
if Msg.WParam = ZipFlag then
MessageBox(
Handle,
PChar(
'压缩完毕! ' + #13 + '共压缩了 ' +
IntToStr(Msg.LParam) + ' 个文件。 '
),
'提示',
MB_OK + MB_ICONINFORMATION
)
else if Msg.WParam = UnZipFlag then
MessageBox(
Handle,
PChar(
'解压完毕! ' + #13 + '共解压了 ' +
IntToStr(Msg.LParam) + ' 个文件。 '
),
'提示',
MB_OK + MB_ICONINFORMATION
);
end;
begin
Tmr_FlashTip.Enabled:= False;
SetTipShpsVisible(False);
FZipThread:= nil
else if Assigned(FUnZipThread) then
FUnZipThread:= nil;
btn_UnZip.Enabled:= True;
FInProcess:= False;
Screen.Cursor:= crDefault;
Handle,
PChar(Msg.LParam),
'错误',
MB_OK + MB_ICONERROR
);
end;
begin
if IsVisible then
begin
Shp1.Visible:= True;
Shp2.Visible:= True;
Shp3.Visible:= True;
Shp4.Visible:= True;
Shp5.Visible:= True;
end
else
begin
Shp1.Visible:= False;
Shp2.Visible:= False;
Shp3.Visible:= False;
Shp4.Visible:= False;
Shp5.Visible:= False;
end;
end;
var
ZippedCount: Integer;
begin
Screen.Cursor:= crHourGlass;
try
ZippedCount:= _VCLZip.Zip;
SendMessage(frm_Main.Handle, WM_ZipDone, ZipFlag, ZippedCount);
except
on E: Exception do
begin
SendMessage(
frm_Main.Handle,
WM_ZipError,
ZipFlag,
Integer(Format(ZipErrorInfo, ['压缩', E.Message]))
);
end;
end;
end;
var
UnZippedCount: Integer;
begin
Screen.Cursor:= crHourGlass;
try
UnZippedCount:= _VCLUnZip.UnZip;
SendMessage(frm_Main.Handle, WM_ZipDone, UnZipFlag, UnZippedCount);
except
on E: Exception do
begin
SendMessage(
frm_Main.Handle,
WM_ZipError,
UnZipFlag,
Integer(Format(ZipErrorInfo, ['解压', E.Message]))
);
end;
end;
end;
转载于:https://blog.51cto.com/adelphicoder/214651
VCLZip 简单 Demo相关推荐
- EPSON机器人建立TCP/IP通讯的简单demo
以下为我近期研究EPSON机器人通讯的经验总结,主要实现机械手接收相机发送过来的数据,从而达到对应的位置,及其简单demo. 欢迎加入知识星球[3D视觉工坊],进行交流学习.
- Solr配置与简单Demo[转]
Solr配置与简单Demo 简介: solr是基于Lucene Java搜索库的企业级全文搜索引擎,目前是apache的一个项目.它的官方网址在http://lucene.apache.org/sol ...
- VC++ 拖放编程简单Demo
微软的编程类库都带有拖放编程的接口:下面看一个最简单demo:win7, vc6:新建一个对话框工程: 添加一个列表框控件:设置 接受文件 属性: 在 类向导-Class Info 做如下选择: 为W ...
- win32汇编定时器简单Demo
timer.asm: .386.model flat,stdcalloption casemap:noneinclude windows.inc include user32.inc includel ...
- win32汇编创建线程简单Demo
代码如下:thread.asm: .386.model flat,stdcalloption casemap:noneinclude windows.inc include user32.inc in ...
- rabbitMQ消息队列 – 面板介绍及简单demo
首先rabbit安装好之后,运维会给一个控制面板. 默认账号密码为guest 登入以后可以看到具体界面. 在此鸣谢百度翻译给予的大力支持.. ###写一个简单的demo 编写之前..虽然说可以直接用底 ...
- python wpf教程_WPF使用IronPython库的简单Demo
WPF使用IronPython库的简单Demo 一.IronPython和C#交互 IronPython是一个.NET平台上的Python实现,包括了完整的编译器.执行引擎与运行时支持,能够与.NET ...
- Ocelot 入门Demo系列(01-Ocelot极简单Demo及负载均衡的配置)
来源:https://www.cnblogs.com/7tiny/p/10493805.html [前言] Ocelot是一个用.NET Core实现并且开源的API网关,它功能强大,包括了:路由.请 ...
- java爬虫的2种爬取方式(HTTP||Socket)简单Demo(一)
转载自 java爬虫的2种爬取方式(HTTP||Socket)简单Demo(一) 最近在找java的小项目自己写着玩,但是找不到合适的,于是写开始学一点爬虫,自己也是感觉爬虫比较有趣.这里自己找了一个 ...
最新文章
- c语言 python-C语言和python的区别
- UCOSIIIAPI函数接口OSTaskCreate();函数
- C语言进行离散傅里叶DFT变换~MATLAB验证
- 氨氮吹脱法脱与php有关系吗,吹脱法处理氨氮废水的原理及优缺点分析
- 虚拟机centos 上安装svn
- 第五章 面向方面编程___AOP入门
- 剑指offer之和为s的数组
- MRP的数据处理-华北水利水电大学(作业)
- 【Tomcat】初次配置Tomcat的那些糟心事
- 无线技术网络导论--期末复习指导
- GCD中dispatch_barrier的使用方法
- 微信内置浏览器使用DevTools实现自动顶帖脚本
- python ValueError: No JSON object could be decoded
- MATLAB二维绘图(二)向图中添加标题,坐标轴,图标和文字信息
- react上拉加载更多
- [C++]派(二分算法)
- 计算机wps系统的造字程序在哪里,Windows10系统自带造字程序在哪?位置介绍
- 【多线程】采用Callable接口创建线程
- 【2D游戏制作笔记】给游戏战斗增加一点打击感
- 袁氏报表用代码画一个饼图