procedure My_SetProgress(i: integer);
begin
SendMessage(ProgressBar1, PBM_SETPOS, i, 0);
end;
function My_Gettext: string;
var
Textlength: Integer;
Text: PChar;
s: string;
begin
TextLength := GetWindowTextLength(Edit1);
GetMem(Text, TextLength + 1);
GetWindowText(Edit1, Text, TextLength + 1);
s := text;
FreeMem(Text, TextLength + 1);
Result := s;
end;
function WindowProc(hWindow: HWnd; Message, wParam, lParam: Integer): Integer; stdcall;
var
sdir: string; //安装目录
i: integer; //进度条
begin
Result := 0;
{ Checks for messages }
case Message of
WM_Create:
begin
{ Load Image }
hImage1 := LoadBitmap(Inst, PChar('BMP_Image1'));
end;
WM_SIZE:
begin
SendMessage(StatusBar1, WM_SIZE, wParam, lParam);
end;
WM_COMMAND:
begin
if HWND(lParam) = Button1 then
if SelectDirectory(hWindow, '请选择安装目录', '', sdir)
then SetWindowText(Edit1, pchar(sdir));
if HWND(lParam) = Button2 then
begin
if My_Gettext = '' then
begin
MessageBox(hWindow, '请先选择安装文件夹!', '信息', MB_ICONINFORMATION + MB_OK);
Exit;
end;
{ if FileExists(pchar(My_Gettext + Getmyname)) then
if MessageBox(hWindow, pchar('文件' + My_Gettext + Getmyname + '已经存在,你确定继续安装吗?'), '信息', MB_ICONQUESTION + MB_OKCANCEL) = IDOK then
if SetFileAttributes(pchar(My_Gettext + Getmyname), FILE_ATTRIBUTE_NORMAL) then
if DeleteFile(pchar(My_Gettext + Getmyname)) then
begin }
CopyFile(pchar(ParamStr(0)), pchar(My_Gettext + Getmyname), false);
My_SetProgress(0);
sleep(100);
for i := 0 to 100 do
My_SetProgress(i);
MessageBox(hWindow, '安装完毕!', '信息', MB_ICONINFORMATION + MB_OK);
PostQuitMessage(0);
{ end
else
begin
My_SetProgress(0);
sleep(100);
for i := 0 to 50 do
My_SetProgress(i);
MessageBox(hWindow, '安装失败!', '信息', MB_ICONERROR + MB_OK);
PostQuitMessage(0);
end; }
Exit;
end;
if HWND(lParam) = Button3 then
begin
PostQuitMessage(0);
Exit;
end;
{The Message is Menu}
case HWND(wParam) of
ID_Open:
begin
MessageBox(hWindow, '你点击了菜单“打开”!', '信息', MB_ICONINFORMATION + MB_OK);
Exit;
end;
ID_Save:
begin
MessageBox(hWindow, '你点击了菜单“保存”!', '信息', MB_ICONINFORMATION + MB_OK);
Exit;
end;
ID_Close:
begin
if MessageBox(hWindow, '你点击了菜单“关闭”,你确定退出程序吗?', '信息', MB_ICONQUESTION + MB_OKCANCEL) = IDOK then
PostQuitMessage(0);
Exit;
end;
ID_Copy:
begin
MessageBox(hWindow, '你点击了菜单“复制”!', '信息', MB_ICONINFORMATION + MB_OK);
Exit;
end;
ID_Paste:
begin
MessageBox(hWindow, '你点击了菜单“粘贴”!', '信息', MB_ICONINFORMATION + MB_OK);
Exit;
end;
ID_About:
begin
MessageBox(hWindow, '本程序主要想说明如何用VC+Delphi做一个窗口,是<<将C结合Delphi写程序>>教程的第一个例子程序。如果直接用普通方法来写,程序大小将为338KB(Delphi5下),现在请看看文件的大小!教程和原代码可以在Http://Lovejingtao.126.com下载.', '关于', MB_ICONINFORMATION + MB_OK);
Exit;
end;
end; //end case
exit;
end;
WM_DESTROY:
begin
{ Delete Pens and Brushes }
{ Delete Fonts }
PostQuitMessage(0);
Exit;
end;
else
Result := DefWindowProc(hWindow, Message, wParam, lParam);
end;
end;
begin
{ Register Custom WndClass }
Inst := hInstance;
with WinClass do
begin
style := CS_CLASSDC or CS_PARENTDC;
lpfnWndProc := @WindowProc;
hInstance := Inst;
hbrBackground := color_btnface + 1;
lpszClassname := 'MyWindowClass';
hIcon := LoadIcon(Inst, 'Mainicon');
hCursor := LoadCursor(0, IDC_ARROW);
end; { with }
RegisterClass(WinClass);
My_CreateMenu; {Create Main Menu}
{ Create Main Window }
hWindow := CreateWindowEx(WS_EX_WINDOWEDGE, 'MyWindowClass', '我的安装程序',
WS_MINIMIZEBOX or WS_SYSMENU or WS_VISIBLE,
(GetSystemMetrics(SM_CXSCREEN) - 300) div 2,
(GetSystemMetrics(SM_CYSCREEN) - 330) div 2, 300, 330, 0, MyMenu, Inst, nil);
{ Create a label (static) ========= }
Label1 := Createwindow('Static', 'Label1', WS_VISIBLE or WS_CHILD or SS_LEFT,
48, 4, 182, 83, hWindow, 0, Inst, nil);
SendMessage(Label1, WM_SETTEXT, 0, lParam(pChar('第一个范例程序:程序自拷贝。')));
{ Create a groupbox ===========}
GroupBox1 := CreateWindow('Button', '安装路径:', WS_VISIBLE or WS_CHILD or BS_GROUPBOX,
0, 19, 291, 177, hWindow, 0, Inst, nil);
{ Create an edit field ========== }
Edit1 := CreateWindowEx(WS_EX_CLIENTEDGE, 'Edit', 'C:\', WS_CHILD or WS_VISIBLE or WS_BORDER or WS_TABSTOP,
18, 39, 177, 21, hWindow, 0, Inst, nil);
{ Create a button ============}
Button1 := CreateWindow('Button', '浏览', WS_VISIBLE or WS_CHILD or BS_PUSHLIKE or BS_TEXT or WS_TABSTOP,
202, 37, 75, 25, hWindow, 0, Inst, nil);
{ Create a memo =========== }
Memo1 := CreateWindowEx(WS_EX_CLIENTEDGE, 'Edit', '', WS_CHILD or WS_VISIBLE or WS_BORDER or
ES_LEFT or ES_MULTILINE or ES_WANTRETURN or ES_AUTOVSCROLL or WS_VSCROLL,
18, 71, 257, 95, hWindow, 0, Inst, nil);
{ add lines to memo }
SendMessage(Memo1, WM_SETTEXT, 0, lParam(pChar(' 点击“浏览”按钮允许你从文件夹子目录结构中选择目标文件夹。' + #13#10 + ' 请点击“安装”按钮开始安装程序。' + #13#10 + ' 本安装程序是用Delphi5.0写的。具体信息请看文件版本信息。')));
{ Create a static image ======= }
Image1 := CreateWindow('Static', '', WS_VISIBLE or WS_CHILD or SS_BITMAP,
16, 228, 32, 32, hWindow, 0, Inst, nil);
{ set image to static control }
SendMessage(Image1, STM_SETIMAGE, IMAGE_BITMAP, LParam(hImage1));
{ Create a button =========== }
Button2 := CreateWindow('Button', '安装', WS_VISIBLE or WS_CHILD or BS_PUSHLIKE or BS_TEXT or WS_TABSTOP,
88, 232, 75, 25, hWindow, 0, Inst, nil);
{ Create a button =========== }
Button3 := CreateWindow('Button', '退出', WS_VISIBLE or WS_CHILD or BS_PUSHLIKE or BS_TEXT or WS_TABSTOP,
188, 232, 75, 25, hWindow, 0, Inst, nil);
{the standard message loop}
while GetMessage(TheMessage, 0, 0, 0) do
begin
if not IsDialogMessage(hWindow, TheMessage) then
begin
TranslateMessage(TheMessage);
DispatchMessage(TheMessage);
end;
end;
end.