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

Langage Delphi Discussion :

Mettre version du produit dans le code


Sujet :

Langage Delphi

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    356
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 356
    Points : 133
    Points
    133
    Par défaut Mettre version du produit dans le code
    bonjour,

    dans delphi (2006), dans projet/options/informations de version on peut écrire la "version du fichier"

    est ce que je peux mettre cette version en passant par du code?


    merci

  2. #2
    Membre expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 360
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 360
    Points : 3 135
    Points
    3 135
    Par défaut
    Bonjour,
    Avec D7, j'utilise cette fonction trouvée sur internet :

    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
    function GetAppVersionStr: string;
    // Renvoie la version de l'application
    var
      verblock:PVSFIXEDFILEINFO;
      versionMS,versionLS:cardinal;
      verlen:cardinal;
      rs:TResourceStream;
      m:TMemoryStream;
      p:pointer;
      s:cardinal;
      AppVersionString:String ;
      i : Integer ;
    begin
      m:=TMemoryStream.Create;
      try
        rs:=TResourceStream.CreateFromID(HInstance,1,RT_VERSION);
        try
          m.CopyFrom(rs,rs.Size);
        finally
          rs.Free;
        end;
        m.Position:=0;
        if VerQueryValue(m.Memory,'\',pointer(verblock),verlen) then
          begin
            VersionMS:=verblock.dwFileVersionMS;
            VersionLS:=verblock.dwFileVersionLS;
            AppVersionString:=Application.Title+' '+
              IntToStr(versionMS shr 16)+'.'+
              IntToStr(versionMS and $FFFF)+'.'+
              IntToStr(VersionLS shr 16)+'.'+
              IntToStr(VersionLS and $FFFF);
          end;
        if VerQueryValue(m.Memory,PChar('\\StringFileInfo\\'+
          IntToHex(GetThreadLocale,4)+IntToHex(GetACP,4)+'\\FileDescription'),p,s) or
            VerQueryValue(m.Memory,'\\StringFileInfo\\040904E4\\FileDescription',p,s) then //en-us
              AppVersionString:=PChar(p)+' '+AppVersionString;
         Result := AppVersionString ;
      finally
        m.Free;
      end;
    end;
    Il faut bien sûr que le numéro de version soit initialisé dans le projet Delphi

    A+
    Charly

  3. #3
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 522
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 522
    Points : 25 052
    Points
    25 052
    Par défaut
    @Charly910, je crois que exyacc veut écrire le numéro et non le lire

    @exyacc utilise plutôt un fichier RC/RES oui comme le fait ici Paul TOTH si tu ne veux pas le faire par les options de projet

    Par code, ça va se compliquer, il te faut ajouter la ressource après que l'EXE soit compilé
    Générer la ressource n'est pas forcément évident par code, du coup, il te faudrait peut-être utiliser BRCC32

    Resource Hacker écrit en Delphi le fait donc tu pourrais le faire même c'est peut-être pas mal de boulot
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    356
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 356
    Points : 133
    Points
    133
    Par défaut
    merci pour vos réponses

    effectivement, ça n'a pas l'air simple, en fait, c'était pour éviter d'aller dans le menu et d'oublier de changer le numero.
    je pensais qu'il y aurait eu un truc genre {$version=xxxx}
    mais bon, tant pis !
    merci

  5. #5
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 643
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 643
    Points : 10 597
    Points
    10 597
    Par défaut
    Tu peux séparer tes ressources de tes valeurs

    Exemple:

    Resource.h
    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
    #ifndef RESOURCE_H
    #define RESOURCE_H
     
     
    #define IDI_ICON1 101
     
     
    #define COMPANY_NAME        "XXX\0"
    #define PRODUCT_NAME        "Product YYYY\0"
    #define PRODUCT_NAMEW       L"Product YYYY"
    #define PRODUCT_VERSION      0
    #define PRODUCT_VERSION_STR "\0"
    #define LEGAL_COPYRIGHT     "2016, XXX\0"
     
     
    #define PROJECT_THREAD_POOL_VERSION      1,0,0,0
    #define PROJECT_THREAD_POOL_VERSION_STR "1.0.0.0\0"
    #define PROJECT_THREAD_POOL_NAME        "thread_pool.exe\0"
    #define PROJECT_THREAD_POOL_DESCRIPTION "Thread pool\0"
    #define PROJECT_THREAD_POOL_DESCRIPTION_FR "Bassin de threads\0"
     
    #define XXX_LOGO_MULTI "XXX\\my_icon.ico"
     
     
    #endif // RESOURCE_H

    project_thread_pool.rc:
    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
    #ifndef _CPP_BUILDER
    #include <windows.h>
    #endif // _CPP_BUILDER
     
    #include "Resource.h"
    #include "winver.h"
    //#include "my_winresrc.h"
     
     
    LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
    #pragma code_page(1252)
     
     
    VS_VERSION_INFO  VERSIONINFO
      FILEVERSION    PROJECT_THREAD_POOL_VERSION
      PRODUCTVERSION PRODUCT_VERSION
      FILEOS         VOS_DOS_WINDOWS32
      FILETYPE       VFT_APP
    BEGIN
      BLOCK "StringFileInfo"
      BEGIN
        BLOCK "040904E4"
        BEGIN
          VALUE "CompanyName",      COMPANY_NAME
          VALUE "ProductName",      PRODUCT_NAME
          VALUE "ProductVersion",   PRODUCT_VERSION_STR
          VALUE "LegalCopyright",   LEGAL_COPYRIGHT
          VALUE "FileVersion",      PROJECT_THREAD_POOL_VERSION_STR
          VALUE "InternalName",     PROJECT_THREAD_POOL_NAME
          VALUE "OriginalFilename", PROJECT_THREAD_POOL_NAME
          VALUE "FileDescription",  PROJECT_THREAD_POOL_DESCRIPTION
        END
      END
     
      BLOCK "VarFileInfo"
      BEGIN
        VALUE "Translation", 0x0409, 0x04E4
      END
    END
     
     
    LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
    IDI_ICON1 ICON DISCARDABLE XXX_LOGO_MULTI
    Avant que tu demandes my_winresrc.h:
    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
    #ifndef MY_WINRESRC
    #define MY_WINRESRC
     
    #define LANG_ENGLISH       0x09
    #define SUBLANG_ENGLISH_US 0x01
     
    #define LANG_FRENCH    0x0C
    #define SUBLANG_FRENCH 0x01
     
    #define LANG_NEUTRAL    0x00
    #define SUBLANG_NEUTRAL 0x00
     
    #define VS_VERSION_INFO 1
     
    /* ----- VS_VERSION.dwFileFlags ----- */
    #define VS_FF_DEBUG             0x00000001L
    #define VS_FF_PRERELEASE        0x00000002L
    #define VS_FF_PATCHED           0x00000004L
    #define VS_FF_PRIVATEBUILD      0x00000008L
    #define VS_FF_INFOINFERRED      0x00000010L
    #define VS_FF_SPECIALBUILD      0x00000020L
     
    /* ----- VS_VERSION.dwFileOS ----- */
    #define VOS_UNKNOWN             0x00000000L
    #define VOS_DOS                 0x00010000L
    #define VOS_OS216               0x00020000L
    #define VOS_OS232               0x00030000L
    #define VOS_NT                  0x00040000L
    #define VOS_WINCE               0x00050000L
     
    #define VOS_BASE                0x00000000L
    #define VOS_WINDOWS16           0x00000001L
    #define VOS_PM16                0x00000002L
    #define VOS_PM32                0x00000003L
    #define VOS_WINDOWS32           0x00000004L
     
    #define VOS_DOS_WINDOWS16       0x00010001L
    #define VOS_DOS_WINDOWS32       0x00010004L
    #define VOS_OS216_PM16          0x00020002L
    #define VOS_OS232_PM32          0x00030003L
    #define VOS_NT_WINDOWS32        0x00040004L
     
    /* ----- VS_VERSION.dwFileType ----- */
    #define VFT_UNKNOWN             0x00000000L
    #define VFT_APP                 0x00000001L
    #define VFT_DLL                 0x00000002L
    #define VFT_DRV                 0x00000003L
    #define VFT_FONT                0x00000004L
    #define VFT_VXD                 0x00000005L
    #define VFT_STATIC_LIB          0x00000007L
     
     
    #endif // MY_WINRESRC

  6. #6
    Membre expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 360
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 360
    Points : 3 135
    Points
    3 135
    Par défaut
    Bonjour,
    sinon, autre solution (moins satisfaisante) : ne pas inclure les informations de version dans le projet, et gérer toi même le numéro de version (stockage dans la base de registre ou dans un fichier ini et affichage dans l'appli dans la barre de titre ou dans l'à propos)
    A+
    Charly

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

Discussions similaires

  1. Mettre de l'assembleur dans un code c++
    Par uriotcea dans le forum Débuter
    Réponses: 8
    Dernier message: 10/03/2012, 13h39
  2. mettre un fichier telechargeable dans mon code HTML
    Par telecom85 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 09/01/2010, 22h28
  3. Mettre de l'ordre dans les codes mal arrangés !
    Par Ardely dans le forum Delphi
    Réponses: 3
    Dernier message: 24/01/2007, 13h13
  4. [FLASH MX] Mettre en gras dans ce code
    Par celina5880 dans le forum Flash
    Réponses: 6
    Dernier message: 15/01/2006, 15h16

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