📄 unitbackup.pas
字号:
unit UnitBackup;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Db,ADODB, ExtCtrls, ShellApi, Menus,
ComCtrls, Registry, ScktComp , StdCtrls , Buttons, Variants,IniFiles ,StrUtils,
ImgList ;
const
WM_BARICON=WM_USER+200; //自定义消息
ID_MAIN=100;//定义图标的ID
type
TFrmBackup = class(TForm)
GroupBox1: TGroupBox;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
CmbServerName: TComboBox;
CmbDatabaseName: TComboBox;
EdtUserName: TEdit;
EdtPassword: TEdit;
GroupBox2: TGroupBox;
GroupBox3: TGroupBox;
btnSave: TBitBtn;
btnCancel: TBitBtn;
cboAutoRun: TCheckBox;
EdtPath: TEdit;
btnPath: TButton;
btnSetTime: TBitBtn;
connAdo: TADOConnection;
connQuery: TADOQuery;
btnBackup: TBitBtn;
Timer1: TTimer;
cboShowMessage: TCheckBox;
PopupMenu: TPopupMenu;
N1: TMenuItem;
N2: TMenuItem;
ImageList1: TImageList;
cboMin: TCheckBox;
cboClose: TCheckBox;
cboStart: TCheckBox;
BitBtn1: TBitBtn;
Button1: TButton;
procedure btnSetTimeClick(Sender: TObject);
procedure btnSaveClick(Sender: TObject);
procedure btnBackupClick(Sender: TObject);
procedure btnPathClick(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure btnCancelClick(Sender: TObject);
procedure N2Click(Sender: TObject);
procedure N1Click(Sender: TObject);
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
procedure BitBtn1Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
FilePath:String;
BackupIniFile:TIniFile;
ServerName,DatabaseName,UserName,Password:String;
Run,StartMin,Show,Min,CloseShow:integer;
Conn:Boolean; //判断联接是否成功
connString:String; //联接字符串
BackFileName:String; //备份文件的名称
procedure AddIcon(hwnd:HWND);
procedure RemoveIcon(hwnd: HWND); //从状态区移去图标
procedure WMSysCommand(var Message: TMessage); message WM_SYSCOMMAND;
procedure WMBarIcon(var Message:TMessage);message WM_BARICON;
procedure WMMini(var Message:TMessage);message WM_SETFOCUS;
procedure BackupBase(FileName:String); //定义备份过程
procedure ReadIni; //读取INI文件中的内容
public
{ Public declarations }
BackupType,EveryTime,EveryDay,EveryMonth,EveryWeek:integer;
procedure ComBoboxValue(Cmb:TComBoBox;Str:string) ;
end;
var
FrmBackup: TFrmBackup;
implementation
uses UnitFrmSetupTime, UnitFilePath, UnitDirPath, UnitDlg, UnitChose;
{$R *.dfm}
procedure TFrmBackup.AddIcon(hwnd:HWND);
var
lpData:PNotifyIconData;
begin
lpData := new(PNotifyIconDataA);
lpData.cbSize := 88;
lpData.Wnd := FrmBackup.Handle;
lpData.hIcon := FrmBackup.Icon.Handle;
lpData.uCallbackMessage := WM_BARICON;
lpData.uID :=0;
lpData.szTip := '数据库备份工具';
lpData.uFlags := NIF_ICON or NIF_MESSAGE or NIF_TIP;
Shell_NotifyIcon(NIM_ADD,lpData);
dispose(lpData);
FrmBackup.Visible := False;
end;
procedure TFrmBackup.RemoveIcon(hwnd: HWND);//从状态区移去图标
var
lpData:PNotifyIconData;
begin
//如果用户点击任务栏图标则将图标删除并回复窗口。
lpData := new(PNotifyIconDataA);
lpData.cbSize := 88;//SizeOf(PNotifyIconDataA);
lpData.Wnd := FrmBackup.Handle;
lpData.hIcon := FrmBackup.Icon.Handle;
lpData.uCallbackMessage := WM_BARICON;
lpData.uID :=0;
lpData.szTip := 'Samples';
lpData.uFlags := NIF_ICON or NIF_MESSAGE or NIF_TIP;
Shell_NotifyIcon(NIM_DELETE,lpData);
dispose(lpData);
end;
procedure TFrmBackup.WMSysCommand(var Message:TMessage);
begin
if Message.WParam = SC_ICON then
begin
//如果用户最小化窗口则将窗口
//隐藏并在任务栏上添加图标
AddIcon(handle);
end
else if (Message.WParam= SC_Close) and (Min=1)then begin
Application.Minimize;
AddIcon(handle);
end
else if (Message.WParam=WM_CREATE) and (Min=1)then begin
Application.Minimize;
AddIcon(handle);
end
else
//如果是其它的SystemCommand
//消息则调用系统缺省处理函数处理之。
DefWindowProc(FrmBackup.Handle,Message.Msg,Message.WParam,Message.LParam);
end;
procedure TFrmBackup.WMBarIcon(var Message:TMessage);
var
lpData:PNotifyIconData;
Pt:TPoint;
begin
if (Message.LParam = WM_LBUTTONDOWN) then
begin
RemoveIcon(handle);
FrmBackup.Visible := True;
end
else if (Message.LParam=WM_RBUTTONDOWN) then
begin
SetForeGroundWindow(lpData.Wnd);
GetCursorPos(Pt);
Popupmenu.Popup(Pt.X,pt.y);
end;
end;
procedure TFrmBackup.WMMini(var Message:TMessage);
begin
if (Message.Msg=WM_CREATE) then begin
Application.Minimize;
AddIcon(handle);
end
end;
//定义备份过程
procedure TFrmBackup.BackupBase(FileName:String);
begin
try
screen.Cursor:=crSqlWait;
with connQuery do
begin
close;
Sql.Text:='Backup Database '+Trim(CmbDatabaseName.Text)+' to Disk='''+FileName+''' ';
ExecSQL;
end;
screen.Cursor:=crDefault;
except
MessageBox(handle,'备份失败!','提示',MB_IconWarning+mb_Ok);
screen.Cursor:=crDefault;
Exit;
end;
end;
//读取INI文件中的内容
procedure TFrmBackup.ReadIni;
begin
FilePath:=ExtractFilePath(Application.ExeName)+'System.ini';
BackupIniFile:=TIniFile.Create(FilePath);
ServerName:=BackupIniFile.ReadString('Database','ServerName','');
DatabaseName:=BackupIniFile.ReadString('Database','DatabaseName','');
UserName:=BackupIniFile.ReadString('Database','UserName','');
Password:=BackupIniFile.ReadString('Database','Password','');
Run:=BackupIniFile.ReadInteger('AutoRun','Run',0);
StartMin:=BackupIniFile.ReadInteger('AutoRun','StartMin',0);
Show:=BackupIniFile.ReadInteger('AutoRun','Show',0);
Min:=BackupIniFile.ReadInteger('AutoRun','Min',0);
CloseShow:=BackupIniFile.ReadInteger('AutoRun','CloseShow',0);
BackupType:=BackupIniFile.ReadInteger('Backup','BackupType',0);
EveryTime:=BackupIniFile.ReadInteger('Backup','EveryTime',0);
EveryDay:=BackupIniFile.ReadInteger('Backup','EveryDay',0);
EveryWeek:=BackupIniFile.ReadInteger('Backup','EveryWeek',0);
EveryMonth:=BackupIniFile.ReadInteger('Backup','EveryMonth',0);
CmbServerName.Text:=ServerName;
//CmbDatabaseName.Text:=DatabaseName;
ComBoboxValue(cmbDatabaseName,DatabaseName);
EdtUserName.Text:=UserName;
EdtPassword.Text:=Password;
EdtPath.Text:=BackupIniFile.ReadString('FilePath','Path','');
if Run=1 then //初始化<随开机启动>
cboAutoRun.Checked:=True
else
cboAutoRun.Checked:=False;
if StartMin=1 then //初始化<启动后最小化>
cboStart.Checked:=True
else
cboStart.Checked:=False;
if Show=1 then //初始化<备份时显示提示信息>
cboShowMessage.Checked:=True
else
cboShowMessage.Checked:=False;
if Min=1 then //初始化<关闭时最小化>
cboMin.Checked:=True
else
cboMin.Checked:=False;
if CloseShow=1 then //初始化<不显示关闭信息>
cboClose.Checked:=True
else
cboClose.Checked:=False;
end;
procedure TFrmBackup.btnSetTimeClick(Sender: TObject);
begin
Application.CreateForm(TFrmSetupTime,FrmSetupTime);
FrmSetupTime.ShowModal;
FrmSetupTime.Free;
end;
procedure TFrmBackup.btnSaveClick(Sender: TObject);
var
reg:TRegistry;
S_RegTree:String;
begin
if not conn then //判断数据库联接是否成功,只有成功之后才能保存
begin
MessageBox(handle,'数据库联接没有成功,所以不能保存!','错误',mb_IconWarning+mb_Ok);
CmbServerName.SetFocus;
Exit;
end;
//将数据库联接参数保存到Ini文件中
BackupIniFile.WriteString('Database','ServerName',Trim(CmbServername.Text));
BackupIniFile.WriteString('Database','DatabaseName',DatabaseName);
BackupIniFile.WriteString('Database','UserName',Trim(EdtUserName.Text));
BackupIniFile.WriteString('Database','Password',Trim(EdtPassword.Text));
BackupIniFile.WriteString('FilePath','Path',Trim(EdtPath.Text));
//判断是否开机时起动系统
reg:=tregistry.Create;
Reg.RootKey:=HKEY_LOCAL_MACHINE;
S_RegTree:='\Software\Microsoft\Windows\CurrentVersion\Run';
if Reg.OpenKey(S_RegTree,False)=false then
Reg.CreateKey(S_RegTree);
Reg.OpenKey(S_RegTree,True);
FilePath:=ExtractFilePath(Application.ExeName)+'Backup.exe';
if cboAutoRun.Checked then
begin
Reg.WriteString('BackupDatabase',FilePath);
BackupIniFile.WriteInteger('AutoRun','Run',1);
end
else begin
Reg.DeleteValue('BackupDatabase');
BackupIniFile.WriteInteger('AutoRun','Run',0);
end;
//启动后最小化
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -