Показать полную графическую версию : Скрипты Inno Setup. Помощь и советы [часть 5]
insombia
14-02-2013, 20:56
как убрать кнопку отмены isdone чтобы осталась дефольтная?
Nightwishh
14-02-2013, 22:38
Подскажите, как в скрипте от Johny777 (рандомный показ слайдов), сделать последовательный показ слайдов, чтобы Image_2.bmp был строго после Image_1.bmp и т.д. [Setup]
AppName=My Program
AppVerName=My Program v.1.2
DefaultDirName={pf}\My Program
[Files]
Source: Image_1.bmp; Flags: dontcopy solidbreak sortfilesbyextension nocompression
Source: Image_2.bmp; Flags: dontcopy solidbreak sortfilesbyextension nocompression
Source: Image_3.bmp; Flags: dontcopy solidbreak sortfilesbyextension nocompression
Source: {fonts}\*; DestDir: {app}; Flags: external
[ code]
const
SlidesNumber=3; //количество слайдов
SlideRenewTine=2; // задержка показа слаидов в секундах
var
SplashImage: TBitmapImage;
SlidesTimer: LongWord;
Pic: Byte;
function SetTimer(hWnd, nIDEvent, uElapse, lpTimerFunc: LongWord): LongWord; external 'SetTimer@user32.dll stdcall';
function KillTimer(hWnd, nIDEvent: LongWord): LongWord; external 'KillTimer@user32.dll stdcall';
procedure ShowRandomPics;
begin
Pic := Random(SlidesNumber);
SplashImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_' + IntToStr(Pic+1) + '.bmp'));
end;
procedure CurStepChanged(CurStep: TSetupStep);
var
z: Byte;
begin
case CurStep of
ssInstall:
begin
{ SplashImage }
SplashImage := TBitmapImage.Create(nil);
with SplashImage do
begin
SetBounds(ScaleX(0), ScaleY(0), WizardForm.MainPanel.Width, WizardForm.Bevel.Top)
Parent := WizardForm.InstallingPage;
Stretch := True;
Pic := Random(SlidesNumber);
ExtractTemporaryFile('Image_' + IntToStr(Pic+1) + '.bmp');
Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_' + IntToStr(Pic+1) + '.bmp'));
end;
WizardForm.StatusLabel.Caption := 'Распаковка слайдов ...';
for z := 1 to SlidesNumber do if not FileExists(ExpandConstant('{tmp}\Image_' + IntToStr(z) + '.bmp')) then ExtractTemporaryFile('Image_'+inttostr(z)+'.bmp');
SlidesTimer := SetTimer(WizardForm.Handle, 7, SlideRenewTine*1000, CallbackAddr('ShowRandomPics'));
end;
ssPostInstall:
begin
KillTimer(WizardForm.Handle, SlidesTimer);
SplashImage.Free;
end;
end;
end;
procedure DeInitializeSetup();
begin
KillTimer(WizardForm.Handle, SlidesTimer);
end;
Gnom_aka_Lexander
14-02-2013, 22:42
Nightwishh, както так:
procedure ShowRandomPics;
begin
Pic := Pic+1;
if Pic = SlidesNumber then Pic := 0;
SplashImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_' + IntToStr(Pic+1) + '.bmp'));
end;
Всем привет! Подскажите, пожалуйста, кто знает или кто сталкивался, на примере этого кода:function NextButtonClick(CurPage: Integer): Boolean;
var
sz:Integer;
s:string;
begin
Result:=True;
If CurPage=6 then
//Проверка присутствия определенных файлов в папке с установленной программой на странице выбора папки назначения
begin
If (FileSearch('Main.exe', ExpandConstant('{app}'))='')
or (FileSearch('Comp.dll', ExpandConstant('{app}')+'\data')='')
then
begin
s:='Извините, в директории '+ExpandConstant('{app}')+'' #13 'не обнаружены файлы, подтверждающие подлинность программы.' #13#13 'Пожалуйста, выберите правильный путь для установки обновления.';
MsgBox(s, mbError, mb_Ok);
Result:= False
end
else
//И проверка размера оригинальных файлов
begin
If FileSize(ExpandConstant('{app}')+'\Main.exe', sz)
then
begin
If sz<>270336 //Проверяемый размер в байтах
then
begin
s:='Размер установленого компонента Main.exe не соответствует.' #13#13 'Для установки обновления требуются оригинальные файлы.'; MsgBox(s, mbCriticalError, mb_Ok);
Result:= False
end else
begin
If FileSize(ExpandConstant('{app}')+'\data\Comp.dll', sz)
then
begin
If sz<>3688328
then
begin
s:='Размер установленого компонента Comp.dll не соответствует.' #13#13 ' Для установки обновления требуются оригинальные файлы.'; MsgBox(s, mbCriticalError, mb_Ok);
Result:= False
end;
end;
end;
end;
end;
end;
end;
Возможно ли как-то размер файлов считать с файла INI, а то файлы (по замыслу) должны загружаются через интернет всегда одним установщиком и размер файлов прописывать в установщике (по понятным причинам) бесмысленно.
Gnom_aka_Lexander
15-02-2013, 20:04
функция GetIniInt, возвращает целочисленное значение. записать можно с помощью функции SetIniInt. Как ими воспользоваться - нужно посмотреть в справке, мне сейчас лень чего-то, день тяжелый был.
Разобрался...
Вот, может кому пригодится:
IniFile:= 'C:\Program Files\Project\Bin\Version.ini';
if FileExists(IniFile) then begin
GetIniInt('sz', '587452145', 0, 0, 0, IniFile);
Nightwishh
16-02-2013, 02:17
Здравствуйте, можно ли изменить цвет стандартных чекбоксов в ComponentsList-е и TasksList-е через скин (почему-то NoIconsCheck меняется, а эти нет), на стиль NoIconsCheck?
EvilAlex
16-02-2013, 10:27
Доброго времени суток.
Хотел спросить, возможно ли в инно реализовать такую фишку -
EvilAlex, аналогично где-то спрашивал в 4-ой части (http://forum.oszone.net/post-1741842.html).
insombia
16-02-2013, 11:49
Dima-WAR ну в принципе можно,думаю умельцы тебе подскажут
Johny777
16-02-2013, 16:37
alert30, EvilAlex,
http://img713.imageshack.us/img713/8897/72808656.png (http://imageshack.us/photo/my-images/713/72808656.png/)
код:
[Setup]
AppName=777
AppVerName=777
DefaultDirname=C:\Program Files (x86)\Source Engine 15\common\half-life 2\platform
Compression=none
[Files]
Source: C:\Program Files (x86)\Source Engine 15\common\half-life 2\hl2\maps\*; DestDir: {app}; BeforeInstall: BetterInfo();
[code]
#ifdef UNICODE
#define A "W"
#else
#define A "A"
#endif
const
MAX_PATH = 260;
PATH_LEN = 69;
var
hInfoPath, hInfoFile: HWND;
function SetWindowText(hWnd: HWND; lpString: String): BOOL; external 'SetWindowText{#A}@user32.dll stdcall';
function PathCompactPathEx(pszOut: String; pszSrc: String; cchMax: UINT; dwFlags: DWORD): BOOL; external 'PathCompactPathEx{#A}@shlwapi.dll stdcall';
function CompactPath(const sInput: String; const iNewLen: Integer): String;
begin
SetLength(Result, MAX_PATH);
if not PathCompactPathEx(Result, sInput, iNewLen, 0) then Result := sInput;
end;
procedure BetterInfo();
var
CurrentFile: String;
begin
CurrentFile := ExpandConstant(CurrentFilename);
SetWindowText(hInfoPath, 'Директория:' + #32 + CompactPath(RemoveBackslash(ExtractFilePath(CurrentFile)), PATH_LEN));
SetWindowText(hInfoFile, StringOfChar(#32, 12) + 'Файл:' + #32 + ExtractFileName(CurrentFile));
end;
procedure InitializeWizard();
begin
with WizardForm do
begin
with TNewStaticText.Create(WizardForm) do
begin
Parent := FilenameLabel.Parent;
SetBounds(FilenameLabel.Left, ScaleY(0), ProgressGauge.Width, ScaleY(16));
hInfoPath := Handle;
AutoSize := False;
end;
with TNewStaticText.Create(WizardForm) do
begin
Parent := FilenameLabel.Parent;
SetBounds(FilenameLabel.Left, ScaleY(20), ProgressGauge.Width, ScaleY(16));
hInfoFile := Handle;
AutoSize := False;
end;
FilenameLabel.Hide;
StatusLabel.Hide;
end;
end;
==================================================================================================== ===========
Nightwishh, можно ли изменить цвет стандартных чекбоксов в ComponentsList-е и TasksList-е через скин »
нет, это неисправленный косяк скинирования!
Геморно но можно создать скроллбокс и массив радиобаттонов и чекбоксов и всё это добавлять на него, через самописную функцию, если так нужен именно чеклистбокс. Короче кастомный чеклистбокс
Nightwishh
16-02-2013, 20:17
Johny777, Ясно, вообщем трогать я это не буду :-) спасибо.
И последний вопрос. Можно ли запустить инсталл только один раз, т.е. при запущеном setup.exe нельзя было запустить его ещё раз и выдовалось сообщение, типо "Программа запущена". Спасибо!!!
Gnom_aka_Lexander
16-02-2013, 21:37
Nightwishh, в секции сетап есть параметры мьютекса, которые для этого и служат. почитай про них в справке. еще в коде есть функции для работы с мьютексами.
Как к стандартному файлу unins000.exe прикрутить свою иконку? Именно свою, а не ту, что имеет исполняемый файл.
Знаю, как это делается через секцию [Icons], но мне это не надо. Точнее, не нужен unins000.exe в меню Пуск.
Где-то было, но потерял...
dracosha
16-02-2013, 23:11
ChVL
[Setup]
UninstallIconFile={#MyAppProjectPath}\Installer\uninst.ico
В справке написано что эта функция не используется с версии 5.0, но она работает.
dracosha,
Спасибо, уже вспомнил. Сделал проще:
[Setup]
UninstallIconFile=unins.ico
В этом случае положить её надо рядом со скриптом, по аналогии с иконкой для исполняемого файла (чтоб в {app} не светились).
EvilAlex
17-02-2013, 13:40
alert30, EvilAlex,
код:
читать дальше » »
Супер, спасибо ! Но возник еще 1 вопрос, его можно к исдону сделать ?
Чтобы при распаковке арка или срепа, он отображал куда и что извлекает?
habib2302
17-02-2013, 14:43
люди.помогите мне исправить эту ошибку
Error: Custom message name may only include alphanumeric characters and/or underscores, and cannot begin with a number.
вот часть скрипта на которую он ругается
[Tasks]
Name: icons; Description: Создать Ярлыки:;
Name: icons\desktop; Description: На Рабочем Столе;
Name: icons\quicklaunchicon; Description: В Панели Задач;
Name: soft; Description: Установка Дополнительного ПО
Name: soft\msv; Description: Microsoft Visual C++
[CustomMessages]
Создать Ярлыки:=Create Shortcuts:
На Рабочем Столе=On the Desktop
В Панели Задач=In the Taskbar
Установка Дополнительного ПО=Install Additional Software
habib2302
Надо так:
[Tasks]
Name: icons; Description: {cm:CreateShortcuts};
Name: icons\desktop; Description: {cm:OntheDesktop};
Name: icons\quicklaunchicon; Description: {cm:IntheTaskbar};
Name: soft; Description: {cm:InstallAdditionalSoftware}
Name: soft\msv; Description: Microsoft Visual C++
[CustomMessages]
CreateShortcuts=Создать Ярлыки
OntheDesktop=На Рабочем Столе
IntheTaskbar=В Панели Задач
InstallAdditionalSoftware=Установка Дополнительного ПО
habib2302
17-02-2013, 16:36
saurn, оно как было на русском так и осталось.а мне нужно чтобы стало на английском
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.