?? unitsaveas.pas
字號(hào):
unit UnitSaveAs;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons, ComCtrls;
type
TFrmSaveAsFile = class(TForm)
GroupBox1: TGroupBox;
GroupBox2: TGroupBox;
Label1: TLabel;
Label2: TLabel;
Edit1: TEdit;
Edit2: TEdit;
SBtnOpen: TSpeedButton;
SbtnSaveAs: TSpeedButton;
ProgressBar1: TProgressBar;
Label3: TLabel;
BBtnSaveAs: TBitBtn;
BBtnExit: TBitBtn;
SaveDialog1: TSaveDialog;
OpenDialog1: TOpenDialog;
procedure FormCreate(Sender: TObject);
procedure SBtnOpenClick(Sender: TObject);
procedure SbtnSaveAsClick(Sender: TObject);
procedure BBtnExitClick(Sender: TObject);
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
procedure BBtnSaveAsClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
FrmSaveAsFile: TFrmSaveAsFile;
Copying:Boolean; //用于判斷拷貝過程是否完成
implementation
{$R *.dfm}
procedure TFrmSaveAsFile.FormCreate(Sender: TObject);
begin
OpenDialog1.FileName:='';
OpenDialog1.InitialDir:=ExtractFileDir(Application.ExeName);
SaveDialog1.FileName:='';
SaveDialog1.InitialDir:=ExtractFileDir(Application.ExeName);
BBtnSaveAs.Enabled:=False;
Copying:=False;
end;
procedure TFrmSaveAsFile.SBtnOpenClick(Sender: TObject);
begin
With OpenDialog1 do
if Execute then
Edit1.Text:=Opendialog1.FileName;
if ((Edit1.Text<>'') and (Edit2.Text<>'')) then
BBtnSaveAs.Enabled:=True
else
BBtnSaveAs.Enabled:=False;
end;
procedure TFrmSaveAsFile.SbtnSaveAsClick(Sender: TObject);
begin
With SaveDialog1 do
if Execute then
Edit2.Text:=SaveDialog1.FileName;
if ((Edit1.Text<>'') and (Edit2.Text<>'')) then
BBtnSaveAs.Enabled:=True
else
BBtnSaveAs.Enabled:=False;
end;
procedure TFrmSaveAsFile.BBtnExitClick(Sender: TObject);
begin
Close;
end;
procedure TFrmSaveAsFile.FormCloseQuery(Sender: TObject;
var CanClose: Boolean);
begin
if Copying then
CanClose:=False
else
CanClose:=True;
end;
procedure TFrmSaveAsFile.BBtnSaveAsClick(Sender: TObject);
var
FromFile,ToFile:File; //聲明兩個(gè)無類型文件的變量
NumRead,NumWrite:Integer; //存儲(chǔ)實(shí)際讀取和寫入的字節(jié)數(shù)
Buf:Array[1..2048] of byte; //定義內(nèi)存緩沖區(qū)
begin
AssignFile(FromFile,Opendialog1.FileName); //關(guān)聯(lián)源文件
Reset(FromFile,1); //只讀打開源文件
AssignFile(ToFile,SaveDialog1.FileName); //關(guān)聯(lián)目標(biāo)文件
Rewrite(ToFile,1); //覆蓋寫入方式打開目標(biāo)文件
progressBar1.Max:=(FileSize(FromFile)*2 div sizeof(buf));
//以下內(nèi)容是從源文件讀取內(nèi)容,然后寫入目標(biāo)文件
repeat
BlockRead(FromFile,buf,Sizeof(buf),NumRead);
ProgressBar1.StepIt;
BlockWrite(ToFile,buf,NumRead,NumWrite);
ProgressBar1.StepIt;
Copying:=True;
Application.ProcessMessages;
until ((NumRead = 0) or (NumWrite <> NumRead)); //注意循環(huán)退出條件
//最后注意關(guān)閉文件,一定不可以省略,否則會(huì)造成數(shù)據(jù)丟失
CloseFile(FromFile);
CloseFile(ToFile);
ProgressBar1.Position:=0;
Copying:=False;
ShowMessage('文件另存為過程完成。');
end;
end.
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -