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 :

Avoir la version de mon programme


Sujet :

Langage Delphi

  1. #1
    Membre habitué Avatar de bs.box
    Inscrit en
    Mai 2008
    Messages
    174
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 174
    Points : 173
    Points
    173
    Par défaut Avoir la version de mon programme
    Salut,
    J'ai mal à récupérer la version de mon programme, j'ai essayer de travailler
    avec ce code mais je ne trouve pas comment affecter la valeur lue comme
    étant une zone de mémoire TResourceStream vers un TLabel.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Version:String;
    begin
    with TResourceStream.Create(HInstance, 'ProductVersion', RT_VERSION) do
           Try
              Version:= ? <- c'est là que je bloque ! :aie:
           Finally
              Free
           End
    end;
    S'il y'a une alternative veuillez me l'indiquer svp.

    merci d'avance.

  2. #2
    Membre habitué Avatar de neodelphi2007
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    202
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 202
    Points : 179
    Points
    179
    Par défaut


    voici un composant qui doit répondre à ton problème:

    http://www.delphidabbler.com/software?id=verinfo


  3. #3
    Expert éminent
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 682
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 682
    Points : 7 123
    Points
    7 123

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 845
    Points : 13 622
    Points
    13 622
    Par défaut
    Cette routine te renverra n'importe quelle info incluse dans la version.
    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
    //QueryValue peut prendre ces valeurs:
    //Comments, InternalName, ProductName, CompanyName, LegalCopyright, ProductVersion
    //FileDescription, LegalTrademarks, PrivateBuild, FileVersion, OriginalFilename, SpecialBuild
    function GetFileInfo(FileName :string; QueryValue :string = 'FileVersion') :string;
    const
      TranslationFormat :ShortString = '\StringFileInfo\%s\%s';
    var
      FileVersionInfo :dword;
      VersionInfoSize :dword;
      Block           :PChar;
      SubBlock        :String[8];
      Translation     :Pointer;
      QueryResult     :Pointer;
      //
      function VersionQueryValue(SubBlock :ShortString; var Buffer :Pointer) :boolean;
      var
        Len :dword;
        SubBlockC :array[0..30] of Char;
      begin
        StrPCopy(SubBlockC, SubBlock);
        Result := VerQueryValue(Block, SubBlockC, Buffer, Len)
      end;
      //
    begin
      Result := '';
     
      { Taille de la structure }
      VersionInfoSize := GetFileVersionInfoSize(PChar(FileName), FileVersionInfo);
      GetMem(Block, VersionInfoSize +1);
      { Informations fichier }
      GetFileVersionInfo(PChar(FileName), 0, VersionInfoSize, Block);
      { Translation table }
      if VersionQueryValue('\VarFileInfo\Translation', Translation) then
      begin
        SubBlock := IntToHex(LoWord(LongInt(Translation^)),4)
                   +IntToHex(HiWord(LongInt(Translation^)),4);
     
        if VersionQueryValue(format(TranslationFormat , [SubBlock, QueryValue]), QueryResult) then
          Result := StrPas(QueryResult);
      end;
     
      FreeMem(Block, VersionInfoSize +1);
    end;

  5. #5
    Membre habitué Avatar de bs.box
    Inscrit en
    Mai 2008
    Messages
    174
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 174
    Points : 173
    Points
    173
    Par défaut Salut,
    Aprés mon renseignement sur la nouvelle FAQ
    que je n'avait pas avant, j'ai trouvé se que je voulais,
    Mais vu que Andnotor m'a surpris avec son code et que sa
    fonction peut avoir de l'info que nous voulons seulement
    en donnant la clé voulue, j'ai l'attention de l'utilisée au lieu de celle
    expliquée dans la FAQ.

    En plus j'ai même pas rendu compte qu'il existe une explication sur
    le HELP de mon Delphi7,

    la voici:
    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
     
     procedure  TForm1.Button1Click(Sender: TObject);   
     const 
        InfoNum = 10; 
        InfoStr:  array [1..InfoNum]  of string  = 
                  ('CompanyName', 'FileDescription',
                   'FileVersion',  'InternalName',
                   'LegalCopyright', 'LegalTradeMarks',
                   'OriginalFileName', 'ProductName',
                   'ProductVersion', 'Comments'); 
      var 
        S:  string ; 
        n, Len, i: DWORD; 
        Buf: PChar; 
        Value: PChar; 
      begin 
        S := Application.ExeName; 
        n := GetFileVersionInfoSize(PChar(S), n); 
      if  n > 0  
         then begin 
     
         Buf := AllocMem(n); 
         Memo1.Lines.Add('VersionInfoSize = ' + IntToStr(n)); 
         GetFileVersionInfo(PChar(S), 0, n, Buf); 
     
         for i:=1 to InfoNum  do 
            if VerQueryValue(
                              Buf, PChar('StringFileInfo\040904E4\' + InfoStr[i]), 
                              Pointer(Value), Len
                            )
               then Memo1.Lines.Add(InfoStr[i] + ' = ' + Value); 
     
         FreeMem(Buf, n); 
     
             end 
         else Memo1.Lines.Add('No version information found'); 
      end;
    Merci,

    Mais débattrons sur un autre sujet qui est dans le même contexte,
    J'utilise un fichier ressource 'project_x.rc' au lieu de 'project_x.res',
    car il m'aide beaucoup à reférencier mes données qui seront incluses dans
    le fichier exécutable, seulement je ne comprend pas quelques problèmes
    qui s'affiche lors de la visualisation de l'info de la version sur le
    system (droit clique sur *.exe -> propriétes -> Section Version)

    Mon fichier 'project_x.rc' utilisé:
    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
     
    1 ICON RES\ICON.ICO
    1 RCDATA RES\unRAR3.80.dll
    2 RCDATA RES\ID3v2.4.dll
     
    1 VERSIONINFO
    FILEVERSION 0,3,5,0
    PRODUCTVERSION 0,3,5,0
    FILEOS 0x4
    FILETYPE 0x1
    {
    BLOCK "StringFileInfo"
    {
    	BLOCK "040904B0"
    	{	
    		VALUE "FileDescription", "Files Tree ReOrganizer version 2008"
    		VALUE "ProductName", "Files Tree ReOrganizer - Special develop for DVB FileGraber"
    		VALUE "FileVersion", "0.3.5.0"
    		VALUE "ProductVersion", "0.3.5.0"
    		VALUE "OriginalFilename", "ReOrganizer.exe"
    		VALUE "LegalCopyright", "(C) December 2008          "		
    		VALUE "Comments", "http://bsdsources.awardspace.com   "
    	}
    }
     
    BLOCK "VarFileInfo"
    {
    	VALUE "Translation", 0x0409 0x04B0
    }
    }
    Prenant par exemple la valeur,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    VALUE "Comments", "http://bsdsources.awardspace.com   "
    Si je la remplace, (en supprimant des espaces en dernier)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    VALUE "Comments", "http://bsdsources.awardspace.com"
    J'aperçois d'autres caractères qui ne fait pas partie de "Comments";
    En plus un autre inconvenion lors de la modification des autres valeurs,
    en conséquence je vois les différentes valeurs s'interfère.

    Veuillez m'éclaircir sur ce sujet et de m'informer de plus qu'ce que
    c'est les deux valeurs suivantes, et est-ce qu'elles ont une relation
    avec le nombre de valeurs définies sur le blocque BLOCK "StringFileInfo"
    Ou bien, Est-ce le texte que je doit introduire dans chauque une des valeurs
    définies comme "ProductName, Comments, .." ne doit pas déppasser
    une longueur précise, ou en plus l'ordre des valeurs doit être respecté ?!!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    	BLOCK "040904B0"
    	ET
    	VALUE "Translation", 0x0409 0x04B0
    Aprés un cou d'euille sur la boite de dialogue OPTION de DELPHI
    j'aperçois que peut être VALUE "Translation", 0x0409
    m'indique la langue utilisée, mais la seconde 0x04B0 je l'ai pas compris.

    A noter que j'utilise la ligne suivante dans le fichier .dpr
    pour générer directement le fichier .res de mon projet.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    program project_x;
    {$R 'project_x.res' 'project_x.rc'}
    uses ..;
    begin
    .....
    end.
    Bonne Continuation.

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 845
    Points : 13 622
    Points
    13 622
    Par défaut
    La deuxième valeur est le CodePage. 04B0 est pour l'unicode.
    La fonction que je t'ai donné ne fonctionnera certainement pas correctement en unicode. Essayes de remplacer 04B0 par 04E4 (Latin)

  7. #7
    Membre habitué Avatar de bs.box
    Inscrit en
    Mai 2008
    Messages
    174
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 174
    Points : 173
    Points
    173
    Par défaut Salut
    C'est OK, j'ai compris maintenant les deux valeurs, mais il reste
    toujours le problème des caractères que j'ai posé avant,

    En tout cas merci, ça ma vraiment aidé, en ce qui concerne
    la valeur du site web, j'ai ajouté un seul éspace et ça marche à
    merveille

    a+

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 06/02/2012, 10h08
  2. afficher la version de mon programme
    Par Jiyuu dans le forum VB.NET
    Réponses: 3
    Dernier message: 12/10/2007, 20h55
  3. envoyer un mail avec mon programme
    Par shrek dans le forum C++Builder
    Réponses: 8
    Dernier message: 06/12/2006, 13h27
  4. [] Utiliser AVI d'une DLL dans mon programme
    Par seb.49 dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 02/05/2003, 15h52
  5. Réponses: 11
    Dernier message: 17/03/2003, 11h56

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