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

Компьютерный форум OSzone.net » Автоматическая установка Windows » Автоматическая установка приложений » Скрипты Inno Setup. Помощь и советы [часть 5]

Закрытая тема
Настройки темы
Скрипты Inno Setup. Помощь и советы [часть 5]

Аватара для El Sanchez

Ветеран


Contributor


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


Конфигурация

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


Изменения
Автор: El Sanchez
Дата: 16-02-2015
Внимание! Данная тема предназначена только для обсуждения написания скриптов !
Остальные вопросы, а также последние версии компилятора в теме
Inno Setup. Прочие вопросы.


Показать/скрыть: Справка, руководство, примеры:
Показать/скрыть: Ссылки на примеры скриптов:
Показать/скрыть: Дополнительные программы для Inno Setup:
  • ISTool - неплохой редактор скриптов Inno Setup.
    Последняя версия: 5.3.0.1 [29.09.2009] - Скачать | зеркало;

  • Inno Script Generator - генератор скриптов Inno Setup. Обладает некоторыми полезными функциями, которых нет ни у самого Inno Setup, ни у ISTool.
    Последняя версия: 1.0.3.1 [23.03.2008] - Скачать | зеркало на русифицированную программу;
    Примечание: Родной сайт www.hisoft2000.de более недоступен, поэтому здесь расположены сторонние ссылки.

  • Inno Setup Form Designer - редактор страниц Inno Setup, можно создавать свои страницы.
    Последняя версия: 2.0.8 [12.11.2006] - Скачать;
    Примечание: Родной сайт http://isfd.kaju74.de/index.php?isfd более недоступен, поэтому здесь расположены сторонние ссылки.

  • Inno Setup GameScript Generator - программа генерирует скрипты для Inno Setup . С помощью GameScript Generator и Inno Setup вы сможете быстро создать простенький инсталляционный пакет для любой игры. В инсталлятор можно встроить музыку, слайдшоу и фоновый рисунок. Для специалистов созданный скрипт, возможно, будет неплохой заготовкой для дальнейшей модернизации;

  • ISSkin - Программа для создания и добавления в инсталлятор скинов. Инструкция.
    Последняя версия: 3.0.0.0 [19.01.2010] - Скачать;

  • ISSJoiner - Программа для объединения нескольких скриптов InnoSetup в один.
    Последняя версия: 3.0 [23.07.2009]

  • Converter - Программа конвертирует reg-файлы в формат *.iss (формат скриптов Inno Setup).
    Последняя версия: 0.1.4 [13.03.2010] - Скачать;


Предыдущие ветки обсуждения по ссылкам ниже и в прикреплённых архивах:
Inno Setup [все вопросы] часть 1
Inno Setup [все вопросы] часть 2
Скрипты Inno Setup. Помощь и советы [часть 3]
Скрипты Inno Setup. Помощь и советы [часть 4]

Отправлено: 03:49, 21-05-2012

 

Новый участник


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

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


El Sanchez, спасибо, скрипт завелся Я его немного подрихтовал: добавил прописывание абсолютного пути до звуков и русификации; Прописал добавление описания, бан мессэйджа, аплоад спид. Добавил древо папок и файлов, прогресс бар с отображением процентов установки, чекбокс добавления ярлыка на панель задач в Win 7. Все ок. Но вот решил добавить выбор директории для временных файлов. И тут начали ошибки вылетать...Вот код:
читать дальше »

//ANSI Version
#define MyAppName "Synergetic & MaxiRu DC-P2P Pack"
#define MyAppVersion "1.0.0"
#define MyAppPublisher "-=Batista=-"
#define MyAppURL "http://synergetic-hub.org/"
#define MyAppExeName "ApexDC-s16_4.exe"
#define StartupIcon "Запускать при старте Windows"

[Setup]
AppId={{E20E5BAA-70B0-4EE4-8D27-B1E312B1C083}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
AppVerName={#MyAppName} {#MyAppVersion}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName={pf}\{#MyAppName}
DefaultGroupName={#MyAppName}
AllowNoIcons=yes
OutputDir=Output
OutputBaseFilename=Synergetic & MaxiRu DC-P2P Pack 1.0.0
SetupIconFile=Icon.ico
Compression=lzma2
SolidCompression=yes
//ArchitecturesInstallIn64BitMode=x64
WizardImageFile=WizardImage.bmp
WizardSmallImageFile=WizardSmallImage.bmp

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

[CustomMessages]
russian.NickNamePageCaption=Информация о пользователе
russian.NickNamePageDescription=Какой ник у Вас в DC++?
russian.NickNamePageSubcaption=Укажите ник и нажмите "Далее"%n%nРекомендуемые символы в нике:%n0123456789%nabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ%n()+=[]^_{{})"%nАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдеёжзийклмнопрстуфхцчшщъыьэюя
russian.NickNamePageEditName=Имя пользователя в DC++:
russian.DownloadDirPageCaption=Выбор каталога для загрузки
russian.DownloadDirPageDescription=Где будут храниться загружаемые файлы?
russian.DownloadDirPageSubcaption=Укажите каталог для скачки (при старте он будет автоматически "расшарен")
russian.ShareDirPageCaption=Выбор каталога для общего доступа
russian.ShareDirPageDescription=Где будут храниться файлы для общего доступа?
russian.ShareDirPageSubcaption=Укажите каталог для файлов общего доступа
russian.TempDownloadDirCaption=Выбор каталога для временных файлов
russian.TempDownloadDirPageDescription=Где будут храниться временные файлы?
russian.TempDownloadDirPageSubcaption=Укажите каталог для временных файлов

[Tasks]
Name: desktopicon; Description: {cm:CreateDesktopIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: unchecked
Name: quicklaunchicon; Description: {cm:CreateQuickLaunchIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: unchecked; OnlyBelowVersion: 0,6.1
Name: quicklaunchicon7; Description: {cm:CreateQuickLaunchIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: unchecked; MinVersion: 0,6.1
Name: startupicon; Description: {#StartupIcon}; GroupDescription: {cm:AdditionalIcons}

[Files]
Source: ApexDC-s16_4.exe; DestDir: "{app}"; Flags: ignoreversion; AfterInstall: Progress()
Source: AVIPreview.exe; DestDir: "{app}"; Flags: ignoreversion; AfterInstall: Progress()
Source: PinToTasckbar.vbs; DestDir: {tmp}; Flags: deleteafterinstall; AfterInstall: Progress()
Source: Synergetic DC++ Community.url; DestDir: "{app}"; Flags: ignoreversion; AfterInstall: Progress()
Source: Новые возможности клиента ApexDC++.txt; DestDir: "{app}"; Flags: ignoreversion; AfterInstall: Progress()
Source: EmoPacks\*; DestDir: {app}\EmoPacks\; AfterInstall: Progress();
Source: EmoPacks\Images\*;DestDir: {app}\EmoPacks\Images\;AfterInstall: Progress();
Source: EmoPacks\RadoX-Pack\*;DestDir: {app}\EmoPacks\RadoX-Pack\; AfterInstall: Progress();
Source: EmoPacks\Skype\*;DestDir: {app}\EmoPacks\Skype\; AfterInstall: Progress();
Source: EmoPacks\WAJIM-MegaEmoPack\*;DestDir: {app}\EmoPacks\WAJIM-MegaEmoPack\; AfterInstall: Progress();
Source: Settings\*; DestDir: {app}\Settings\; AfterInstall: Progress();
Source: Sounds\*; DestDir: {app}\Sounds\; AfterInstall: Progress();
Source: Themes\*; DestDir: {app}\Themes\; AfterInstall: Progress();
Source: Toolbars\*; DestDir: {app}\Toolbars; AfterInstall: Progress();

[Icons]
Name: {group}\{#MyAppName}; Filename: {app}\{#MyAppExeName}
Name: {group}\{cm:ProgramOnTheWeb,{#MyAppName}}; Filename: {#MyAppURL}
Name: {group}\{cm:UninstallProgram,{#MyAppName}}; Filename: {uninstallexe}
Name: {commondesktop}\{#MyAppName}; Filename: {app}\{#MyAppExeName}; Tasks: desktopicon
Name: {userstartup}\{#MyAppName}; Filename: {app}\{#MyAppExeName}; Tasks: startupicon

[Run]
Filename: {app}\{#MyAppExeName}; Description: {cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}; Flags: nowait postinstall skipifsilent
Filename: {#MyAppURL}; Verb: open; Description: Посетить сайт проекта Synergetic & MaxiRu; Flags: postinstall shellexec skipifsilent
Filename: {tmp}\PinToTasckbar.vbs; Parameters: """{app}\ApexDC-s16_4.exe"""; Flags: shellexec; Tasks: quicklaunchicon7

[code]
var
NickNamePage: TInputQueryWizardPage;
DownloadDirPage, ShareDirPage: TInputDirWizardPage;
// TempDownloadDirPage: TInputDirWizardPage;
AboutInfoButton: TButton;
URLlink: TLabel;

procedure CreateDCPlusPlus(Filename: String);
var
objXMLDoc: Variant;
begin
try
objXMLDoc := CreateOleObject('Microsoft.XMLDOM');
except
ShowExceptionMessage;
Exit;
end;
objXMLDoc.async := False;
objXMLDoc.AppendChild(objXMLDoc.createProcessingInstruction('xml', 'version="1.0" encoding="utf-8" standalone="yes"'));
objXMLDoc.AppendChild(objXMLDoc.createNode(1, 'DCPlusPlus', ''));

//settings node
objXMLDoc.selectSingleNode('DCPlusPlus').AppendChild(objXMLDoc.createElement('Settings'));

//nick node
objXMLDoc.selectSingleNode('//DCPlusPlus/Settings').AppendChild(objXMLDoc.createElement('Nick'));
objXMLDoc.selectSingleNode('//DCPlusPlus/Settings/Nick').setAttribute('type', 'string');
objXMLDoc.selectSingleNode('//DCPlusPlus/Settings/Nick').text := NickNamePage.Values[0];

//downdir node
objXMLDoc.selectSingleNode('//DCPlusPlus/Settings').AppendChild(objXMLDoc.createElement('DownloadDirectory'));
objXMLDoc.selectSingleNode('//DCPlusPlus/Settings/DownloadDirectory').setAttribute('type', 'string');
objXMLDoc.selectSingleNode('//DCPlusPlus/Settings/DownloadDirectory').text := DownloadDirPage.Values[0];

//russian xml
if FileExists(ExpandConstant('{app}\Settings\Russian.xml')) then
begin
objXMLDoc.selectSingleNode('//DCPlusPlus/Settings').AppendChild(objXMLDoc.createNode(1, 'LanguageFile', ''));
objXMLDoc.selectSingleNode('//DCPlusPlus/Settings/LanguageFile').text :=(ExpandConstant('{app}\Settings\Russian.xml'));
end;

if FileExists(ExpandConstant('{app}\Sounds\PrivateMessage.wav')) then
begin
objXMLDoc.selectSingleNode('//DCPlusPlus/Settings').AppendChild(objXMLDoc.createNode(1, 'BeepFile', ''));
objXMLDoc.selectSingleNode('//DCPlusPlus/Settings/BeepFile').text :=(ExpandConstant('{app}\Sounds\PrivateMessage.wav'));
end;

if FileExists(ExpandConstant('{app}\Sounds\DownloadBegins.wav')) then
begin
objXMLDoc.selectSingleNode('//DCPlusPlus/Settings').AppendChild(objXMLDoc.createNode(1, 'BeginFile', ''));
objXMLDoc.selectSingleNode('//DCPlusPlus/Settings/BeginFile').text :=(ExpandConstant('{app}\Sounds\DownloadBegins.wav'));
end;

if FileExists(ExpandConstant('{app}\Sounds\DownloadFinished.wav')) then
begin
objXMLDoc.selectSingleNode('//DCPlusPlus/Settings').AppendChild(objXMLDoc.createNode(1, 'FinishedFile', ''));
objXMLDoc.selectSingleNode('//DCPlusPlus/Settings/FinishedFile').text :=(ExpandConstant('{app}\Sounds\DownloadFinished.wav'));
end;

if FileExists(ExpandConstant('{app}\Sounds\AltSourceAdded.wav')) then
begin
objXMLDoc.selectSingleNode('//DCPlusPlus/Settings').AppendChild(objXMLDoc.createNode(1, 'SourceFile', ''));
objXMLDoc.selectSingleNode('//DCPlusPlus/Settings/SourceFile').text :=(ExpandConstant('{app}\Sounds\AltSourceAdded.wav'));
end;

if FileExists(ExpandConstant('{app}\Sounds\UploadFinished.wav')) then
begin
objXMLDoc.selectSingleNode('//DCPlusPlus/Settings').AppendChild(objXMLDoc.createNode(1, 'UploadFile', ''));
objXMLDoc.selectSingleNode('//DCPlusPlus/Settings/UploadFile').text :=(ExpandConstant('{app}\Sounds\UploadFinished.wav'));
end;

if FileExists(ExpandConstant('{app}\Sounds\FakerFound.wav')) then
begin
objXMLDoc.selectSingleNode('//DCPlusPlus/Settings').AppendChild(objXMLDoc.createNode(1, 'FakerFile', ''));
objXMLDoc.selectSingleNode('//DCPlusPlus/Settings/FakerFile').text :=(ExpandConstant('{app}\Sounds\FakerFound.wav'));
end;

if FileExists(ExpandConstant('{app}\Sounds\MyNickInMainChat.wav')) then
begin
objXMLDoc.selectSingleNode('//DCPlusPlus/Settings').AppendChild(objXMLDoc.createNode(1, 'ChatNameFile', ''));
objXMLDoc.selectSingleNode('//DCPlusPlus/Settings/ChatNameFile').text :=(ExpandConstant('{app}\Sounds\MyNickInMainChat.wav'));
end;

if FileExists(ExpandConstant('{app}\Sounds\FileCorrupted.wav')) then
begin
objXMLDoc.selectSingleNode('//DCPlusPlus/Settings').AppendChild(objXMLDoc.createNode(1, 'SoundTTH', ''));
objXMLDoc.selectSingleNode('//DCPlusPlus/Settings/SoundTTH').text :=(ExpandConstant('{app}\Sounds\FileCorrupted.wav'));
end;

if FileExists(ExpandConstant('{app}\Sounds\UnhandledException.wav')) then
begin
objXMLDoc.selectSingleNode('//DCPlusPlus/Settings').AppendChild(objXMLDoc.createNode(1, 'SoundException', ''));
objXMLDoc.selectSingleNode('//DCPlusPlus/Settings/SoundException').text :=(ExpandConstant('{app}\Sounds\UnhandledException.wav'));
end;

if FileExists(ExpandConstant('{app}\Sounds\HubConnected.wav')) then
begin
objXMLDoc.selectSingleNode('//DCPlusPlus/Settings').AppendChild(objXMLDoc.createNode(1, 'SoundHubConnected', ''));
objXMLDoc.selectSingleNode('//DCPlusPlus/Settings/SoundHubConnected').text :=(ExpandConstant('{app}\Sounds\HubConnected.wav'));
end;

if FileExists(ExpandConstant('{app}\Sounds\HubDisconnected.wav')) then
begin
objXMLDoc.selectSingleNode('//DCPlusPlus/Settings').AppendChild(objXMLDoc.createNode(1, 'SoundHubDisconnected', ''));
objXMLDoc.selectSingleNode('//DCPlusPlus/Settings/SoundHubDisconnected').text :=(ExpandConstant('{app}\Sounds\HubDisconnected.wav'));
end;

if FileExists(ExpandConstant('{app}\Sounds\FavUser.wav')) then
begin
objXMLDoc.selectSingleNode('//DCPlusPlus/Settings').AppendChild(objXMLDoc.createNode(1, 'SoundFavUserOnline', ''));
objXMLDoc.selectSingleNode('//DCPlusPlus/Settings/SoundFavUserOnline').text :=(ExpandConstant('{app}\Sounds\FavUser.wav'));
end;

if FileExists(ExpandConstant('{app}\Sounds\FavUserDisconnected.wav')) then
begin
objXMLDoc.selectSingleNode('//DCPlusPlus/Settings').AppendChild(objXMLDoc.createNode(1, 'SoundFavUserOffline', ''));
objXMLDoc.selectSingleNode('//DCPlusPlus/Settings/SoundFavUserOffline').text :=(ExpandConstant('{app}\Sounds\FavUserDisconnected.wav'));
end;

if FileExists(ExpandConstant('{app}\EmoPacks\WAJIM-MegaEmoPack v1.2c FiNAL.xml')) then
begin
objXMLDoc.selectSingleNode('//DCPlusPlus/Settings').AppendChild(objXMLDoc.createNode(1, 'EmoticonsFile', ''));
objXMLDoc.selectSingleNode('//DCPlusPlus/Settings/EmoticonsFile').text :='WAJIM-MegaEmoPack v1.2c FiNAL';
end;

//share node
objXMLDoc.selectSingleNode('DCPlusPlus').AppendChild(objXMLDoc.createElement('Share'));
objXMLDoc.selectSingleNode('//DCPlusPlus/Share').AppendChild(objXMLDoc.createElement('Directory'));
objXMLDoc.selectSingleNode('//DCPlusPlus/Share/Directory').setAttribute('Virtual', ExtractFileName(RemoveBackSlash(ShareDirPage.Values[0])));
objXMLDoc.selectSingleNode('//DCPlusPlus/Share/Directory').text := ShareDirPage.Values[0];

//tempdir node
// objXMLDoc.selectSingleNode('//DCPlusPlus/Settings').AppendChild(objXMLDoc.createElement('TempDownloadDir'));
// objXMLDoc.selectSingleNode('//DCPlusPlus/Settings/TempDownloadDir').setAttribute('type', 'string');
// objXMLDoc.selectSingleNode('//DCPlusPlus/Settings/TempDownloadDir').text := TempDownloadDirPage.Values[0];

//prevapps node
objXMLDoc.selectSingleNode('DCPlusPlus').AppendChild(objXMLDoc.createElement('PreviewApps'));
objXMLDoc.selectSingleNode('//DCPlusPlus/PreviewApps').AppendChild(objXMLDoc.createElement('Application'));
objXMLDoc.selectSingleNode('//DCPlusPlus/PreviewApps/Application').setAttribute('Name', 'AVI Preview');
objXMLDoc.selectSingleNode('//DCPlusPlus/PreviewApps/Application').setAttribute('Application', ExpandConstant('{app}\AVIPreview.exe'));
objXMLDoc.selectSingleNode('//DCPlusPlus/PreviewApps/Application').setAttribute('Arguments', '%[file]');
objXMLDoc.selectSingleNode('//DCPlusPlus/PreviewApps/Application').setAttribute('Extension', 'avi;divx;mpg;mpeg;vob');

//Description
objXMLDoc.selectSingleNode('//DCPlusPlus/Settings').AppendChild(objXMLDoc.createNode(1, 'Description', ''));
objXMLDoc.selectSingleNode('//DCPlusPlus/Settings/Description').text :='[Synergetic & MaxiRu DC-P2P Pack 1.0.0]';

//BanMessage
objXMLDoc.selectSingleNode('//DCPlusPlus/Settings').AppendChild(objXMLDoc.createNode(1, 'BanMessage', ''));
objXMLDoc.selectSingleNode('//DCPlusPlus/Settings/BanMessage').text :='Вы забанены. Расшарьте больше файлов или откройте больше слотов!';

//UploadSpeed
objXMLDoc.selectSingleNode('//DCPlusPlus/Settings').AppendChild(objXMLDoc.createNode(1, 'UploadSpeed', ''));
objXMLDoc.selectSingleNode('//DCPlusPlus/Settings/UploadSpeed').text :='100';

objXMLDoc.save(Filename);
end;

function ReadDCPlusPlus(Filename, Node, Default: String): String;
var
objXMLDoc: Variant;
begin
Result := Default;
if not FileExists(Filename) then Exit;
try
objXMLDoc := CreateOleObject('Microsoft.XMLDOM'); //или другой объект
objXMLDoc.load(Filename);
objXMLDoc.async := False;
if objXMLDoc.parseError.errorCode <> 0 then Exit;
Result := objXMLDoc.selectSingleNode(Node).text;
except
ShowExceptionMessage;
Exit;
end;
end;

procedure CreateNickNamePage;
begin
NickNamePage := CreateInputQueryPage(wpSelectTasks, ExpandConstant('{cm:NickNamePageCaption}'), ExpandConstant('{cm:NickNamePageDescription}'), ExpandConstant('{cm:NickNamePageSubcaption}'));
NickNamePage.Add(ExpandConstant('{cm:NickNamePageEditName}'), False);
NickNamePage.Values[0] := ReadDCPlusPlus(WizardDirValue + '\Settings\DCPlusPlus.xml', '//DCPlusPlus/Settings/Nick', '');
end;

procedure CreateDownloadDirPage;
begin
DownloadDirPage := CreateInputDirPage(NickNamePage.ID, ExpandConstant('{cm:DownloadDirPageCaption}'), ExpandConstant('{cm:DownloadDirPageDescription}'), ExpandConstant('{cm:DownloadDirPageSubcaption}'), False, 'Новая папка');
DownloadDirPage.Add('');
DownloadDirPage.Values[0] := ReadDCPlusPlus(WizardDirValue + '\Settings\DCPlusPlus.xml', '//DCPlusPlus/Settings/DownloadDirectory', WizardDirValue + '\Downloads-P2P');
end;

procedure CreateShareDirPage;
begin
ShareDirPage := CreateInputDirPage(DownloadDirPage.ID, ExpandConstant('{cm:ShareDirPageCaption}'), ExpandConstant('{cm:ShareDirPageDescription}'), ExpandConstant('{cm:ShareDirPageSubcaption}'), False, 'Новая папка');
ShareDirPage.Add('');
ShareDirPage.Values[0] := ReadDCPlusPlus(WizardDirValue + '\Settings\DCPlusPlus.xml', '//DCPlusPlus/Share/Directory', '');
end;

//procedure CreateTempDownloadDirPage;
//begin
// TempDownloadDirPage := CreateInputDirPage(ShareDirPage.ID, ExpandConstant('{cm:TempDownloadDirCaption}'), ExpandConstant('{cm:TempDownloadDirPageDescription}'), ExpandConstant('{cm:TempDownloadDirPageSubcaption}'), False, 'Новая папка');
// TempDownloadDirPage.Add('');
// TempDownloadDirPage.Values[0] := ReadDCPlusPlus(WizardDirValue + '\Settings\DCPlusPlus.xml', '//DCPlusPlus/Settings/TempDownloadDir', WizardDirValue + '\Temp');
//end;

procedure ControlOnClick(Sender: TObject);
var
ResultCode: Integer;
begin
if Sender is TButton then MsgBox('© -=Batista=-, 2012', mbInformation, MB_OK);
if Sender is TLabel then ShellExec('open', '{#MyAppURL}', '', '', SW_SHOW, ewNoWait, ResultCode);
end;

procedure CreateAboutInfoButton;
begin
AboutInfoButton := TButton.Create(WizardForm);
with AboutInfoButton do begin
Parent := WizardForm;
SetBounds(WizardForm.ClientWidth - WizardForm.CancelButton.Left - WizardForm.CancelButton.Width, WizardForm.CancelButton.Top, WizardForm.CancelButton.Width, WizardForm.CancelButton.Height);
Caption := 'Автор...';
OnClick := @ControlOnClick;
end;
end;

procedure CreateURLlink;
begin
URLlink := TLabel.Create(WizardForm);
with URLlink do begin
Parent := WizardForm;
Left := 2*AboutInfoButton.Left + AboutInfoButton.Width;
Top := AboutInfoButton.Top + AboutInfoButton.Height - Height;
Caption := '{#MyAppURL}';
Font.Color := clBlue;
Font.Style := [fsUnderline];
Cursor := crHand;
OnClick := @ControlOnClick;
end;
end;

//function SetWindowTheme(hwnd: HWND; pszSubAppName: pchar; pszSubIdList: pchar): Longint; external 'SetWindowTheme@uxtheme.dll stdcall delayload';

var
TDV: TFolderTreeView;
TFV: TStartMenuFolderTreeView;

procedure TDVOnChange(Sender: TObject);
begin
WizardForm.DirEdit.Text:= AddBackslash(TDV.Directory)+'MyApp';
end;

procedure TFVOnChange(Sender: TObject);
begin
WizardForm.GroupEdit.Text:= AddBackslash(TFV.Directory)+'MyApp';
end;

var
ProgressLabel, SizeLabel: TLabel;

procedure Progress();
var
size: integer;

begin
with WizardForm.ProgressGauge do
ProgressLabel.Caption:= IntToStr((Position-Min)/((Max - Min)/100)) + '%';
FileSize(ExpandConstant(CurrentFileName), size);
SizeLabel.Caption:= IntToStr(size) + ' bytes';
end;

procedure InitializeWizard();
begin
CreateNickNamePage;
CreateDownloadDirPage;
// CreateTempDownloadDirPage;
CreateShareDirPage;
CreateAboutInfoButton;
CreateURLlink;

TDV:= TFolderTreeView.Create(WizardForm);
TDV.Top:= WizardForm.DirEdit.Top+28;
TDV.Width:= 417;
TDV.Height:= 100;
TDV.OnChange:= @TDVOnChange;
TDV.Parent:= WizardForm.SelectDirPage;

TFV:= TStartMenuFolderTreeView.Create(WizardForm);
TFV.Top:= WizardForm.GroupEdit.Top+28;
TFV.Width:= 417;
TFV.Height:= 100;
TFV.SetPaths(ExpandConstant('{userprograms}'),ExpandConstant('{commonprograms}'),ExpandConstant('{us erstartup}'),ExpandConstant('{commonstartup}'));
TFV.OnChange:= @TFVOnChange;
TFV.Parent:= WizardForm.SelectProgramGroupPage;

ProgressLabel := TLabel.Create(WizardForm);
with WizardForm.ProgressGauge do
begin
ProgressLabel.Top := Top + Height + ScaleY(8);
ProgressLabel.Left:= Left + Width/2 - ScaleX(8);
ProgressLabel.AutoSize := True;
ProgressLabel.Parent := WizardForm.InstallingPage;
end;

SizeLabel := TLabel.Create(WizardForm);
with WizardForm.ProgressGauge do
begin
SizeLabel.Top := Top + Height + ScaleY(8);
SizeLabel.Left:= Left;
SizeLabel.AutoSize := True;
SizeLabel.Parent := WizardForm.InstallingPage;
end;
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
case CurStep of
ssPostInstall: CreateDCPlusPlus(ExpandConstant('{app}\Settings\DCPlusPlus.xml'));
end;
end;

Мой неправильный код заслешован. Не подскажешь как правильно сделать?

Отправлено: 21:07, 09-08-2012 | #581



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для Johny777

Ветеран


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

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


Цитата Ivan_009:
а возможно ли в свою форму отмены текстурировать эти кнопки.... »
не для меня
тем кнопкам не присоено событие в OnClick. Только ModalResult
и смысл текстурировать кнопку на форме деинсталятора (родной), если здесь нет состояния "неактивна"
проще уж тогда вообще скрыть, тк от неё толку ноль

Цитата Ivan_009:
и как сделать чтобы при нажатии на чекбокс не создавать ярлык в меню пуск кнопка становилась неактивной. »
я ж тебе уже делал кастомный чекбокс "не создовать значки в меню Пуск" в этой теме
Забыл?
Это сообщение посчитали полезным следующие участники:

Отправлено: 21:28, 09-08-2012 | #582


Аватара для Ivan_009

Ветеран


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

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


Johny777, мне надо чтобы при нажатии на чекбокс текстурированная кнопка становилась неактивной.....У меня же все наоборот....
В твоем примере....

Отправлено: 00:11, 10-08-2012 | #583


Аватара для Johny777

Ветеран


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

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


Ivan_009,
так состояния "заблокирована" нет
используй пример с 4-мя состояниями и в конце процедуры OnClick чекбокса припиши UpdateButtons
вот так (только что проверил)
кнопка обзор блокируется
Код: Выделить весь код
procedure Твой_кастомный_чекбокс_OnClick(Sender: TObject);
begin


    WizardForm.GroupEdit.Enabled := not TCheckBox(Sender).Checked;
    WizardForm.GroupBrowseButton.Enabled := not TCheckBox(Sender).Checked;

    UpdateButtons();

end;
=========================================================================================

Batistas,
смотри
El Sanchez вынес создание страниц в процедуры, которые выполняются в InitializeWizard
процедуры выполняется между логическими скобками begin и end
те сверху вниз (от начала до конца) и никак иначе
а теперь смотри в каком порядке они - процедуры - у тебя перечислены:

CreateNickNamePage;
CreateDownloadDirPage; -- сначала эта
CreateTempDownloadDirPage; -- потом эта
CreateShareDirPage;
CreateAboutInfoButton;
CreateURLlink;

а теперь посмотри на функцию создания страницы в процедуре CreateTempDownloadDirPage
первой настройкой (выделил зелёным) идёт страница после которой должна создаться эта - TempDownloadDirPage
TempDownloadDirPage := CreateInputDirPage(ShareDirPage.ID, ...
те ты указывать в функции создания страницы создать страницу такую-то после ещё не созданной но которая будет создана следующей "по списку"
компилятор выполняет код сверху вниз, те ты понимаешь, что так нельзя и ошибка неизбежна?

также у тебя есть некоторые недочёты в коде
например в событии OnChange элемента TStartMenuFolderTreeView, те при изменении директории (взаимодействии с деревом папок меню "Пуск")
WizardForm.GroupEdit.Text:= AddBackslash(TFV.Directory)+'MyApp';
в конце дописывается "MyApp"
это явно не было твоей целью
тоже самое касается и TFolderTreeView

позволил себе всё вышеописанное исправить и записать грамотнее
результат:
читать дальше »
Код: Выделить весь код
 

//ANSI Version
#define MyAppName "Synergetic & MaxiRu DC-P2P Pack"
#define MyAppVersion "1.0.0"
#define MyAppPublisher "-=Batista=-"
#define MyAppURL "http://synergetic-hub.org/"
#define MyAppExeName "ApexDC-s16_4.exe"
#define StartupIcon "Запускать при старте Windows"

[Setup]
AppId={{E20E5BAA-70B0-4EE4-8D27-B1E312B1C083}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
AppVerName={#MyAppName} {#MyAppVersion}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName={pf}\{#MyAppName}
DefaultGroupName={#MyAppName}
AllowNoIcons=yes
OutputDir=Output
OutputBaseFilename=Synergetic & MaxiRu DC-P2P Pack 1.0.0

Compression=lzma2
SolidCompression=yes
//ArchitecturesInstallIn64BitMode=x64

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

[CustomMessages]
russian.NickNamePageCaption=Информация о пользователе
russian.NickNamePageDescription=Какой ник у Вас в DC++?
russian.NickNamePageSubcaption=Укажите ник и нажмите "Далее"%n%nРекомендуемые символы в нике:%n0123456789%nabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ%n()+=[]^_{{})"%nАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдеёжзийклмнопрстуфхцчшщъыьэюя
russian.NickNamePageEditName=Имя пользователя в DC++:
russian.DownloadDirPageCaption=Выбор каталога для загрузки
russian.DownloadDirPageDescription=Где будут храниться загружаемые файлы?
russian.DownloadDirPageSubcaption=Укажите каталог для скачки (при старте он будет автоматически "расшарен")
russian.ShareDirPageCaption=Выбор каталога для общего доступа
russian.ShareDirPageDescription=Где будут храниться файлы для общего доступа?
russian.ShareDirPageSubcaption=Укажите каталог для файлов общего доступа
russian.TempDownloadDirCaption=Выбор каталога для временных файлов
russian.TempDownloadDirPageDescription=Где будут храниться временные файлы?
russian.TempDownloadDirPageSubcaption=Укажите каталог для временных файлов

[Tasks]
Name: desktopicon; Description: {cm:CreateDesktopIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: unchecked
Name: quicklaunchicon; Description: {cm:CreateQuickLaunchIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: unchecked; OnlyBelowVersion: 0,6.1
Name: quicklaunchicon7; Description: {cm:CreateQuickLaunchIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: unchecked; MinVersion: 0,6.1
Name: startupicon; Description: {#StartupIcon}; GroupDescription: {cm:AdditionalIcons}

[Files]
Source: ApexDC-s16_4.exe; DestDir: "{app}"; Flags: ignoreversion; AfterInstall: Progress()
Source: AVIPreview.exe; DestDir: "{app}"; Flags: ignoreversion; AfterInstall: Progress()
Source: PinToTasckbar.vbs; DestDir: {tmp}; Flags: deleteafterinstall; AfterInstall: Progress()
Source: Synergetic DC++ Community.url; DestDir: "{app}"; Flags: ignoreversion; AfterInstall: Progress()
Source: Новые возможности клиента ApexDC++.txt; DestDir: "{app}"; Flags: ignoreversion; AfterInstall: Progress()
Source: EmoPacks\*; DestDir: {app}\EmoPacks\; AfterInstall: Progress();
Source: EmoPacks\Images\*;DestDir: {app}\EmoPacks\Images\;AfterInstall: Progress();
Source: EmoPacks\RadoX-Pack\*;DestDir: {app}\EmoPacks\RadoX-Pack\; AfterInstall: Progress();
Source: EmoPacks\Skype\*;DestDir: {app}\EmoPacks\Skype\; AfterInstall: Progress();
Source: EmoPacks\WAJIM-MegaEmoPack\*;DestDir: {app}\EmoPacks\WAJIM-MegaEmoPack\; AfterInstall: Progress();
Source: Settings\*; DestDir: {app}\Settings\; AfterInstall: Progress();
Source: Sounds\*; DestDir: {app}\Sounds\; AfterInstall: Progress();
Source: Themes\*; DestDir: {app}\Themes\; AfterInstall: Progress();
Source: Toolbars\*; DestDir: {app}\Toolbars; AfterInstall: Progress();

[Icons]
Name: {group}\{#MyAppName}; Filename: {app}\{#MyAppExeName}
Name: {group}\{cm:ProgramOnTheWeb,{#MyAppName}}; Filename: {#MyAppURL}
Name: {group}\{cm:UninstallProgram,{#MyAppName}}; Filename: {uninstallexe}
Name: {commondesktop}\{#MyAppName}; Filename: {app}\{#MyAppExeName}; Tasks: desktopicon
Name: {userstartup}\{#MyAppName}; Filename: {app}\{#MyAppExeName}; Tasks: startupicon

[Run]
Filename: {app}\{#MyAppExeName}; Description: {cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}; Flags: nowait postinstall skipifsilent
Filename: {#MyAppURL}; Verb: open; Description: Посетить сайт проекта Synergetic & MaxiRu; Flags: postinstall shellexec skipifsilent
Filename: {tmp}\PinToTasckbar.vbs; Parameters: """{app}\ApexDC-s16_4.exe"""; Flags: shellexec; Tasks: quicklaunchicon7

[code]
var
NickNamePage: TInputQueryWizardPage;
DownloadDirPage, ShareDirPage, TempDownloadDirPage: TInputDirWizardPage;
// TempDownloadDirPage: TInputDirWizardPage;
AboutInfoButton: TButton;
URLlink: TLabel;

procedure CreateDCPlusPlus(Filename: String);
var
objXMLDoc: Variant;
begin
try
objXMLDoc := CreateOleObject('Microsoft.XMLDOM');
except
ShowExceptionMessage;
Exit;
end;
objXMLDoc.async := False;
objXMLDoc.AppendChild(objXMLDoc.createProcessingInstruction('xml', 'version="1.0" encoding="utf-8" standalone="yes"'));
objXMLDoc.AppendChild(objXMLDoc.createNode(1, 'DCPlusPlus', ''));

//settings node
objXMLDoc.selectSingleNode('DCPlusPlus').AppendChild(objXMLDoc.createElement('Settings'));

//nick node
objXMLDoc.selectSingleNode('//DCPlusPlus/Settings').AppendChild(objXMLDoc.createElement('Nick'));
objXMLDoc.selectSingleNode('//DCPlusPlus/Settings/Nick').setAttribute('type', 'string');
objXMLDoc.selectSingleNode('//DCPlusPlus/Settings/Nick').text := NickNamePage.Values[0];

//downdir node
objXMLDoc.selectSingleNode('//DCPlusPlus/Settings').AppendChild(objXMLDoc.createElement('DownloadDirectory'));
objXMLDoc.selectSingleNode('//DCPlusPlus/Settings/DownloadDirectory').setAttribute('type', 'string');
objXMLDoc.selectSingleNode('//DCPlusPlus/Settings/DownloadDirectory').text := DownloadDirPage.Values[0];

//russian xml
if FileExists(ExpandConstant('{app}\Settings\Russian.xml')) then
begin
objXMLDoc.selectSingleNode('//DCPlusPlus/Settings').AppendChild(objXMLDoc.createNode(1, 'LanguageFile', ''));
objXMLDoc.selectSingleNode('//DCPlusPlus/Settings/LanguageFile').text :=(ExpandConstant('{app}\Settings\Russian.xml'));
end;

if FileExists(ExpandConstant('{app}\Sounds\PrivateMessage.wav')) then
begin
objXMLDoc.selectSingleNode('//DCPlusPlus/Settings').AppendChild(objXMLDoc.createNode(1, 'BeepFile', ''));
objXMLDoc.selectSingleNode('//DCPlusPlus/Settings/BeepFile').text :=(ExpandConstant('{app}\Sounds\PrivateMessage.wav'));
end;

if FileExists(ExpandConstant('{app}\Sounds\DownloadBegins.wav')) then
begin
objXMLDoc.selectSingleNode('//DCPlusPlus/Settings').AppendChild(objXMLDoc.createNode(1, 'BeginFile', ''));
objXMLDoc.selectSingleNode('//DCPlusPlus/Settings/BeginFile').text :=(ExpandConstant('{app}\Sounds\DownloadBegins.wav'));
end;

if FileExists(ExpandConstant('{app}\Sounds\DownloadFinished.wav')) then
begin
objXMLDoc.selectSingleNode('//DCPlusPlus/Settings').AppendChild(objXMLDoc.createNode(1, 'FinishedFile', ''));
objXMLDoc.selectSingleNode('//DCPlusPlus/Settings/FinishedFile').text :=(ExpandConstant('{app}\Sounds\DownloadFinished.wav'));
end;

if FileExists(ExpandConstant('{app}\Sounds\AltSourceAdded.wav')) then
begin
objXMLDoc.selectSingleNode('//DCPlusPlus/Settings').AppendChild(objXMLDoc.createNode(1, 'SourceFile', ''));
objXMLDoc.selectSingleNode('//DCPlusPlus/Settings/SourceFile').text :=(ExpandConstant('{app}\Sounds\AltSourceAdded.wav'));
end;

if FileExists(ExpandConstant('{app}\Sounds\UploadFinished.wav')) then
begin
objXMLDoc.selectSingleNode('//DCPlusPlus/Settings').AppendChild(objXMLDoc.createNode(1, 'UploadFile', ''));
objXMLDoc.selectSingleNode('//DCPlusPlus/Settings/UploadFile').text :=(ExpandConstant('{app}\Sounds\UploadFinished.wav'));
end;

if FileExists(ExpandConstant('{app}\Sounds\FakerFound.wav')) then
begin
objXMLDoc.selectSingleNode('//DCPlusPlus/Settings').AppendChild(objXMLDoc.createNode(1, 'FakerFile', ''));
objXMLDoc.selectSingleNode('//DCPlusPlus/Settings/FakerFile').text :=(ExpandConstant('{app}\Sounds\FakerFound.wav'));
end;

if FileExists(ExpandConstant('{app}\Sounds\MyNickInMainChat.wav')) then
begin
objXMLDoc.selectSingleNode('//DCPlusPlus/Settings').AppendChild(objXMLDoc.createNode(1, 'ChatNameFile', ''));
objXMLDoc.selectSingleNode('//DCPlusPlus/Settings/ChatNameFile').text :=(ExpandConstant('{app}\Sounds\MyNickInMainChat.wav'));
end;

if FileExists(ExpandConstant('{app}\Sounds\FileCorrupted.wav')) then
begin
objXMLDoc.selectSingleNode('//DCPlusPlus/Settings').AppendChild(objXMLDoc.createNode(1, 'SoundTTH', ''));
objXMLDoc.selectSingleNode('//DCPlusPlus/Settings/SoundTTH').text :=(ExpandConstant('{app}\Sounds\FileCorrupted.wav'));
end;

if FileExists(ExpandConstant('{app}\Sounds\UnhandledException.wav')) then
begin
objXMLDoc.selectSingleNode('//DCPlusPlus/Settings').AppendChild(objXMLDoc.createNode(1, 'SoundException', ''));
objXMLDoc.selectSingleNode('//DCPlusPlus/Settings/SoundException').text :=(ExpandConstant('{app}\Sounds\UnhandledException.wav'));
end;

if FileExists(ExpandConstant('{app}\Sounds\HubConnected.wav')) then
begin
objXMLDoc.selectSingleNode('//DCPlusPlus/Settings').AppendChild(objXMLDoc.createNode(1, 'SoundHubConnected', ''));
objXMLDoc.selectSingleNode('//DCPlusPlus/Settings/SoundHubConnected').text :=(ExpandConstant('{app}\Sounds\HubConnected.wav'));
end;

if FileExists(ExpandConstant('{app}\Sounds\HubDisconnected.wav')) then
begin
objXMLDoc.selectSingleNode('//DCPlusPlus/Settings').AppendChild(objXMLDoc.createNode(1, 'SoundHubDisconnected', ''));
objXMLDoc.selectSingleNode('//DCPlusPlus/Settings/SoundHubDisconnected').text :=(ExpandConstant('{app}\Sounds\HubDisconnected.wav'));
end;

if FileExists(ExpandConstant('{app}\Sounds\FavUser.wav')) then
begin
objXMLDoc.selectSingleNode('//DCPlusPlus/Settings').AppendChild(objXMLDoc.createNode(1, 'SoundFavUserOnline', ''));
objXMLDoc.selectSingleNode('//DCPlusPlus/Settings/SoundFavUserOnline').text :=(ExpandConstant('{app}\Sounds\FavUser.wav'));
end;

if FileExists(ExpandConstant('{app}\Sounds\FavUserDisconnected.wav')) then
begin
objXMLDoc.selectSingleNode('//DCPlusPlus/Settings').AppendChild(objXMLDoc.createNode(1, 'SoundFavUserOffline', ''));
objXMLDoc.selectSingleNode('//DCPlusPlus/Settings/SoundFavUserOffline').text :=(ExpandConstant('{app}\Sounds\FavUserDisconnected.wav'));
end;

if FileExists(ExpandConstant('{app}\EmoPacks\WAJIM-MegaEmoPack v1.2c FiNAL.xml')) then
begin
objXMLDoc.selectSingleNode('//DCPlusPlus/Settings').AppendChild(objXMLDoc.createNode(1, 'EmoticonsFile', ''));
objXMLDoc.selectSingleNode('//DCPlusPlus/Settings/EmoticonsFile').text :='WAJIM-MegaEmoPack v1.2c FiNAL';
end;

//share node
objXMLDoc.selectSingleNode('DCPlusPlus').AppendChild(objXMLDoc.createElement('Share'));
objXMLDoc.selectSingleNode('//DCPlusPlus/Share').AppendChild(objXMLDoc.createElement('Directory'));
objXMLDoc.selectSingleNode('//DCPlusPlus/Share/Directory').setAttribute('Virtual', ExtractFileName(RemoveBackSlash(ShareDirPage.Values[0])));
objXMLDoc.selectSingleNode('//DCPlusPlus/Share/Directory').text := ShareDirPage.Values[0];

//tempdir node
// objXMLDoc.selectSingleNode('//DCPlusPlus/Settings').AppendChild(objXMLDoc.createElement('TempDownloadDir'));
// objXMLDoc.selectSingleNode('//DCPlusPlus/Settings/TempDownloadDir').setAttribute('type', 'string');
// objXMLDoc.selectSingleNode('//DCPlusPlus/Settings/TempDownloadDir').text := TempDownloadDirPage.Values[0];

//prevapps node
objXMLDoc.selectSingleNode('DCPlusPlus').AppendChild(objXMLDoc.createElement('PreviewApps'));
objXMLDoc.selectSingleNode('//DCPlusPlus/PreviewApps').AppendChild(objXMLDoc.createElement('Application'));
objXMLDoc.selectSingleNode('//DCPlusPlus/PreviewApps/Application').setAttribute('Name', 'AVI Preview');
objXMLDoc.selectSingleNode('//DCPlusPlus/PreviewApps/Application').setAttribute('Application', ExpandConstant('{app}\AVIPreview.exe'));
objXMLDoc.selectSingleNode('//DCPlusPlus/PreviewApps/Application').setAttribute('Arguments', '%[file]');
objXMLDoc.selectSingleNode('//DCPlusPlus/PreviewApps/Application').setAttribute('Extension', 'avi;divx;mpg;mpeg;vob');

//Description
objXMLDoc.selectSingleNode('//DCPlusPlus/Settings').AppendChild(objXMLDoc.createNode(1, 'Description', ''));
objXMLDoc.selectSingleNode('//DCPlusPlus/Settings/Description').text :='[Synergetic & MaxiRu DC-P2P Pack 1.0.0]';

//BanMessage
objXMLDoc.selectSingleNode('//DCPlusPlus/Settings').AppendChild(objXMLDoc.createNode(1, 'BanMessage', ''));
objXMLDoc.selectSingleNode('//DCPlusPlus/Settings/BanMessage').text :='Вы забанены. Расшарьте больше файлов или откройте больше слотов!';

//UploadSpeed
objXMLDoc.selectSingleNode('//DCPlusPlus/Settings').AppendChild(objXMLDoc.createNode(1, 'UploadSpeed', ''));
objXMLDoc.selectSingleNode('//DCPlusPlus/Settings/UploadSpeed').text :='100';

objXMLDoc.save(Filename);
end;

function ReadDCPlusPlus(Filename, Node, Default: String): String;
var
objXMLDoc: Variant;
begin
Result := Default;
if not FileExists(Filename) then Exit;
try
objXMLDoc := CreateOleObject('Microsoft.XMLDOM'); //или другой объект
objXMLDoc.load(Filename);
objXMLDoc.async := False;
if objXMLDoc.parseError.errorCode <> 0 then Exit;
Result := objXMLDoc.selectSingleNode(Node).text;
except
ShowExceptionMessage;
Exit;
end;
end;

procedure CreateNickNamePage;
begin
NickNamePage := CreateInputQueryPage(wpSelectTasks, ExpandConstant('{cm:NickNamePageCaption}'), ExpandConstant('{cm:NickNamePageDescription}'), ExpandConstant('{cm:NickNamePageSubcaption}'));
NickNamePage.Add(ExpandConstant('{cm:NickNamePageEditName}'), False);
NickNamePage.Values[0] := ReadDCPlusPlus(WizardDirValue + '\Settings\DCPlusPlus.xml', '//DCPlusPlus/Settings/Nick', '');
end;

procedure CreateDownloadDirPage;
begin
DownloadDirPage := CreateInputDirPage(NickNamePage.ID, ExpandConstant('{cm:DownloadDirPageCaption}'), ExpandConstant('{cm:DownloadDirPageDescription}'), ExpandConstant('{cm:DownloadDirPageSubcaption}'), False, 'Новая папка');
DownloadDirPage.Add('');
DownloadDirPage.Values[0] := ReadDCPlusPlus(WizardDirValue + '\Settings\DCPlusPlus.xml', '//DCPlusPlus/Settings/DownloadDirectory', WizardDirValue + '\Downloads-P2P');
end;

procedure CreateShareDirPage;
begin
ShareDirPage := CreateInputDirPage(DownloadDirPage.ID, ExpandConstant('{cm:ShareDirPageCaption}'), ExpandConstant('{cm:ShareDirPageDescription}'), ExpandConstant('{cm:ShareDirPageSubcaption}'), False, 'Новая папка');
ShareDirPage.Add('');
ShareDirPage.Values[0] := ReadDCPlusPlus(WizardDirValue + '\Settings\DCPlusPlus.xml', '//DCPlusPlus/Share/Directory', '');
end;

procedure CreateTempDownloadDirPage;
begin
 TempDownloadDirPage := CreateInputDirPage(ShareDirPage.ID, ExpandConstant('{cm:TempDownloadDirCaption}'), ExpandConstant('{cm:TempDownloadDirPageDescription}'), ExpandConstant('{cm:TempDownloadDirPageSubcaption}'), False, 'Новая папка');
 TempDownloadDirPage.Add('');
 TempDownloadDirPage.Values[0] := ReadDCPlusPlus(WizardDirValue + '\Settings\DCPlusPlus.xml', '//DCPlusPlus/Settings/TempDownloadDir', WizardDirValue + '\Temp');
end;                                         

procedure ControlOnClick(Sender: TObject);
var
ResultCode: Integer;
begin
if Sender is TButton then MsgBox('© -=Batista=-, 2012', mbInformation, MB_OK);
if Sender is TLabel then ShellExec('open', '{#MyAppURL}', '', '', SW_SHOW, ewNoWait, ResultCode);
end;

procedure CreateAboutInfoButton;
begin
AboutInfoButton := TButton.Create(WizardForm);
with AboutInfoButton do begin
Parent := WizardForm;
SetBounds(WizardForm.ClientWidth - WizardForm.CancelButton.Left - WizardForm.CancelButton.Width, WizardForm.CancelButton.Top, WizardForm.CancelButton.Width, WizardForm.CancelButton.Height);
Caption := 'Автор...';
OnClick := @ControlOnClick;
end;
end;

procedure CreateURLlink;
begin
URLlink := TLabel.Create(WizardForm);
with URLlink do begin
Parent := WizardForm;
Left := 2*AboutInfoButton.Left + AboutInfoButton.Width;
Top := AboutInfoButton.Top + AboutInfoButton.Height - Height;
Caption := '{#MyAppURL}';
Font.Color := clBlue;
Font.Style := [fsUnderline];
Cursor := crHand;
OnClick := @ControlOnClick;
end;
end;

//function SetWindowTheme(hwnd: HWND; pszSubAppName: pchar; pszSubIdList: pchar): Longint; external 'SetWindowTheme@uxtheme.dll stdcall delayload';


var
  ProgressLabel, SizeLabel: TLabel;
  TDV: TFolderTreeView;
  TFV: TStartMenuFolderTreeView;

procedure TFV_and_TDV_OnChange_and_else(Sender: TObject);
begin
  if Sender is TStartMenuFolderTreeView then WizardForm.GroupEdit.Text := AddBackslash(TStartMenuFolderTreeView(Sender).Directory) + '{#SetupSetting("DefaultGroupName")}';
  if Sender is TFolderTreeView then WizardForm.DirEdit.Text:= AddBackslash(TFolderTreeView(Sender).Directory) + '{#MyAppName}';
  
  if Sender is TCheckBox then
  begin
    TFV.Enabled := not TCheckBox(Sender).Checked;
    WizardForm.GroupEdit.Enabled := not TCheckBox(Sender).Checked;
    WizardForm.GroupBrowseButton.Enabled := not TCheckBox(Sender).Checked;
  end;
end;




procedure Progress();
var
  size: integer;
begin
  with WizardForm.ProgressGauge do
  ProgressLabel.Caption:= IntToStr((Position-Min)/((Max - Min)/100)) + '%';
  FileSize(ExpandConstant(CurrentFileName), size);
  SizeLabel.Caption:= IntToStr(size) + ' бт';
end;

procedure InitializeWizard();
begin
  CreateNickNamePage;
  CreateDownloadDirPage;
  CreateShareDirPage;
  CreateTempDownloadDirPage;
  CreateAboutInfoButton;
  CreateURLlink;
  
  WizardForm.NoIconsCheck.OnClick := @TFV_and_TDV_OnChange_and_else;

  TDV := TFolderTreeView.Create(WizardForm);
  with TDV do
  begin
    Top:= WizardForm.DirEdit.Top + ScaleY(28);
    Width:=  ScaleX(417);
    Height:= ScaleY(100);
    OnChange := @TFV_and_TDV_OnChange_and_else;
    Parent := WizardForm.SelectDirPage;
  end;

  TFV:= TStartMenuFolderTreeView.Create(WizardForm);
  with TFV do
  begin
    Top:= WizardForm.GroupEdit.Top + ScaleY(28);
    Width:=  ScaleX(417);
    Height:= ScaleY(100);
    SetPaths(ExpandConstant('{userprograms}'),ExpandConstant('{commonprograms}'),ExpandConstant('{userstartup}'),ExpandConstant('{commonstartup}'));
    OnChange:= @TFV_and_TDV_OnChange_and_else;
    Parent:= WizardForm.SelectProgramGroupPage;
  end;


  ProgressLabel := TLabel.Create(WizardForm);
  with ProgressLabel do
  begin
    Top := WizardForm.ProgressGauge.Top + WizardForm.ProgressGauge.Height + ScaleY(8);
    Left:= WizardForm.ProgressGauge.Left + WizardForm.ProgressGauge.Width/2 - ScaleX(8);
    AutoSize := True;
    Parent := WizardForm.InstallingPage;
  end;

  SizeLabel := TLabel.Create(WizardForm);
  with SizeLabel do
  begin
    Top := WizardForm.ProgressGauge.Top + WizardForm.ProgressGauge.Height + ScaleY(8);
    Left:= WizardForm.ProgressGauge.Left;
    AutoSize := True;
    Parent := WizardForm.InstallingPage;
  end;
end;


procedure CurPageChanged(CurPageID: Integer);
begin
  case CurPageID of
    wpSelectProgramGroup: TFV.Enabled := WizardForm.GroupBrowseButton.Enabled; // это если первый раз не создавать значки то при повторном запуске инсталл возьмёт настройку из реестра и заблокирует эдит и кнопку а TFV Нет и чтоб это глупо не смотрелось делаем такую проерку
  end;
end;


procedure CurStepChanged(CurStep: TSetupStep);
begin
  case CurStep of
     ssPostInstall: CreateDCPlusPlus(ExpandConstant('{app}\Settings\DCPlusPlus.xml'));
  end;
end;


и на будущее убирай свой код в тег [more][code] твой код [/code][/more] тк без отступов код просматривать тяжело

====================================================================

El Sanchez,
спасибо
не знал про такую манеру написания if Sender is TStartMenuFolderTreeView ... до недавних пор
это в немалой для меня мере развязывает руки
раньше писал
case TButton(Sender) или case TLabel(Sender).Tag of

Последний раз редактировалось Johny777, 10-08-2012 в 01:31.

Это сообщение посчитали полезным следующие участники:

Отправлено: 00:57, 10-08-2012 | #584


Новый участник


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

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


Johny777, честно сказать, я так и не понял, чем мой код в плане tempdownloaddir отличается от твоего...А то, что InitializeWizard CreateTempDownloadDirPage не на нужно месте - я в курсе, не зря же я её заслэшевал. Сам посуди - все процедуры в InitializeWizard идут по порядку, хотя я с таким же успехом мог ставить их вперед, но я же почему-то этого не сделал. Инсталятор, кстати, выдает ошибку. Так что вопрос актуален. А в плане остального кода - не я его писал. Я брал готовые примеры и вручную прикручивал к скрипту от El Sanchez'a . Самое главное, что это приводило к нужному результату. А длиннее\кароче код это не имеет особого значения. "TStartMenuFolderTreeView" я брал из готового примера древа дисков и папок:

читать дальше »



[Setup]
AppName=MyApp
AppVerName=MyApp
DefaultDirname={pf}\MyApp

[code]
var
TDV: TFolderTreeView;
TFV: TStartMenuFolderTreeView;

procedure TDVOnChange(Sender: TObject);
begin
WizardForm.DirEdit.Text:= AddBackslash(TDV.Directory)+'MyApp';
end;

procedure TFVOnChange(Sender: TObject);
begin
WizardForm.GroupEdit.Text:= AddBackslash(TFV.Directory)+'MyApp';
end;

procedure InitializeWizard();
begin
TDV:= TFolderTreeView.Create(WizardForm);
TDV.Top:= WizardForm.DirEdit.Top+28;
TDV.Width:= 417;
TDV.Height:= 100;
TDV.OnChange:= @TDVOnChange;
TDV.Parent:= WizardForm.SelectDirPage;


TFV:= TStartMenuFolderTreeView.Create(WizardForm);
TFV.Top:= WizardForm.GroupEdit.Top+28;
TFV.Width:= 417;
TFV.Height:= 100;
TFV.SetPaths(ExpandConstant('{userprograms}'),ExpandConstant('{commonprograms}'),ExpandConstant('{us erstartup}'),ExpandConstant('{commonstartup}'));
TFV.OnChange:= @TFVOnChange;
TFV.Parent:= WizardForm.SelectProgramGroupPage;
end;



Последний раз редактировалось Batistas, 10-08-2012 в 02:08.


Отправлено: 01:54, 10-08-2012 | #585


Новый участник


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

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


Изображения
Тип файла: png Безымянный.png
(447.7 Kb, 19 просмотров)

люди мне дали клёвый скритп но там вот такая ошибка http://forum.oszone.net/attachment.p...1&d=1344553184 и незнаю что делать всё облазил вроде всё нормально а не компилица скрипт. поогите вот код ботвы

неполучилось скинуть скрипт вообщем вот сам файл http://rghost.ru/39688804

Отправлено: 03:02, 10-08-2012 | #586


Новый участник


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

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


Johny777, правильный порядок инициализации был испорчен, ибо я перебирал последовательности, ибо только после добавления криэйттемпдир появляется ошибка. Именно после нее, хотя делается все по аналогии. А толку от правильного порядка инициализации? Он не является причиной ошибки. Ты можешь прямо сейчас его испортить - инсталятор будет компилироваться. Максимум, что будет - компонент, который находится не на своем месте не будет работать. Другой вопрос, что даже при правильном порядке ошибка вылетает. И вылетает ошибка на 253 строку - http://s2.ipicture.ru/uploads/20120810/U3w46t5i.png Заслешиваем CreateTempDownloadDirPage и вуаля - инсталятор компилируется без единой ошибки.

Отправлено: 03:03, 10-08-2012 | #587


Аватара для YURSHAT

Старожил


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

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


Batistas, а я ведь вам на ru-board готовый скрипт выложил, зря только писал

-------
Если я знаю, что знаю мало, я добьюсь того, чтобы знать больше... В.И. Ленин
Krinkels.org - сжатие данных и создание инсталляторов

Это сообщение посчитали полезным следующие участники:

Отправлено: 06:00, 10-08-2012 | #588


Аватара для El Sanchez

Ветеран


Contributor


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

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


Цитата Batistas:
Мой неправильный код заслешован. Не подскажешь как правильно сделать? »
  • В теле процедуры CreateTempDownloadDirPage создание страницы TempDownloadDirPage сделано после ShareDirPage, так что Johny777 прав - в InitializeWizard CreateTempDownloadDirPage должен идти после CreateShareDirPage.
  • В CreateDCPlusPlus не исправлены ноды как я писал в исправленном скрипте (settings node, nick node, downdir node, share node, tempdir node, prevapps node)
  • После правок переместить ноды tempdir node, Description, BanMessage, UploadSpeed выше ноды share node

Отправлено: 09:32, 10-08-2012 | #589


Новый участник


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

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


YURSHAT, да я там написал, мне дня четыре никто не отвечал. На пятый день написал один "умный" и сказал, что тут альтруистов нет =\ А насчет не пригодится, это ты зря Мне все пригодится

Последний раз редактировалось Batistas, 10-08-2012 в 11:46.


Отправлено: 09:55, 10-08-2012 | #590



Компьютерный форум OSzone.net » Автоматическая установка Windows » Автоматическая установка приложений » Скрипты Inno Setup. Помощь и советы [часть 5]

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Скрипты Inno Setup. Помощь и советы [часть 4] El Sanchez Автоматическая установка приложений 2099 22-05-2012 23:16
Скрипты Inno Setup. Помощь и советы [часть 3] Serega Автоматическая установка приложений 3755 26-10-2011 17:58
[архив] Скрипты Inno Setup. Помощь и советы [часть 2] Serega Автоматическая установка приложений 2651 08-11-2010 18:34
Скрипты Inno Setup Compiler QAZAK Автоматическая установка приложений 7 15-01-2007 17:59
Inno Setup tradeukraine Вебмастеру 3 13-06-2006 20:39




 
Переход