IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Outils Delphi Discussion :

[Inno Setup] Affichage sélectif de plusieurs chemins d'installation


Sujet :

Outils Delphi

  1. #1
    Candidat au Club
    Homme Profil pro
    Sans emploi
    Inscrit en
    Février 2017
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Sans emploi

    Informations forums :
    Inscription : Février 2017
    Messages : 2
    Points : 2
    Points
    2
    Par défaut [Inno Setup] Affichage sélectif de plusieurs chemins d'installation
    Bonjour,

    Je découvre Inno setup sans la moindre connaissance en programmation et après plusieurs recherches et essais infructueux, je me tourne vers vous pour m'aider à comprendre et apprendre.

    Je souhaiterais créer un installateur sans dossier d'installation de base où plusieurs chemins (un par programme à mettre à jour) sont choisis par l'utilisateur une fois la sélection des composants effectuée.
    J'ai plus ou moins compris comment faire et déjà trouvé une solution pour créer la page affichant les chemins multiples, mais j'aimerais que ceux-ci soient affichés en fonction des composants sélectionnés.
    Si "composant 1" est sélectionné par exemple, seul son dossier d'installation sera demandé sans afficher les autres.
    J'ai bien tenté de comprendre comment fonctionne les checkbox, mais entre les variables, les fonctions,... je m'y perds complètement en étant aussi novice.

    En espérant que quelqu'un saura m'aider et d'avance, un grand merci.

    [Setup]
    AppName=My Program
    AppVersion=1.0
    CreateAppDir=no

    [Files]
    ; the parameter passed to the GetDir function here is the index of a directory
    ; input page item, so the following 3 files will be installed each into one of
    ; the directories specified in the input page items
    Source: "G:\Project\file1.txt"; DestDir: "{code:GetDir|0}"; Components: comp1 comp2
    Source: "G:\Project\file2.txt"; DestDir: "{code:GetDir|1}"; Components: comp1
    Source: "G:\Project\file3.txt"; DestDir: "{code:GetDir|2}"; Components: comp2

    [Types]
    Name: "complete"; Description: "complete"
    Name: "custom"; Description: "custom"; Flags: iscustom

    [Components]
    Name: "comp1"; Description: "comp1"; Types: complete custom
    Name: "comp2"; Description: "comp2"; Types: complete

    [Code]
    var
    DirPage: TInputDirWizardPage;

    function GetDir(Param: String): String;
    begin
    Result := DirPage.Values[StrToInt(Param)];
    end;

    procedure InitializeWizard;

    begin
    // create a directory input page
    DirPage := CreateInputDirPage(wpSelectComponents , 'Caption', 'Description', 'SubCaption', False, '');
    // add directory input page items
    DirPage.Add('Dossier Composant 1');
    DirPage.Add('Dossier Composant 2');
    DirPage.Add('Dossier Composant 3');
    // assign default directories for the items from the previously stored data; if
    // there are no data stored from the previous installation, use default folders
    // of your choice
    DirPage.Values[0] := GetPreviousData('Directory1', 'Selection Dossier 1');
    DirPage.Values[1] := GetPreviousData('Directory2', 'Selection Dossier 2');
    DirPage.Values[2] := GetPreviousData('Directory3', 'Selection Dossier 3');
    end;

    procedure RegisterPreviousData(PreviousDataKey: Integer);
    begin
    // store chosen directories for the next run of the setup
    SetPreviousData(PreviousDataKey, 'Directory1', DirPage.Values[0]);
    SetPreviousData(PreviousDataKey, 'Directory2', DirPage.Values[1]);
    SetPreviousData(PreviousDataKey, 'Directory3', DirPage.Values[2]);
    end;

  2. #2
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 694
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 694
    Points : 13 130
    Points
    13 130
    Par défaut
    Ce n'est pas impossible mais compliqué. Pense que la page est créée au démarrage de l'installateur, le choix utilisateur n'est pas encore connu.
    Il faudrait pour cela passer par CurPageChanged, masquer les contrôles inutiles et réaligner ceux restants. Cela donnerait quelque chose comme ceci (uniquement pour un contrôle, à multiplier par le nombre de composants) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    procedure CurPageChanged(CurPageID: Integer);
    begin
      if CurPageID = DirPage.ID then
      begin
        DirPage.PromptLabels[0].Visible := IsComponentSelected('comp1');
     
        if DirPage.PromptLabels[0].Visible then 
          DirPage.PromptLabels[0].Top := ...;
      end;
    end;
    C'est très simplifié puisqu'il faudrait gérer tous les cas, y compris lorsque l'utilisateur revient en arrière et modifie son choix.

    Le plus simple serait d'avoir une page par répertoire. Il est plus facile de sauter une page que de la modifier.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    function ShouldSkipPage(PageID: Integer): Boolean;
    begin
      Result := ((PageID = DirPage1.ID) and not IsComponentSelected('comp1')) or
                ((PageID = DirPage2.ID) and not IsComponentSelected('comp2')) or
                ((PageID = DirPage3.ID) and not IsComponentSelected('comp3'));
    end;
    Sinon, une autre option serait de désactiver les composants plutôt que de les cacher :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    procedure CurPageChanged(CurPageID: Integer);
    begin
      if CurPageID = DirPage.ID then
      begin
        DirPage.PromptLabels[0].Enabled := IsComponentSelected('comp1');
        DirPage.Edits[0].Enabled        := IsComponentSelected('comp1');
        DirPage.Buttons[0].Enabled      := IsComponentSelected('comp1');
     
        DirPage.PromptLabels[1].Enabled := IsComponentSelected('comp2');
        ...
      end;
    end;
    Mais puisque c'est une mise à jour, n'y a-t-il pas moyen de récupérer ces chemins depuis la base des registres ?

  3. #3
    Candidat au Club
    Homme Profil pro
    Sans emploi
    Inscrit en
    Février 2017
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Sans emploi

    Informations forums :
    Inscription : Février 2017
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Un très grand merci Andnotor.

    C'est effectivement compliqué, et pas le meilleur choix pour un novice.
    Je me suis douté que la page devait être créée avant vu le résultat de plusieurs tentatives, merci de me l'avoir confirmé.

    La troisième solution, désactiver les chemins qui ne sont pas nécessaire est parfaite pour moi, ce sera moins complexe que tout le reste.
    Il y a en tout 11 chemins à prendre en compte, 6 peuvent être récupéré via le registre si l'installation d'origine est correcte et 5 devront obligatoirement être entré manuellement.
    Faire une page par chemin aurait été fastidieux, pour les utilisateurs aussi lors de l'installation.

    Il ne me reste plus qu'à trouver comment intégrer les 11 chemins dans une liste,si c'est possible, c'est un peu trop pour une page sinon.

    Un grand merci pour ton aide encore une fois.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 8
    Dernier message: 02/01/2014, 00h54
  2. Réponses: 2
    Dernier message: 01/09/2010, 09h02
  3. Réponses: 4
    Dernier message: 21/04/2009, 11h15
  4. [Inno Setup] Modif date d'un fichier à l'install
    Par ValerieDo dans le forum Outils
    Réponses: 1
    Dernier message: 19/01/2009, 13h48
  5. Réponses: 5
    Dernier message: 24/10/2007, 16h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo