Sergey_Demchuk
Silver Member | Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору Может кто еще пользуется botva2.dll Хочу разрисовать прогрессбар при джеинсталляции Но что то не так видимо делаю. Затык на функции CallWindowProc(PBOldProcUn,h,Msg,wParam,lParam); Вызывает ошибку вызова процедуры Вот кусок кода, может подскажете, в чем ошибка. Код: function CallBackProc(P:TPBProc;ParamCount:integer):LongWord; external 'wrapcallbackaddr@files:CallbackCtrl.dll stdcall'; function CallWindowProc(lpPrevWndFunc: Longint; hWnd: HWND; Msg: UINT; wParam, lParam: Longint): Longint; external 'CallWindowProcA@user32.dll stdcall'; function GetTickCount: DWORD; external 'GetTickCount@kernel32.dll stdcall'; function GetTickCountUn: DWORD; external 'GetTickCount@kernel32.dll stdcall uninstallonly'; ... ... function PBProcUn(h:hWnd;Msg,wParam,lParam:Longint):Longint; var lt:Longint; dt,at,pr,i1,i2:Extended; p:string; tc:DWORD; begin Result:=7; Result:=CallWindowProc(PBOldProcUn,h,Msg,wParam,lParam); if (Msg=$402) and (UninstallProgressForm.Progressbar.Position>UninstallProgressForm.Progressbar.Min) then begin i1:=UninstallProgressForm.Progressbar.Position-UninstallProgressForm.Progressbar.Min; i2:=UninstallProgressForm.Progressbar.Max-UninstallProgressForm.Progressbar.Min; tc:=GetTickCountUn; if (tc-eTimeUn)>=1000 then begin ïåðåñ÷èòûâåì âðåìÿ îñòàâøååñÿ äî êîíöà óñòàíîâêè íå ÷àùå, ÷åì ðàç â 1 ñåêóíäó dt:=(tc-sTimeUn)/1000; at:=i2*dt/i1; lt:=Round(at-dt) TimeLeftLabel.Caption:='Îñòàëîñü - '+LongintToStringTime(lt); eTimeUn:=tc; end; pr:=i1*100/i2; p:=' - ['+Format('%f',[pr])+'%]'; StringChange(p,',','.'); TimeLeftLabelUn.Caption:=WFCaption+p; WizardForm.Caption:=WFCaption+p; ImgPBSetPosition(NewPBun,pr); ImgApplyChanges(UninstallProgressForm.Handle); end; end; ... ... procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep); var Names: TArrayOfSting; I, Errorcode: Integer; S,RegAss: String; begin if CurUninstallStep=usUninstall then begin NewPBun:=ImgPBCreate(UninstallProgressForm.InstallingPage.Handle, ExpandConstant('{tmp}\pbbkg.png'), ExpandConstant('{tmp}\pb.png'),UninstallProgressForm.Progressbar.Left,UninstallProgressForm.Progressbar.Top,UninstallProgressForm.Progressbar.Width,25); ImgApplyChanges(UninstallProgressForm.InstallingPage.Handle); WFCaption:=UninstallProgressForm.Caption; TimeLeftLabelUn:=TLabel.Create(nil); with TimeLeftLabelUn do begin Parent:=UninstallProgressForm.InstallingPage; AutoSize:=False; SetBounds(ScaleX(400),ScaleY(150),ScaleX(400),ScaleY(21)); Transparent:=True; Font.Color:=clWhite; Font.Style:= [fsBold]; end; sTimeUn:=GetTickCountUn; eTimeUn:=sTimeUn; PBOldProcUn:=SetWindowLong(UninstallProgressForm.InstallingPage.Handle,-4,CallBackProc(@PBProcUn,4)); end; |
|