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

Статус
В этой теме нельзя размещать новые ответы.

Snoopak96

Старожил
gocha
Сделать можно - но стиль текста изменить нельзя, ну или я пока не представояю как это осуществить.
KorwiN
[SOURCE="iss"]Procedure CurPageChanged(CurPageID: Integer);
if CurPageID=wpSelectDir then begin
.... тра-ля-ля
change(nil);
end;
end;[/SOURCE]
ибо путь установки не будет меняться при выборе другого, а вообще не стоит тупа копировать другие примеры, надо вкл. голову самому.
 
Последнее редактирование:

KorwiN

Новичок
gocha
Сделать можно - но стиль текста изменить нельзя, ну или я пока не представояю как это осуществить.
KorwiN
[SOURCE="iss"]Procedure CurPageChanged(CurPageID: Integer);
if CurPageID=wpSelectDir then begin
.... тра-ля-ля
change(nil);
end;
end;[/SOURCE]
ибо путь установки не будет меняться при выборе другого, а вообще не стоит тупа копировать другие примеры, надо вкл. голову самому.
вопрос на засыпку - что и откуда я скопировал???
написал на основе моих знаний паскаля и inno...
 

Shegorat

Lord of Madness
Администратор
Сделать можно - но стиль текста изменить нельзя, ну или я пока не представояю как это осуществить.
Все можно, такой код я писал для скрипта Каталистов. Распространять пока не собираюсь, если успели скачать скрипт, когда его тикун выложил - пожалуйста, можете использовать код. Вот пример того что можно сделать.
http://rghost.ru/private/36189161/541107f2df4095ec70e04e2b0e4616fd

Возможно сделать прозрачный фон TEdit ?
Теоретически можно, но очень геморройно, его придется практически вручную рисовать. Сразу говорю примера у меня нету, потом, как время будет, возможно сделаю.
 

gocha

Новичок
Короче вы меня не поняли.

Скрипт от каталистов же то что от moonlight82? Если да, то я видел, там не так релизовано тот текст как на скринах от инсталлера ГОГ.

На инсталлере ГОГ если пут установки 3-4 сымвола, то оставщийся текст идет сразу а в Каталистовом не так, вот


8.3 Гб не должно на втором строке, вот как это в ГОГовском. Там ка будто в одну Лейбл все
 

Snoopak96

Старожил
написал на основе моих знаний паскаля и inno...
Ну если это действительно так тогда пардон, но твой код всё равно не полный.
такой код я писал для скрипта Каталистов
увидел, появится время - поразбираю.
Там ка будто в одну Лейбл все
там через переменную String сделано + один модуль от Shegorat`а.
 

HandyMan

Новичок
GetTextWidth-длина текста в пикселях по канвас
DestroyRwLabel-разрушение структуры лейбла
Две фукции из скрипта каталистив
 

Stalkersof

Новичок
Такая проблемма.
Как отсечь путь для проверки наличия файлов в директории установки.
путь: {app}={pf}\GSC World Publishing\S.T.A.L.K.E.R\mods
Можно из этого пути отсечь 5 последних символа? вот так {pf}\GSC World Publishing\S.T.A.L.K.E.R
Проверка
 
Последнее редактирование:

KorwiN

Новичок
Такая проблемма.
Как отсечь путь для проверки наличия файлов в директории установки.
путь: {app}={pf}\GSC World Publishing\S.T.A.L.K.E.R\mods
Можно из этого пути отсечь 5 последних символа? вот так {pf}\GSC World Publishing\S.T.A.L.K.E.R
Проверка
тебе отсечь где надо?
в пути куда устанавливается?
т.е. при установке он должен показывать {pf}\GSC World Publishing\S.T.A.L.K.E.R
но проверять наличие в {pf}\GSC World Publishing\S.T.A.L.K.E.R\mods
так?
 

Stalkersof

Новичок
Не наоборот устанавливается в {pf}\GSC World Publishing\S.T.A.L.K.E.R\mods
А проверять наличие файлов в {pf}\GSC World Publishing\S.T.A.L.K.E.R
Фактически нужно проверить наличие файлов в папке выше чем куда ставим
 

Shegorat

Lord of Madness
Администратор
Не наоборот устанавливается в {pf}\GSC World Publishing\S.T.A.L.K.E.R\mods
А проверять наличие файлов в {pf}\GSC World Publishing\S.T.A.L.K.E.R
Фактически нужно проверить наличие файлов в папке выше чем куда ставим
Есть функция ExtractFilePath(Filename: String): String, которая обрезает символы в строке справа налево, пока не доберется до слеша.
 

Inknorth

Мимокрокодил
У механиков в репаке Skyrim видел такой алгоритм: в {app} копируются *.tak файлы, перегоняются в *.wav, и собираются в BSA-архив, причем размер BSA как у оригинального. С tak`ом все понятно, но не ясно как wav собирается в bsa? Я точно знаю, что пока для скайримовских BSA есть только распаковщик, как же тогда реализовать сборку распакованных файлов обратно в bsa? Знающие, подскажите.
 

Stalkersof

Новичок
Что то не получается. Извените не спец по кодам. Так только редактировать.
If (FileSearch('gamedata.dbc', ExpandConstant('{app}'))='')
or (FileSearch('gamedata.dbd', ExpandConstant('{app}'))='')then
путь app всегда заканчивается \mods вот кабы это удалить.
Нужно взять путь app сохранить в переменной посчитать количество символов обрезать последнии пять и использовать в коде выше
для поиска файлов. Можно как то сделать. Заранее спасибо.

PS
Вот так получилось. Может кому пригодится.
PathStr:= ExpandConstant('{app}')
StringChangeEx(PathStr, '\mods', '', True)
If (FileSearch('gamedata.dbc', PathStr)='')
or (FileSearch('gamedata.dbd', PathStr)='')then
Спасибо Kindly
 
Последнее редактирование:

Katarn

Новичок
Подскажите пожалуйста как исправить сей баг, который на скрине.

Код прилагается:
[Setup]
AppName=DisksInfoBox
AppVerName=DisksInfoBox
DefaultDirName={pf}\DisksInfoBox
DefaultGroupName=DisksInfoBox

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

[CustomMessages]
rus.DiskSpace=Список жёстких дисков и свободного места

[Files]
Source: compiler:Dll Pack\get_hw_caps.dll; Flags: dontcopy

Код:
var
  ListBox: TListBox;
  DiskListLabel,
  PercentLabel: TNewStaticText;

function GetHardDriveFreeSpace(hdd: integer): Integer; external 'hwc_GetHardDriveFreeSpace@files:get_hw_caps.dll stdcall';
function GetHardDriveName(hdd: integer): PChar; external 'hwc_GetHardDriveName@files:get_hw_caps.dll stdcall';
function GetHardDriveTotalSpace(hdd: integer): Integer; external 'hwc_GetHardDriveTotalSpace@files:get_hw_caps.dll stdcall';
function GetHardDrivesCount(): Integer; external 'hwc_GetHardDrivesCount@files:get_hw_caps.dll stdcall';

function NumToStr(Float: Extended): string;
begin
  Result:=Format('%.2n', [Float]);
  StringChange(Result, ',', '.');
  while ((Result[Length(Result)]='0') or (Result[Length(Result)]='.')) and (Pos('.',Result)>0) do SetLength(Result,Length(Result)-1);
end;

function TBorGBorMB(Float: Extended): string;
// функция определения ТБ, ГБ или МБ
begin
  if Float<1024 then Result:=NumToStr(Float)+' МБ'
  else if (Float/1024)<1024 then Result:=NumToStr(Float/1024)+' ГБ'
  else if (Float/(1024*1024))<1024 then Result:=NumToStr(Float/(1024*1024))+' ТБ'
end;

procedure CreatePageComponents;
var
  i, count: Integer;
begin
  
  DiskListLabel := TNewStaticText.Create(WizardForm);
  with DiskListLabel do
  begin
    Caption := ExpandConstant('{cm:DiskSpace}');
    Parent := WizardForm;
    AutoSize := False;
    Font.Size := 9;
    Font.Name := 'Courier New';
    SetBounds(ScaleX(40), ScaleY(175), ScaleX(300), ScaleY(15));
  end;
  
  ListBox := TListBox.Create(WizardForm);
  with ListBox do
  begin
    Parent := WizardForm;
    Font.Name := 'Fixedsys';
    Font.Size := 10;
    SetBounds(ScaleX(40), ScaleY(195), ScaleX(208), ScaleY(84));
  end;

  count:= GetHardDrivesCount();
  for i:= 0 to count - 1 do
    ListBox.Items.Add(GetHardDriveName(i)+ '  ' + IntToStr((GetHardDriveFreeSpace(i)*100) div GetHardDriveTotalSpace(i)) + '%  '+ TBorGBorMB(GetHardDriveFreeSpace(i)));

  with WizardForm.DiskSpaceLabel do
  begin
    Parent := WizardForm;
    Font.Size := 9;
    Font.Name := 'Courier New';
    SetBounds(ScaleX(200), ScaleY(357), ScaleX(445), ScaleY(15));
  end;
end;

procedure HideComponents;
begin
  WizardForm.GroupBrowseButton.Hide;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
  HideComponents;
end;

procedure InitializeWizard();
begin
  CreatePageComponents;
end;[/SPOILER]
 

ARS_23

R.I.P
Проверенный
Katarn,
ну или так. туповато, но все же)
[Setup]
AppName=DisksInfoBox
AppVerName=DisksInfoBox
DefaultDirName={pf}\DisksInfoBox
DefaultGroupName=DisksInfoBox

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

[CustomMessages]
rus.DiskSpace=Ñïèñîê æ¸ñòêèõ äèñêîâ è ñâîáîäíîãî ìåñòà

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

Код:
var
ListBox: TListBox;
DiskListLabel,
PercentLabel: TNewStaticText;

function GetHardDriveFreeSpace(hdd: integer): Integer; external 'hwc_GetHardDriveFreeSpace@files:get_hw_caps.dll stdcall';
function GetHardDriveName(hdd: integer): PChar; external 'hwc_GetHardDriveName@files:get_hw_caps.dll stdcall';
function GetHardDriveTotalSpace(hdd: integer): Integer; external 'hwc_GetHardDriveTotalSpace@files:get_hw_caps.dll stdcall';
function GetHardDrivesCount(): Integer; external 'hwc_GetHardDrivesCount@files:get_hw_caps.dll stdcall';

function NumToStr(Float: Extended): string;
begin
Result:=Format('%.2n', [Float]);
StringChange(Result, ',', '.');
while ((Result[Length(Result)]='0') or (Result[Length(Result)]='.')) and (Pos('.',Result)>0) do SetLength(Result,Length(Result)-1);
end;

function TBorGBorMB(Float: Extended): string;
// ôóíêöèÿ îïðåäåëåíèÿ ÒÁ, ÃÁ èëè ÌÁ
begin
if Float<1024 then Result:=NumToStr(Float)+' ÌÁ'
else if (Float/1024)<1024 then Result:=NumToStr(Float/1024)+' ÃÁ'
else if (Float/(1024*1024))<1024 then Result:=NumToStr(Float/(1024*1024))+' ÒÁ'
end;

procedure CreatePageComponents;
var
i, count: Integer;
begin

DiskListLabel := TNewStaticText.Create(WizardForm);
with DiskListLabel do
begin
Caption := ExpandConstant('{cm:DiskSpace}');
Parent := WizardForm;
AutoSize := False;
Font.Size := 9;
Font.Name := 'Courier New';
SetBounds(ScaleX(40), ScaleY(175), ScaleX(300), ScaleY(15));
end;

ListBox := TListBox.Create(WizardForm);
with ListBox do
begin
Parent := WizardForm;
Font.Name := 'Fixedsys';
Font.Size := 10;
SetBounds(ScaleX(40), ScaleY(195), ScaleX(208), ScaleY(84));
end;

count:= GetHardDrivesCount();
for i:= 0 to count - 1 do
ListBox.Items.Add(GetHardDriveName(i)+ ' ' + IntToStr((GetHardDriveFreeSpace(i)*100) div GetHardDriveTotalSpace(i)) + '% '+ TBorGBorMB(GetHardDriveFreeSpace(i)));

with WizardForm.DiskSpaceLabel do
begin
Parent := WizardForm;
Font.Size := 9;
Font.Name := 'Courier New';
SetBounds(ScaleX(200), ScaleY(357), ScaleX(445), ScaleY(15));
end;
end;

procedure HideComponents;
begin
DiskListLabel.Hide;
ListBox.Hide;
WizardForm.GroupBrowseButton.Hide;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
HideComponents;
if CurPageID = wpSelectDir then
  begin
  DiskListLabel.Show;
  ListBox.Show;
  end;
end;

procedure InitializeWizard();
begin
CreatePageComponents;
end;
[/SPOILER]
 

YURSHAT

Тех. админ
Администратор
 

Gooodziila

Новичок
Мне нужно перегнать звуки используя ISDone...нужно перегнать звуки чтобы кодек у них был raw а разширение у выходных файлов .wip ...дайте пожалусто код на ети действия (через командную строку это делается так: oggdec.exe --raw sound.ogg --output sound.wip)
 

Snoopak96

Старожил
Gooodziila

if not FileSearchInit(true) then break; //Поиск в под кталогах
if not ISArcExtract ( 0, 0, ExpandConstant('{src}\audio.arc'), ExpandConstant('{app}\main'), '', false, '', '', ExpandConstant('{app}'), notPCFonFLY {PCFonFLY}) then break;

FindHandle1:=ISFindFiles(0,ExpandConstant('{app}\*.ogg'),ColFiles1);
ExecError:=false;
while not ExecError and ISPickFilename(FindHandle1,ExpandConstant('{app}\'),CurIndex1,true) do begin
InFilePath:=ISGetName(0);
OutFileName:=ISGetName(1)+'.wip';
ExecError:=not ISExec(0, 0, 0, ExpandConstant('{tmp}\oggdec.exe'), '--raw "'+InFilePath+'" --output "'+OutFileName+'"',ExtractFilePath(OutFileName),OutFileName,false);
end;
ISFindFree(FindHandle1);
if ExecError then break;

P.S. Просьба она должна быть просьбой, а не так "мне надо и всё на этом".
 
Последнее редактирование:
Статус
В этой теме нельзя размещать новые ответы.
Сверху