PDA

Показать полную графическую версию : Скрипты Inno Setup. Помощь и советы [часть 7]


Страниц : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 [18] 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125

Dodakaedr
08-04-2014, 19:21
Как в примере из шапки в "Отображение процентов при (де)инсталляции" сделать показ процентов при инсталляции? Проверял при инсталляции не отображается
[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;

diman_21Ru
08-04-2014, 19:21
Ivan_009,

Ivan_009
08-04-2014, 19:30
Dodakaedr, Пример:http://rghost.ru/53888337

diman_21Ru, Добавь:

var
ButtonFont: TFont;

diman_21Ru
08-04-2014, 19:30
Ivan_009, не помогло ссылается и на неё с ошибкой

Dodakaedr
08-04-2014, 19:32
Пример »
спс, но мне надо чтобы и при деинсталляции отображение процентов сохранилось...

Ivan_009
08-04-2014, 19:40
Dodakaedr, Не знаю у меня все нормально отображается, брал пример из шапки...
Может и за Юникодной версии Inno Setup...

diman_21Ru, Дай скрипт в личку гляну...

audiofeel
08-04-2014, 19:49
Наверное как на обычную кнопку наложенную через ботву... »
кнопка "делается" в модуле BASS.ISS

Ivan_009
08-04-2014, 19:55
кнопка "делается" в модуле BASS.ISS »

Пример: http://rghost.ru/53889498

audiofeel
08-04-2014, 20:32
Ivan_009, теперь Duplicat identifer 'LOADCURSORFROMFILE'
может можно просто переименовать какую нибудь из них ??

diman_21Ru
08-04-2014, 20:32
Ivan_009, не получяеться чтоли мой скрипт ?

Dodakaedr
08-04-2014, 20:32
Может и за Юникодной версии Inno Setup... »
Проверил и в Ansi тоже самое.

теперь Duplicat identifer 'LOADCURSORFROMFILE' »
идет дублирование, сравни их и если они идентичны то удали одну, если нет то соедини удаляя идентичны строки

audiofeel
08-04-2014, 20:58
идет дублирование, сравни их и если они идентичны то удали одну, если нет то соедини удаляя идентичны строки »
удалил из BASS_MODULE.ISS - function LoadCursorFromFile (они одинаковые), и переместил - BtnSetCursor(BASS_OnOffBtn,LoadCursorFromFile(ExpandConstant('{tmp}\cursor2.cur'))) на - procedure InitializeWizard;
вроде работает
так правильно ???

Dodakaedr
08-04-2014, 21:28
так правильно ??? »
Не знаю, смотри сам получилось ли то что ты хотел.....но посмотрев на скрипт BASS_MODULE.ISS то достаточно было удалить
функцию function LoadCursorFromFile(FileName: String): Cardinal; external 'LoadCursorFromFileA@user32 stdcall';.
Ты переместил BtnSetCursor(BASS_OnOffBtn,LoadCursorFromFile(ExpandConstant('{tmp}\cursor.ani'))) з procedure BASS_CreateOnOffButton(Parent: TWinControl; Image: String; Left, Top, Width, Height, ShadowWidth: Integer);????

audiofeel
08-04-2014, 21:49
Dodakaedr,
да не совсем

вобщем вот это в "главном" скрипте
procedure InitializeWizard;
begin
.............................
BASS_Init('{tmp}\Music.ogg');
BASS_CreateOnOffButton(WizardForm, '{tmp}\MusicButton.png', ScaleX(690), ScaleY(20), ScaleX(24), ScaleY(24), 4);
BtnSetCursor(BASS_OnOffBtn,LoadCursorFromFile(ExpandConstant('{tmp}\cursor2.cur')))
а вот это осталось в модуле BASS
BASS_OnOffBtn:= BtnCreate(Parent.Handle, ScaleX(Left), ScaleY(Top), ScaleX(Width), ScaleY(Height), ExpandConstant(Image), ShadowWidth, False)

Dodakaedr
08-04-2014, 21:51
да не совсем »
Если работает так как тебе нужно значить правильно...

Dodakaedr
09-04-2014, 11:59
Имеется картинка формата .png с прозрачным фоном, как теперь сохранить эту прозрачность для сплеша?

Nordek
09-04-2014, 17:44
Имеется картинка формата .png с прозрачным фоном, как теперь сохранить эту прозрачность для сплеша? »Не понятно. Так вроде и так прозрачно (http://sendfile.su/965773).

Dodakaedr
09-04-2014, 17:52
Не понятно. Так вроде и так прозрачно. »
Я делал через issplash.dll то там прозрачность вырезается и устанавливается фон, сейчас попробую из твоего примера...

Попробовал: сплеш вообще не появляется. В Ansi работает, как добиться этого в Unicode?

saurn
09-04-2014, 21:19
В Ansi работает, как добиться этого в Unicode? »
procedure ShowSplashScreen(p1:HWND;p2:AnsiString;p3,p4,p5,p6,p7:integer;p8:boolean;p9:Cardinal;p10:integer); external 'ShowSplashScreen@files:isgsg.dll stdcall delayload';

diman_21Ru
09-04-2014, 22:39
Как можно прикрутить Button кнопки если уже имеется музыка , заранее спасибо




© OSzone.net 2001-2012