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

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

Автор: ComradG
Дата сообщения: 17.08.2008 21:34

Цитата:
спасибо вам хоть за какие-то ответы

Опиши какой именно скин, что требуется (в личку) а я ща твой пост пересмотрю.

Добавлено:
Кстати, Dobrov, через твою dll работает вот что[more]
[Setup]
AppName=NSIS
AppVerName=NSIS
DefaultDirName={pf}\NSIS
DefaultGroupName=NSIS
AllowNoIcons=yes

[Types]
Name: full; Description: Full installation
Name: compact; Description: Compact installation
Name: custom; Description: Custom installation; Flags: iscustom

[Components]
Name: program; Description: Program Files; Types: full compact custom; Flags: fixed
Name: help; Description: Help Contents; Types: full compact
Name: readme; Description: Read Me; Types: custom
Name: readme\en; Description: English; Flags: exclusive
Name: readme\ru; Description: Russian; Flags: exclusive

[Icons]
Name: {group}\NSIS; Filename: MakeNSIS.exe

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

[Messages]
SetupAppTitle=NSIS Setup
SetupWindowTitle=NSIS Setup
BeveledLabel= Nullsoft Install System
DiskSpaceMBLabel=Space requred: [mb] MB
ComponentsDiskSpaceMBLabel=Space required: [mb] MB

[LangOptions]
DialogFontName=Tahoma

[_Code]
function EnableDesc(ComponentsListHandle, DescLabelHandle: HWND; DescStrings: PChar): BOOL;
external 'enabledesc@files:descctrl.dll stdcall';

function disabledesc(): BOOL;
external 'disabledesc@files:descctrl.dll stdcall';

var
Bevel: TBevel;
FreeSpaceLabel: TLabel;
Panel: TPanel;
StartMenuTreeView: TStartMenuFolderTreeView;
Text1, Text2, Text3, Text4, Text5, Text6, Text7, Info: TNewStaticText;

procedure DeinitializeSetup();
Begin
disabledesc();
end;

procedure CurStepChanged(CurStep: TSetupStep);
Begin
if CurStep = ssInstall then disabledesc();
end;

procedure GetFreeSpaceCaption(Sender: TObject);
var
Path: string;
FreeMB, TotalMB: cardinal;
begin
Path:=ExtractFileDrive(WizardForm.DirEdit.Text);
GetSpaceOnDisk(Path, true, FreeMB, TotalMB);
if FreeMB > 1024 then
FreeSpaceLabel.Caption:='Space available:' + FloatToStr(round(FreeMB/1024*100)/100) + ' GB'
else
FreeSpaceLabel.Caption:='Space available:' + IntToStr(FreeMB) + ' MB'
end;

procedure StartMenuTreeViewOnClick(Sender: TObject);
begin
WizardForm.GroupEdit.Text:=addBackslash(StartMenuTreeView.Directory) + 'NSIS'
end;

procedure InitializeWizard();
begin
//страница выбора папки назначения
Text1:=TNewStaticText.Create(WizardForm);
Text1.Left:=ScaleX(0);
Text1.Top:=ScaleY(1);
Text1.Width:=ScaleX(417);
Text1.Height:=ScaleY(31);
Text1.AutoSize:=false;
Text1.WordWrap:=true;
Text1.Caption:='Setup will install NSIS in the following folder. To install a diffrent folder, click Browse and select another folder. Click Next to continue.';
Text1.Parent:=WizardForm.SelectDirPage;

Text2:=TNewStaticText.Create(WizardForm);
Text2.Left:=ScaleX(12);
Text2.Top:=ScaleY(114);
Text2.Font.Color:=clBlue;
Text2.Caption:='Destination folder';
Text2.Parent:=WizardForm.SelectDirPage;

Bevel:=TBevel.Create(WizardForm);
Bevel.Left:=ScaleX(0);
Bevel.Top:=ScaleY(120);
Bevel.Width:=ScaleX(417);
Bevel.Height:=ScaleY(50);
Bevel.Shape:=bsFrame;
Bevel.Parent:=WizardForm.SelectDirPage;

FreeSpaceLabel:=TLabel.Create(WizardForm);
FreeSpaceLabel.Left:=ScaleX(0);
FreeSpaceLabel.Top:=ScaleY(203);
FreeSpaceLabel.Width:=ScaleX(209);
FreeSpaceLabel.Height:=ScaleY(13);
FreeSpaceLabel.Enabled:=true;
FreeSpaceLabel.Parent:=WizardForm.SelectDirPage;

//страница выбора компонентов
Text3:=TNewStaticText.Create(WizardForm);
Text3.Left:=ScaleX(0);
Text3.Top:=ScaleY(1);
Text3.Width:=ScaleX(417);
Text3.Height:=ScaleY(31);
Text3.AutoSize:=false;
Text3.WordWrap:=true;
Text3.Caption:='Check the components you want to install and unckeck you do not want to install. Click Next to continue.';
Text3.Parent:=WizardForm.SelectComponentsPage;

Text4:=TNewStaticText.Create(WizardForm);
Text4.Left:=ScaleX(0);
Text4.Top:=ScaleY(39);
Text4.Width:=ScaleX(115);
Text4.Height:=ScaleY(19);
Text4.Caption:='Select type of install:';
Text4.Parent:=WizardForm.SelectComponentsPage;

Text5:=TNewStaticText.Create(WizardForm);
Text5.Left:=ScaleX(0);
Text5.Top:=ScaleY(61);
Text5.Width:=ScaleX(115);
Text5.Height:=ScaleY(87);
Text5.AutoSize:=false;
Text5.WordWrap:=true;
Text5.Caption:='Or select the optional components you wish to install:';
Text5.Parent:=WizardForm.SelectComponentsPage;

Panel:=TPanel.Create(WizardForm);
Panel.Left:=ScaleX(144);
Panel.Top:=ScaleY(173);
Panel.Width:=ScaleX(273);
Panel.Height:=ScaleY(53);
Panel.BevelInner:=bvLowered;
Panel.Parent:=WizardForm.SelectComponentsPage;

Text6:=TNewStaticText.Create(WizardForm);
Text6.Left:=ScaleX(151);
Text6.Top:=ScaleY(168);
Text6.Font.Color:=clBlue;
Text6.Caption:='Description';
Text6.Parent:=WizardForm.SelectComponentsPage;

//страница выбора папки меню пуск
Text7:=TNewStaticText.Create(WizardForm);
Text7.Left:=ScaleX(0);
Text7.Top:=ScaleY(1);
Text7.Width:=ScaleX(417);
Text7.Height:=ScaleY(31);
Text7.AutoSize:=false;
Text7.WordWrap:=true;
Text7.Caption:='Select the Start Menu folder in which you would like to create the program shortcuts. You can also enter a name to create a new folder.';
Text7.Parent:=WizardForm.SelectProgramGroupPage;

StartMenuTreeView:=TStartMenuFolderTreeView.Create(WizardForm);
StartMenuTreeView.Left:=ScaleX(0);
StartMenuTreeView.Top:=ScaleY(67);
StartMenuTreeView.Width:=ScaleX(417);
StartMenuTreeView.Height:=ScaleY(147);
StartMenuTreeView.OnChange:=@StartMenuTreeViewOnClick;
StartMenuTreeView.Parent:=WizardForm.SelectProgramGroupPage;
StartMenuTreeView.SetPaths(ExpandConstant('{userprograms}'), ExpandConstant('{commonprograms}'), ExpandConstant('{userstartup}'), ExpandConstant('{commonstartup}'));

//изменение местоположения элементов страниц мастера
//для страницы выбора папки назначения
WizardForm.SelectDirBrowseLabel.Hide;
WizardForm.SelectDirLabel.Hide;
WizardForm.DirEdit.Left:=ScaleX(9);
WizardForm.DirEdit.Top:=ScaleY(133);
WizardForm.DirEdit.Width:=ScaleX(305);
WizardForm.DirEdit.Height:=ScaleY(23);
WizardForm.DirEdit.OnChange:=@GetFreeSpaceCaption;
WizardForm.DirEdit.Text:=WizardForm.DirEdit.Text + #0;
WizardForm.DirBrowseButton.Left:=ScaleX(330);
WizardForm.DirBrowseButton.Top:=ScaleY(133);
WizardForm.DiskSpaceLabel.Top:=ScaleY(187);

//для страницы выбора компонентов
WizardForm.SelectComponentsLabel.Hide;
WizardForm.TypesCombo.Left:=ScaleX(144);
WizardForm.TypesCombo.Width:=ScaleX(273);
WizardForm.ComponentsList.Left:=ScaleX(144);
WizardForm.ComponentsList.Top:=ScaleY(61);
WizardForm.ComponentsList.Width:=ScaleX(273);
WizardForm.ComponentsList.Height:=ScaleY(107);
//здесь указывается изменение размера Lable
//при наведении на него курсора
WizardForm.ComponentsDiskSpaceLabel.Top:=ScaleY(173);
WizardForm.ComponentsDiskSpaceLabel.Width:=ScaleX(115);
WizardForm.ComponentsDiskSpaceLabel.Height:=ScaleY(87);
WizardForm.ComponentsDiskSpaceLabel.AutoSize:=false;
WizardForm.ComponentsDiskSpaceLabel.WordWrap:=true;

Info:=TNewStaticText.Create(WizardForm);
Info.Left:=ScaleX(151);
Info.Top:=ScaleY(185);
Info.Width:=ScaleX(265);
Info.Height:=ScaleY(31);
Info.AutoSize:=false;
Info.WordWrap:=true;
Info.Enabled:=false;
Info.Caption:='Position your mouse over a component to see its descrition.'
Info.Parent:=WizardForm.SelectComponentsPage;

//для страницы выбора папки меню пуск
WizardForm.SelectStartMenuFolderBrowseLabel.Hide;
WizardForm.SelectStartMenuFolderLabel.Hide;
WizardForm.GroupEdit.Top:=ScaleY(43);
WizardForm.GroupEdit.Width:=ScaleX(417);
WizardForm.GroupBrowseButton.Enabled:=false;
WizardForm.GroupBrowseButton.Visible:=false;

enabledesc(WizardForm.ComponentsList.Handle, WizardForm.ComponentsDiskSpaceLabel.Handle, 'Program Files that need to install for correct work;' + 'User Manual Help Contents;' + 'Read Me;' + 'English;' + 'Russian;');
end;
[/more]
Правда я так и не догнал, почему именно ComponentsDiskSpaceLabel должен меняться и почему его значение нельзя вставить в Panel. В Делфи я ничего такого так и не смог вспомнить.
Автор: CyberEsper
Дата сообщения: 17.08.2008 23:29

Цитата:
ComradG:
Опиши какой именно скин, что требуется (в личку) а я ща твой пост пересмотрю.

Я отправил тебе личное сообщение с подробной просьбой и Source файлами.

PS:Огромное спасибо за поддержку!
Автор: Victor_Dobrov
Дата сообщения: 18.08.2008 00:48
CyberEsper
Вот есть неплохой авторан от Sampron - Autorun by Sampron.
Автор: CyberEsper
Дата сообщения: 18.08.2008 01:38

Цитата:
Victor_Dobrov:
Я автораны не делал, но есть неплохой скрипт от Sampron - Autorun by Sampron.

Я просто хотел привести пример какие вы тут крутые штуки делаете, прошу извинить если как-то задел, я не хотел... А вообще, "авторан" сразу в "сетапе", это очень удобно, ничего против этого не имею.
Автор: nOobCrafter
Дата сообщения: 18.08.2008 10:13
Genri Спасибо, понял разницу)
Еще вопрос, возник, можно делать так что бы, если уже есть папка с прогой, то тогда бы выводился таск с преложением бэкапа, а если папки нет, то была бы обычная "установка с 0", без предложения бэкапа. Или это нужно проверять по данным реестра? Кто нибудь может показать скрипт с чем нить похожим?
Автор: Victor_Dobrov
Дата сообщения: 18.08.2008 11:12
SotM
Цитата:
Тут упоминалось, как выводить подсказку при наведении мыши. Но ведь элементы в списке можно выбирать с помощью клавиатуры (стрелок). А как сделать, чтобы те же самые подсказки появлялись при работе с клавиатурой?

Вот [more=доработаный скрипт отображения подсказки]
[Setup]
AppName=Components Descriptions
AppVerName=Components Descriptions
CreateAppDir=false

[Languages]
Name: ru; MessagesFile: compiler:Languages\Russian.isl

[Types]
Name: tweak; Description: Оптимальный выбор
Name: full; Description: Выбрать все компоненты
Name: deselect; Description: Сбросить все компоненты
Name: custom; Description: Пользовательский режим; Flags: iscustom

[Components]
Name: Safe; Description: Параметры безопасности; Types: deselect
Name: Safe\wscsvc; Description: Отключить 'Центр обеспечения безопасности'; Types: full tweak
Name: Safe\Signing; Description: Разрешить установку неподписанных драйверов; Types: full
Name: WB; Description: 'Мой компьютер' - Настройки; Types: deselect
Name: WB\Computer; Description: Добавить ярлыки - Корзина, Сетевые подключения; Types: full tweak
Name: WB\Low; Description: Уведомление о недостатке свободного места на диске
Name: WB\Low\1; Description: Изменить порог срабатывания с 10 % до 1%; Flags: exclusive; Types: tweak
Name: WB\Low\No; Description: Не предупреждать о переполнении дисков; Flags: exclusive; Types: full
Name: IE; Description: Настройки обозревателя Internet Explorer; Types: deselect
Name: IE\Cache; Description: Временные файлы Internet - использовать сжатие; Types: full tweak
Name: User; Description: Параметры входа в систему
Name: User\Logon; Description: Пользователи - использовать страницу приветствия; Flags: exclusive; Types: full
Name: User\Logon2K; Description: Классический вид - выводить запрос имени и пароля; Flags: exclusive; Types: tweak
Name: User\Autologon; Description: Задействовать автоматический вход в систему; Types: full tweak
Name: User\Sound; Description: Не сопровождать звуком загрузку и завершение работы; Types: full
Name: User\English; Description: Английский язык ввода по умолчанию для всех; Types: full
Name: Sys; Description: Настройки системы и оборудования; Types: deselect
Name: Sys\Memory; Description: Память - оптимизировать работу ядра Windows
Name: Sys\Memory\1024; Description: 1024Мб физической памяти на этом компьютере; Flags: exclusive
Name: Sys\Timeout; Description: Разрешить быстрое завершение работы; Types: full tweak

[Files]
Source: compiler:descctrl.dll; Flags: dontcopy
; скачать библиотеку descctrl.dll (6 кб) можно здесь: http://victor-dobrov.narod.ru/inno_descctrl.7z

[Code]
var Point: TPoint; CompDesc: TEdit; MessageForm: TForm; MessagePanel: TPanel; MessageLabel: TLabel; n, frame: integer; CompUpKey: Boolean; Descriptions: String; Messages: array of String;

function EnableDesc(ComponentsListHandle, DescLabelHandle: HWND; DescStrings: PChar): BOOL; external 'enabledesc@files:descctrl.dll stdcall';
function disabledesc(): BOOL; external 'disabledesc@files:descctrl.dll stdcall';
procedure GetCursorPos(var Point: TPoint); external 'GetCursorPos@user32 stdcall delayload';
function SetWindowPos(hWnd, hWndInsertAfter, X, Y, cx, cy, wFlags: Longint):Boolean; external 'SetWindowPos@user32.dll stdcall';
function ExtractIcon(hInst: LongInt; lpszExeFileName: PChar; nIconIndex: LongInt): LongInt; external 'ExtractIconA@shell32 stdcall delayload';
function DrawIconEx(hdc, x, y, hIcon, cx, cy, AniCur, Draw, Flags: Longint): Longint; external 'DrawIconEx@user32 stdcall delayload';
function GetModuleHandle(lpModuleName: LongInt): LongInt; external 'GetModuleHandleA@kernel32 stdcall delayload';

Procedure DrawIcon(Form: TWinControl; File: String; nIcon, Left, Top, Size, BColor: Integer); var Panel: TPanel; Rect: TRect; Begin
Panel:= TPanel.Create(Form); Panel.SetBounds(Left, Top, Size, Size); Panel.Parent:= Form
with TBitmapImage.Create(Panel) do begin Parent:= Panel; with Bitmap do begin
     Width:= Size; Height:= Size; Rect.Right:= Size; Rect.Bottom:= Size; Canvas.Brush.Color:= BColor; Canvas.FillRect(Rect);
DrawIconEx(Canvas.Handle, 0,0, ExtractIcon(GetModuleHandle(0), ExpandConstant(File), nIcon), Size, Size,0,0,3); end; end;
End;

Function StringToArray(Text, Cut: String): array of String; var t, i, k: Integer; Begin    { создать массив из текста}
Repeat SetArrayLength(Result, GetArrayLength(Result) + 1); t:= 1; k:= Pos(Cut, Text); if k > 0 then t:= Length(Cut) else k:= Pos(#10, Text); i:= GetArrayLength(Result) - 1;
    if k > 0 then begin Result:= Copy(Text, 1, k - 1); Text:= Copy(Text, k + t, Length(Text)) end else begin Result[i]:= Text; SetLength(Text, 0) end;
Until Length(Text) = 0
End;

Procedure ResizeLabel(Obj: TLabel; Text: String; MaxWidth: Integer); var k, w, h: integer;    Begin    { размер формы подгоняется под текст}
    Obj.AutoSize:= true; Obj.WordWrap:= false; Obj.Caption:= Text; { авторазмер}
    w:= Obj.Width; h:= Obj.Height; n:= (w + frame*2)/MaxWidth + 1
Repeat
    Obj.Width:= w/n + frame*2*n + k
    Obj.Height:= h * n
    Obj.WordWrap:= true; k:= k + 4
Until Obj.Height/h = n
End;

Procedure ShowHint(String: string; AIndex: Integer; XCenter, YCenter: Bool); Begin    { размер формы подгоняется под текст, если AIndex = 0, значок не рисуется}
    frame:= 10; if AIndex <> 0 then String:= ' '+ String;
GetCursorPos(Point); MessageLabel.Left:= frame; MessageLabel.Top:= frame
    ResizeLabel(MessageLabel, String, WizardForm.ClientWidth)
    if XCenter then Point.X:= WizardForm.Left + WizardForm.Width/2 - (MessageLabel.Width + frame*2 -2)/2 else Point.X:= Point.X + 12;
    if YCenter then Point.Y:= WizardForm.Top + WizardForm.BeveledLabel.Top else Point.Y:= Point.Y + 12;
MessageForm.SetBounds(Point.X, Point.Y, MessageLabel.Width + frame*2 -2, MessageLabel.Height + frame*2 -2)
    if AIndex <> 0 then DrawIcon(MessageForm, '{sys}\shell32.dll', AIndex, 9, 8, 16, MessagePanel.Color);
    MessageForm.Show; SetWindowPos(MessageForm.Handle, -1, 0, 0, 0, 0, 3);
End;

Procedure CompKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); Begin
    CompUpKey:= true
    n:= WizardForm.ComponentsList.ItemIndex
    if n >= 0 then ShowHint(Messages[n], -1001, true, true) else MessageForm.Hide;
End;

Procedure ObjectOnClick(Sender: TObject);
Begin
Case TObject(Sender) of    { событие объекта}
    CompDesc:
        if CompDesc.Text > '' then
            if CompUpKey then CompUpKey:= false else ShowHint(CompDesc.Text, -1001, false, false)
        else MessageForm.Hide;
    MessageForm:
        WizardForm.BringToFront;
end;
End;

Procedure DeinitializeSetup();
Begin
    disabledesc();
End;

Procedure CurStepChanged(CurStep: TSetupStep);
Begin
    if CurStep = ssInstall then disabledesc;
End;

Procedure CurPageChanged(CurPageID: Integer);
Begin
if CurPageID = wpSelectComponents then enableDesc(WizardForm.ComponentsList.Handle,CompDesc.Handle,Descriptions) else MessageForm.Hide;
End;

Procedure InitializeWizard;
Begin
CompDesc:= TEdit.Create(WizardForm)
    CompDesc.Parent:= WizardForm
    CompDesc.Visible:= false
    CompDesc.OnChange:= @ObjectOnClick
MessageForm:= CreateCustomForm;
    MessageForm.BorderStyle:= bsNone
    MessageForm.OnActivate:= @ObjectOnClick
MessagePanel:= TPanel.Create(MessageForm)
    MessagePanel.BevelInner:= bvLowered;
    MessagePanel.Align:= alClient;
    MessagePanel.Color:= $E1FFFF;
    MessagePanel.Parent:= MessageForm
MessageLabel:= TLabel.Create(MessagePanel)
    MessageLabel.Transparent:= true
    MessageLabel.Font.Name:= 'Arial'
    MessageLabel.Font.Size:= WizardForm.Font.Size + 1
    MessageLabel.Parent:= MessagePanel
WizardForm.ComponentsList.OnKeyUp:= @CompKeyUp
Descriptions:=
    'Демонстрационный режим. Действия по изменению настроек системы или параметров безопасности не выполняются. Компоненты и их описания даны только для примера. Описания отделяются друг от друга точкой с запятой и должны содержать не более 255 символов.;' +
    'Отключить «Центр обеспечения безопасности» (рекомендуется отключить эту практически бесполезную службу);' +
    'Разрешить установку неподписанных драйверов (упрощает настройку компьютера сразу после установки системы);' +
    '«Мой компьютер» - Секция настроек, влияющих на работу компьютера;' +
    'ярлыки Корзина и Сетевые подключения будут созданы в папке «Мой компьютер»;' +
    'Изменить порог срабатывание уведомления о недостатке свободного места на диске;' +
    'Изменить порог срабатывания с 10 % (значение по-умолчанию) до 1% (необходимо для дисков большой ёмкости);' +
    'Выдача всплывающей подсказки о переполнении дисков будет отключена;' +
    'Общие настройки обозревателя Internet Explorer;' +
    'Папка временных файлов Internet Explorer будет сжата средствами файловой системы NTFS;' +
    'Параметры входа в систему;' +
    'Пользователи - использовать страницу приветствия (новый экран загрузки, появившийся в Windows XP);' +
    'Классический вид - выводить запрос имени и пароля (экран загрузки, использующийся в Windows 2000);' +
    'Задействовать автоматический вход в систему для текущего пользователя без запроса имени и пароля;' +
    'Не сопровождать звуком загрузку и завершение работы (немного ускоряет загрузку «Рабочего стола»);' +
    'Английский язык ввода по умолчанию для всех (для новых пользователей);' +
    'Настройка системы на имеющийся объём оперативной памяти и процессорного кэша, оптимизация файловой подсистемы;' +
    'После установке данной опции уменьшать объём оперативной памяти НЕЖЕЛАТЕЛЬНО;' +
    'Вычисленный объём установленной физической памяти на этом компьютере;' +
    'Разрешить быстрое завершение работы (сетевые соединения могут быть разорваны преждевременно)';
Messages:= StringToArray(Descriptions,';')
End;
[/more] при нажатии клавиш или наведении курсора на строку списка компонентов.
Вот только не смог сделать, чтобы при потере фокуса с [i]ComponentsList
подсказка скрывалась, т.е. когда нажимаешь TAB, выбирается клавиша 'Назад', но подсказка остаётся.

Может Genri или htuos посоветуют, как отследить потерю фокуса ComponentsList?
Автор: LV10
Дата сообщения: 18.08.2008 12:22
Добрый день!
Мне нужно написать небольшой инсталлятор под заказ.
Инсталлятор включает в себя набор программ для локальной сети
Вашу работу оплачу.

Есть мастера, которым это по зубам?)
Не обязательно на ИННО или НСИС. главное результат.
Подробное ТЗ - в аське 4тритритри444


Прошу меня простить, если нарушил правила топика.
Автор: nOobCrafter
Дата сообщения: 19.08.2008 10:08
Люди может кто помоч с предыдущим постом?.. Ну очень надо.
Смысл проблемы в том чтобы при наличии папки с софтиной в инстале показывался бы дополнительный таск с предложением бэкапа. Проверка надо именно по папке, ибо мало ли винду снесли и данных реестра неосталось.(( Опять же надо таск, а не окошко типа "сделать бэкап или нет?" ибо там прилично подтасков
Автор: NitrogenRuBoard
Дата сообщения: 19.08.2008 10:12
Здравствуйте. Помогите сделать установщик игры The Ogange Box с выбором языка, причем не просто копирование файлов а с изменением ini файла. Еще чтобы в окне с выбором компонентов чекбоксами отмечались сами игры а радиобоксами отмечались варианты локализаций.
Например:
v Half-Life
*rus
eng
v half-life episode one
rus
*eng
...

например вариант локализации задается в файле SteamEmu.ini
русская версия:

Код: [HL2.EXE_HL2]
AppId=220
GCF=half-life 2 buka russian.gcf
GCF=half-life 2_russian.gcf
Автор: htuos
Дата сообщения: 19.08.2008 23:13
Victor_Dobrov

Цитата:
Может Genri или htuos посоветуют, как отследить потерю фокуса ComponentsList?

пока не посоветую. события OnExit у ComponentsList нету, насколько я себе представляю
нажатие клавиш обычно ловится по OnKeyPress, OnKeyDown (VK_TAB=9) правда не знаю, сможет ли инно поймать нажатие TABа. опять же, клики мышкой по форме, кнопкам и т.д., тоже никто не отменял. как вариант с извращением - ловить OnClick по всем остальным контролам. Кстати, Hint к каждой строке разве нельзя добавить?

NitrogenRuBoard

Цитата:
например вариант локализации задается в файле SteamEmu.ini

если у тебя первыми в списке будут стоять файлы русской локализации, а в реестре будет включен английский язык (Language=english, эта запись в реестре действительна для всех установленных игр), то все надписи будут на английском, а озвучка будет русская, вроде бы так должно получится. т.е. нет никакого смысла делать выбор языка для каждой игры (почитай тут про steamemu.ini, если интересно). про инсталлятор для ОВ посмотри здесь может и поможет чем-нибудь

Автор: bull3t
Дата сообщения: 20.08.2008 10:36
Ребят, помогите разобраться с парой вопросов. Очень надо.
Вот кусок кода

Цитата:
procedure InitializeWizard(); //инициализация окна с вводом данных для Постргреса
begin
Page := CreateInputQueryPage(wpSelectComponents,
'Ввод данных для PostgreSQL', '',
'Введите данные и нажмите Next.');
Page.Add('Логин подключения к БД:', False);
Page.Add('Пароль подключения к БД:', True);
Page.Add('Подтверждение пароля подключения к БД:', True);
Page.Add('Путь установки Postgre SQL', False);
IsPostreSQLInstallationCanceled := false;
end;

//------------------------------------

function NextButtonClick(CurPageID: Integer): Boolean; //Считывание и запись в файл ключа Постгрегса
begin
if CurPageId = 7 then
IsPostreSQLInstallationCanceled := False;

if CurPageID = {Page.ID}100 then
begin
if (Page.Values[0] <> '') and
(Page.Values[1] <> '') and
(Page.Values[2] <> '') and
(Page.Values[3] <> '') then
begin
UserName:= Page.Values[0];
UserPass:= Page.Values[1];
UserPass2:= Page.Values[2];
WayTo:= Page.Values[3];

if UserPass = UserPass2 then begin
DeleteFile(ExpandConstant('{src}\postgresql\start_posgres.bat'));
SaveStringToFile(ExpandConstant('{src}\postgresql\start_posgres.bat'), 'postgresql-8.1-int.msi /qr INTERNALLAUNCH=1 ADDLOCAL=server,psql,postgis,pljava,pgadmin,jdbc,npgsql,psqlodbc,pgoledb,includefiles,libfiles,msvclibs,pgxs,binfiles DOSERVICE=1 DOINITDB=1 SERVICEDOMAIN="%COMPUTERNAME%" SERVICEACCOUNT="postgres" SERVICEPASSWORD="postgres" CREATESERVICEUSER=1 SERVICENAME="PostgreSQL Database Server 8.1" SUPERUSER="' + Page.Values[0] + '" ' + 'SUPERPASSWORD="' + Page.Values[1] + '" ' + 'LOCALE="Ukrainian, Ukraine" ENCODING="WIN1251" LISTENPORT="5432" PERMITREMOTE=1 PL_PGSQL=1 BASEDIR="' + Page.Values[3] + '"', True);
Result:= True;
end
else
MsgBox('Пароль или подтверждение пароля введены неправильно!', mbInformation, MB_OK);

end;


два момента:
1) как мне добавить в мое ручное окно кнопку "обзор папок", а конкретно в "Путь установки Postgre SQL"? и потом этот путьь записать в файл?
я нашел в примерах ф-ию DirOnClick, но не пойму, как ее прикрутить к моей ситуации.

2) как мне сделать так, чтобы в строке "Путь установки Postgre SQL" по умолчанию стоял путь, который выбирается в стандартном окне "Выбор папки установки"?

Надеюсь на помощь.
Автор: Sampron
Дата сообщения: 20.08.2008 15:46
bull3t
Попробуй добавить [more=это]
[_Code]
var
Button: TButton;

procedure ButtonOnClick(Sender: TObject);
var
Dir: String;
begin
//Dir:=ExpandConstant('{pf}')
if BrowseForFolder(SetupMessage(msgBrowseDialogLabel), Dir, False) then
Page.Values[3]:=Dir //+ '\'
end;

function NextButtonClick(CurPageID: Integer): Boolean;
begin
Result:=True

if CurPageID = wpSelectDir then
Page.Values[3]:=WizardForm.DirEdit.Text

if CurPageID = Page.ID then
begin
DeleteFile(ExpandConstant('{src}\text.txt'))
SaveStringToFile(ExpandConstant('{src}\text.txt'), Page.Values[3], True)
end
end;

procedure InitializeWizard();
begin
Button:=TButton.Create(WizardForm)
Button.SetBounds(342, 170, 75, 23)
Button.Caption:=SetupMessage(msgButtonBrowse)
Button.OnClick:=@ButtonOnClick
Button.Parent:=Page.Surface
end;

[/more]
Автор: bull3t
Дата сообщения: 20.08.2008 16:41
Sampron

Спасибо огромное!!!! Очень помогло!!
Автор: equis
Дата сообщения: 20.08.2008 19:47
Еще одно обновление расширенной версии распаковщика:

innounp enhanced 0.23 build 2008-08-08

Как и прежде, добавил в архив комментарии по дополнительным ключам.
Автор: Artem_Butenko
Дата сообщения: 20.08.2008 20:39
Genri

Если Вам не сложно, перезалейте патченые исходники Inno Setup с добавлением procedure ProgressChanged(percent: Integer); и MainForm.SetBackImage(str: String). Ранее Вы выкладывали ссылки на форуме, но все файлы уже удалены с DataCOD. Буду очень признателен!
Автор: nOobCrafter
Дата сообщения: 21.08.2008 10:36
Люди, почему при добавлении этой опции, вылазит ошибочка "list index out of bounds"? что нужно изменить\добавить?..

Понял почему, потому что 2 строки "WizardForm.TasksList.ItemEnabled". Вопрос другой.. Как запретить более 1 строки?, Допустим мне надо 3-5, как это сделать?

Код: procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID = wpSelectTasks then
if DirExists('C:\123') then
WizardForm.TasksList.ItemEnabled[1]:= true;
WizardForm.TasksList.ItemEnabled[3]:= true;
end;
Автор: Artem_Butenko
Дата сообщения: 21.08.2008 20:03
Товарищи!!!

Может быть, у кого сохранился архив PlayWithTextures_best_TPanel.7z залейте его на бесплатный файлообменник (к примеру на "narod.ru"), а то с "RapidShare" просто намучился! Заранее большое спасибо за старания!
Автор: Unc1e
Дата сообщения: 21.08.2008 20:46
Artem_Butenko, http://ifolder.ru/7804539
Автор: SotM
Дата сообщения: 22.08.2008 10:59
nOobCrafter

Цитата:
Понял почему, потом что 2 строки "WizardForm.TasksList.ItemEnabled", Вопрос другой.. Как запретить более строки?, Допустим мне надо 3-5, как это сдлать?

Это на каком языке написано? Вообще не понятно что требуется.
Автор: nOobCrafter
Дата сообщения: 22.08.2008 16:49
Кстати нашел как мне кажеться небольшой глюк, хотя может это и не глюк. [more=Вот]procedure CurPageChanged(CurPageID: Integer);
begin
if DirExists('C:\123') then
if CurPageID = wpSelectTasks then
begin
WizardForm.TasksList.AddCheckBox('1', '', 0, True, True, True, True, nil)
WizardForm.TasksList.AddCheckBox('2', '', 1, True, True, True, True, nil)
WizardForm.TasksList.AddCheckBox('3', '', 1, True, True, True, True, nil)
WizardForm.TasksList.AddCheckBox('4', '', 1, True, True, True, True, nil)
WizardForm.TasksList.AddCheckBox('5', '', 1, True, True, True, True, nil)
WizardForm.TasksList.AddCheckBox('6', '', 1, True, True, True, True, nil)
WizardForm.TasksList.AddCheckBox('7', '', 1, True, True, True, True, nil)
WizardForm.TasksList.AddCheckBox('8', '', 1, True, True, True, True, nil)
WizardForm.TasksList.AddCheckBox('9', '', 1, True, True, True, True, nil)
end;
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssInstall then
if WizardForm.TasksList.Checked[1] = True then
begin
...;
end;

if WizardForm.TasksList.Checked[2] = True then
begin
...
end;

if WizardForm.TasksList.Checked[3] = True then
begin
...
end;

if WizardForm.TasksList.Checked[4] = True then
begin
...
end;

if WizardForm.TasksList.Checked[5] = True then
begin
...
end;

if WizardForm.TasksList.Checked[6] = True then
begin
...
end;

if WizardForm.TasksList.Checked[7] = True then
begin
...

if WizardForm.TasksList.Checked[8] = True then
begin
...
end;
end;[/more] пример кода по добавлению чекбоксов при наличии такой то папки. В меня выбора задач (тасков) все корректно отображается и работает, но как только кликаешь Далее, а потом снова Назад, (возвращаешься на страницу выбора задач), то кол-во чекбоксов удваивается. Как это можно обойти и глюк ли это?
Автор: htuos
Дата сообщения: 22.08.2008 17:27
nOobCrafter
это не глюк. что написал, то и получил
если на пальцах, то у тебя написано: при смене страницы добавлять чекбоксы, т.е. пр нажатии кнопки "Далее" добавляются чекбоксы, пролистал страницу, вернулся назад (это тоже смена страницы) добавились еще чекбоксы и т.д. до бесконечности

попробуй это сделать в InitializeWizard
Автор: Victor_Dobrov
Дата сообщения: 23.08.2008 04:37
Заменил в innounp enhanced 0.23 build 2008-08-08 китайский текст на английский.

equis
Цитата:
Как и прежде, добавил в архив комментарии по дополнительным ключам.

Следующих трёх строк в предыдущей версии не было, можешь пояснить, что они определяют?

; ГЬВл_м_й Hash: PasswordCheckHash
; ГЬВл MD5 Hash: 33f6864fdc6a38ffae3cfb3e6c35845f
; ГЬВл°_И< Salt: 6F545527860BDA9B

мой вариант текста:
; Check Hash: PasswordCheckHash
; MD5 Hash: 33f6864fdc6a38ffae3cfb3e6c35845f
; Calc Salt: 6F545527860BDA9B
Автор: Artem_Butenko
Дата сообщения: 23.08.2008 13:21
Kindly

Ранее Вы писали, что разрабатываете проект "Crack Installer", можно ли увидеть скрипт описывающий действия такого инсталлятора. Очень интересно знать какие процедуры и функции Вы задействуете. Буду весьма Вам благодарен за предоставленную информацию!

Вопрос к специалистам. Можно ли в Inno Setup реализовать следующие действия:
- поиск установленного приложения в реестре при нажатии кнопки "Далее" на странице приветствия;
- если приложения не найдено по ключу в системном реестре, предлагалось бы найти его корневой каталог вручную (аналогично патчеру dUP), и после подтверждения выбора каталога происходила инсталляция файлов.
И последнее, как в Inno Setup транспарентить текст чек-бокса и собственно "форму под самим" чек-боксом. Буду очень благодарен за любое содействие!
Автор: Kindly
Дата сообщения: 23.08.2008 16:17
Artem_Butenko
Пока покажу только готовый скомпилированный проект в виде лекарства для Visual Patch 3.0.3.0: http://forum.ru-board.com/topic.cgi?forum=35&topic=11735&start=140#16
Интересного мало в этом проекте...
Автор: Artem_Butenko
Дата сообщения: 23.08.2008 17:32
Kindly

Большая человеческая просьба, покажите скрипт или перезалейте файл патча на отечественный файлообменник. Если Вам не сложно, посмотрите мои предыдущие вопросы, может у Вас есть готовые решения. В любом случае буду благодарен за Вашу помощь!
Автор: Artem_Butenko
Дата сообщения: 24.08.2008 16:32
Victor_Dobrov

Ранее на форуме предлагались варианты различного скинирования инсталлятора (непосредственно через паскаль-скрипт + битмапы; использование сторонних .dll). Так вот, если использовать стандартный вариант скинирования, окна сообщений (например, "Обзор папок", окно подтверждения о выходе из программы установки и др.) остаются "незаскинированными". Можно ли в текущей версии Inno Setup наложить текстуру на окна сообщений (и их кнопки!), а также, м.б. можно скинировать чек-боксы, радио-баттоны и ползунок полосы прокрутки (не прибегая к использованию сторонних .dl, например, ISSkin.dll)? Если у Вас есть интересные варианты решения данной проблемы поделитесь ими, буду очень рад Вашей помощи!

Добавлено:
Genri

Я все с той же просьбой из предыдущего поста. Ранее (самые первые посты) на форуме обсуждалась возможность использования слайд-шоу из .jpeg по процентам прогресс-бара на основе патченных исходников Inno Setup, в которые были включены дополнительные процедуры ProgressChanged(percent: Integer); и MainForm.SetBackImage(str: String). Если у Вас остались данные исходники, пожалуйста "перезалейте" их на отечественный файлообменник, очень хочу изучить их в действии. Заранее большое спасибо!
Автор: Chanka
Дата сообщения: 24.08.2008 20:03
Artem_Butenko,
Вот исходник от Genri
Автор: Artem_Butenko
Дата сообщения: 24.08.2008 23:47
Chanka бескрайне Вам благодарен, только скачать с рапида не имею возможности. Если Вам не сложно, залейте файл на narod.ru или ifolder.
Автор: nOobCrafter
Дата сообщения: 25.08.2008 09:33
htuos

Код: Procedure InitializeWizard;
var
CurPageID: Integer;
Begin
if DirExists('C:\Windows') then
if CurPageID = wpSelectTasks then
begin
WizardForm.TasksList.AddCheckBox('1', '', 0, True, True, True, True, nil)
WizardForm.TasksList.AddCheckBox('1.1', '', 1, True, True, False, True, nil)
WizardForm.TasksList.AddCheckBox('1.2', '', 1, True, True, True, True, nil)
WizardForm.TasksList.AddCheckBox('1.3', '', 1, True, True, True, True, nil)
WizardForm.TasksList.AddCheckBox('1.4', '', 1, True, True, True, True, nil)
WizardForm.TasksList.AddCheckBox('1.5', '', 1, True, True, True, True, nil)
end;
End;
Автор: Chanka
Дата сообщения: 25.08.2008 09:57
Artem_Butenko,
ifolder

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970

Предыдущая тема: Презентация


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