PDA

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


Страниц : 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

Ivan_009
03-02-2014, 22:42
Как удалить иконку в левом верхнем углу... »
Собственно не нашел как удалить. Зато можно сменить, чтобы ее невидно совсем было...

Может кому пригодится :wink:

saurn
03-02-2014, 22:48
А можно ли кнопку добавить к сохранением папки модов ? »
Можно кнопку, можно и страницу:
#define CUR_DIR "res-mods"
#define BAK_DIR "old_res-mods"

[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program
OutputDir=.


[Files]
Source: C:\Windows\Fonts\*; DestDir: {app}\res-mods; Flags: external overwritereadonly ignoreversion;


[Code]
#define A = (Defined UNICODE) ? "W" : "A"


function MoveFile(const srcFile, destFile: PAnsiChar): Integer; external 'MoveFile{#A}@kernel32.dll stdcall';


var
pageBackup: TInputDirWizardPage;


procedure IsBackup(const FromDir: String; const ToDir: String);
var
fileArray: array of String;
FindFiles: TFindRec;
i, Len: Integer;
begin
fileArray := ['*'];
Len := GetArrayLength(fileArray) - 1;
for i := 0 to Len do
begin
if FindFirst(FromDir + fileArray[i], FindFiles) then
try
WizardForm.ProgressGauge.Hide;
WizardForm.StatusLabel.Caption := 'Создание резервной копии файлов...';

repeat
if not DirExists(ToDir) then CreateDir(ToDir);
MoveFile(FromDir + FindFiles.Name, ToDir + FindFiles.Name);
until not FindNext(FindFiles);
finally

WizardForm.ProgressGauge.Show;
FindClose(FindFiles);
end;
end;
end;


function CreateBackupPage(const AfterID: Integer): TInputDirWizardPage;
begin
Result := CreateInputDirPage(AfterID,
'Резервное копирование',
'Создание резервных копий перезаписываемых файлов.',
'Укажите папку, в которую будут помещены резервные копии оригинальных файлов.',
False, 'Новая папка');

with Result do
begin
Add('Папка резервных копий:');
Values[0] := AddBackslash(WizardDirValue()) + '{#BAK_DIR}';
end;
end;


procedure InitializeWizard();
begin
if DirExists(AddBackslash(WizardDirValue()) + '{#CUR_DIR}') then
pageBackup := CreateBackupPage(6);
end;


procedure CurStepChanged(CurStep: TSetupStep);
begin
case CurStep of
ssInstall: if DirExists(ExpandConstant('{app}\{#CUR_DIR}')) then
IsBackup(ExpandConstant('{app}\{#CUR_DIR}\'), AddBackslash(pageBackup.Values[0]));
end;
end;

Ivan_009
03-02-2014, 23:54
Как можно удалить Меню «О программе». Зарание спасибо...

Проще говоря все это меню...

innot20
04-02-2014, 00:13
Как можно удалить Меню «О программе». Зарание спасибо...
Проще говоря все это меню... »
как вариант можно изменить

http://forum.oszone.net/post-1660375-1363.html

PerfectLove
04-02-2014, 02:03
Как сменить цвет текста Caption?



// backup
[Code]
#define A = (Defined UNICODE) ? "W" : "A"


function MoveDir(const srcFile, destFile: PAnsiChar): Integer; external 'MoveFileA@kernel32.dll stdcall';


var
arrayChk: array of TCheckBox;


function ChkChecked(const Index: Integer): Boolean;
var
Len: Integer;
begin
Len := GetArrayLength(arrayChk) - 1;

if Index > Len then Exit;
Result := arrayChk[Index].Checked;
end;


procedure CreateBackup();
var
FindDir: TFindRec;
i, Len: Integer;
Dir: array of string;
MyDir, BackDir: string;
begin
Len := GetArrayLength(arrayChk) - 1;
if (ChkChecked(0) and ChkChecked(Len)) then Exit; //Если выбраны оба чекбокса резервная копия создана не будет
if ChkChecked(0) then Dir := ['*']; //Резервное копирование папки
if ChkChecked(Len) then Dir := ['xvm']; //Резервное копирование определенных файлов
MyDir:=ExpandConstant('{app}\res_mods'+'\');
BackDir:=ExpandConstant('{app}'+'\Backup\');
for i:=0 to GetArrayLength(Dir)-1 do
begin
if FindFirst(MyDir + Dir[i], FindDir) then
begin
if FindFirst(MyDir+Dir[i], FindDir) then begin
repeat
if not DirExists(BackDir) then begin
CreateDir(BackDir);
end;
MoveDir(MyDir+FindDir.Name, BackDir+FindDir.Name);
until not FindNext(FindDir);
FindClose(FindDir);
end;
end;
end;
end;


procedure CreateChk();
var
i, Len: Integer;
begin
SetArrayLength(arrayChk, 2);
Len := GetArrayLength(arrayChk) - 1;

for i := 0 to Len do
begin
arrayChk[i] := TCheckBox.Create(nil);
with arrayChk[i] do
begin
Parent := WizardForm.SelectDirPage;
SetBounds(ScaleX(0), ScaleY(100 + i*24), ScaleX(400), ScaleY(15));
Color := clGreen;
case i of
0: Caption := 'Backup res_mods folder';
Len: Caption := 'Backup xvm folder only';
end;
end;
end;
end;


procedure InitializeWizard4();
begin
CreateChk();
end;



procedure CurStepChanged(CurStep: TSetupStep);
var
Len: Integer;
begin
Len := GetArrayLength(arrayChk) - 1;

case CurStep of
ssInstall: if (ChkChecked(0) or ChkChecked(Len)) then CreateBackup();
end;
end

Tco 03
04-02-2014, 07:23
Всем привет.
Кому не сложно подскажите, какой код отвечает за фунцию вывода сообщений: "Вы действительно хотите удалить программу?" и "Программа была полностью удалена с Вашего копьютера."

diman_21Ru
04-02-2014, 10:48
saurn ,резервную папки модов сохраняет а как сюда добавить значек ?

Nordek
04-02-2014, 11:29
удалить Меню «О программе». »
Примерно:
[Code]
function AppendMenu(hMenu: HMENU; uFlags, uIDNewItem: UINT; lpNewItem: PChar): BOOL; external 'AppendMenuA@user32.dll stdcall';
function GetSystemMenu(hWnd: HWND; bRevert: BOOL): HMENU; external 'GetSystemMenu@user32.dll stdcall';

const
MF_DELETE = $200;

procedure InitializeWizard();
begin
if not AppendMenu(GetSystemMenu(Wizardform.Handle, True), MF_DELETE, 0, '') then
end;

Как сменить цвет текста »
begin
Parent := WizardForm.SelectDirPage;
SetBounds(ScaleX(0), ScaleY(100 + i*24), ScaleX(400), ScaleY(15));
Color := clRed;
case i of
0: Caption := 'Backup res_mods folder';
Len: Caption := 'Backup xvm folder only';
end;
end;

сообщений: "Вы действительно хотите удалить программу?" и "Программа была полностью удалена с Вашего копьютера." »
[Messages]
UninstallAppFullTitle=Деинсталляция — %1
ConfirmUninstall=Вы действительно хотите удалить %1 и все компоненты программы?
UninstalledAll=Программа %1 была полностью удалена с вашего компьютера.

Ivan_009
04-02-2014, 11:33
Как сменить эту надпись

diman_21Ru
04-02-2014, 11:37
разве не AppName=

Nordek
04-02-2014, 11:47
Как сменить эту надпись »
На выбор:
[Messages]
SetupWindowTitle=Установка — %1
[Messages]
SetupWindowTitle=Установка — {#AppName}
[Messages]
SetupWindowTitle=%1
[Messages]
SetupWindowTitle={#AppName}

Tco 03
04-02-2014, 12:50
Nordek, :no: Ты меня не так понял. Мне нужно через код.

procedure CancelButtonClick(CurPage: Integer; var Cancel, Confirm: Boolean);
begin
Cancel:=False;
Confirm:=False;
if MsgBox('Вы действительно хотите отменить установку My_Program?', mbError, MB_YESNO) = idYes
then
Cancel:=true;
end;

Нужно точно так же, но только с формами: "Вы действительно хотите удалить программу?" и "Программа была полностью удалена с Вашего копьютера." :spiteful:

diman_21Ru
04-02-2014, 14:03
Подскажите пожалуйста вот есть код резервную папку res_mods сохраняет , но как можно добавить значек вот сюда ?
[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program
OutputDir=.


[Files]
Source: C:\Windows\Fonts\*; DestDir: {app}\res-mods; Flags: external overwritereadonly ignoreversion;


[Code]
#define A = (Defined UNICODE) ? "W" : "A"


function MoveFile(const srcFile, destFile: PAnsiChar): Integer; external 'MoveFile{#A}@kernel32.dll stdcall';


procedure IsBackup(const FromDir: String; const ToDir: String);
var
fileArray: array of String;
FindFiles: TFindRec;
i, Len: Integer;
begin
if not DirExists(FromDir) then Exit;
fileArray := ['*'];
Len := GetArrayLength(fileArray) - 1;
for i := 0 to Len do
begin
if FindFirst(FromDir + fileArray[i], FindFiles) then
try
repeat
if not DirExists(ToDir) then CreateDir(ToDir);
MoveFile(FromDir + FindFiles.Name, ToDir + FindFiles.Name);
until not FindNext(FindFiles);
finally

FindClose(FindFiles);
end;
end;
end;


procedure CurStepChanged(CurStep: TSetupStep);
begin
case CurStep of
ssInstall: IsBackup(ExpandConstant('{app}\res-mods\'), ExpandConstant('{app}\Backup\'));
end;
end;

Nordek
04-02-2014, 15:11
добавить значек ? »

[Files]
Source: icon.ico; Flags: dontcopy solidbreak

[Code]
var
IconImage: TNewIconImage;

procedure InitializeWizard();
begin
IconImage := TNewIconImage.Create(WizardForm);
with IconImage do
begin
Parent := WizardForm.SelectDirPage;
Left := ScaleX(0); // Положение слева
Top := ScaleY(184); // Положение сверху
Width := ScaleX(32); // Ширина значка
Height := ScaleY(32); // Высота значка
ExtractTemporaryFile('icon.ico');
Icon.LoadFromFile(ExpandConstant('{tmp}\icon.ico'));
end;
end;


diman_21Ru, Твоя очередь когда нибудь придёт - У тебя два варианта: Либо ждать, либо самому делать - а не плодить сообщения.
есть код »Слышал когда нибудь такое "bbcode (http://forum.oszone.net/misc.php?do=bbcode)"?

Захвати свой код в тег - здесь (http://forum.oszone.net/post-2270836-1700.html) написано как это делается, и спрячь под спойлер тегом . Учись - у тебя есть (http://forum.oszone.net/forum-26.html) возможность.

diman_21Ru
04-02-2014, 15:15
Nordek,сори за назойливость крайне срочно нужна кнопка :)

Nordek
04-02-2014, 15:29
diman_21Ru, В коде обрати внимание на Parent := WizardForm.SelectDirPage;
меняешь значения в зависимости от того на какой странице хочешь чтоб отображалось, например:
Parent := WizardForm.SelectDirPage; // На странице выбора папки установки
Parent := WizardForm.SelectProgramGroupPage; // На странице выбора папки меню пуск
Parent := WizardForm.SelectComponentsPage; // На странице компонентов
Parent := WizardForm.SelectTasksPage; // На странице задач

innot20
04-02-2014, 16:43
innot20
читать дальше » »

а возможно ли это вывести при выборе папки установки?

diman_21Ru
04-02-2014, 18:24
Код на резервные копии папки res_mods не работает вместо этого он добавляет шрифты какие то (
использовал код #2113

saurn
04-02-2014, 20:28
а возможно ли это вывести при выборе папки установки? »
Конечно.
#define CUR_DIR "res-mods"
#define BAK_DIR "old_res-mods"

[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program
OutputDir=.


[Files]
Source: C:\Windows\Fonts\*; DestDir: {app}\res-mods; Flags: external overwritereadonly ignoreversion;


[Code]
#define A = (Defined UNICODE) ? "W" : "A"


function MoveFile(const srcFile, destFile: PAnsiChar): Integer; external 'MoveFile{#A}@kernel32.dll stdcall';


var
backupChk: TCheckBox;


procedure IsBackup(const FromDir: String; const ToDir: String);
var
fileArray: array of String;
FindFiles: TFindRec;
i, Len: Integer;
begin
fileArray := ['*'];
Len := GetArrayLength(fileArray) - 1;
for i := 0 to Len do
begin
if FindFirst(FromDir + fileArray[i], FindFiles) then
try
WizardForm.ProgressGauge.Hide;
WizardForm.StatusLabel.Caption := 'Создание резервной копии файлов...';

repeat
if not DirExists(ToDir) then CreateDir(ToDir);
MoveFile(FromDir + FindFiles.Name, ToDir + FindFiles.Name);
until not FindNext(FindFiles);
finally

WizardForm.ProgressGauge.Show;
FindClose(FindFiles);
end;
end;
end;


procedure InitializeWizard();
var
ThereIsFolder: Boolean;
begin
backupChk := nil;
ThereIsFolder := DirExists(AddBackslash(WizardDirValue()) + '{#CUR_DIR}');

if ThereIsFolder then
begin
backupChk := TCheckBox.Create(nil);
with backupChk do
begin
Parent := WizardForm.SelectDirPage;
SetBounds(ScaleX(WizardForm.DirEdit.Left), ScaleY(WizardForm.DirEdit.Top + 40), ScaleX(WizardForm.DirEdit.Width), ScaleY(15));
Caption := 'Сохранить резервную копию перезаписываемых файлов';
Checked := ThereIsFolder;
end;
end;
end;


procedure CurStepChanged(CurStep: TSetupStep);
begin
case CurStep of
ssInstall: if backupChk <> nil then
if backupChk.Checked then
IsBackup(ExpandConstant('{app}\{#CUR_DIR}\'), ExpandConstant('{app}\{#BAK_DIR}\'));
end;
end;


Код на резервные копии папки res_mods не работает вместо этого он добавляет шрифты какие то (
использовал код #2113 »
Потому что это пример, и для примера он устанавливает шрифты из системной папки, и при повторной установке делает их резервную копию, только для того, чтобы показать вам, как этот механизм работает. Имена папок, которые нужно бэкапить, указывайте сами.

добавить значек вот сюда ? »
Под спойлером.

sergey3695
04-02-2014, 21:12
При использовании

const
ID_ASTERISK = 65583;
...
Icon.Handle := ID_ASTERISK;

на 7 и 8 все норм. а на xp отображается другая иконка. Если даже сделать проверку на систему, то какое значение должна принимать иконка на xp?




© OSzone.net 2001-2012