Delphi开发的小程序,全代码实现友好界面,具有增量备份功能
//文件 mini_pe.dpr uses {$IFDEF WIN32} Windows {$ELSE} WinProcs {$ENDIF},Messages,shellapi,tlhelp32,SysUtils,dateutils,winSock;
const MI_ICONEVENT = WM_USER + 1; szAppName : PChar = 'demoWindow 1.0'; txtFile1 = '2008.txt'; txtFile2 = 'info.txt'; ID_SYS1 = 8001;
ID_Open = 4001; ID_Save = 4002; ID_Close = 4003;
ID_NEW1 = 4008;
var wc: WNDCLASS; RichWnd, hwndCombox, hwndtooltip1, hwndtooltip2, hwndtooltip3, hwndtooltip4, hwndtooltip5, hwndtooltip6, hwndtooltip7, hwndtooltip8, hwndtooltip9, image1, image2, image3, Button1, Button2, Button3, Button4,Imsctls_statusbar32, IImsctls_statusbar32, Label0, Label1, Label2, Label3, Label4, Edit1, Edit2, Edit3,HMainWnd, Font: HWND; i, tmpInt1, BufPro, WinLong1: integer; dc, dc1, dc2: HDC; mainRect, Rect1 : TRect; nid: TnotifyIcondata; ficon1 : HICON; H1, H2 : HBitmap; winTBit1 : windows.TBitmap; debfile1: textfile; pt : TPoint; pointer1 : POINTER; pm1, pm2 : HMENU; ProPChar1, StrPasmText, className, R1 : PChar; lpText1 : PansiChar; AMsg : MSG;
//{$R fr.res} //往一个窗口写标题 procedure WriteCaption(hwnd:hwnd;text:pchar); stdcall; begin sendmessage(hwnd,WM_SETTEXT,0,integer(text)); end; //从一个窗口读标题 procedure ReadCaption(hwnd:hwnd;text:pchar); stdcall; begin sendmessage(hwnd,WM_GETTEXT,400,integer(text)); end;
Procedure ontimer; stdcall; begin DrawFrameControl(DC1, Rect1, DFCS_CAPTIONMIN or DFCS_BUTTON3STATE or DFCS_BUTTONPUSH, DFC_CAPTION); lpText1 := '定时器已运作'; TextOut(GetWindowDC(0), 380, 310, lpText1, length(lpText1)); //能在桌面上显示文字 WriteCaption(HMainWnd, '定时器'); end;
Procedure ico(char1 : PansiChar); stdcall; Begin Shell_NotifyIcon(NIM_DELETE,@nid); StrPCopy(nid.szTip, char1); shell_notifyicon(nim_add, @nid); end;
Procedure SaveInfo(str: string); stdcall; var i : integer; Begin if fileexists(txtFile1) then begin SetFileAttributes(txtFile1, FILE_ATTRIBUTE_NORMAL); assignfile(debfile1, txtfile1); append(debfile1); writeln(debfile1, str); closefile(debfile1); SetFileAttributes(txtFile1, FILE_ATTRIBUTE_HIDDEN or FILE_ATTRIBUTE_SYSTEM); end else begin i := filecreate(txtFile1); FileClose(i); assignfile(debfile1, txtfile1); append(debfile1); write(debfile1, str); closefile(debfile1); end; end;
Function WndProc(AWnd:HWND; message:UINT; wp:WPARAM; lp:LPARAM):LRESULT;stdcall; var tmpStr1, ch, PrvChar : string; tmpPChar1 : PChar; tmpInt1, tmpInt2, cxClient, cyClient, hdcClient, hdcWindow, n, iShift, iCapital, iNumLock : integer; ps: PAINTSTRUCT; phPalette : hPalette; begin Result := 0; case message of WM_Move : InvalidateRect(AWnd, PRECT(0), true); WM_SIZE: Begin cxClient := LOWORD(lP); cyClient := HIWORD(lP); InvalidateRect(AWnd, PRECT(0), true); End; WM_TIMER: ontimer; WM_NCRBUTTONDOWN: begin GetCursorPos(pt); tmpWnd1 := GetSystemMenu(AWnd, true); TrackPopupMenu(pm2, (TPM_BottomAlign or TPM_RightAlign or TPM_LEFTALIGN or TPM_RIGHTBUTTON), pt.x, pt.y, 0, HMainWnd, Nil)// then GetWindowText(tmpWnd1, tmpChar, 256); end; WM_COMMAND: Begin if (HWND(lP) = Button1) or (wP = 13) then begin GetMem(ProPChar1, 512); SendMessage(Edit1, WM_GETTEXTLENGTH, 0, 0); Bufpro := LongInt(ProPChar1); SendMessage(Edit1, WM_GETTEXT, 512, Bufpro); Edit1Text := StrPas(ProPChar1); SendMessage(Edit2, WM_GETTEXTLENGTH, 0, 0); SendMessage(Edit2, WM_GETTEXT, 512, Bufpro); Edit2Text := StrPas(ProPChar1); ShellExecute(Button1, 'open', Pansichar('cmd'), Pansichar(' /K xcopy ' + Edit1text + ' ' + Edit2text + ' /D /E /H /Y'), '', SW_SHOWNORMAL); tmpInt1 := SetTimer(awnd, 100, 6000, nil); //句柄 未知 延时 指针 end; case HWND(wP) of ID_Open: begin MessageBox(HMainWnd, '你点击了菜单“打开”!', '信息', MB_ICONINFORMATION + MB_OK); GetObject(H1, sizeof(winTBit1),@winTBit1); windows.TextOut(DC1, 380, 310, szAppName, length(szAppName)); //在桌面上显示文字 windows.DrawIcon(DC1, 380, 240, ficon1);//在桌面上显示 Ico图标 Exit; end; ID_NEW1: begin ShellExecute(HMainWnd, 'open', Pansichar('"C:/Program Files/Chinatelecom C+W/C+WClient.exe"'), Pansichar(''), '', SW_NORMAL); SaveInfo(' ** 已经打开“中国电信无线客户端” ** ' + #13 + '开始上网时间: '+ Datetimetostr(now)); Exit; end; ID_SYS1: begin ShellExecute(HMainWnd, 'open', Pansichar('TTPlayer.exe'), Pansichar(''), '', Windows.SW_SHOWNORMAL); Exit; end; ID_Close: begin AnimateWindow(HmainWND, 1000, AW_HIDE or AW_SLIDE or AW_HOR_POSITIVE); MessageBoxA(HMainWnd, lpText1, 'demoWindow将自动退出,再见', MB_OK); DestroyMenu(pm1); Shell_NotifyIcon(NIM_DELETE,@nid); ExitProcess(HMainWnd); end; end; End; WM_KEYDOWN: Begin GetCursorPos(pt); TrackPopupMenu(pm1, (TPM_BottomAlign or TPM_RightAlign or TPM_LEFTALIGN or TPM_RIGHTBUTTON), pt.x, pt.y, 0, HMainWnd, Nil); End; WM_Destroy: Begin DeStroyMenu(pm1); Shell_NotifyIcon(NIM_DELETE,@nid); PostQuitMessage(0); end else Result := DefWindowProc(AWnd, message, wp, lp); end; end;
Function GdiProc1(AWnd:HWND; mes:UINT; wp:WPARAM; lp:LPARAM):LRESULT;stdcall; begin Result := 0; case mes of WM_NCLBUTTONDOWN: begin GetCursorPos(pt); tmpWnd1 := GetSystemMenu(AWnd, true); TrackPopupMenu(pm1, (TPM_BottomAlign or TPM_RightAlign or TPM_LEFTALIGN or TPM_RIGHTBUTTON), pt.x, pt.y, 0, HMainWnd, Nil)// then GetWindowText(tmpWnd1, tmpChar, 256); end; WM_NCRBUTTONDOWN: begin GetCursorPos(pt); tmpWnd1 := GetSystemMenu(AWnd, true); TrackPopupMenu(pm2, (TPM_BottomAlign or TPM_RightAlign or TPM_LEFTALIGN or TPM_RIGHTBUTTON), pt.x, pt.y, 0, HMainWnd, Nil)// then GetWindowText(tmpWnd1, tmpChar, 256); end; WM_Destroy: Begin PostQuitMessage(0); halt; end else Result := DefWindowProc(AWnd, mes, wp, lp); end; end;
Begin nid.szTip := '迷你工具箱 V1.0 EMAIL: zensui2008@139.com'; lpText1 := '“安达”IT 服务中心' + #13#10 + '迷你工具箱 V1.0 by 丁师傅' + #13#10 + '版权所有 (C) 2009'; pm1 := CreatePopupMenu; AppendMenu(pm1, MF_STRING, ID_Open, '打开(&Open)'); AppendMenu(pm1, mf_Separator, 0, Nil); AppendMenu(pm1, 0, ID_Close, '退出(&Exit)'); pm2 := CreatePopupMenu; AppendMenu(pm2, MF_STRING, ID_new1, '无线上网(&WI3G)'); ficon1 := ExtractIcon(0, PChar('ficon1.ico'), 0); with wc do begin style := CS_VREDRAW or CS_HREDRAW; lpfnWndProc := @WndProc; cbClsExtra := 0; cbWndExtra := 0; nid.cbsize := sizeof(nid); hCursor := LoadCursor(0, IDC_ARROW);// ; hbrBackground := GetSysColorBrush( windows.COLOR_INFOBK );//HBRUSH(GetStockObject(windows.GRAY_BRUSH)); hInstance := HInstance; nid.uid := 1; nid.uflags := NIF_ICON or NIF_MESSAGE or NIF_TIP; nid.uCallbackMessage := MI_ICONEVENT; lpszMenuName := nil; lpszClassName := szAppName; hIcon := ficon1; end; windows.RegisterClass(wc); HMainWnd := CreateWindow(szAppName, szAppName, WS_OVERLAPPEDWINDOW, Integer(CW_USEDEFAULT), Integer(CW_USEDEFAULT),Integer(CW_USEDEFAULT),Integer(CW_USEDEFAULT), HWND_DESKTOP, 0, HInstance, nil); nid.hicon := ficon1; nid.wnd := HMainWnd; ico(lptext1); image3 := CreateWindow('#32770', '迷你工具箱 V1.0 can not close', WS_VISIBLE or WS_TILED, 88, 28, 590, 398, 0, 0, 0, nil); image1 := CreateWindow('Static' ,'image1', WS_VISIBLE or SS_BITMAP or WS_SIZEBOX or WS_CHILDWINDOW, 500, 2, 400, 300, image3, 0, 0, nil); Label0 := Createwindow('Static', '', WS_VISIBLE or WS_CHILD or SS_LEFT, 0, 0, 129, 160, image3, pm1, HInstance, nil); Label1 := Createwindow('Static', '', WS_VISIBLE or WS_CHILD or SS_LEFT, 28, 38, 88, 28, image3, pm1, HInstance, nil); //left top width height Edit1 := CreateWindowEx(WS_EX_CLIENTEDGE, 'Edit', '', WS_CHILD or WS_VISIBLE or WS_BORDER, 128, 30, 288, 28, image3, pm1, HInstance, nil); Label2 := Createwindow('Static', '', WS_VISIBLE or WS_CHILD or SS_LEFT, 28, 66, 88, 28, image3, pm1, HInstance, nil); Edit2 := CreateWindowEx(WS_EX_CLIENTEDGE, 'Edit', Pchar(DatetimetoStr(now)), WS_CHILD or WS_VISIBLE or WS_BORDER, 128, 58, 288, 28, image3, pm1, HInstance, nil); Label3 := Createwindow('Static', '', WS_VISIBLE or WS_CHILD or SS_LEFT, 28, 94, 88, 28, image3, pm1, HInstance, nil); Edit3 := CreateWindowEx(WS_EX_CLIENTEDGE, 'Edit', Pchar(timetoStr(time)), WS_CHILD or WS_VISIBLE or WS_BORDER, 128, 88, 288, 28, image3, pm1, HInstance, nil); Label4 := Createwindow('Static', '', WS_VISIBLE or WS_CHILD or SS_LEFT, 28, 122, 88, 28, image3, pm1, HInstance, nil); Button1 := CreateWindow('Button', '备份', WS_VISIBLE or WS_CHILD or BS_PUSHLIKE or BS_TEXT, 421, 2, 128, 28, HMainWnd, pm1, hInstance, nil); Button2 := CreateWindow('Button', '关闭', WS_VISIBLE or WS_CHILD or BS_PUSHLIKE or BS_TEXT, 420, 32, 128, 28, HMainWnd, pm1, hInstance, nil); Button3 := CreateWindow('Button', 'click', WS_VISIBLE or WS_CHILD or BS_PUSHLIKE or BS_TEXT, 420, 80, 128, 28, HMainWnd, pm1, hInstance, nil); RichWnd := CreateWindowEx(WS_EX_CLIENTEDGE, 'Edit', 'RichEdit1', WS_VISIBLE or WS_CHILD or WS_VSCROLL or ES_MULTILINE or ES_NOHIDESEL or ES_WANTRETURN or WS_TABSTOP, 128, 118, 288, 180, image3, pm1, HInstance, nil); hwndtooltip2 := CreateWindowEx(WS_EX_CLIENTEDGE, szAppName, '悬浮窗', WS_VISIBLE or WS_TILEDWINDOW, 680, 58, 88, 88, image3, 0, 0, nil); hwndtooltip3 := CreateWindowEx(WS_EX_CLIENTEDGE, 'Static', '子窗口3', WS_VISIBLE or SS_BITMAP or WS_SIZEBOX or WS_CHILDWINDOW, 2, 2, 288, 128, hwndtooltip2, 0, 0, nil); Postmessage(image1, WM_SYSCOMMAND, SC_MAXIMIZE, 0);//最大化 hwndtooltip5 := CreateWindowEx(WS_EX_CLIENTEDGE, 'ToolbarWindow32', 'win任务栏', WS_VISIBLE or WS_CHILDWINDOW, Integer(CW_USEDEFAULT), Integer(CW_USEDEFAULT), 800,Integer(CW_USEDEFAULT), image3, 0, 0, nil); Imsctls_statusbar32 := CreateWindowEx(WS_EX_CLIENTEDGE, 'msctls_statusbar32', '状态条1', WS_VISIBLE or WS_CHILD, 2, Integer(CW_USEDEFAULT), 788, 68, image3, 0, 0, nil); hwndtooltip6 := CreateWindowEx(WS_EX_APPWINDOW, 'msctls_statusbar32', '状态栏', WS_VISIBLE or WS_CHILD, Integer(CW_USEDEFAULT), Integer(CW_USEDEFAULT),Integer(CW_USEDEFAULT),Integer(CW_USEDEFAULT), DeskWnd, 0, 0, nil); //用自定义的窗口过程替换编辑框的窗口过程,并保存老的窗口过程 SetWindowLong(image3, GWL_WNDPROC ,LongInt(MakeProcInstance(@GdiProc1, 0))); H1 := LoadImage(0, 'ed.bmp', IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE or LR_CREATEDIBSECTION); SendMessage(image1, STM_SETIMAGE, IMAGE_BITMAP, LParam(H1)); SendMessage(hwndtooltip3, STM_SETIMAGE, IMAGE_BITMAP, LParam(H1)); SendMessage(RichWnd, WM_SETTEXT, 0, lParam(lpText1)); SetWindowText(Label1, '文件路径:'); SetWindowText(Label2, '目标路径:'); SetWindowText(Label3, '开始时间:'); SetWindowText(Edit1, 'C:/TDDOWNLOAD/*.*'); SetWindowText(Edit2, '"D:/delphi app"/bak'); InvalidateRect(image1, PRECT(0), true);
while GetMessage(AMsg, 0, 0, 0) do begin TranslateMessage(AMsg); DispatchMessage(AMsg); end;
end.
|