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 :

Une application sans form


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé

    Profil pro
    Inscrit en
    Avril 2004
    Messages
    540
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 540
    Par défaut Une application sans form
    Bonsoir à tous

    J'escomptais en compilant en ligne de commande, un projet sans form, obtenir un EXE plus compact.

    Je me heurte à un problème de syntaxe. Ici j'ai vu une discussion là-dessus. J'ai reproduit le code fourni :

    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
     
    program Project1;
     
    uses
      Forms, Dialogs;
     
    procedure ShowHello;
    begin
      ShowMessage('Hello');
    end;
     
    begin
      Application.Initialize;
      Application.Run;
      ShowHello;
    end.
    Oui, mais si je veux rajouter (c'est le cas, forcément) telle ou telle procédure ou fonction : où je la déclare ? Ce code ne passe pas :
    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
     
    program Project1;
     
    uses
      Forms, Dialogs;
     
    Procedure Essai;
     
     
     
    procedure ShowHello;
    begin
      ShowMessage('Hello');
    end;
     
    begin
      Application.Initialize;
      Application.Run;
      ShowHello;
      Essai;
     
     
    Procedure Essai;
    begin
     
    end;
     
    end.
    Si je la déclare avant USES, ça ne passe pas non plus. Euh...

  2. #2
    Membre très actif
    Homme Profil pro
    Santé
    Inscrit en
    Septembre 2010
    Messages
    290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Santé
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2010
    Messages : 290
    Par défaut
    Bonsoir,

    Perso, pour une application sans form, j'utilise un objet TDataModule.

  3. #3
    Expert confirmé
    Avatar de Ph. B.
    Homme Profil pro
    Freelance
    Inscrit en
    Avril 2002
    Messages
    1 786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    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 786
    Par défaut
    Bonjour,
    Citation Envoyé par bvsud Voir le message
    J'escomptais en compilant en ligne de commande, un projet sans form, obtenir un EXE plus compact.

    Je me heurte à un problème de syntaxe. Ici j'ai vu une discussion là-dessus. J'ai reproduit le code fourni
    Copier sans comprendre, ce n'est pas bien...

    Citation Envoyé par bvsud Voir le message
    Si je la déclare avant USES, ça ne passe pas non plus. Euh...
    Ben oui, et c'est logique.
    Il faudrait étudier un peu plus en détail la syntaxe d'un programme (Objet)Pascal en particulier l'ordre de déclarations de fonctions, procédures, variables, constantes, etc, etc.

    Bref remis dans le bon ordre et dans le cas présent après la clause uses et avant le bloc de code principal begin ... end., cela compile et fonctionne...
    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
    program Project1;
     
    uses
      Forms, Dialogs;
     
    Procedure Essai;
    begin
      ShowMessage('Ceci est un essai (réussi) !');
    end;
     
    procedure ShowHello;
    begin
      ShowMessage('Hello');
    end;
     
    // BLOC PRINCIPAL
    begin
      Application.Initialize;
      Application.Run;
      ShowHello;
      Essai;
    end.
    Par contre, comme il y a encore l'unité Forms nécessaire pour l'objet Application, je ne pense pas que vous y gagniez tant d'octets que ça au final...

  4. #4
    Expert éminent
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Par défaut
    Bonjour,

    Dans ce cas l'objet Application ne sert à rien, et l'unité Form non plus du coup.

    on évitera l'usage de MessageBox qui crée un TForm ! et on passera par l'API Windows

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    program Project1;
     
    uses
      Winapi.Windows;
     
    {$R *.res}
     
    begin
      MessageBox(0, 'Hello', 'Coucou', 0);
    end.
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  5. #5
    Membre éclairé

    Profil pro
    Inscrit en
    Avril 2004
    Messages
    540
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 540
    Par défaut
    Bonjour.

    Je m'aperçois qu'avec un fichier .pas en include (Uses), ça passe. Sans les inclusions Forms, etc, juste le nécessaire : je dois pouvoir générer des EXE un peu plus compacts avec le compilateur en ligne de commande ?

    Après tout, s'il n'y a rien à afficher, pourquoi une Form ?

  6. #6
    Expert confirmé
    Avatar de Ph. B.
    Homme Profil pro
    Freelance
    Inscrit en
    Avril 2002
    Messages
    1 786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    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 786
    Par défaut
    Citation Envoyé par bvsud Voir le message
    Ke m'aperçois qu'avec un fichier .pas en include (Uses), ça passe.
    Il faut vraiment que vous étudiez la structure d'un programme (Object)Pascal, car j'ai nettement l'impression que vous êtes dans l'empirisme le plus pur...
    http://www.marcocantu.com/epascal/Fr...h11unitfr.html

    Citation Envoyé par bvsud Voir le message
    Sans les inclusions Forms, etc, juste le nécessaire : je dois pouvoir générer des EXE un peu plus compacts avec le compilateur en ligne de commande ?
    Non, compiler depuis l'EDI ou en ligne de commandes ne changera rien à l'affaire.
    Par contre, jouer sur certaines options de compilations peut entrainer une réduction plus ou moins importante de la taille de l’exécutable.

    Citation Envoyé par bvsud Voir le message
    Après tout, s'il n'y a rien à afficher, pourquoi une Form ?
    Pas une Form (ou un objet de la classe TForm) mais l'unité Forms. Du moment que l'objet Application n'est plus présent, ni aucun autre objet ne nécessitant l'unité Forms, on peut évidemment s'en passer et la retirer.
    C'est valable pour toutes les unités qui répondent à ces conditions.
    Peganza avait sorti à l'époque un outil gratuit signalant (supprimant même) dans le code d'un projet et de ses unités les références inutiles dans les clauses uses.
    En fait, il existe toujours : ICARUS

  7. #7
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 173
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par Ph. B. Voir le message
    Peganza avait sorti à l'époque un outil gratuit signalant (supprimant même) dans le code d'un projet et de ses unités les références inutiles dans les clauses uses.
    En fait, il existe toujours : ICARUS
    Pardon pour le hors-sujet mais il y a des choses fort intéressantes sur ce site. Merci pour le lien.

    Ça donne des idées pour le défi Pascal/Delphi.

Discussions similaires

  1. Arrêt d'une application sans form
    Par ppphil dans le forum C#
    Réponses: 3
    Dernier message: 08/06/2010, 14h14
  2. Comment deployer une application oracle forms ?
    Par hugobob dans le forum Forms
    Réponses: 3
    Dernier message: 13/04/2006, 18h40
  3. Pause dans une application sans utiliser Sleep()
    Par CriPpLe dans le forum MFC
    Réponses: 9
    Dernier message: 25/03/2006, 11h00
  4. [Portabilité]Lancer une application sans savoir son chemin
    Par tony_big_guy dans le forum Général Java
    Réponses: 3
    Dernier message: 10/12/2005, 14h06
  5. [Choix langages] Une application sous forme software et web
    Par fremsoi dans le forum Langages de programmation
    Réponses: 3
    Dernier message: 17/11/2004, 15h05

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