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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 6
    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 confirmé
    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 : 62
    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
    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 confirmé
    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 : 62
    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
    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
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 6
    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 émérite
    Avatar de ouiouioui
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Août 2006
    Messages
    993
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    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 : 993
    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;

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 6
    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.

+ 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