FileForums

FileForums (https://fileforums.com/index.php)
-   Conversion Tutorials (https://fileforums.com/forumdisplay.php?f=55)
-   -   INNO TROUBLESHOOT - Questions Here (https://fileforums.com/showthread.php?t=93193)

Cesar82 10-03-2021 12:34

Does anyone know any way to send a text from one Inno Setup executable to another?
Similar to the SendMessage function.

Is there any way to use WM_COPYDATA with SendMessage in Inno Setup?
It is not possible to configure WindowProc without pointers in innoSetup (It is not possible to type for TCopyDataStruct).

Ele 18-03-2021 01:02

Preprocessor Issue: Inno Setup
 
I've a problem. How to fix this? :confused:

https://i.ibb.co/Q6b8bbv/Screenshot-...-18-142010.png

Example:

Code:

Load.ini

[Form]
; Language
cache1=En_us
; Position: X
cache2=$DeskWidth$ - 95%
; Position: Y
cache3=$DeskHeight$ - 90%
; Form Width
cache4=450
; Form Height
cache5=450
; Form Border
cache6=no
 
cache7, cache8, ...

Code:

Test.iss

{Code]
#define public i
#define public FCacheMax 26
#dim public FCache[5]

#sub CheckFCache
  #define FCache[i] ReadIni(AddBackSlash(SourcePath)        + "load.ini", "Form", StringChange("cacheInt","Int", Str(i)), "")
#endsub
#if ReadIni(AddBackSlash(SourcePath)        + "load.ini", "Form", "cache1", "") != ""
  #redim FCache[Int(FCacheMax)]
  #for {i = 1; ReadIni(AddBackSlash(SourcePath)        + "load.ini", "Form", StringChange("cacheInt","Int", Str(i)), "") !=""; i++} CheckFCache
#endif

function InitializeSetup(): Boolean;
begin
  MsgBox('{#FCache[1]}', mbConfirmation, MB_OK);
end;


Cesar82 18-03-2021 03:58

Change the lines:
Code:

#define public FCache[i] ReadIni(...
...

#redim public FCache[Int(FCacheMax)]


Ele 18-03-2021 05:48

Quote:

Originally Posted by Cesar82 (Post 490911)
Change the lines:
Code:

#define public FCache[i] ReadIni(...
...

#redim public FCache[Int(FCacheMax)]


Thanks @Cesar82, it works. :)

Masquerade 28-03-2021 00:52

I know there's an if/else but is there an if/else for ifdef?

Example:

Code:

#define example

#ifdef example
    ExtractTemporaryFile('def.txt')
#else
    ExtractTemporaryFile('notdef.txt')
#endif

Would that work?

KaktoR 28-03-2021 00:54

Yes there is

https://jrsoftware.org/ispphelp/inde...pic=directives

Cesar82 28-03-2021 08:24

Quote:

Originally Posted by Masquerade (Post 491138)
I know there's an if/else but is there an if/else for ifdef?

Example:

Code:

#define example

#ifdef example
    ExtractTemporaryFile('def.txt')
#else
    ExtractTemporaryFile('notdef.txt')
#endif

Would that work?

Yes. For ISPP there is more than one way to use ELSE like:
Code:

#define example 5

#if defined(example)
  #if Example == 5
    ExtractTemporaryFile('def5.txt')
  #elif Example == 4
      ExtractTemporaryFile('def4.txt')
  #elif Example == 3
    ExtractTemporaryFile('def3.txt')
  #elif Example == 2
      ExtractTemporaryFile('def2.txt')
  #elif Example == 1
      ExtractTemporaryFile('def1.txt')
  #else
      ExtractTemporaryFile('def.txt')
  #endif
#else
    ExtractTemporaryFile('notdef.txt')
#endif

P.S: elif = else if

Masquerade 07-05-2021 12:24

Help with Progress Bar
 
Hello everyone, I am trying to add a progress bar to a script.

Code:

  Progress:= TNewProgressBar.Create(WizardForm);
  with Progress do
  begin
  Parent := WizardForm;
  SetBounds(10, 150, 200, 0);
  Max:=1000;
  end;

Code:

function ProgressCallback(OveralPct,CurrentPct: integer;CurrentFile,TimeStr1,TimeStr2,TimeStr3:PAnsiChar): longword;
begin
  if OveralPct <=1000 then Progress.Position := OveralPct;
  Result := ISDoneCancel;
end;

Code:

if CurPageID = wpInstalling then
  begin
  ExtractTemporaryFile('unarc.dll')
  Progress.Show;
  DesktopIconCheckBox.Enabled := false;
  WizardForm.DirEdit.Hide;
  WizardForm.DirBrowseButton.Hide;
  ISDoneCancel:= 0
  ISDoneError := true;
  if ISDoneInit(ExpandConstant('{src}\records.inf'), $F777, 0, 0, 0, MainForm.Handle, 512, @ProgressCallback) then begin
    ChangeLanguage('English')
    begin
      repeat
        if not ISArcExtract ( 0, 0, ExpandConstant('{src}\*.arc'), ExpandConstant('{app}'), '', false, '', '', ExpandConstant('{app}'), false) then break;
        ISDoneError := false;
      until true;
        ISDoneStop;
      end;
    end;
  end;

These above code snippets all are the code for the progress bar

I'm not entirely sure why the progress bar isn't showing up during installation.

I click "Install" to trigger wpInstalling.
THe directory box and the browse button disappear and the desktop icon checkbox is frozen. However, the progress bar does not appear.

Why could this be? Thanks!

Cesar82 07-05-2021 13:43

Quote:

Originally Posted by Masquerade (Post 491856)
Hello everyone, I am trying to add a progress bar to a script.

Code:

  Progress:= TNewProgressBar.Create(WizardForm);
  with Progress do
  begin
  Parent := WizardForm;
  SetBounds(10, 150, 200, 0);
  Max:=1000;
  end;

Code:

function ProgressCallback(OveralPct,CurrentPct: integer;CurrentFile,TimeStr1,TimeStr2,TimeStr3:PAnsiChar): longword;
begin
  if OveralPct <=1000 then Progress.Position := OveralPct;
  Result := ISDoneCancel;
end;

Code:

if CurPageID = wpInstalling then
  begin
  ExtractTemporaryFile('unarc.dll')
  Progress.Show;
  DesktopIconCheckBox.Enabled := false;
  WizardForm.DirEdit.Hide;
  WizardForm.DirBrowseButton.Hide;
  ISDoneCancel:= 0
  ISDoneError := true;
  if ISDoneInit(ExpandConstant('{src}\records.inf'), $F777, 0, 0, 0, MainForm.Handle, 512, @ProgressCallback) then begin
    ChangeLanguage('English')
    begin
      repeat
        if not ISArcExtract ( 0, 0, ExpandConstant('{src}\*.arc'), ExpandConstant('{app}'), '', false, '', '', ExpandConstant('{app}'), false) then break;
        ISDoneError := false;
      until true;
        ISDoneStop;
      end;
    end;
  end;

These above code snippets all are the code for the progress bar

I'm not entirely sure why the progress bar isn't showing up during installation.

I click "Install" to trigger wpInstalling.
THe directory box and the browse button disappear and the desktop icon checkbox is frozen. However, the progress bar does not appear.

Why could this be? Thanks!


Maybe it's because you set Parent = WizardForm.
If you are a native installer, the parent should be the wpInstalling page.

If you are an installer that uses the native interface, try setting the ProgressBar Parent to:

Code:

Parent: = WizardForm.ProgressGauge.Parent;
or
Parent: = WizardForm.InstallingPage;


DiCaPrIo 07-05-2021 14:12

Quote:

Originally Posted by Masquerade (Post 491856)
Hello everyone, I am trying to add a progress bar to a script.

Code:

  Progress:= TNewProgressBar.Create(WizardForm);
  with Progress do
  begin
  Parent := WizardForm;
  SetBounds(10, 150, 200, 0);
  Max:=1000;
  end;

Code:

function ProgressCallback(OveralPct,CurrentPct: integer;CurrentFile,TimeStr1,TimeStr2,TimeStr3:PAnsiChar): longword;
begin
  if OveralPct <=1000 then Progress.Position := OveralPct;
  Result := ISDoneCancel;
end;

Code:

if CurPageID = wpInstalling then
  begin
  ExtractTemporaryFile('unarc.dll')
  Progress.Show;
  DesktopIconCheckBox.Enabled := false;
  WizardForm.DirEdit.Hide;
  WizardForm.DirBrowseButton.Hide;
  ISDoneCancel:= 0
  ISDoneError := true;
  if ISDoneInit(ExpandConstant('{src}\records.inf'), $F777, 0, 0, 0, MainForm.Handle, 512, @ProgressCallback) then begin
    ChangeLanguage('English')
    begin
      repeat
        if not ISArcExtract ( 0, 0, ExpandConstant('{src}\*.arc'), ExpandConstant('{app}'), '', false, '', '', ExpandConstant('{app}'), false) then break;
        ISDoneError := false;
      until true;
        ISDoneStop;
      end;
    end;
  end;

These above code snippets all are the code for the progress bar

I'm not entirely sure why the progress bar isn't showing up during installation.

I click "Install" to trigger wpInstalling.
THe directory box and the browse button disappear and the desktop icon checkbox is frozen. However, the progress bar does not appear.

Why could this be? Thanks!

because you didn't give height value SetBounds(10, 150, 200, 40);//(l,t,w,h)

Masquerade 09-05-2021 06:10

Is there any way I can use ExtractTemporaryFile with the * wildcard?

Currently I have this:

Code:

[Files]
Source: Include\*; DestDir: {tmp}; Flags: dontcopy

However, how can I extract all of the files included above to {tmp} without manually specifiying everything (since I'm trying to desing the code so that anything in the Include folder will be extracted to {tmp})?

DiCaPrIo 09-05-2021 06:50

Quote:

Originally Posted by Masquerade (Post 491872)
Is there any way I can use ExtractTemporaryFile with the * wildcard?

Currently I have this:

Code:

[Files]
Source: Include\*; DestDir: {tmp}; Flags: dontcopy

However, how can I extract all of the files included above to {tmp} without manually specifiying everything (since I'm trying to desing the code so that anything in the Include folder will be extracted to {tmp})?


HTML Code:

#define Resources "Files\*"

[Files]
Source: {#Resources}; DestDir: {tmp}; Flags: dontcopy

[Code]
function InitializeSetup:boolean;
begin
  #define FHandle
  #define FRst
  #define Mask Resources
  #sub ProcessFiles
  #define FileName FindGetFileName(FHandle)
  ExtractTemporaryFile('{#FileName}');
  #endsub
  #for {FHandle = FRst = FindFirst(Mask, 0); FRst; FRst = FindNext(FHandle)} ProcessFiles
  Result:=True;
end;


Cesar82 09-05-2021 10:50

Quote:

Originally Posted by Masquerade (Post 491872)
Is there any way I can use ExtractTemporaryFile with the * wildcard?

Currently I have this:

Code:

[Files]
Source: Include\*; DestDir: {tmp}; Flags: dontcopy

However, how can I extract all of the files included above to {tmp} without manually specifiying everything (since I'm trying to desing the code so that anything in the Include folder will be extracted to {tmp})?

For not so old versions of Inno Setup you can use:
Code:

[Files]
Source: Include\*; DestDir: {tmp}; Flags: dontcopy

[ code]
function InitializeSetup(): Boolean;
begin
  ExtractTemporaryFiles('{tmp}\*.*');
  Result := True;
end;

If you use @files: in the path of any of the DLL functions they will be extracted automatically before the InitializeSetup function.
So I recommend you change to {tmp} in the DLL functions, or specify a destination other than {tmp} for them using the dontcopy flag.

Code:

function ISArcExtract(CurComponent: Cardinal; PctOfTotal:double; InName, OutPath, ExtractedPath: AnsiString; DeleteInFile: Boolean; Password, CfgFile, WorkPath: AnsiString; ExtractPCF: boolean ):boolean; external 'ISArcExtract@files:ISDone.dll stdcall delayload';

change to:

function ISArcExtract(CurComponent: Cardinal; PctOfTotal:double; InName, OutPath, ExtractedPath: AnsiString; DeleteInFile: Boolean; Password, CfgFile, WorkPath: AnsiString; ExtractPCF: boolean ):boolean; external 'ISArcExtract@{tmp}\ISDone.dll stdcall delayload';


Cesar82 09-05-2021 17:52

Can anyone tell me if it is necessary to call these IsDone functions below if I do not use the ISFindFiles e and ISPrecompExtract and ISSRepExtract functions.

Code:

      if not SrepInit(ExpandConstant('{app}\'), 512, 0) then
        Break;

      if not PrecompInit(ExpandConstant('{app}\'), 128, 0) then
        Break;

      if not FileSearchInit(True) then
        Break;

IsDone's help is all in Russian and it would help a lot if someone who understands the language could share this information.
I will only use IsArcExtract, IsRarExtract, IS7ZipExtract and ISxDeltaExtract.

Masquerade 09-05-2021 22:53

@Cesar82

No, you don't.


All times are GMT -7. The time now is 09:48.

Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2026, vBulletin Solutions Inc.
FileForums @ https://fileforums.com