Division 文件分割/合並控件演示,作者:杜偉(vber) 。窗體使用了TAB選項卡的布局,這也是亮點之一,將分割文件與合並文件整合到了一起,操作起來挺方便。窗體下邊會顯示進度條,還可以生成合並或分割時的批處理文件,方便以後用。
程序最終運行效果如下圖所示:
Delphi文件分割器、文件合並程序代碼:
001
unit
Division_Unit;
002
interface
003
uses
004
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
005
ComCtrls, StdCtrls, Division, Buttons, SHLOBJ;
006
type
007
TfrmDivision =
class
(TForm)
008
PageControl1: TPageControl;
009
TabSheet1: TTabSheet;
010
TabSheet2: TTabSheet;
011
Label1: TLabel;
012
Edit1: TEdit;
013
Button1: TButton;
014
Label2: TLabel;
015
Edit2: TEdit;
016
Button2: TButton;
017
Label3: TLabel;
018
Edit3: TEdit;
019
CheckBox1: TCheckBox;
020
Label4: TLabel;
021
Label5: TLabel;
022
ProgressBar1: TProgressBar;
023
OpenDialog1: TOpenDialog;
024
SaveDialog1: TSaveDialog;
025
Button3: TButton;
026
Division1: TDivision;
027
Button4: TButton;
028
GroupBox1: TGroupBox;
029
RadioButton1: TRadioButton;
030
Edit4: TEdit;
031
SpeedButton1: TSpeedButton;
032
RadioButton2: TRadioButton;
033
SpeedButton2: TSpeedButton;
034
SpeedButton3: TSpeedButton;
035
ProgressBar2: TProgressBar;
036
Label6: TLabel;
037
ListBox1: TListBox;
038
TabSheet3: TTabSheet;
039
procedure
Button1Click(Sender: TObject);
040
procedure
Button2Click(Sender: TObject);
041
procedure
Edit1Change(Sender: TObject);
042
procedure
CheckBox1Click(Sender: TObject);
043
procedure
Button3Click(Sender: TObject);
044
procedure
Division1BeginCombine(FileCount:
Integer
);
045
procedure
Division1BeginDivision(SectionTotal:
Integer
);
046
procedure
Division1DoingCombine(Sender: TObject);
047
procedure
Division1DoingDivision(Sender: TObject);
048
procedure
Division1EndCombine(Sender: TObject);
049
procedure
Division1EndDivision(Sender: TObject);
050
procedure
FormShow(Sender: TObject);
051
procedure
SpeedButton3Click(Sender: TObject);
052
procedure
SpeedButton1Click(Sender: TObject);
053
procedure
RadioButton1Click(Sender: TObject);
054
procedure
RadioButton2Click(Sender: TObject);
055
procedure
SpeedButton2Click(Sender: TObject);
056
procedure
Button4Click(Sender: TObject);
057
procedure
PageControl1Change(Sender: TObject);
058
private
059
{ Private declarations }
060
public
061
{ Public declarations }
062
end
;
063
var
064
frmDivision: TfrmDivision;
065
implementation
066
{$R *.DFM}
067
// 浏覽文件夾
068
function
SelectDirectory(
var
InitPath :
String
;szTitle:
String
) :
Boolean
;
069
var
BROWSEINFO:TBROWSEINFO;
070
vPath : PItemIDList;
071
Path :
PChar
;
072
begin
073
BROWSEINFO
.
hwndOwner := Application
.
Handle;
074
BROWSEINFO
.
lpfn :=
nil
;
075
BROWSEINFO
.
lpszTitle :=
PChar
(szTitle);
076
BROWSEINFO
.
pidlRoot :=
nil
;
077
BROWSEINFO
.
pszDisplayName :=
nil
;
078
BROWSEINFO
.
lParam := BFFM_INITIALIZED;
079
BROWSEINFO
.
ulFlags := BIF_RETURNONLYFSDIRS;
080
vPath := SHBrowseForFolder(BROWSEINFO);
081
Result :=
False
;
082
if
vPath <>
nil
then
begin
083
GetMem(Path,
255
);
084
SHGetPathFromIDList(vPath, Path);
085
InitPath := StrPas(Path);
086
FreeMem(Path);
087
Result :=
True
;
088
end
;
089
end
;
090
procedure
TfrmDivision
.
Button1Click(Sender: TObject);
091
begin
092
with
OpenDialog1
do
093
begin
094
if
Execute
then
095
Edit1
.
Text := FileName;
096
end
;
097
end
;
098
procedure
TfrmDivision
.
Button2Click(Sender: TObject);
099
begin
100
with
SaveDialog1
do
101
begin
102
if
Execute
then
103
begin
104
Edit2
.
Text := ChangeFileExt(FileName, ExtractFileExt(Edit1
.
Text));
105
end
;
106
end
;
107
end
;
108
procedure
TfrmDivision
.
Edit1Change(Sender: TObject);
109
begin
110
if
Edit1
.
Text <>
''
then
111
Edit2
.
Text := Edit1
.
Text;
112
end
;
113
procedure
TfrmDivision
.
CheckBox1Click(Sender: TObject);
114
begin
115
if
CheckBox1
.
Checked
then
Division1
.
CreateType := ctBat
116
else
Division1
.
CreateType := ctNone;
117
end
;
118
procedure
TfrmDivision
.
Button3Click(Sender: TObject);
119
begin
120
Button3
.
Enabled :=
False
;
121
Screen
.
Cursor := crHourGlass;
122
// 開始分割
123
Division1
.
DivisionSize := StrToInt(Edit3
.
Text);
124
Division1
.
FileName := Edit1
.
Text;
125
Division1
.
SavePathName := Edit2
.
Text;
126
Division1
.
Execute;
127
end
;
128
procedure
TfrmDivision
.
Division1BeginCombine(FileCount:
Integer
);
129
begin
130
ProgressBar2
.
Max := FileCount;
131
end
;
132
procedure
TfrmDivision
.
Division1BeginDivision(SectionTotal:
Integer
);
133
begin
134
ProgressBar1
.
Max := SectionTotal;
135
end
;
136
procedure
TfrmDivision
.
Division1DoingCombine(Sender: TObject);
137
begin
138
ProgressBar2
.
StepIt;
139
end
;
140
procedure
TfrmDivision
.
Division1DoingDivision(Sender: TObject);
141
begin
142
ProgressBar1
.
StepIt;
143
end
;
144
procedure
TfrmDivision
.
Division1EndCombine(Sender: TObject);
145
begin
146
Button4
.
Enabled :=
True
;
147
Screen
.
Cursor := crDefault;
148
ProgressBar2
.
Position :=
0
;
149
Application
.
MessageBox(
'合並完成!'
,
'信息'
, MB_OK + MB_ICONINFORMATION);
150
end
;
151
procedure
TfrmDivision
.
Division1EndDivision(Sender: TObject);
152
begin
153
Button3
.
Enabled :=
True
;
154
Screen
.
Cursor := crDefault;
155
ProgressBar1
.
Position :=
0
;
156
Application
.
MessageBox(
'分割完成!'
,
'信息'
, MB_OK + MB_ICONINFORMATION);
157
end
;
158
procedure
TfrmDivision
.
FormShow(Sender: TObject);
159
begin
160
ProgressBar1
.
Step :=
1
;
161
ProgressBar2
.
Step :=
1
;
162
end
;
163
procedure
TfrmDivision
.
SpeedButton3Click(Sender: TObject);
164
begin
165
ListBox1
.
Clear;
166
end
;
167
procedure
TfrmDivision
.
SpeedButton1Click(Sender: TObject);
168
var
169
sPath:
String
;
170
begin
171
if
SelectDirectory(sPath,
'浏覽文件夾:'
)
then
172
Edit4
.
Text := sPath;
173
end
;
174
procedure
TfrmDivision
.
RadioButton1Click(Sender: TObject);
175
begin
176
if
RadioButton1
.
Checked
then
177
begin
178
Edit4
.
Enabled :=
True
;
179
SpeedButton1
.
Enabled :=
True
;
180
SpeedButton2
.
Enabled :=
False
;
181
SpeedButton3
.
Enabled :=
False
;
182
ListBox1
.
Enabled :=
False
;
183
end
184
else
185
begin
186
SpeedButton2
.
Enabled :=
True
;
187
SpeedButton3
.
Enabled :=
True
;
188
ListBox1
.
Enabled :=
True
;
189
Edit4
.
Enabled :=
False
;
190
SpeedButton1
.
Enabled :=
False
;
191
end
;
192
end
;
193
procedure
TfrmDivision
.
RadioButton2Click(Sender: TObject);
194
begin
195
if
RadioButton2
.
Checked
then
196
begin
197
Edit4
.
Enabled :=
False
;
198
SpeedButton1
.
Enabled :=
False
;
199
SpeedButton2
.
Enabled :=
True
;
200
SpeedButton3
.
Enabled :=
True
;
201
ListBox1
.
Enabled :=
True
;
202
end
203
else
204
begin
205
SpeedButton2
.
Enabled :=
False
;
206
SpeedButton3
.
Enabled :=
False
;
207
ListBox1
.
Enabled :=
False
;
208
Edit4
.
Enabled :=
True
;
209
SpeedButton1
.
Enabled :=
True
;
210
end
;
211
end
;
212
procedure
TfrmDivision
.
SpeedButton2Click(Sender: TObject);
213
var
i:
Integer
;
214
begin
215
with
OpenDialog1
do
216
begin
217
Options := [ofAllowMultiSelect];
218
if
Execute
then
219
begin
220
ListBox1
.
Clear;
221
for
i:=
0
to
Files
.
Count-
1
do
222
ListBox1
.
Items
.
Add(Files
.
Strings[i]);
223
end
;
224
end
;
225
end
;
226
procedure
TfrmDivision
.
Button4Click(Sender: TObject);
227
begin
228
// 開始合並
229
Button4
.
Enabled :=
False
;
230
Screen
.
Cursor := crHourGlass;
231
if
RadioButton1
.
Checked
then
232
begin
233
Division1
.
WorkType := ttCombine;
234
Division1
.
CombineSource := csPath;
235
Division1
.
CombinePath := Edit4
.
Text;
236
Division1
.
Execute;
237
end
238
else
if
RadioButton2
.
Checked
then
239
begin
240
Division1
.
WorkType := ttCombine;
241
Division1
.
CombineSource := csFiles;
242
Division1
.
CombineFileList
.
Assign(ListBox1
.
Items);
243
Division1
.
Execute;
244
end
;
245
end
;
246
procedure
TfrmDivision
.
PageControl1Change(Sender: TObject);
247
begin
248
if
PageControl1
.
ActivePageIndex =
2
then
249
begin
250
Division1
.
About;
251
PageControl1
.
ActivePageIndex :=
0
;
252
end
;
253
end
;
254
end
.
這是主要的代碼文件,可以在Delphi7中編譯運行。