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] Msgbox multilingue et ordre des pages d'installation.


Sujet :

Outils Delphi

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 6
    Points : 2
    Points
    2
    Par défaut [Inno Setup] Msgbox multilingue et ordre des pages d'installation.
    Bonjour à tous,

    J'utilise le logiciel Inno Setup pour créer l'installateur d'un mod (pour ceux qui ne connaissent pas il est question de reparamétrer un jeu existant tel que Counter Strike issu de Half Life). Et pour perfectionner cet installateur il me reste deux éléments sur lesquels je bloque depuis un moment.

    (1) Il est prévu de pouvoir installer de deux manières différentes, l'une en installant les composants du mod directement dans le répertoire du jeu d'origine, l'autre dans un répertoire indépendant à la manière d'un pseudo stand-alone.
    Dans le premier cas je vais chercher le répertoire d'installation du jeu dans le registre, aucun chemin n'est demandé à l'utilisateur. Pour le second, l'utilisateur doit pouvoir choisir l'emplacement de son choix.
    => Problème : par défaut l'emplacement (page wpSelectDir) est demandé avant le type d'installation (page wpSelectComponents) alors que j'aurais besoin du contraire pour faire en sorte que :
    - si installation combiné (dans le répertoire du jeu) on saute wpSelectDir
    - si installation stand-alone on propose wpSelectDir


    (2) Grâce à la section [code] et au registre je vérifie si le jeu est bien installé et s'il est patché en sa dernière version. Si les réponses sont négative j'affiche un message d'erreur à l'aide de MsgBox.
    => Problème : l'installation se fait dans deux langues et bientôt trois. Mais MsgBox ne prévoit pas la gestion du multilingue à ce que je sache.
    J'ai bien essayé avec la section [CustomMessages] mais si je met Msgbox({cm:MonText},mbError ,MB_Ok); ça ne marche pas et si je met Msgbox('{cm:MonText}',mbError ,MB_Ok); j'ai le message texto {cm:MonText}


    Je suis donc à la recherche d'une solution à ces deux problèmes. Je vous remercie d'avance pour vos réponses, n'hésitez pas à demander des précisions.

  2. #2
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Salut

    Pour la question n° 2: Dans la partie code il faut utiliser ExpandConstant pour accéder aux CustomMessages.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Msgbox(ExpandConstant('{cm:MonText}'), mbError, MB_OK);
    Pour la question n°1, euh: stand by pour l'instant.

    [Edit]
    Un p'tit oubli: Bienvenue

    @+ Claudius

  3. #3
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Re.

    Alors pour la question n°1, à mon avis tu devras passer par une page personnalisée, car effectivement wpSelectDir passe avant wpSelectComponents et pas moyen de changer cet ordre.

    Donc dans la partie [Setup] tu 'squizzes' la page de sélection de dossier avec DisableDirPage=yes.
    Puis tu crées la page perso du type TInputDirWizardPage que tu affiches dans le cas de l'install stand-alone juste après wpSelectComponents.

    Je ne me suis jamais retrouvé confronter à cette situation, mais c'est dans cette direction que je m'orienterais.

    @+

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    Merci pour ces réponses rapides

    Pour le problème N°2 c'est réglé ça marche nickel.

    Pour le N°1 j'ai consulté la documentation officiel et en fait je vois pas trop comment je dois insérer ce code.
    Voici un aperçu de mon code actuel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
     
    [Setup]
    ...
    DefaultDirName={code:RegDir}
    AllowRootDirectory=no
    DisableDirPage=yes
    ...
     
    [Code ]
    const RegPath = 'Software\Electronic Arts\EA Games\';
     
    function RegDir(Param: String):String;
      var
        InstallDir: String;
     
    begin
      // il existe deux coffrets du jeu, le normal et la version the first decade pack
      if RegQueryStringValue(HKEY_LOCAL_MACHINE, RegPath+'Command and Conquer The First Decade', 'zh_folder', InstallDir)
        then
          begin
            Result := InstallDir
          end
      if RegQueryStringValue(HKEY_LOCAL_MACHINE, RegPath+'Command and Conquer Generals Zero Hour', 'InstallPath', InstallDir)
        then
          begin
            Result := InstallDir
          end
    end;
     
     
    function InitializeSetup(): Boolean;
      var
        VersionValue: Cardinal;
    begin
      if RegValueExists(HKEY_LOCAL_MACHINE, RegPath+'Command and Conquer Generals Zero Hour', 'InstallPath') = true OR RegValueExists(HKEY_LOCAL_MACHINE, RegPath+'Command and Conquer The First Decade', 'zh_folder') = true
        then
          begin
          Result:=True;
          end
        else
          begin
            Msgbox(ExpandConstant('{cm:NoZH}'),mbError ,MB_Ok);
            Result:=False;
          end;
     
      if RegQueryDWordValue(HKEY_LOCAL_MACHINE, RegPath+'Command and Conquer Generals Zero Hour', 'Version', VersionValue)
        then
          begin
          if VersionValue = 65540
            then
              begin
              Result:=True;
              end
            else
              begin
                Msgbox(ExpandConstant('{cm:NoPatch}'), mbInformation ,MB_Ok);
                Result:=False;
              end
          end;
     
        ...
        ...
    end;
    En plus de ne pas savoir où l'intercaler, je ne vois pas quelle condition mettre pour créer cette page seulement si le mode d'installation stand-alone est activé et encore moins comment faire en sorte que la constante {app} récupère le chemin entrée par l'utilisateur dans cette nouvelle page.
    Désolé je suis novice en Pascal et je comprend pas toujours la logique de Inno Setup bien que je reconnais que c'est un très bel outil pour l'installation.

    Ci-dessous le code que j'ai trouvé sur TInputDirWizardPage
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    function CreateInputDirPage(const AfterID: Integer; const ACaption, ADescription, ASubCaption: String; AAppendDir: Boolean; ANewFolderName: String): TInputDirWizardPage;
     
    var
      Page: TInputDirWizardPage;
      DataDir: String;
     
    ...
     
    // Create the page
    Page := CreateInputDirPage(wpWelcome,
      'Select Personal Data Location', 'Where should personal data files be stored?',
      'Personal data files will be stored in the following folder.'#13#10#13#10 +
      'To continue, click Next. If you would like to select a different folder, click Browse.',
      False, 'New Folder');
     
    // Add item (with an empty caption)
    Page.Add('');
     
    // Set initial value (optional)
    Page.Values[0] := ExpandConstant('{userappdata}\My Company\My Program');
     
    ...
     
    // Read value into variable
    DataDir := Page.Values[0];

  5. #5
    Membre expérimenté
    Avatar de ouiouioui
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Août 2006
    Messages
    984
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2006
    Messages : 984
    Points : 1 419
    Points
    1 419
    Par défaut
    faut déclarer en variable global, et utiliser TInputOptionWizardPage
    j'ai pas testé et je suis malade alors je garantis rien

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    [Code]
    const
      RegPath = 'Software\Electronic Arts\EA Games\';
    
    var
      InstallType: TInputOptionWizardPage;
    
    function RegDir(Param: String):String;
      var
        InstallDir: String;
    begin
      // il existe deux coffrets du jeu, le normal et la version the first decade pack
      if RegQueryStringValue(HKEY_LOCAL_MACHINE, RegPath+'Command and Conquer The First Decade', 'zh_folder', InstallDir)
        then
          begin
            Result := InstallDir
          end
      if RegQueryStringValue(HKEY_LOCAL_MACHINE, RegPath+'Command and Conquer Generals Zero Hour', 'InstallPath', InstallDir)
        then
          begin
            Result := InstallDir
          end
    end;
    
    function InitializeSetup(): Boolean;
      var
        VersionValue: Cardinal;
    begin
      InstallType := CreateInputOptionPage(wpWelcome,'titre', 'description', True, False);
      InstallType.Add('combiné');
      InstallType.Add('stand alone');
      InstallType.Values[1] := True; //default stand alone
    
      if RegValueExists(HKEY_LOCAL_MACHINE, RegPath+'Command and Conquer Generals Zero Hour', 'InstallPath') = true OR RegValueExists(HKEY_LOCAL_MACHINE, RegPath+'Command and Conquer The First Decade', 'zh_folder') = true
        then
          begin
          Result:=True;
          end
        else
          begin
            Msgbox(ExpandConstant('{cm:NoZH}'),mbError ,MB_Ok);
            Result:=False;
          end;
    
      if RegQueryDWordValue(HKEY_LOCAL_MACHINE, RegPath+'Command and Conquer Generals Zero Hour', 'Version', VersionValue)
        then
          begin
          if VersionValue = 65540
            then
              begin
              Result:=True;
              end
            else
              begin
                Msgbox(ExpandConstant('{cm:NoPatch}'), mbInformation ,MB_Ok);
                Result:=False;
              end
          end;
    end;
    
    function ShouldSkipPage(PageID: Integer): Boolean;
    begin
      Result := True; //show all page
    
      //page select dir and combiné checked, so skip selectdir
      if (PageID = wpSelectDir) and (InstallType.Values[1] = True) then
        Result := False;
    end;
    Il existe 3 sortes de gens: ceux qui savent compter et ceux qui ne savent pas.

  6. #6
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    Bonjour ouiouioui !

    J'aime bien la logique de ta proposition qui consiste à inverser le problème. J'ai voulu l'essayer mais après compilation j'ai l'erreur suivante :
    X Runtime Error (at: 3151):
    Erreur interne : An attempt was made to access WizardForm before it has been created.

    La ligne qui semble poser problème est la suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    InstallType := CreateInputOptionPage(wpWelcome,'titre', 'description', 'autre', True, False);
    Bon rétablissement.

  7. #7
    Membre expérimenté
    Avatar de ouiouioui
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Août 2006
    Messages
    984
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2006
    Messages : 984
    Points : 1 419
    Points
    1 419
    Par défaut
    C'était pour t'inciter à lire l'aide.
    Pascal Scripting - Using Custom Wizard Pages
    To use custom wizard pages, first create them inside your InitializeWizard event function
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    procedure InitializeWizard();
    begin
      InstallType := CreateInputOptionPage(wpWelcome,'titre', 'description', True, False);
      InstallType.Add('combiné');
      InstallType.Add('stand alone');
      InstallType.Values[1] := True; //default stand alone
    end;
    Il existe 3 sortes de gens: ceux qui savent compter et ceux qui ne savent pas.

  8. #8
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    C'était pour t'inciter à lire l'aide
    Je me sert beaucoup de la documentation officiel de Inno Setup, sans ça j'aurais pas déjà fait le reste de l'installateur. Je suis allé directement à la page "Pascal Scripting: CreateInputOptionPage" sans passé par la case "Pascal Scripting - Using Custom Wizard Pages" . . .

    Donc avec ces nouveaux éléments j'ai repris tout et ça marche. J'ai du corriger quelques petits trucs comme pour la fonction ShouldSkipPage qui fonctionne à l'envers. Il faut mettre True pour désactiver et non False. (C'était aussi un test pour voir si j'étais débrouillard hein ?).

    Reste un dernier soucis sur lequel je bloque, comment pouvoir récupérer l'information "combiné" ou "stand alone" pour s'en servir en tant que composants dans la section [Files]. En fait j'ai des éléments supplémentaires à installer si c'est en "stand alone".

  9. #9
    Expert éminent sénior

    Avatar de sjrd
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2004
    Messages
    4 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Suisse

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2004
    Messages : 4 517
    Points : 10 154
    Points
    10 154
    Par défaut
    Regarde la documentation sur l'option Check qui est disponible dans la section [Files] (et d'autres).
    sjrd, ancien rédacteur/modérateur Delphi.
    Auteur de Scala.js, le compilateur de Scala vers JavaScript, et directeur technique du Scala Center à l'EPFL.
    Découvrez Mes tutoriels.

  10. #10
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    Je reviens par ici pour vous remercier tous de votre aide. J'ai grâce à vous réussi à améliorer l'installateur pour notre mod.

    Avis aux modérateurs vous pouvez afficher la mention [Résolu].


    Je vous laisse une petite carte de visite au passage :

    CnC Stargate Universe (base sur C&C Generals : Heure H)
    - Site Internet
    - Page Facebook

  11. #11
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Citation Envoyé par Syrius Märx Voir le message
    Avis aux modérateurs vous pouvez afficher la mention [Résolu].
    Ceci t'incombe.
    Clique sur le bouton en bas de cette enfilade.

  12. #12
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par Cl@udius Voir le message
    Ceci t'incombe.
    Clique sur le bouton en bas de cette enfilade.


    A vrai dire je l'avais bien cherché auprès du premier message mais pas en bas de page, désolé. Bref c'est réglé !

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

Discussions similaires

  1. [XL-2003] Ordre des pages avec saut VBA
    Par demongin dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 02/07/2010, 19h58
  2. [AC-2000] Ordre des pages d'un état
    Par B-CAB dans le forum IHM
    Réponses: 2
    Dernier message: 21/05/2010, 13h43
  3. PDFCreator et ordre des pages
    Par MICLANG dans le forum Autres Logiciels
    Réponses: 2
    Dernier message: 23/11/2009, 18h51
  4. Réponses: 1
    Dernier message: 17/11/2008, 17h30
  5. Donner l'ordre des pages
    Par PrinceMaster77 dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 21/06/2006, 15h22

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