Ru-Board.club
← Вернуться в раздел «Программы»

» Inno Setup (создание инсталяционных пакетов)

Автор: iTASmania_Inc
Дата сообщения: 31.05.2007 22:21
Victor_Dobrov
В твоём скине есть один серьёзный баг: если UserInfoPage=true, то на странице информации о пользователе вместо слов "Серийный номер:" идёт "*". И ещё ведь стандартно серийный номер на этой странице не должен появляться. Возникает вопрос: а не знаешь, как сделать, чтобы его не было до поры до времени - то есть до
function CheckSerial(Serial: String): Boolean;
Потому что если я использую эту функцию, то текст "Серийный номер:" уже отображается корректно, как и должно быть.

А так всё КРАЙНЕ, НЕИМОВЕРНО, НЕПОСТИЖИМО КРУТО!!!
Автор: Sampron
Дата сообщения: 31.05.2007 23:45
iTASmania_Inc

Цитата:
Возникает вопрос: а не знаешь, как сделать, чтобы его не было до поры до времени

Так отключи этот текст.
Автор: Sero
Дата сообщения: 31.05.2007 23:50
Genri
Спасибо! Спасибо! Спасибо!
Автор: Sampron
Дата сообщения: 01.06.2007 00:08
Sero
Хреново что не работает в деинсталляторе.
Автор: Genri
Дата сообщения: 01.06.2007 01:08
Sampron
Цитата:
Понял! нужно эти 2 созданных файла тоже положить рядом.
--
1. Вместе с инсталлятором разместить папку (напр. skin)
2. В эту папку в обязательном порядке поместить 3 файла:
NSIS_SkinCrafter_Plugin.dll
SkinCrafter.dll
SkinNsis.skf
(По желанию можно туда же поместить и другие скины, хотя их можно и включить в инсталлятор)
3. Скрипт может выглядеть примерно так:
Код:
[Setup]
AppName=My Program
AppVerName=My Program v.1.2
DefaultDirName={pf}\My Program

[Files]
Source: callnsis.dll; Flags: dontcopy

[Code]
var
Button: TButton;
Skins: TArrayOfString;
i: integer;

procedure callplug(parentwnd: Integer; pluginname,funcname,param1,param2,param3,param4,param5,param6,param7,param8,param9,param10: PChar);
external 'callplug@files:callnsis.dll stdcall setuponly';

procedure ButtonOnClick(Sender: TObject);
begin
if i = 7 then i:= 0
else i:= i+1;
callplug(0, ExpandConstant('{src}\skin\NSIS_SkinCrafter_Plugin.dll'),
'skin',
ExpandConstant('{src}\skin\' + Skins[i]),
'','','','','','','','','');
//MsgBox(Skins[i], mbInformation, MB_OK);
end;

procedure InitializeWizard();
begin
Skins := ['SkinNsis.skf',
'Skinastic.skf',
'BlueZZ.skf',
'Ultraviolet.skf',
'Ultraviolet_ST.skf',
'vista_style.skf',
'Eclipse.skf',
'Aquamarine.skf'];

Button := TButton.Create(WizardForm);
Button.Left := 10;
Button.Top := WizardForm.CancelButton.Top;
Button.Width := WizardForm.CancelButton.Width;
Button.Height := WizardForm.CancelButton.Height;
Button.Caption := 'Skin';
Button.OnClick := @ButtonOnClick;
Button.Parent := WizardForm;

WizardForm.Position:=poDesktopCenter
WizardForm.Height:=WizardForm.Height-40

callplug(0, ExpandConstant('{src}\skin\NSIS_SkinCrafter_Plugin.dll'),
'skin',
ExpandConstant('{src}\skin\' + Skins[0]),
'','','','','','','','','');
end;
Автор: Sampron
Дата сообщения: 01.06.2007 01:25
Genri
Круто! даже смену скинов можно делать!

Добавлено:
Нужно ещё эту строку добавить а то есть лишнее справа:
WizardForm.Width:=WizardForm.Width-7
Автор: DuhaLab
Дата сообщения: 01.06.2007 09:09
вот есть скрипт:
//Блокировка установки, если запущена Opera

function NextButtonClick(CurPage: Integer): Boolean;
var s:string; h:Longint;
begin
Result:=True;
If CurPage=6 then begin
h:=FindWindowByClassName('OpWindow');
If (h>0) then begin
MsgBox('Программа установки обнаружила, что сейчас' #13'одна из копий программы Opera выполняется.' #13#13'Для продолжения установки пожалуйста,' #13 'закройте все запущенные окна программы.', mbError, mb_Ok);
Result:=False;
end;end;end;

мне нужно внести в сообщение кнопку "Закрыть Оперу" рядом с кнопкой "ОК" при нажатии которой происходит закрытие приложения (Opera.exe) и установка автоматически продолжилось, если она закрылась. Кнопка "ОК" без изменений оставить.
Автор: maxdddca123
Дата сообщения: 01.06.2007 10:50
А где взять файл SkinNsis.skf ???

Всё нашёл ))
Автор: Sero
Дата сообщения: 01.06.2007 11:06

Цитата:
Хреново что не работает в деинсталляторе.

мммдааа... очень жаль.
Автор: maxdddca123
Дата сообщения: 01.06.2007 11:07
Genri

Цитата:
Скрипт может выглядеть примерно так:

А что вообще делает этот скрипт ? А то у меня только кнопки пропадают при запуске и всё
Автор: Sampron
Дата сообщения: 01.06.2007 11:21
maxdddca123
Внимательно прочти:
Цитата:
1. Вместе с инсталлятором разместить папку (напр. skin)
2. В эту папку в обязательном порядке поместить 3 файла:
NSIS_SkinCrafter_Plugin.dll
SkinCrafter.dll
SkinNsis.skf
(По желанию можно туда же поместить и другие скины, хотя их можно и включить в инсталлятор)

в эту папку кидаешь ещё несколько скинов и в самом инсталле можно выбирать скины.
Автор: maxdddca123
Дата сообщения: 01.06.2007 11:34
Sampron
Я кинул 1 скин vista_style.skf, в скрипте поправил, оставит только его. Эффекта нет.
[more=Вот как поправил]
[Setup]
AppName=My Program
AppVerName=My Program v.1.2
DefaultDirName={pf}\My Program

[Files]
Source: callnsis.dll; Flags: dontcopy

[Code]
var
Button: TButton;
Skins: TArrayOfString;
i: integer;

procedure callplug(parentwnd: Integer; pluginname,funcname,param1,param2,param3,param4,param5,param6,param7,param8,param9,param10: PChar);
external 'callplug@files:callnsis.dll stdcall setuponly';

procedure ButtonOnClick(Sender: TObject);
begin
if i = 7 then i:= 0
else i:= i+1;
callplug(0, ExpandConstant('{src}\skin\NSIS_SkinCrafter_Plugin.dll'),
'skin',
ExpandConstant('{src}\skin\vista_style.skf'),
'','','','','','','','','');
//MsgBox(Skins[i], mbInformation, MB_OK);
end;

procedure InitializeWizard();
begin
Skins := ['vista_style.skf'];

Button := TButton.Create(WizardForm);
Button.Left := 10;
Button.Top := WizardForm.CancelButton.Top;
Button.Width := WizardForm.CancelButton.Width;
Button.Height := WizardForm.CancelButton.Height;
Button.Caption := 'Skin';
Button.OnClick := @ButtonOnClick;
Button.Parent := WizardForm;

WizardForm.Position:=poDesktopCenter
//WizardForm.Height:=WizardForm.Height-40
WizardForm.Width:=WizardForm.Width-7

callplug(0, ExpandConstant('{src}\skin\NSIS_SkinCrafter_Plugin.dll'),
'skin',
ExpandConstant('{src}\skin\vista_style.skf'),
'','','','','','','','','');
end;
[/more]
Автор: Sampron
Дата сообщения: 01.06.2007 12:00
maxdddca123
А ты скачал последнюю версию библиотеки NSIS_SkinCrafter_Plugin.dll с офф сайта?
http://www.skincrafter.com/nsis_plugin.html
Автор: Sero
Дата сообщения: 01.06.2007 12:09
А можно сделать ListBox и в нем добавить скины чтобы можно было быбрать?
Автор: Genri
Дата сообщения: 01.06.2007 12:14
Sampron
Цитата:
в эту папку кидаешь ещё несколько скинов и в самом инсталле можно выбирать скины
-- Все верно. А если использовать [more=такой вариант]
Код:
[Setup]
AppName=My Program
AppVerName=My Program v.1.2
DefaultDirName={pf}\My Program

[Files]
Source: callnsis.dll; Flags: dontcopy

[Code]
var
Button: TButton;
Skins: TStringList;
i: integer;

procedure callplug(parentwnd: Integer; pluginname,funcname,param1,param2,param3,param4,param5,param6,param7,param8,param9,param10: PChar);
external 'callplug@files:callnsis.dll stdcall';

procedure GetSkins();
var
FindRec: TFindRec;
begin
if FindFirst(ExpandConstant('{src}\skin\*.skf'), FindRec) then begin
try
repeat
if FindRec.Attributes and FILE_ATTRIBUTE_DIRECTORY = 0 then
begin
Skins.Add(FindRec.Name);
end;
until not FindNext(FindRec);
finally
FindClose(FindRec);
end;
end;
end;

procedure ButtonOnClick(Sender: TObject);
begin
if i = Skins.Count - 1 then i:= 0
else i:= i+1;
callplug(0, ExpandConstant('{src}\skin\NSIS_SkinCrafter_Plugin.dll'),
'skin',
ExpandConstant('{src}\skin\' + Skins[i]),
'','','','','','','','','');
Button.Caption := Skins[i];
end;

procedure InitializeWizard();
begin
Skins:= TStringList.Create;
GetSkins();

Button := TButton.Create(WizardForm);
Button.Left := 10;
Button.Top := WizardForm.CancelButton.Top;
Button.Width := WizardForm.CancelButton.Width + 30;
Button.Height := WizardForm.CancelButton.Height;
Button.Caption := Skins[0];
Button.OnClick := @ButtonOnClick;
Button.Parent := WizardForm;

WizardForm.Position:=poDesktopCenter
WizardForm.Height:=WizardForm.Height-40

callplug(0, ExpandConstant('{src}\skin\NSIS_SkinCrafter_Plugin.dll'),
'skin',
ExpandConstant('{src}\skin\' + Skins[0]),
'','','','','','','','','');
end;
Автор: Sampron
Дата сообщения: 01.06.2007 12:35
Genri

Цитата:
А если использовать такой вариант

Отличный вариант!

Sero
в SkinBuilder-е можно повесить рисунок на диалоги типа Потверждение отмены установки на мессажбоксы и т.п. а на саму WizardForm нельзя, что очень жаль.
Автор: maxdddca123
Дата сообщения: 01.06.2007 12:48
Genri

Цитата:
Все верно. А если использовать такой вариант ,

Button.Caption := Skins[0];
Выдаёт сообщение List index out of bounds... В папке лежит 1 скин... Изза чего может быть ?
Похоже не находит скины..... Ничо не понимаю, пути верно прописаны, файлы лежат...

Добавлено:
Всё разобрался

Добавлено:
ВАУ КРУТОТЕНЬ ТО КАКАЯ...... РЕСПЕКТИЩЕЕЕЕЕЕЕЕ !!! Ой
Автор: Sero
Дата сообщения: 01.06.2007 12:58

Цитата:
в SkinBuilder-е можно повесить рисунок на диалоги типа Потверждение отмены установки на мессажбоксы и т.п. а на саму WizardForm нельзя, что очень жаль.

Да, было бы отлично если можно было поставить на WizardForm!
Автор: maxdddca123
Дата сообщения: 01.06.2007 13:07
А что т я среди скинов на сайте не нашёл SkinNsis.skf

Добавлено:
Всё нашёл
Автор: DuhaLab
Дата сообщения: 01.06.2007 14:05
вот есть скрипт:
//Блокировка установки, если запущена Opera

function NextButtonClick(CurPage: Integer): Boolean;
var s:string; h:Longint;
begin
Result:=True;
If CurPage=6 then begin
h:=FindWindowByClassName('OpWindow');
If (h>0) then begin
MsgBox('Программа установки обнаружила, что сейчас' #13'одна из копий программы Opera выполняется.' #13#13'Для продолжения установки пожалуйста,' #13 'закройте все запущенные окна программы.', mbError, mb_Ok);
Result:=False;
end;end;end;

мне нужно внести в сообщение кнопку "Закрыть Оперу" рядом с кнопкой "ОК" при нажатии которой происходит закрытие приложения (Opera.exe) и установка автоматически продолжилось, если она закрылась. Кнопка "ОК" без изменений оставить.
Автор: Chuvakstepan
Дата сообщения: 01.06.2007 14:57
Выложьте, пожалуйста, рабочий скрипт использования скинов от SkinCrafter
По-моему всё перерыл!

Добавлено:
maxdddca123

Цитата:
Всё разобрался


А как разобрался? У меня тоже самое
Автор: Victor_Dobrov
Дата сообщения: 01.06.2007 15:03
Corona Skin & SysInfo - обложка со встроенной проверкой системных требований.
iTASmania_Inc - спасибо за классификацию бага как серьёзный, интересно к какой категории ты относишь глюки Windows...
Sampron - как вариант обновление текстов в скинах можно организовать по таймеру...
Автор: Sampron
Дата сообщения: 01.06.2007 15:12
Victor_Dobrov

Цитата:
как вариант обновление текстов в скинах можно организовать по таймеру...

Например?
Автор: Victor_Dobrov
Дата сообщения: 01.06.2007 15:43

Цитата:
Например?

innocallbackexample.iss - применение библиотеки InnoCallback.dll
Автор: Genri
Дата сообщения: 01.06.2007 16:54
Sero
Цитата:
А можно сделать ListBox и в нем добавить скины чтобы можно было быбрать?
-- [more=Тут]
Код:
[Setup]
AppName=My Program
AppVerName=My Program v.1.2
DefaultDirName={pf}\My Program

[Files]
Source: callnsis.dll; Flags: dontcopy

[Code]
const
DefaultSkin = 'SkinNsis.skf';

var
Button: TButton;
SkinList: TStringList;
SkinBox: TListBox;
Form: TSetupForm;
OKButton, CancelButton: TButton;

procedure callplug(parentwnd: Integer; pluginname,funcname,param1,param2,param3,param4,param5,param6,param7,param8,param9,param10: PChar);
external 'callplug@files:callnsis.dll stdcall';

procedure SkinsOnClick(Sender: TObject);
begin
callplug(0, ExpandConstant('{src}\skin\NSIS_SkinCrafter_Plugin.dll'),
'skin',
ExpandConstant('{src}\skin\' + SkinBox.Items[SkinBox.ItemIndex]),
'','','','','','','','','');
end;

procedure CreateSkinForm();
var
i: integer;
begin
Form:= CreateCustomForm;

Form.ClientWidth := ScaleX(256);
Form.ClientHeight := ScaleY(256);
Form.Caption := 'Select Skin';
Form.CenterInsideControl(WizardForm, False);

SkinBox := TListBox.Create(WizardForm);
SkinBox.Width := Form.ClientWidth;
SkinBox.Parent := Form;
SkinBox.ItemIndex := 0;
SkinBox.Top := ScaleY(8);
SkinBox.Height := Form.ClientHeight - ScaleY(50);
SkinBox.OnClick:= @SkinsOnClick;
SkinBox.Items:= SkinList;
for i:= 0 to SkinBox.Items.Count - 1 do
begin
if SkinBox.Items[i] = DefaultSkin then
SkinBox.ItemIndex:= i;
end;

OKButton := TButton.Create(Form);
OKButton.Parent := Form;
OKButton.Width := ScaleX(75);
OKButton.Height := ScaleY(23);
OKButton.Left := Form.ClientWidth - ScaleX(75 + 6 + 75 + 10);
OKButton.Top := Form.ClientHeight - ScaleY(23 + 10);
OKButton.Caption := 'OK';
OKButton.ModalResult := mrOk;

CancelButton := TButton.Create(Form);
CancelButton.Parent := Form;
CancelButton.Width := ScaleX(75);
CancelButton.Height := ScaleY(23);
CancelButton.Left := Form.ClientWidth - ScaleX(75 + 10);
CancelButton.Top := Form.ClientHeight - ScaleY(23 + 10);
CancelButton.Caption := 'Cancel';
CancelButton.ModalResult := mrCancel;
CancelButton.Cancel := True;

Form.ActiveControl := SkinBox;
end;

procedure GetSkins();
var
FindRec: TFindRec;
begin
SkinList := TStringList.Create();
if FindFirst(ExpandConstant('{src}\skin\*.skf'), FindRec) then begin
try
repeat
if FindRec.Attributes and FILE_ATTRIBUTE_DIRECTORY = 0 then
begin
SkinList.Add(FindRec.Name);
end;
until not FindNext(FindRec);
finally
FindClose(FindRec);
end;
end;
end;

procedure ButtonOnClick(Sender: TObject);
var
OldSkin: Integer;
begin
OldSkin:= SkinBox.ItemIndex;
if Form.ShowModal() = mrCancel then
begin
callplug(0, ExpandConstant('{src}\skin\NSIS_SkinCrafter_Plugin.dll'),
'skin',
ExpandConstant('{src}\skin\' + SkinBox.Items[OldSkin]),
'','','','','','','','','');
SkinBox.ItemIndex:= OldSkin;
end;
end;

procedure InitializeWizard();
begin
Button := TButton.Create(WizardForm);
Button.Left := 10;
Button.Top := WizardForm.CancelButton.Top;
Button.Width := WizardForm.CancelButton.Width + 30;
Button.Height := WizardForm.CancelButton.Height;
Button.Caption := 'Change Skin...';
Button.OnClick := @ButtonOnClick;
Button.Parent := WizardForm;

WizardForm.Position:=poDesktopCenter
WizardForm.Height:=WizardForm.Height-40

GetSkins();
callplug(0, ExpandConstant('{src}\skin\NSIS_SkinCrafter_Plugin.dll'),
'skin',
ExpandConstant('{src}\skin\' + DefaultSkin),
'','','','','','','','','');
CreateSkinForm();
end;
Автор: omals
Дата сообщения: 01.06.2007 17:36
привет
срочно нужен хелп
нужно проверить режим екрана
если 800х600 то устанавливать одну екзешку
если больше, то другую
тоесть
хотелось бы
прописать
[Files]
Source: "..\файл для разделовки 800х600.exe"; DestDir: "{app}"; CheckScreenSize();
Source: "..\файл для разделовки больше 800х600.exe"; DestDir: "{app}";
(not CheckScreenSize());

если в CheckScreenSize будет true, то буду копировать один файл, если нет то другой

[Code]
function CheckScreenSize():boolean;
begin
вот тут не знаю шо прописать ....
end;
-----------------
кажись можно сделать через
USER32.DLL по GetModuleHandleA
но как реально не знаю
плз. хелп




Автор: Sampron
Дата сообщения: 01.06.2007 17:52
omals
Есть код на проверку разрешения!
[more=здесь][Setup]
AppName=DisplayResoltution
AppVerName=DisplayResoltution
DefaultDirName=DisplayResoltution

[Code]
Const
HORZRES = 8;
VERTRES = 10;
BITSPIXEL = 12;
PLANES = 14;

function DeleteDC(hDC: Integer): Integer;
external 'DeleteDC@GDI32 stdcall';

function CreateDC(lpDriverName, lpDeviceName, lpOutput: String; lpInitData: Integer): Integer;
external 'CreateDCA@GDI32 stdcall';

function GetDeviceCaps(hDC, nIndex: Integer): Integer;
external 'GetDeviceCaps@GDI32 stdcall';

function InitializeSetup(): Boolean;
var
xres,yres,bpp,pl,tmp,hdc: Integer;

begin
hdc:=CreateDC('DISPLAY', '', '', 0)
pl:=GetDeviceCaps(hdc, PLANES)
bpp:=GetDeviceCaps(hdc, BITSPIXEL)
xres:=GetDeviceCaps(hdc, HORZRES)
yres:=GetDeviceCaps(hdc, VERTRES)
tmp:=DeleteDC(hdc)
bpp:=pl*bpp

    MsgBox('Разрешение экрана '+IntToStr(xres)+'x'+IntToStr(yres)+
' и глубина цвета '+IntToStr(bpp), mbInformation, MB_OK )
Result:=True
end;[/more]
Автор: Chuvakstepan
Дата сообщения: 01.06.2007 17:57
Скиньте рабочий скрипт использования скинов SkinKraft'a плииз!
Автор: Sampron
Дата сообщения: 01.06.2007 18:02
Chuvakstepan
Смотри выше скрипты от Genri они все рабочие.
Автор: Chuvakstepan
Дата сообщения: 01.06.2007 18:07
Посмотрел, но там просто внизу кнопки отрубаются. А толку = 0
Может, что-то не так?

Страницы: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768

Предыдущая тема: Mail.ru агент - вход не выполнен


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.