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

Lazarus Pascal Discussion :

Problèmes avec la réalisation d'un package exécutable [Lazarus]


Sujet :

Lazarus Pascal

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

    Informations forums :
    Inscription : Mars 2010
    Messages : 206
    Points : 179
    Points
    179
    Par défaut Problèmes avec la réalisation d'un package exécutable
    Bonjour,

    Je viens de terminer l'actualisation d'un logiciel sous Lazarus (version 1.0.14) en y ajoutant un nouveau module d'affichage des données de tables SQLITE à l'aide d'un DBStringGrid.
    Bien sûr, j'ai ensuite créé un exécutable et un package d'installation (Innosetup compiler version 5 en freeware) comme je l'avais fait pour les versions précédentes. Tout se passe normalement sauf que :
    si j'installe ce package sur l'ordinateur où j'ai développé le logiciel sous Lazarus tout est OK
    si j'installe ce package sur un autre ordinateur qui n'a pas Lazarus installé (W7 ou W8), ordinateurs qui ont Avaast (freware) comme antivirus, l'installation du package se fait à la condition de désactiver Avaast pendant l'installation mais, lorsque je veux faire fonctionner le logiciel, la "roue d'attente" fonctionne pendant quelques secondes et aucune fenêtre ne s'ouvre
    Si je tente, sur ces mêmes ordinateurs, l'installation de l'ancienne version du logiciel tout se passe normalement
    J'ai repris plusieurs fois les processus de compilation et d'installation maus rien n'y fait.
    La seule différence entre l'ancienne et la nouvelle version est l'utilisation d'un DBStringGrid que je n'utilisais pas avant. Les autres composants ajoutés sont un groupe Radio et une RTedit ainsi qu'un bouton de lancement en plus de ceux déjà utilisés dans l'interface du logiciel.
    Une idée, un problème déjà rencontré ?

    Merci d'avance

  2. #2
    Responsable Lazarus & Pascal

    Avatar de gvasseur58
    Homme Profil pro
    Cultivateur de code (bio)
    Inscrit en
    Février 2013
    Messages
    1 436
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Cultivateur de code (bio)
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2013
    Messages : 1 436
    Points : 20 855
    Points
    20 855
    Billets dans le blog
    84
    Par défaut Trop de facteurs...
    Bonjour,

    Il faudrait donner des renseignements plus précis... ou moins confus, au choix. Ou alors, je ne suis pas très malin

    A la description du problème, on a l'impression qu'il s'agit d'une tentative d'écriture dans un répertoire protégé de W7 ou W8. D'où ma question : où ce logiciel s'installe-t-il ? Question subsidiaire : où les fichiers manipulés par la "DBStringGrid" (?) sont-ils placés ?
    Accès à mon site et à mon blog. Actualités, cours et ressources Delphi, Lazarus et Pascal.
    Pensez à la balise - Quelqu'un vous a aidé ou vous appréciez une intervention ? Pensez au

  3. #3
    Expert confirmé
    Avatar de Ph. B.
    Homme Profil pro
    Freelance
    Inscrit en
    Avril 2002
    Messages
    1 784
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 784
    Points : 5 915
    Points
    5 915
    Par défaut
    Bonjour,
    Citation Envoyé par gvasseur58 Voir le message
    Il faudrait donner des renseignements plus précis... ou moins confus, au choix. Ou alors, je ne suis pas très malin
    On sera deux alors !

    Les noms des types de composants sont approximatifs :
    Je ne connais pas les DBStringGrid, les TStringGrid ou les TDBGrid, oui.
    Je ne connais pas les RTEdit, les TEdit oui.

    Ensuite, votre installeur fournit-il :
    • la dll de sqlite ?
    • la base de données associée ?

    Votre application ne traite-t-elle pas silencieusement certaines erreurs ?
    Les chemins d'accès sont relatifs ou absolus ?
    Philippe.

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

    Informations forums :
    Inscription : Mars 2010
    Messages : 206
    Points : 179
    Points
    179
    Par défaut Quelques précisions a/s problème lié à l'éxécutable
    Bonjour à tous,
    Peut-être me suis-je mal exprimé. Il s'agit d'un composant TDBGrid qui fait aprtie intégrante du programme et qui est hébergé dans une des feuilles du programme. La dll Sqlite3.dll est située dans le sous répertoire qui contient le programme qui lui-même est décompressé, en cliquant sur le l'exécutable du fichier d'installation généré par InnoSetup Compiler dans le répertoire : C:/program Files (x86) sous le nom LazACG soit :
    C:\Program Files (x86)\LazACG\LasACG.exe .
    Les tests du programme sous Lazarus et sa compilation sous Lazarus se déroulent sans aucun problème.
    Si je lance l'utilitaire d'installation sur la même machine où j'ai développé mon programme cela fonctionne très bien. Si je lance ce m^me utilitaire sur une autre machine (elle aussi sous W7) l'installation dans le répertoire C:\Program Files (x86)\LazACG\... se fait aussi sans problème, l'icône au niveau du bureau est créée mais si je tente de faire fonctionner ce programme, la fenêtre du programme ne s'ouvre pas. Les fichiers de base de donnée créés en utilisant le programme sont ceux localisés où l'on souhaite sur l'ordinateur (dans mon cas : D:\gene\Mabase.db3)
    Cela m'empêche donc de mettre mon programme à la disposition des autres.
    Je précise aussi qu'après la fermeture le programme semble considéré comme actif car je je veux supprimer un des fichiers du répertoire ..\LazACG\ ou ce répertoire lui-même j'ai un message d'alerte " occupé par un autre processus" qui s'affiche. ce qui doit venir d'un défaut de fermeture de certains processus ou feuilles en préalable à la sortie du programme mais n'est certainement pas lié au problème d'installation de l'éxécutable de diffusion du logiciel.
    Depuis la mise en ligne de cette discussion j'ai réalisé un autre programme pour lequel j'ai exactement le même problème. dans ce dernier programme je n'utilise pas de TDBGRID mais simplement un TGrid . Pour ma part je penche vers un défaut de paramétrage du projet dans l'opération de choix des options en préalable à la compilation du programme avec un oubli de prise en compte de certaines options de Lazarus, mais je n'en sais vraiment trop rien.
    Je précise que j'ai déjà compilé des programmes et créé des exécutables avec Lazarus et que cela fonctionnait bien, c'est à dire que j'ai pu fournir à mes interlocuteurs des exécutables qui leur permettait de travailler et de sous XP , W8 ou W7.
    J'espère avoir un peu précisé le problème

  5. #5
    Responsable Lazarus & Pascal

    Avatar de gvasseur58
    Homme Profil pro
    Cultivateur de code (bio)
    Inscrit en
    Février 2013
    Messages
    1 436
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Cultivateur de code (bio)
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2013
    Messages : 1 436
    Points : 20 855
    Points
    20 855
    Billets dans le blog
    84
    Par défaut
    Citation Envoyé par OR34a Voir le message
    Les fichiers de base de donnée créés en utilisant le programme sont ceux localisés où l'on souhaite sur l'ordinateur (dans mon cas : D:\gene\Mabase.db3)
    Petite question : c'est bien le programme qui crée cette base et non l'installateur ?

    Si oui, il faudrait à mon avis isoler le problème en créant une micro-application avec seulement la TDBGrid et essayer d'accéder aux données avant et après installation

    Citation Envoyé par OR34a Voir le message
    Depuis la mise en ligne de cette discussion j'ai réalisé un autre programme pour lequel j'ai exactement le même problème. dans ce dernier programme je n'utilise pas de TDBGRID mais simplement un TGrid .
    Cette remarque est plus inquiétante/intéressante : elle indique qu'il s'agit plutôt d'un problème d'utilisation de la Grid...
    .Une portion de code serait sans doute éclairante en cas d'échec afin de mieux comprendre ce qui se passe.

    Bon courage,
    Gilles
    Accès à mon site et à mon blog. Actualités, cours et ressources Delphi, Lazarus et Pascal.
    Pensez à la balise - Quelqu'un vous a aidé ou vous appréciez une intervention ? Pensez au

  6. #6
    Expert confirmé
    Avatar de Ph. B.
    Homme Profil pro
    Freelance
    Inscrit en
    Avril 2002
    Messages
    1 784
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 784
    Points : 5 915
    Points
    5 915
    Par défaut
    Citation Envoyé par OR34a Voir le message
    Les tests du programme sous Lazarus et sa compilation sous Lazarus se déroulent sans aucun problème.
    Reste à tracer son exécution une fois installé.
    Mais avant il faudra ajouter de quoi tracer cette exécution par affichage de messages ou enregistrement de la progression de l'exécution (démarrage, connexion, ouverture de l'ensemble de données alimentant la grille, arrêt) dans un fichier...
    Philippe.

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 206
    Points : 179
    Points
    179
    Par défaut a/s Problème executable - suite
    Bonjour,

    Suite à la suggestion de Gvasseur, j'ai construit une toute nouvelle application dans laquelle j'ai simplement mis un Label, j'y ai ensuite rajouté un StrinGrid et les résultats ont été les suivants :
    Type Compil et exe Poste Laz Fonctionnement Autre instal Autre Fonctionnement
    Label OK OK OK OK
    Label et StrinGrid OK OK OK NON

    Si, après avoir lancé le logiciel sur le poste non lazarus, je passe la souris sur la barre des taches où s trouve l’icône du logiciel je vois en transparence (W7) la feuille de l'application avec son stringGrid mais elle ne s'ouvre pas à l'écran. Dans un autre logiciel j'avais placé un DBStringGrid sur une autre feuille que celle qui apparait à l'écran et il se lance sans problèmes.
    Je pense qu'il doit y avoir un problème à la compilation ou que, pour l'éxecutable je ne prend pas en compte des librairies ou un paramtrage du StrinGgrid ce qui empêche l'ouverture ou la création de la feuille de lancement. Peut-être en installant la dernière version de Lazarus (1.2.6) mais cela demande un assez gros travail de remise en place des composants additionnels et en particulier ZEOS.

  8. #8
    Responsable Lazarus & Pascal

    Avatar de gvasseur58
    Homme Profil pro
    Cultivateur de code (bio)
    Inscrit en
    Février 2013
    Messages
    1 436
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Cultivateur de code (bio)
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2013
    Messages : 1 436
    Points : 20 855
    Points
    20 855
    Billets dans le blog
    84
    Par défaut
    Citation Envoyé par OR34a Voir le message
    Bonjour,

    Suite à la suggestion de Gvasseur, j'ai construit une toute nouvelle application dans laquelle j'ai simplement mis un Label, j'y ai ensuite rajouté un StrinGrid et les résultats ont été les suivants
    Serait-il possible d'avoir une portion de code qui correspond à ce travail ? A ma connaissance, la version de Lazarus utilisée n'a pas de problème particulier au niveau de composants aussi triviaux : je pense qu'il s'agit plutôt d'un problème de programmation

    Gilles
    Accès à mon site et à mon blog. Actualités, cours et ressources Delphi, Lazarus et Pascal.
    Pensez à la balise - Quelqu'un vous a aidé ou vous appréciez une intervention ? Pensez au

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 206
    Points : 179
    Points
    179
    Par défaut suite discussion prbl d'exécutable.
    Bonjour,

    Pour ajouter à ma confusion sur la diffusion de l'exécutable, j'ajoute que j'ai installé sans problèmes cette application sur une machine sous W8.1. La machine sur laquelle j'avais tenté de l'installer sous W7 était protégée par Avast Gratuit qui m'avait enoyé dans le bac à sable lors de la première tentative d'installation. Depuis j'ai désinstallé Avast et l'ai remplacé par l'antivirus de Micro Application (avec ma license) mais je n'arrive pas à installer l'application.
    Je vous joint la totalité du code que j'ai écrit - l'objet de l'application est de créer un "masque de saisie" pour pouvoir concaténer des fichiers par l'intermédiaire d'un batch DOS (cela fonctionne bien directement en DOS et par le "masque" sur les machines où j'ai réussi à intaller l'application.
    Ci après le code :
    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
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    unit U_Concat;
     
    {$mode objfpc}{$H+}
     
    interface
     
    uses
      Classes, SysUtils, process, FileUtil, PrintersDlgs, Forms,
      Controls, Graphics, Dialogs, StdCtrls, ExtCtrls, Buttons, EditBtn,
      FileCtrl, Grids ;
     
    type
     
      { TF_concat }
     
      TF_concat = class(TForm)
        Bt_Lanc: TBitBtn;
        Bt_aide: TBitBtn;
        Bt_fichplus: TBitBtn;
        DEd_CheminON: TDirectoryEdit;
        DEd_CheminOFF: TDirectoryEdit;
        Ed_Extension: TEdit;
        Ed_ChainEnt: TEdit;
        Ed_fichOFF: TEdit;
        FLB_fichON: TFileListBox;
        GB_ON: TGroupBox;
        GB_OFF: TGroupBox;
        Lb_titre: TLabel;
        Lb_listext: TLabel;
        Pro_Fusion: TProcess;
        RG_TypFich: TRadioGroup;
        Sh_typfich: TShape;
        SG_listFich: TStringGrid;
        procedure Bt_aideClick(Sender: TObject);
        procedure Bt_fichplusClick(Sender: TObject);
        procedure Bt_LancClick(Sender: TObject);
        procedure DEd_CheminONChange(Sender: TObject);
        procedure FormShow(Sender: TObject);
     
      private
        { private declarations }
      public
        { public declarations }
      end;
     
    var
      F_concat: TF_concat;
      nomplus : String;
    implementation
     
    {$R *.lfm}
     
    { TF_concat }
     
    procedure TF_concat.Bt_fichplusClick(Sender: TObject);
     Var TypFich, messag_1 : String ;
     Var  NumTypFich, NbTotFich : Integer ;
     Var NomFichgroup, NomRep1 : String ;
     Var i , j : integer ;
    // Cette procédure permet d'identifier les fichiers à fusionner
    begin
      NumTypFich := integer(RG_TypFich.ItemIndex) ;
      Case NumTypFich of
       -1 :  //cas où l'on n'a pas choisi de type de fichiers
       Begin
       messag_1 := 'Vous devez choisir l''un des types de fichiers ' + #13 + #10 ;
       messag_1 += 'pour pouvoir continuer ' ;
       showmessage(messag_1) ;
       end;
       0 : TypFich := '.csv' ; // pour tous les autres cas définifion des types de fichiers
       1 : TypFich := '.flv' ;
       2 : TypFich := '.m2ts' ;
       3 : TypFich := '.mpg' ;
       4 : TypFich := '.ps' ;
       5 : typFich := '.ts' ;
       6 : TypFich := '.txt' ;
       7 : TypFich := '.vob' ;
       8 : TypFich := '.wmv' ;
      end;
      // traitement des fichiers
      if NumTypFich <> -1 then
      begin
       FLB_FichON.Directory := Ded_CheminON.Text ;
       FLB_FichON.Mask := '*' + TypFich ;
       // Comptage du nombre de fichiers concernés par la fusion
        j := 0 ;
        NbTotFich := SG_listFich.RowCount-1 ;
        For i := 1 to NbTotFich do
          With SG_listFich do
           If Cells[1,i]<>'' Then j := j+1  ;
     //     ShowMessage('le nombre de lignes remplies est de ' + intToStr(j) );
      end;
      // Constitution de la chaîne de caractères regroupant les fichiers à fusionner
      NomFichGroup := '' ;
      NomRep1 := Ded_CheminON.text ;
      For i := 1 to J-1 do
       NomFichGroup := NomFichGroup + NomRep1+'\'+SG_listFich.Cells[1,i] +TypFich+'+';
       NomFichGroup := NomFichGroup + NomRep1+'\'+SG_listFich.Cells[1,J]+ TypFich ;
       //Fin de la constitution de la chaïne de caractères regroupant les fichiers à fusionner
      // ShowMessage ('Pour continuer cliquer sur le bouton " + "' ) ;
       Ed_ChainEnt.Text := NomFichGroup ;
       Ed_Extension.Text := TypFich ;
       GB_Off.Visible := True ;
    end;
     
    procedure TF_concat.Bt_aideClick(Sender: TObject);
     Var noma, appliaide, chappli : String ;
     Var Aprocess : Tprocess  ;
    begin
      // Visualisation de l'aide du logiciel
    Aprocess := Tprocess.Create(nil)  ;
    chappli := ExtractFilePath(Application.ExeName) ;  //chemin complet du pgm que l'on utilise
    noma := chappli + 'ConcatFich.chm';     // le chemin complet du fichier CHM à* ouvrir
    Appliaide := 'C:\Windows\hh ' + noma ;   // Le pgm d'ouverture du fichier chm (hh) + le chemin et nom du fichier CHM
    if fileexists(noma) then
     Begin
       Aprocess.CommandLine := appliaide ;
       AProcess.Options := AProcess.Options + [poWaitOnExit];
       AProcess.Execute ;
     end
    else
    Begin
       showmessage('le fichier d''aide n''existe pas ou n''est pas dans le bon dossier !');
    end;
    end;
     
    procedure TF_concat.Bt_LancClick(Sender: TObject);
       Var RepDep, RepStockFich, NomFichsort, NomCompletS,ChaineFus, ExtSortie : string ;
       Var  nombat :String ;
       Var Fich_fus : textFile ;
    begin
       //Constitution de la chaine de caractères spécifiant le chemin et le nom
      //du fichier de sortie
      RepDep := Ded_CheminOn.Text ; // variable correspondant au répertoire de départ des fichiers à fusionner
      RepDep := repDep + '\' ;
      RepStockFich := Ded_CheminOFF.text ;
      NomFichSort := Ed_FichOFF.text ;
      ExtSortie := Ed_Extension.text ;
      NomCompletS := ' ' + RepStockFich + '\' + NomFichSort + ExtSortie ;
      ChaineFus := 'Copy /b '  + Ed_ChainEnt.Text + NomCompletS ;
       //  Création par code du fichier .bat de lancement du processus de fusion
       NomBat := RepDep + 'FusionFich.bat' ;     // le chemin complet du fichier ".bat" à créer puis exécuter
       assignfile (Fich_fus, NomBat) ;
       rewrite (Fich_fus) ;
       writeln (Fich_fus, 'Cmd /c') ;
       writeln (Fich_fus, ChaineFus);
       CloseFile(Fich_fus) ;
      //fin de la création du fichier bat
      // Processus de fusion des fichiers
      //Appel au Composant Tprocess nommé Pro_Fusion
     
     Try
       Pro_Fusion.CommandLine := Nombat ;  // Pro_Fusion = T_Process accès à la ligne de commande "exécuter"
       Pro_Fusion.Execute ;    // dans les options de Pro_Fusion PoWaitOnExit a pour valeur True
       Pro_Fusion.Free ;
     finally
     
     end;
     // Pro_Fusion.Parameters.Add(nombat) ;
      ShowMessage ('Opération de fusion effectuée avec succès') ;
      DeleteFile(Nombat) ;
    end;
     
    procedure TF_concat.DEd_CheminONChange(Sender: TObject);
     Var TypFich1, messag_1, messag_2 : String ;
     Var NumTypFich1 : Integer ;
    begin
        NumTypFich1 := integer(RG_TypFich.ItemIndex) ;
      Case NumTypFich1 of
       -1 :  //cas où l'on n'a pas choisi de type de fichiers
       Begin
       FLB_FichON.mask := 'abcdef' ;
       messag_1 := 'Vous devez choisir l''un des types de fichiers ' + #13 + #10 ;
       messag_1 += 'pour pouvoir continuer ' ;
       showmessage(messag_1) ;
       end;
       0 : TypFich1 := '.csv' ; // pour tous les autres cas définifion des types de fichiers
       1 : TypFich1 := '.flv' ;
       2 : TypFich1 := '.m2ts' ;
       3 : TypFich1 := '.mpg' ;
       4 : TypFich1 := '.ps' ;
       5 : typFich1 := '.ts' ;
       6 : TypFich1 := '.txt' ;
       7 : TypFich1 := '.vob' ;
       8 : TypFich1 := '.wmv' ;
      end;
      // traitement des fichiers
      if NumTypFich1 <> -1 then
      begin
       FLB_FichON.Directory := Ded_CheminON.Text ;
       FLB_FichON.Mask := '*' + TypFich1 ;
           messag_2 :=  'Entrez dans la grille "Nom Fichier" le nom des fichiers ' +#13+#10;
           messag_2 := messag_2+ 'concernés dans l''orde de la fusion et sans extension ' +#13+#10 ;
           messag_2:= messag_2+ ' puis cliquez sur le bouton " + " ' ;
       ShowMessage (messag_2) ;
      end;
    end;
     
    procedure TF_concat.FormShow(Sender: TObject);
      Var TypFich1 : String ;
      Var NumTypFich1 : Integer ;
    begin
          NumTypFich1 := integer(RG_TypFich.ItemIndex) ;
      Case NumTypFich1 of
       -1 :  //cas où l'on n'a pas choisi de type de fichiers
       Begin
       FLB_FichON.mask := 'abcdef' ;
       end;
       0 : TypFich1 := '.csv' ; // pour tous les autres cas définifion des types de fichiers
       1 : TypFich1 := '.flv' ;
       2 : TypFich1 := '.m2ts' ;
       3 : TypFich1 := '.mpg' ;
       4 : TypFich1 := '.ps' ;
       5 : typFich1 := '.ts' ;
       6 : TypFich1 := '.txt' ;
       7 : TypFich1 := '.vob' ;
       8 : TypFich1 := '.wmv' ;
      end;
      // traitement des fichiers
      if NumTypFich1 <> -1 then
      begin
       FLB_FichON.Directory := Ded_CheminON.Text ;
       FLB_FichON.Mask := '*' + TypFich1 ;
       GB_Off.visible := False ;
      // ShowMessage ('Pour l''instant tout va bien') ;
      end;
    end;
     
     
     
    end.
    Ci après aussi une copie de la feuille censée s'afficher :
    Nom : Feuille..JPG
Affichages : 293
Taille : 114,2 Ko

    Merci pour votre intérêt pour mon problème.

    R.O.

  10. #10
    Expert confirmé
    Avatar de Ph. B.
    Homme Profil pro
    Freelance
    Inscrit en
    Avril 2002
    Messages
    1 784
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 784
    Points : 5 915
    Points
    5 915
    Par défaut
    Bonjour,
    Citation Envoyé par OR34a Voir le message
    Je vous joint la totalité du code que j'ai écrit - l'objet de l'application est de créer un "masque de saisie" pour pouvoir concaténer des fichiers par l'intermédiaire d'un batch DOS (cela fonctionne bien directement en DOS et par le "masque" sur les machines où j'ai réussi à intaller l'application.
    Vous pourriez également fournir le fichier de ressources U_Concat.lfm, cela faciliterait les vérifications...
    Philippe.

  11. #11
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 206
    Points : 179
    Points
    179
    Par défaut a/s Problème executable - suite
    Bonjour,

    Ci joint zippée le fichier .lfm en question .

    Merci

    R.O.
    Fichiers attachés Fichiers attachés

  12. #12
    Responsable Lazarus & Pascal

    Avatar de gvasseur58
    Homme Profil pro
    Cultivateur de code (bio)
    Inscrit en
    Février 2013
    Messages
    1 436
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Cultivateur de code (bio)
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2013
    Messages : 1 436
    Points : 20 855
    Points
    20 855
    Billets dans le blog
    84
    Par défaut
    Citation Envoyé par OR34a Voir le message
    Bonjour,

    Ci joint zippée le fichier .lfm en question .

    Merci

    R.O.
    Bonjour,

    Très utile, merci ! Si personne ne le teste, j'aurai du temps ce soir
    Déjà, la répétition de code (celui qui permet de choisir un type de fichier, par exemple) doit être évitée au maximum, surtout afin d'éviter les erreurs et de compliquer les modifications. Solution : rassembler ce code dans une fonction/procédure.
    Ensuite, telle qu'elle est employée la TStringGrid n'est pas efficace : autant filtrer les chaînes vides avant toute chose et non en testant les cases après coup...
    Enfin, est-il vraiment possible de concaténer tout simplement des fichiers mpg (par exemple) par un batch de commandes MSDOS ? Que devient l'en-tête ?

    A bientôt
    Accès à mon site et à mon blog. Actualités, cours et ressources Delphi, Lazarus et Pascal.
    Pensez à la balise - Quelqu'un vous a aidé ou vous appréciez une intervention ? Pensez au

  13. #13
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 206
    Points : 179
    Points
    179
    Par défaut a/s Problème executable - suite
    Bonjour,
    En réponse à Gvasseur :
    Effectivement il n'est pas très élégant de répéter 2 fois la même série d'instructions. je l'avais fait un peu par "paresse". J'ai revu cela aujourd'hui et, en donnant une valeur "inhabituelle à la propriété Mask (j'ai choisi abcd) du TfileListBox on a une liste "vide" au lancement du logiciel et cela m'a permis de supprimer la procédure ONShow.
    Pour répondre à la question posée sur l'utilité de la concanétation des fichiers,je l'ai testé pour des .ts et cela marche, pour des . Vob aussi.
    Je pense de plus en plus que mon problème vient de la machine sur laquelle je teste le transfert du programme. Je tacherai de le tester sur une autre pour m'en assurer car il n'y aà priori pas de raisons que l'installation se passe bien sur une machine sous W8 et mal sur une machine sous W7 . Sur le test de la StringGrid, je vais regarder votre suggestion. J'avais trouvé cette façon de faire et elle fonctionne convenablement, donc je m'en contentais ( je suis loin d'être un expert mais simplement un amateur intéressé par un outil qui m'a rendu bien des services lorsque j'étais en activité).

    Merci

    R. O.

  14. #14
    Expert confirmé
    Avatar de Ph. B.
    Homme Profil pro
    Freelance
    Inscrit en
    Avril 2002
    Messages
    1 784
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 784
    Points : 5 915
    Points
    5 915
    Par défaut
    Bonjour,

    J'ai regardé le code et réalisé quelques modifications et corrections, j'ai généré un exécutable qui a fonctionné sous Windows 2000 SP4 Pro 32 bits, XP SP3 Home 32 bits, 8.1 Home 64 bits et 7 SP2 Pro 64 bits.
    Lazarus était installé sur XP mais pas sur les autres environnements...

    Ce que j'ai fait :
    • J'ai transformé le chemin vers le répertoire racine de windows écrit en dur par une fonction qui interroge le système (unité windirs GetWindowsSpecialDir(CSIDL_WINDOWS))
    • J'ai ajouté un test de l'existence du programme d'affichage de l'aide (hh.exe)
    • J'ai utilisé IncludeTrailingPathDelimiter(NomRep) pour rajouter les séparateurs de répertoire en fin de chaine si besoin plutôt que les rajouter en dur (en double !)
    • J'ai corrigé la concaténation des fichiers qui était mauvaise ('+' oublié...)
    • J'ai remplacé TProcess.CommandLine dépréciée par TProcess.Executable
    • J'ai ajouté la libération du Process créé localement à la procédure
    • J'ai enlevé la libération du Process Pro_Fusion, car il peut être relancé et du fait qu'il est créé par la fiche, il sera aussi supprimé par elle.
    • J'ai modifié l'appel à cmd pour voir le résultat en fin de traitement, car en fin de traitement contrairement à ce que affiche ShowMessage, on ne peut affirmer que le traitement s'est bien déroulé
    • J'ai factorisé dans une fonction le code renvoyant l'extension du fichier en fonction de l'index (elle peut être encore améliorée)


    Et comme cela a été dit précédemment, le test de comptage des fichiers à fusionner est à revoir (voire cette partie du traitement trop sujette à des erreurs de saisie...)

    Pour finir, le code modifié :
    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
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    305
    306
    307
    308
    309
    310
    311
    312
    313
    314
    315
    316
    317
    318
    319
    320
    321
    322
    323
    324
    325
    326
    327
    328
    329
    330
    331
    332
    333
    334
    335
    336
    337
    338
    339
    340
    341
    342
    343
    344
    345
    346
    347
    348
    349
    350
    351
    352
    353
    354
    355
    356
    357
    358
    359
    360
    361
    362
    363
    364
    365
    366
    367
    368
    369
    370
    371
    372
    373
    374
    375
    376
    377
    378
    379
    380
    381
    382
    383
    unit U_Concat;
     
    {$mode objfpc}{$H+}
     
    interface
     
    uses
      Classes, SysUtils, process, FileUtil, {PrintersDlgs,} Forms, Controls, Graphics,
      Dialogs, StdCtrls, ExtCtrls, Buttons, EditBtn, FileCtrl, Grids;
     
    type
      { TF_concat }
      TF_concat = class(TForm)
        Bt_Lanc: TBitBtn;
        Bt_aide: TBitBtn;
        Bt_fichplus: TBitBtn;
        DEd_CheminON: TDirectoryEdit;
        DEd_CheminOFF: TDirectoryEdit;
        Ed_Extension: TEdit;
        Ed_ChainEnt: TEdit;
        Ed_fichOFF: TEdit;
        FLB_fichON: TFileListBox;
        GB_ON: TGroupBox;
        GB_OFF: TGroupBox;
        Lb_titre: TLabel;
        Lb_listext: TLabel;
        Pro_Fusion: TProcess;
        RG_TypFich: TRadioGroup;
        Sh_typfich: TShape;
        SG_listFich: TStringGrid;
        procedure Bt_aideClick(Sender: TObject);
        procedure Bt_fichplusClick(Sender: TObject);
        procedure Bt_LancClick(Sender: TObject);
        procedure DEd_CheminONChange(Sender: TObject);
        procedure FormShow(Sender: TObject);
      private
        { private declarations }
        function GetExtension(Index: Integer): String;
      public
        { public declarations }
      end;
     
    var
      F_concat: TF_concat;
     
    implementation
     
    uses
      windirs;
    {$R *.lfm}
     
    { TF_concat }
     
    procedure TF_concat.Bt_fichplusClick(Sender: TObject);
    var
      TypFich, messag_1: String;
      NumTypFich, NbTotFich: Integer;
      NomFichgroup, NomRep1: String;
      i, j: Integer;
      // Cette procédure permet d'identifier les fichiers à fusionner
    begin
      NumTypFich := RG_TypFich.ItemIndex;
      if NumTypFich = -1 then
      begin
        //cas où l'on n'a pas choisi de type de fichiers
        messag_1 := 'Vous devez choisir l''un des types de fichiers'#13#10
                  + 'pour pouvoir continuer';
        ShowMessage(messag_1);
      end
      else
      begin
        // Récupération de l'extension en fonction de l'index
        TypFich:= GetExtension(NumTypFich);
        //
        FLB_FichON.Directory := Ded_CheminON.Text;
        FLB_FichON.Mask := '*' + TypFich;
        // Comptage du nombre de fichiers concernés par la fusion
        j := 0;
        NbTotFich := SG_listFich.RowCount - 1;
        for i := 1 to NbTotFich do
          with SG_listFich do
            if Cells[1, i] <> '' then
              j := j + 1;
        //     ShowMessage('le nombre de lignes remplies est de ' + intToStr(j) );
        // Constitution de la chaîne de caractères regroupant les fichiers à fusionner
        NomFichGroup := '';
        NomRep1 := IncludeTrailingPathDelimiter(Ded_CheminON.Text);
        for i := 1 to J do
          NomFichGroup := NomFichGroup + NomRep1 + SG_listFich.Cells[1, i] + TypFich + '+';
        //Fin de la constitution de la chaïne de caractères regroupant les fichiers à fusionner
        // ShowMessage ('Pour continuer cliquer sur le bouton " + "' ) ;
        Ed_ChainEnt.Text := LeftStr(NomFichGroup, Length(NomFichgroup) - 1);
        Ed_Extension.Text := TypFich;
        GB_Off.Visible := True;
      end;
      {
      NumTypFich := RG_TypFich.ItemIndex;
      case NumTypFich of
        -1:  //cas où l'on n'a pas choisi de type de fichiers
        begin
          messag_1 := 'Vous devez choisir l''un des types de fichiers'#13#10
                      + 'pour pouvoir continuer ';
          ShowMessage(messag_1);
        end;
        0: TypFich := '.csv'; // pour tous les autres cas définifion des types de fichiers
        1: TypFich := '.flv';
        2: TypFich := '.m2ts';
        3: TypFich := '.mpg';
        4: TypFich := '.ps';
        5: typFich := '.ts';
        6: TypFich := '.txt';
        7: TypFich := '.vob';
        8: TypFich := '.wmv';
      end;
      // traitement des fichiers
      if NumTypFich <> -1 then
      begin
        FLB_FichON.Directory := Ded_CheminON.Text;
        FLB_FichON.Mask := '*' + TypFich;
        // Comptage du nombre de fichiers concernés par la fusion
        j := 0;
        NbTotFich := SG_listFich.RowCount - 1;
        for i := 1 to NbTotFich do
          with SG_listFich do
            if Cells[1, i] <> '' then
              j := j + 1;
        //     ShowMessage('le nombre de lignes remplies est de ' + intToStr(j) );
      end;
      // Constitution de la chaîne de caractères regroupant les fichiers à fusionner
      NomFichGroup := '';
      NomRep1 := Ded_CheminON.Text;
      for i := 1 to J - 1 do
        NomFichGroup := NomFichGroup + NomRep1 + '\' + SG_listFich.Cells[1, i] + TypFich + '+';
      NomFichGroup := NomFichGroup + NomRep1 + '\' + SG_listFich.Cells[1, J] + TypFich;
      //Fin de la constitution de la chaïne de caractères regroupant les fichiers à fusionner
      // ShowMessage ('Pour continuer cliquer sur le bouton " + "' ) ;
      Ed_ChainEnt.Text := NomFichGroup;
      Ed_Extension.Text := TypFich;
      GB_Off.Visible := True;
      }
    end;
     
    procedure TF_concat.Bt_aideClick(Sender: TObject);
    var
      noma, appliaide, chappli: String;
      Aprocess: TProcess;
    begin
      // le chemin complet de l'application
      chappli := ExtractFilePath(Application.ExeName);
      // le chemin complet du fichier CHM à* ouvrir
      noma := chappli + 'ConcatFich.chm';
      // Le pgm d'ouverture du fichier chm (hh) + le chemin et nom du fichier CHM
      appliaide := GetWindowsSpecialDir(CSIDL_WINDOWS) + 'hh.exe';
      // pgm d'ouverture de l'aide existe ?
      if not FileExists(appliaide) then
      begin
        ShowMessage('le programme d''ouverture de l''aide n''existe pas ou n''est pas dans le bon dossier !');
      end
      // fichier d'aide existe ?
      else if not FileExists(noma) then
      begin
        ShowMessage('le fichier d''aide n''existe pas ou n''est pas dans le bon dossier !');
      end
      else
      begin
        // Visualisation de l'aide du logiciel
        Aprocess := TProcess.Create(nil);
        try
          Aprocess.Executable := appliaide;
          Aprocess.Parameters.Add(noma);
          Aprocess.Options := [poWaitOnExit];
          Aprocess.Execute;
        finally
          Aprocess.Free;
        end;
      end;
    {
      // Visualisation de l'aide du logiciel
      Aprocess := TProcess.Create(nil);
      try
        chappli := ExtractFilePath(Application.ExeName);
        //chemin complet du pgm que l'on utilise
        noma := chappli + 'ConcatFich.chm';     // le chemin complet du fichier CHM à* ouvrir
        Appliaide := 'C:\Windows\hh ' + noma;
        // Le pgm d'ouverture du fichier chm (hh) + le chemin et nom du fichier CHM
        if fileexists(noma) then
        begin
          Aprocess.CommandLine := appliaide;
          AProcess.Options := AProcess.Options + [poWaitOnExit];
          AProcess.Execute;
        end
        else
        begin
          ShowMessage('le fichier d''aide n''existe pas ou n''est pas dans le bon dossier !');
        end;
      finally
        Aprocess.Free;
      end;
      }
    end;
     
    procedure TF_concat.Bt_LancClick(Sender: TObject);
    var
      RepDep, RepStockFich, NomFichsort, NomCompletS, ChaineFus, ExtSortie: String;
      nombat: String;
      Fich_fus: TextFile;
    begin
      //Constitution de la chaine de caractères spécifiant le chemin et le nom
      //du fichier de sortie
      RepDep := Ded_CheminOn.Text;
      // variable correspondant au répertoire de départ des fichiers à fusionner
      RepDep := IncludeTrailingPathDelimiter(repDep);
      RepStockFich := IncludeTrailingPathDelimiter(Ded_CheminOFF.Text);
      NomFichSort := Ed_FichOFF.Text;
      ExtSortie := Ed_Extension.Text;
      NomCompletS := RepStockFich + NomFichSort + ExtSortie;
      ChaineFus := 'Copy /b ' + Ed_ChainEnt.Text + ' ' + NomCompletS;
      //  Création par code du fichier .bat de lancement du processus de fusion
      NomBat := RepDep + 'FusionFich.bat';
      // le chemin complet du fichier ".bat" à créer puis exécuter
      AssignFile(Fich_fus, NomBat);
      Rewrite(Fich_fus);
      try
        WriteLn(Fich_fus, 'Cmd /c');
        WriteLn(Fich_fus, ChaineFus);
        Writeln(Fich_fus, 'pause');
      finally
        CloseFile(Fich_fus);
      end;
      //fin de la création du fichier bat
      // Processus de fusion des fichiers
      //Appel au Composant Tprocess nommé Pro_Fusion
      try
        Pro_Fusion.Executable := Nombat;
        // Pro_Fusion = T_Process accès à la ligne de commande "exécuter"
        Pro_Fusion.Execute;
        // dans les options de Pro_Fusion PoWaitOnExit a pour valeur True
        //Pro_Fusion.Free;
      finally
     
      end;
      // Pro_Fusion.Parameters.Add(nombat) ;
      ShowMessage('Opération de fusion effectuée avec succès');
      DeleteFile(Nombat);
    {
      //Constitution de la chaine de caractères spécifiant le chemin et le nom
      //du fichier de sortie
      RepDep := Ded_CheminOn.Text;
      // variable correspondant au répertoire de départ des fichiers à fusionner
      RepDep := repDep + '\';
      RepStockFich := Ded_CheminOFF.Text;
      NomFichSort := Ed_FichOFF.Text;
      ExtSortie := Ed_Extension.Text;
      NomCompletS := ' ' + RepStockFich + '\' + NomFichSort + ExtSortie;
      ChaineFus := 'Copy /b ' + Ed_ChainEnt.Text + NomCompletS;
      //  Création par code du fichier .bat de lancement du processus de fusion
      NomBat := RepDep + 'FusionFich.bat';
      // le chemin complet du fichier ".bat" à créer puis exécuter
      AssignFile(Fich_fus, NomBat);
      Rewrite(Fich_fus);
      try
        WriteLn(Fich_fus, 'Cmd /c');
        WriteLn(Fich_fus, ChaineFus);
      finally
        CloseFile(Fich_fus);
      end;
      //fin de la création du fichier bat
      // Processus de fusion des fichiers
      //Appel au Composant Tprocess nommé Pro_Fusion
      try
        Pro_Fusion.CommandLine := Nombat;
        // Pro_Fusion = T_Process accès à la ligne de commande "exécuter"
        Pro_Fusion.Execute;
        // dans les options de Pro_Fusion PoWaitOnExit a pour valeur True
        //Pro_Fusion.Free;
      finally
     
      end;
      // Pro_Fusion.Parameters.Add(nombat) ;
      ShowMessage('Opération de fusion effectuée avec succès');
      DeleteFile(Nombat);
    }
    end;
     
    procedure TF_concat.DEd_CheminONChange(Sender: TObject);
    var
      TypFich1, messag_1, messag_2: String;
      NumTypFich1: Integer;
    begin
      NumTypFich1 := RG_TypFich.ItemIndex;
      if NumTypFich1 = -1 then
      begin
        //cas où l'on n'a pas choisi de type de fichiers
        FLB_FichON.mask := 'abcdef';
        messag_1 := 'Vous devez choisir l''un des types de fichiers'#13#10
                  + 'pour pouvoir continuer';
        ShowMessage(messag_1);
      end
      else
      begin
        TypFich1 := GetExtension(NumTypFich1);
        // traitement des fichiers
        FLB_FichON.Directory := Ded_CheminON.Text;
        FLB_FichON.Mask := '*' + TypFich1;
        messag_2 := 'Entrez dans la grille "Nom Fichier" le nom des fichiers'#13#10
                  + 'concernés dans l''ordre de la fusion et sans extension'#13#10
                  + 'puis cliquez sur le bouton " + "';
        ShowMessage(messag_2);
      end;
     
      {
      NumTypFich1 := RG_TypFich.ItemIndex;
      case NumTypFich1 of
        -1:  //cas où l'on n'a pas choisi de type de fichiers
        begin
          FLB_FichON.mask := 'abcdef';
          messag_1 := 'Vous devez choisir l''un des types de fichiers'#13#10
                    + 'pour pouvoir continuer ';
          ShowMessage(messag_1);
        end;
        0: TypFich1 := '.csv'; // pour tous les autres cas définifion des types de fichiers
        1: TypFich1 := '.flv';
        2: TypFich1 := '.m2ts';
        3: TypFich1 := '.mpg';
        4: TypFich1 := '.ps';
        5: typFich1 := '.ts';
        6: TypFich1 := '.txt';
        7: TypFich1 := '.vob';
        8: TypFich1 := '.wmv';
      end;
      // traitement des fichiers
      if NumTypFich1 <> -1 then
      begin
        FLB_FichON.Directory := Ded_CheminON.Text;
        FLB_FichON.Mask := '*' + TypFich1;
        messag_2 := 'Entrez dans la grille "Nom Fichier" le nom des fichiers'#13#10
                  + 'concernés dans l''ordre de la fusion et sans extension'#13#10
                  + 'puis cliquez sur le bouton " + " ';
        ShowMessage(messag_2);
      end;
      }
    end;
     
    procedure TF_concat.FormShow(Sender: TObject);
    var
      TypFich1: String;
      NumTypFich1: Integer;
    begin
      NumTypFich1 := RG_TypFich.ItemIndex;
      if NumTypFich1 = -1 then
      begin
        //cas où l'on n'a pas choisi de type de fichiers
        FLB_FichON.mask := 'abcdef';
      end
      else
      begin
        // pour tous les autres cas définifion des types de fichiers
        TypFich1 := GetExtension(NumTypFich1);
        // traitement des fichiers
        FLB_FichON.Directory := Ded_CheminON.Text;
        FLB_FichON.Mask := '*' + TypFich1;
        GB_Off.Visible := False;
        // ShowMessage ('Pour l''instant tout va bien') ;
      end;
    end;
     
    function TF_concat.GetExtension(Index: Integer): String;
    begin
      // retourne la définifion des types de fichiers
      case Index of
        0: Result := '.csv';
        1: Result := '.flv';
        2: Result := '.m2ts';
        3: Result := '.mpg';
        4: Result := '.ps';
        5: Result := '.ts';
        6: Result := '.txt';
        7: Result := '.vob';
        8: Result := '.wmv';
      end;
    end;
     
    end.
    Philippe.

  15. #15
    Responsable Lazarus & Pascal

    Avatar de gvasseur58
    Homme Profil pro
    Cultivateur de code (bio)
    Inscrit en
    Février 2013
    Messages
    1 436
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Cultivateur de code (bio)
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2013
    Messages : 1 436
    Points : 20 855
    Points
    20 855
    Billets dans le blog
    84
    Par défaut
    Citation Envoyé par Ph. B. Voir le message
    Bonjour,

    J'ai regardé le code et réalisé quelques modifications et corrections, j'ai généré un exécutable qui a fonctionné sous Windows 2000 SP4 Pro 32 bits, XP SP3 Home 32 bits, 8.1 Home 64 bits et 7 SP2 Pro 64 bits.
    Lazarus était installé sur XP mais pas sur les autres environnements...
    Bravo . Bien plus rapide que moi

    Citation Envoyé par Ph. B. Voir le message
    [*]J'ai transformé le chemin vers le répertoire racine de windows écrit en dur par une fonction qui interroge le système (unité windirs GetWindowsSpecialDir(CSIDL_WINDOWS))[*]J'ai ajouté un test de l'existence du programme d'affichage de l'aide (hh.exe)
    Pour la portabilité du code, j'aurais plutôt employé les composants THTMLHelpDatabase et THTMLBrowserHelpViewer qui permettent de gérer une aide au format HTML. On trouve un exemple d'utilisation de ces composants dans le répertoire examples/helphtml. On y gagne sur tous les plans : on a un système plus moderne d'aide via le navigateur et le logiciel fonctionnera aussi sur Linux.

    Bonne continuation !
    Accès à mon site et à mon blog. Actualités, cours et ressources Delphi, Lazarus et Pascal.
    Pensez à la balise - Quelqu'un vous a aidé ou vous appréciez une intervention ? Pensez au

  16. #16
    Responsable Lazarus & Pascal

    Avatar de gvasseur58
    Homme Profil pro
    Cultivateur de code (bio)
    Inscrit en
    Février 2013
    Messages
    1 436
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Cultivateur de code (bio)
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2013
    Messages : 1 436
    Points : 20 855
    Points
    20 855
    Billets dans le blog
    84
    Par défaut
    Citation Envoyé par OR34a Voir le message
    Sur le test de la StringGrid, je vais regarder votre suggestion. J'avais trouvé cette façon de faire et elle fonctionne convenablement, donc je m'en contentais ( je suis loin d'être un expert mais simplement un amateur intéressé par un outil qui m'a rendu bien des services lorsque j'étais en activité).

    Merci

    R. O.
    Le forum est là pour aider et la modestie du propos est à votre honneur.
    Gilles
    Accès à mon site et à mon blog. Actualités, cours et ressources Delphi, Lazarus et Pascal.
    Pensez à la balise - Quelqu'un vous a aidé ou vous appréciez une intervention ? Pensez au

  17. #17
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 206
    Points : 179
    Points
    179
    Par défaut a/s problème d'exécutable - suite et fin
    Merci beaucoup pour vos réponses et surtout pour la leçon donnée par pH.B qui, en étudiant le code proposé sera, en fait, un excellent outil de formation.On peut donc considérer la discussion comme close.
    Je signale toutefois une curiosité : persuadé que mon problème de transfert venait peut-être des conséquences de l'envoi "dans le bac à sable" par Avast, j'ai installé lazarus (version 1.2.6.) sur la machine concernée (w7) et j'ai tenté d'ouvrir le projet. Il s'ouvre et on voit la fiche du code mais la fiche TF_Concat n'apparait jamais même quand on tente de la faire apparaitre par l'option "bascule fiche-unité". Il y a peut-être un problème lié aux blocages provoqués par Avast.

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

Discussions similaires

  1. problème avec la fonction latex() du package R Hmisc
    Par naima.oumouhou dans le forum R
    Réponses: 0
    Dernier message: 02/03/2011, 11h26
  2. Java Beans : problème avec l'instance ou le package
    Par Baratribord dans le forum Servlets/JSP
    Réponses: 5
    Dernier message: 29/05/2008, 16h18
  3. Réponses: 6
    Dernier message: 22/01/2007, 11h43
  4. [ Débutant ] Problème avec un package
    Par counet dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 31/10/2005, 15h00
  5. Réponses: 1
    Dernier message: 30/09/2005, 10h46

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