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

Delphi Discussion :

un petit exemple pour faire des .exe grace a mon programme


Sujet :

Delphi

  1. #1
    Membre du Club
    Inscrit en
    Avril 2006
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 64
    Points : 41
    Points
    41
    Par défaut un petit exemple pour faire des .exe grace a mon programme
    bonjour
    j'ai un programme comme powerpoint l'utilisateur doit mettre des images et puis des sons et un petit texte et puis le compiler et l'executer pour l'avoir en .exe , ca veut dire meme si mon programme n'est pas installer il peut marcher car c'est un executable . le probleme c'est que je ne sais pas comment faire pour donner a l'utilisateur la possibiliter d'executer son travaille réaliser avec mon programme

    aidez moi S.V.P

  2. #2
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2004
    Messages
    185
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2004
    Messages : 185
    Points : 160
    Points
    160
    Par défaut
    Je n'ai pas trop bien compris =) !
    A+

  3. #3
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    Il suffit de préparer un EXE "vierge" qui sera capable de lire le fichier de donnée. Ces données, il faut que tu les places tout à la fin de l'EXE. Pour fusionner 2 fichiers, utilise BlockRead & BlockWrite, FileRead & FileWrite ou TFileStream par exemple. Dans tous les cas, cette méthode nécessite de savoir lire et écrire dans les fichiers binaires.

    Tu obtiens donc qu'un seul EXE possèdant à la fois le lecteur et les données. Ce programme devra pouvoir effectuer les opérations suivantes :

    • Rechercher l'offset où commencent les données
    • Extraire les données pour en faire un nouveau fichier
    • Lire ce fichier puis le supprimer

    Pour stocker l'offset où commence les données, tu peux très bien dire que ce sont les 4 derniers octets de ton EXE (filesize - 4). Il suffira alors de ne pas copier les 4 derniers octets lorsque tu copieras les données... Voici comment obtenir 4 octets à partir d'un entier (Integer) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    TYPE LongRec=RECORD lo,hi:WORD;END;
         WordRec=RECORD lo,hi:BYTE;END;
     
    VAR s1,s2,s3,s4:BYTE;
        size:INTEGER;
     
    BEGIN
      s1:=WordRec(LongRec(size).lo).lo;
      s2:=WordRec(LongRec(size).lo).hi;
      s3:=WordRec(LongRec(size).hi).lo;
      s4:=WordRec(LongRec(size).hi).hi;
    END;
    LongRec permet de décomposer un INTEGER en 2 WORD et WordRec permet de décomposer un WORD en 2 BYTES. Pour l'opération inverse, je fais la somme des octets multipliés par leur poids:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    size:=(s4*$1000000)+(s3*$10000)+(s2*$100)+s1;
    Si tu as des questions, n'hésite pas, à+

    [EDIT] Ce sujet est en rapport je crois :
    http://www.developpez.net/forums/sho...d.php?t=160559
    De retour parmis vous après 10 ans!!

  4. #4
    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
    Euh pas très propre, ta soluce Mieux vaut ajouter les données indiquées en ressource de l'application. Il existe quelques API qui permettent de modifier les ressources d'un exe déjà créé : en ajouter, en modifier, et en supprimer.

    Voici un petit jeu de routines permettant de gérer les ressources d'un exécutable :
    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
    {$IFDEF MSWINDOWS}
     
    function BeginUpdateRes(const FileName : string) : integer;
    begin
      // Appel de Windows.BeginUpdateResource
      Result := BeginUpdateResource(PChar(FileName), False);
      // Si Result = 0, il y a eu une erreur API
      if Result = 0 then
        raise EUpdateResError.Create;
    end;
     
    procedure AddResource(ResHandle : integer; const ResName : string;
      Resource : TStream; const ResType : string = 'RT_RCDATA');
    var MemRes : TMemoryStream;
        MustFreeRes, OK : boolean;
    begin
      MustFreeRes := False;
      // On met dans MemRes un flux mémoire qui contient les données de la ressource
      if Resource is TMemoryStream then MemRes := Resource as TMemoryStream else
      begin
        MemRes := TMemoryStream.Create;
        MemRes.LoadFromStream(Resource);
        MustFreeRes := True;
      end;
      // Appel de Windows.UpdateResource
      OK := UpdateResource(ResHandle, PChar(ResType), PChar(ResName), 0,
                           MemRes.Memory, MemRes.Size);
      // On supprime le flux mémoire si on l'a créé
      if MustFreeRes then MemRes.Free;
      // Si UpdateResource a renvoyé False, il y a eu une erreur
      if not OK then raise EUpdateResError.Create;
    end;
     
    procedure DelResource(ResHandle : integer; const ResName : string);
    begin
      // Appel de Windows.UpdateResource
      if not UpdateResource(ResHandle, '', PChar(ResName), 0, nil, 0) then
      // Si UpdateResource a renvoyé False, il y a eu une erreur
        raise EUpdateResError.Create;
    end;
     
    procedure EndUpdateRes(ResHandle : integer; Cancel : boolean = False);
    begin
      // Appel de Windows.EndUpdateResource
      if not EndUpdateResource(ResHandle, Cancel) then
      // Si EndUpdateResource a renvoyé False, il y a eu une erreur
        raise EUpdateResError.Create;
    end;
     
    procedure AddResToFile(const FileName, ResName : string; Resource : TStream;
      const ResType : string = 'RT_RCDATA');
    var ResHandle : integer;
    begin
      ResHandle := BeginUpdateRes(FileName);
      try
        AddResource(ResHandle, ResName, Resource, ResType);
        EndUpdateRes(ResHandle);
      except
        try EndUpdateRes(ResHandle, True) except end;
        raise;
      end;
    end;
     
    procedure DelResInFile(const FileName, ResName : string);
    var ResHandle : integer;
    begin
      ResHandle := BeginUpdateRes(FileName);
      try
        DelResource(ResHandle, ResName);
        EndUpdateRes(ResHandle);
      except
        try EndUpdateRes(ResHandle, True) except end;
        raise;
      end;
    end;
     
    {$ENDIF}
    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.

  5. #5
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    Effectivement.
    De retour parmis vous après 10 ans!!

  6. #6
    Membre du Club
    Inscrit en
    Avril 2006
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 64
    Points : 41
    Points
    41
    Par défaut
    vous m'avez pas bien compris !

    mon truc c'est de rassembler des image et puis les compiler pour avoir un executable .

    exemple : dans mon programme l'utilisateur charge ses images et choisi des effets pour les tourner et puis il crée l'executable grace a mon logiciel , par exemple si il le nomme album en obtien " Album.exe " aloe il est executable sans avoir installé mon logiciel pour le lire

    je cherche a savoir comment l'utilisateur peut executer son travaille réaliser par mon programme grace a mon programme

  7. #7
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    vous m'avez pas bien compris !
    Oh si au contraire, je crois que nous avons bien compris ta question (excepté mathelec peut-être).
    De retour parmis vous après 10 ans!!

  8. #8
    Expert éminent
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 664
    Détails du profil
    Informations personnelles :
    Âge : 43
    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 664
    Points : 6 967
    Points
    6 967
    Par défaut
    Citation Envoyé par Nadirov
    vous m'avez pas bien compris !

    mon truc c'est de rassembler des image et puis les compiler pour avoir un executable .
    Passer par les ressources comme on te le propose me semble une bonne idée.
    Creuse la question ...

    L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai. ___ Écrivez dans un français correct !!

    C++Builder 5 - Delphi 6#2 Entreprise - Delphi 2007 Entreprise - Delphi 2010 Architecte - Delphi XE Entreprise - Delphi XE7 Entreprise - Delphi 10 Entreprise - Delphi 10.3.2 Entreprise - Delphi 10.4.2 Entreprise - Delphi 11.1 Entreprise
    OpenGL 2.1 - Oracle 10g - Paradox - Interbase (XE) - PostgreSQL (15.4)

  9. #9
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    Voici une autre méthode certainement plus facile :
    Il s'agit de transformer un ensemble de fichiers en un seul éxécutable.
    J'ai trouvé 3 utilitaires, mais probablement qu'il en existe d'autres :
    http://www.softpedia.com/get/Program.../MoleBox.shtml
    http://www.chilkatsoft.com/ChilkatSfx.asp
    http://programmerstools.org/taxonomy/term/15

    Ainsi, tu peux ajouter autant de fichiers de données que tu veux et demander à ton lecteur de les lire les uns à la suite des autres...
    De retour parmis vous après 10 ans!!

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 88
    Points : 101
    Points
    101
    Par défaut
    mais pourquoi utiliser un autre exécutable puisque tu as déjà ton exécutable créé automatiquement (exemple de album.exe) ???

  11. #11
    Membre expert
    Avatar de aityahia
    Homme Profil pro
    CIEPTAL CARS SPA
    Inscrit en
    Mars 2006
    Messages
    1 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Algérie

    Informations professionnelles :
    Activité : CIEPTAL CARS SPA
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 938
    Points : 3 329
    Points
    3 329
    Par défaut
    il vous sera tres déficile de faire un compilateur je pense meme quand peut pas faire sa avec delphi. alors le mieux c'est développer une visioneurse et de créer ton propre type de fichier our tuva stocker les images et les position....etc.

  12. #12
    Membre du Club
    Inscrit en
    Avril 2006
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 64
    Points : 41
    Points
    41
    Par défaut
    si en peut bien réaliser un compilateur en delphi

  13. #13
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    Je viens de comprendre que tu n'as pas les sources du lecteur, je me trompe ?
    De retour parmis vous après 10 ans!!

  14. #14
    Membre du Club
    Inscrit en
    Avril 2006
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 64
    Points : 41
    Points
    41
    Par défaut
    Citation Envoyé par Sub0
    Je viens de comprendre que tu n'as pas les sources du lecteur, je me trompe ?
    oui voila !!

  15. #15
    Membre émérite
    Avatar de skywaukers
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2005
    Messages
    1 216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

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

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 216
    Points : 2 303
    Points
    2 303
    Par défaut
    bonjour,

    Citation Envoyé par aityahia
    il vous sera tres déficile de faire un compilateur je pense meme quand peut pas faire sa avec delphi.
    ben je vois pas pourquoi on pourrait pas ?
    le compilateur Freepascal est écrit en ..... freePascal, donc ...

    @++
    Dany

  16. #16
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    Citation Envoyé par Nadirov
    Sub0 a écrit :
    Je viens de comprendre que tu n'as pas les sources du lecteur, je me trompe ?
    oui voila !!
    Alors j'ai une solution pour toi. Elle pourra te paraître compliquée, mais c'est parce que je détaille tout. On simplifiera tout ça quand tu auras compris comment ça marche.

    Il s'agit de lancer un fichier de commande. C'est un simple fichier texte où tu mets ce que tu veux lancer. Il faut qu'il soit nommé "go.bat". Prenons l'exemple où le lecteur sera notepad.exe :

    Fichier go.bat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    notepad.exe f1.txt
    notepad.exe f2.txt
    notepad.exe f3.txt
    Ce fichier BAT est lancé par le programme gobat.exe dont voici le code source Delphi (fichier DPR):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Program gobat;
    Uses Forms,ShellApi;
    Begin
     ShellExecute(Application.Handle,NIL,'go.bat','','',0);
    End.
    Pour le compiler, crée un fichier texte nommé gobat.dpr, et colle dedans le code ci-dessus puis compile-le avec Delphi (touche F9). Tu obtiens ainsi un programme nommé gobat.exe. Ce programme sera le même lanceur pour toutes tes démos, tu n'auras donc plus besoin de le recompiler.

    Il ne te reste plus qu'à générer le fichier final avec un des utilitaires que je t'ai donné plus haut, par exemple, celui-ci :
    http://www.molebox.com/download.shtml
    Tu places dans la liste de cet utilitaire tous les fichiers nécessaires :

    • notepad.exe
    • f1.txt
    • f2.txt
    • f3.txt
    • go.bat

    ...et tu indiques comme lanceur, gobat.exe.

    Une fois ton pack compilé en EXE, lorsque tu l'éxécutes, les 3 fichiers textes seront lancés les uns derrière les autres (le 2ème se lance quand le 1er est fermé). Pour résumé, gobat.exe éxécute go.bat qui lui-même éxécute les 3 commandes qu'on lui a donné.

    Une fois que tu auras bien compris, je t'expliquerai comment automatiser cette compilation. On pourra envisager de faire un petit programme Delphi où l'on définit le lecteur et les fichiers de données, puis le programme crée automatiquement l'EXE final.
    De retour parmis vous après 10 ans!!

  17. #17
    Membre du Club
    Inscrit en
    Avril 2006
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 64
    Points : 41
    Points
    41
    Par défaut
    dsl ca marche pas

    voila ce que j'ai fait :

    dans executable j'ai fait la racine de : gobat

    et dans pack to automatiquement ecrit : gobat.exe.exe

    et dans package contenant j'ai mis : f1.txt
    f2.txt
    f3.txt
    go.bat.txt
    Notepad.exe
    c'est en desordre , je crois qu'il faut les mettres en ordre N?

  18. #18
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    Déjà, il ne faut pas que "gobat.exe" devienne "gobat.exe.exe".
    Dephi compile le programme "gobat.dpr" en "gobat.exe", c'est tout ce qui nous importe.

    Il ne faut pas que "go.bat" devienne "go.bat.txt" (normal que ça marche pas). Il faudra changer l'extension.

    De toutes façons, avant de le compiler avec l'utilitaire, tu dois pouvoir voir ce que ça donne en éxécutant "gobat.exe".
    Quand tu verras que ça fonctionne, alors là, tu pourras tout mettre dans un seul EXE.

    En ce qui concerne l'ordre, il est déjà définit dans le fichier BAT :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    notepad.exe f1.txt
    notepad.exe f2.txt
    notepad.exe f3.txt
    Les fichiers textes vont s'ouvrir dans cet ordre, les uns après les autres.
    Si l'utilitaire les mets pas dans cet ordre dans sa liste de fichiers, ce n'est pas grave, ça fonctionnera quand même.

    Je te rappelle au passage que l'on pourra facilement réaliser un petit programme Delphi capable de faire tout ça automatiquement. Pour le moment, il faut d'abord que tu arrives à passer cette 1ère étape pour que tu ne sois pas complètement perdu après...
    De retour parmis vous après 10 ans!!

  19. #19
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    Ps: Relis un peu ton message avant de le poster, c'est pratiquement du charabia ton post là. Ou bien tu n'es pas francophone peut-être... En tous les cas, mes réponses sont suffisemment claires, non ?
    De retour parmis vous après 10 ans!!

  20. #20
    Membre du Club
    Inscrit en
    Avril 2006
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 64
    Points : 41
    Points
    41
    Par défaut
    desolé ca marche pas

    voila ce que j'ai mis en detaille

    j'ai crée un fichier texte nommé en : go.bat et j'ai mis ce bout de code :

    notepad.exe f1.txt
    notepad.exe f2.txt
    notepad.exe f3.txt
    et puis j'ai fait un fichier delphi j'ai ecrit ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Program gobat;
    Uses Forms,ShellApi;
    Begin
     ShellExecute(Application.Handle,NIL,'go.bat','','',0);
    End.
    j'ai insataller unit1 et puis gobat.dpr et j'ai lancer f9 et c'a a etait executer automatiquement

    et puis j'ai crée trois fichier texte nommé :

    f1.txt , f2.txt , f3.txt

    voila et puis j'ai appeler le logiciel que tu ma donner

    j'ai fait : executable : la racine : gobat.exe
    pack to : gobat.exe.exe
    et les fichiers pack contenent :

    f1.txt.txt
    f2.txt.txt
    f3.txt.txt
    go.bat.txt
    Notepad.exe

    et voila , stp stp aide moi

    c'est ou l'erreur ?

Discussions similaires

  1. comment faire un .exe à partir de mon programme
    Par membreComplexe12 dans le forum C++
    Réponses: 6
    Dernier message: 14/02/2011, 17h36
  2. [debutant] Quel EDI choisir pour faire des exe autonomes sous Windows ?
    Par damned3 dans le forum Choisir un environnement de développement
    Réponses: 10
    Dernier message: 06/11/2006, 14h00
  3. Linker un .o avec des archives pour faire un exe
    Par vdumont dans le forum Linux
    Réponses: 4
    Dernier message: 28/03/2006, 22h33
  4. Petit logiciel graphique pour faire des Onglets
    Par javaSudOuest dans le forum Autres Logiciels
    Réponses: 4
    Dernier message: 18/10/2005, 14h39

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