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 :

Initialization et DecimalSeparator


Sujet :

Langage Delphi

  1. #1
    Membre chevronné
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 262
    Points : 1 928
    Points
    1 928
    Par défaut Initialization et DecimalSeparator
    Bonjour,

    Question toute bête de débutant :
    Oú donc placer la section 'Initialization" dans l'unité principale pour imposer la virgule comme DecimalSeparator ?

    J'ai remarqué ça sur une de ces excellentes questions de la FAQ de Nono and Cie :
    http://delphi.developpez.com/faq/?pa...racteredecimal

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Initialization
    DecimalSeparator := '.';
    end.
    Perso mon appli est basée exclusivement avec la virgule, aucun blème pour échanger le "point" du code ci-dessus par une "virgule" ?

    Merci de vos lumières éclairées.

    PS : J'ai inséré cette partie "Initialization" (avec une virgule) tout au bas de ma fiche principale, là seulement ça passe lol ; suis-je dans le vrai ?

  2. #2
    Membre expert
    Avatar de e-ric
    Homme Profil pro
    Apprenti chat, bienfaiteur de tritons et autres bestioles
    Inscrit en
    Mars 2002
    Messages
    1 552
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Apprenti chat, bienfaiteur de tritons et autres bestioles

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 552
    Points : 3 920
    Points
    3 920
    Par défaut
    Salut

    Les clauses initilization (cf F1) sont exécutées au tout début du chargement. Deux options:
    - soit l'affectation de DecimalSeparator ne joue pas sur d'autres sections Initialization et dans ce cas tu peux la placer dans n'importe quelle unité,
    - soit l'affectation joue une rôle dans une unité (A) et dans ce cas tu as intérêt de créer une clause Initialization dans une unité appraissant dans la clause Uses de l'interface de cette unité A.

    Cela devrait te dépanner.

    Rem : la notion d'unité principale est en soit assez curieuse, mais c'est vrai qu'il y a une précédence entre les unités (guidée par les relation de clientèle établies grâce aux section uses).
    Par contre, la fiche "principale" étant souvent cliente de nombreuses autres, il y a donc de grandes chances que ce ne soit pas celle dont la clause Initialization sera exécutée en premier.

    cdlt

    e-ric

    M E N S . A G I T A T . M O L E M
    Debian 64bit, Lazarus + FPC -> n'oubliez pas de consulter les FAQ Delphi et Pascal ainsi que les cours et tutoriels Delphi et Pascal

    "La théorie, c'est quand on sait tout, mais que rien ne marche. La pratique, c'est quand tout marche, mais qu'on ne sait pas pourquoi. En informatique, la théorie et la pratique sont réunies: rien ne marche et on ne sait pas pourquoi!".
    Mais Emmanuel Kant disait aussi : "La théorie sans la pratique est inutile, la pratique sans la théorie est aveugle."

  3. #3
    Membre chevronné
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 262
    Points : 1 928
    Points
    1 928
    Par défaut
    Bonsoir,

    Merci e-ric de ce long développement.

    Pour le F1, rien de tangent sur ma version perso par rapport à mon niveau pour me guider.

    Tu écrivais :
    [...] et dans ce cas tu as intérêt de créer une clause Initialization[...]
    Justement, si je pouvais savoir comment et à quel endroit de ma fiche cette clause "Initialisation", ce serait super lol

    Au bas de cette fiche comme indiqué sur ma question dito ?

    J'ai en effet plusieurs fiches, mais il s'agit seulement de la Form1 qui seule est créée automatiquement.

  4. #4
    Membre expert
    Avatar de e-ric
    Homme Profil pro
    Apprenti chat, bienfaiteur de tritons et autres bestioles
    Inscrit en
    Mars 2002
    Messages
    1 552
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Apprenti chat, bienfaiteur de tritons et autres bestioles

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 552
    Points : 3 920
    Points
    3 920
    Par défaut
    Les clauses Initialization et Finalization (son symétrique) sont toujours en fin d'unité.

    Par ailleurs, l'exécution de la clause Initialization est indépendante du fait qu'une fiche soit auto-créée ou non. Il faut raisonner sur les unités et leur inter-dépendances et non sur les objets dont elles contiennent le code.

    Tu as compris?

    cdlt

    e-ric

    M E N S . A G I T A T . M O L E M
    Debian 64bit, Lazarus + FPC -> n'oubliez pas de consulter les FAQ Delphi et Pascal ainsi que les cours et tutoriels Delphi et Pascal

    "La théorie, c'est quand on sait tout, mais que rien ne marche. La pratique, c'est quand tout marche, mais qu'on ne sait pas pourquoi. En informatique, la théorie et la pratique sont réunies: rien ne marche et on ne sait pas pourquoi!".
    Mais Emmanuel Kant disait aussi : "La théorie sans la pratique est inutile, la pratique sans la théorie est aveugle."

  5. #5
    Membre chevronné
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 262
    Points : 1 928
    Points
    1 928
    Par défaut
    Re e-ric

    Par ailleurs, l'exécution de la clause Initialization est indépendante du fait qu'une fiche soit auto-créée ou non. Il faut raisonner sur les unités et leur inter-dépendances et non sur les objets dont elles contiennent le code.
    Je mentionnais simplement que mon appli possédait plusieurs fiches lol

    Oui merci, là je pense avoir pigé, donc j'ai bien fait de placer cette clause Initialization au pied de ma fiche.

    [...] Les clauses initilization sont exécutées au tout début du chargement [...]
    Alors Delphi commence à rechercher au pied de chaque fiche pour voir si pas cette clause.

    Si pas cette clause then il reprend au début ?

  6. #6
    Membre expérimenté
    Avatar de Bloon
    Homme Profil pro
    Consultant Freelance
    Inscrit en
    Avril 2002
    Messages
    467
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant Freelance
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2002
    Messages : 467
    Points : 1 339
    Points
    1 339
    Par défaut
    Autre solution, le mettre dans le projet :

    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
    program Project1;
     
    uses
      Forms,
      SysUtils,   // <- Ajouter SysUtils dans les Uses
      Unit1 in 'Unit1.pas' {Form1};
     
    {$R *.res}
     
    begin
      Application.Initialize;
      DecimalSeparator := '.';
      Application.CreateForm(TForm1, Form1);
      Application.Run;
    end.
    Bloon
    A lire : Les règles du club
    Delphi : La FAQ - Articles

  7. #7
    Membre chevronné
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 262
    Points : 1 928
    Points
    1 928
    Par défaut
    Bonjoir,

    Bloon, oki, oki comme ça je suis paré, merci !

    Je ne connaissais pas du tout cette manip.

  8. #8
    Membre expert
    Avatar de e-ric
    Homme Profil pro
    Apprenti chat, bienfaiteur de tritons et autres bestioles
    Inscrit en
    Mars 2002
    Messages
    1 552
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Apprenti chat, bienfaiteur de tritons et autres bestioles

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 552
    Points : 3 920
    Points
    3 920
    Par défaut
    Citation Envoyé par J-P
    Les clauses initilization sont exécutées au tout début du chargement [...]
    Alors Delphi commence à rechercher au pied de chaque fiche pour voir si pas cette clause.
    Oui en respectant les relation de dépendances données par les clauses Uses (ce qui est logique et souhaitable).

    Citation Envoyé par J-P
    Si pas cette clause then il reprend au début ?
    Il ne fait rien pour l'unité qui en est démunie (c'est une clause facultative).
    Une fois toutes les clauses Initialization exécutées, il passe à l'exécution du programme principal (le fichier de projet DPR).

    Bloon t'a proposé de faire l'affectation en début de progamme, c'est un choix, cela signifie que l'affectation aura lieu après l'exécution des éventuelles clauses Initialization de tes unités. Si les clauses Uses sont indépendantes de cette affectation, c'est la réponse la plus simple et sans doute la plus pertinente.

    cdlt

    e-ric

    M E N S . A G I T A T . M O L E M
    Debian 64bit, Lazarus + FPC -> n'oubliez pas de consulter les FAQ Delphi et Pascal ainsi que les cours et tutoriels Delphi et Pascal

    "La théorie, c'est quand on sait tout, mais que rien ne marche. La pratique, c'est quand tout marche, mais qu'on ne sait pas pourquoi. En informatique, la théorie et la pratique sont réunies: rien ne marche et on ne sait pas pourquoi!".
    Mais Emmanuel Kant disait aussi : "La théorie sans la pratique est inutile, la pratique sans la théorie est aveugle."

  9. #9
    Membre expérimenté
    Avatar de Bloon
    Homme Profil pro
    Consultant Freelance
    Inscrit en
    Avril 2002
    Messages
    467
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant Freelance
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2002
    Messages : 467
    Points : 1 339
    Points
    1 339
    Par défaut
    Effectivement, cette solution suppose que DecimalSeparator ne soit pas nécessaire dans les clauses initialization des unités.

    Si ça n'est pas le cas, alors il faut initialiser DecimalSeparator dans la 1ère unité du projet, par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    program Project1;
     
    uses
      Forms,
      Unit3 in 'Unit3.pas',
      Unit2 in 'Unit2.pas' {Form2},
      Unit1 in 'Unit1.pas' {Form1};
     
    ...
    => là il faudra le mettre dans la partie initialization de Unit3 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    unit Unit3;
    ...
    uses
      SysUtils;
    ...
    initialization
      DecimalSeparator := '.';
     
    end.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    unit Unit2;
    ...
    initialization
      showMessage(floatToStr(strToFloat('1.2')));
     
    end.
    Bloon
    A lire : Les règles du club
    Delphi : La FAQ - Articles

  10. #10
    Membre chevronné
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 262
    Points : 1 928
    Points
    1 928
    Par défaut
    Bonsoir !

    Encore merci à vous deux, cette fois je suis super informé sur ce sujet très précis, et je sais désormais que plusieurs solutions existent.


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

Discussions similaires

  1. unable to create INITIAL extent for segment in tablespace
    Par Ludolitaliano dans le forum Administration
    Réponses: 4
    Dernier message: 11/09/2003, 16h43
  2. Initiation simpliste QuickReport?
    Par luckyluk dans le forum Débuter
    Réponses: 5
    Dernier message: 17/07/2003, 11h14
  3. DecimalSeparator
    Par titiyo dans le forum Langage
    Réponses: 9
    Dernier message: 11/06/2003, 15h39
  4. Initiation à Crystal Report
    Par Antichoc dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 14/03/2003, 09h06

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