Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно

Ветеран


Сообщения: 517
Благодарности: 314

Профиль | Отправить PM | Цитировать


neorom

Убрать или закомментировать всё, что ниже строчки //////////////////////////////Uninstall/////////////////////////////

читать дальше »
Код: Выделить весь код
[Setup]
AppName=MyApp
AppVerName=MyApp
DefaultDirname={pf}\MyApp

[Files]
Source: {fonts}\*; DestDir: {app}; Flags: external

[code]
#ifdef UNICODE
    #define A "W"
#else
    #define A "A"
#endif

const
    WM_USER = $0400;
    PBM_SETPOS = WM_USER+2;
    GWL_WNDPROC = -4;


type
    LPARAM = Integer;
    WPARAM = Integer;
    LRESULT = Integer;
    TFNWndProc = Integer;


function SetWindowLong(hWnd: HWND; nIndex: Integer; dwNewLong: Longint): Longint; external 'SetWindowLong{#A}@user32.dll stdcall';
function CallWindowProc(lpPrevWndFunc: TFNWndProc; hWnd: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM): LRESULT; external 'CallWindowProc{#A}@user32.dll stdcall';
function SetWindowText(hWnd: HWND; lpString: String): BOOL; external 'SetWindowText{#A}@user32.dll stdcall';

var
    OldProgressBarProc: Longint;

function ProgressBarProc(hWnd: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM): LRESULT;
begin
    if Msg = PBM_SETPOS then with WizardForm do SetWindowText( StatusLabel.Handle, Format('%s'#32'%s', [SetupMessage(msgStatusExtractFiles), FormatFloat('0.#0 %', (ProgressGauge.Position*100)/ProgressGauge.Max)]) );

    Result := CallWindowProc(OldProgressBarProc, hWnd, Msg, wParam, lParam);
end;

procedure InitializeWizard();
begin
    OldProgressBarProc := SetWindowLong(WizardForm.ProgressGauge.Handle, GWL_WNDPROC, CallbackAddr('ProgressBarProc'));
end;

procedure DeinitializeSetup();
begin
    SetWindowlong(WizardForm.ProgressGauge.Handle, GWL_WNDPROC, OldProgressBarProc);
end;

/////////////////////////////// Uninstall //////////////////////////////////


//function UninstallProgressBarProc(hWnd: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM): LRESULT;
//begin
//    if Msg = PBM_SETPOS then with UninstallProgressForm do SetWindowText( StatusLabel.Handle, Format('%s'#32'%s', [FmtMessage(SetupMessage(msgStatusUninstalling), ['{#SetupSetting("AppName")}']), FormatFloat('0.#0 %', (ProgressBar.Position*100)/ProgressBar.Max)]) );
//
//    Result := CallWindowProc(OldProgressBarProc, hWnd, Msg, wParam, lParam);
//end;
//
//procedure UninstallFormOnHide(Sender: TObject);
//begin
//    SetWindowlong(TUninstallProgressForm(Sender).ProgressBar.Handle, GWL_WNDPROC, OldProgressBarProc);
//end;
//
//procedure InitializeUninstallProgressForm();
//begin
//    OldProgressBarProc := SetWindowLong(UninstallProgressForm.ProgressBar.Handle, GWL_WNDPROC, CallbackAddr('UninstallProgressBarProc'));
//    UninstallProgressForm.OnHide := @UninstallFormOnHide;
//end;


Не бойтесь изучать и пробовать самостоятельно, иначе ничему не научитесь.
Это сообщение посчитали полезным следующие участники:

Отправлено: 11:21, 07-04-2013 | #89