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 :

Modification d'une constante


Sujet :

Langage Delphi

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2010
    Messages : 18
    Points : 20
    Points
    20
    Par défaut Modification d'une constante
    Bonjour à tous,

    Pour classer et regrouper les photos, j'ai téléchargé photocd.dpr

    je sollicite de l'aide car je ne trouve pas de réponse à une erreur de compilation
    "[Erreur] UnitMain.pas(193): La partie gauche n'est pas affectable"

    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
    const
      Depart        : boolean = true;
      ListeCdChange : boolean = false;
    
    procedure TMainForm.ShellTreeViewChange(Sender: TObject; Node: TTreeNode);
    var S: string;
    begin
      if (PageControl.TabIndex>0) then exit;
      S:=ShellTreeView.SelectedFolder.PathName;
      if S=LabelRep.Caption then exit;
      LabelRep.Caption:=S; LabelRep.Refresh;
      ListeDir.Clear; RefreshChoix(true);
      if (Node=ShellTreeView.Items[0]) and depart then exit;
      try
        ChargeListe(ListeDir,S);
        RefreshChoix(true);
        depart:=false;
      except end;
    end;
    Comment autoriser la modification de ces constantes ?
    je ne trouve pas d'indications dans les tutoriels à ma disposition !

    Je travaille avec D7 et W8
    Merci pour votre aide et sincères félicitations à toute la communauté. Philippe

  2. #2
    Membre émérite
    Avatar de skywaukers
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2005
    Messages
    1 219
    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 219
    Points : 2 307
    Points
    2 307
    Par défaut
    Bonjour,

    disons que les constantes sont par définition ... constantes Elles ne peuvent pas être modifiées une fois déclarées. Pour faire cela il faut utiliser une variable, qui par définition peut-être ...

    @++
    Dany

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

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

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 466
    Points
    28 466
    Par défaut
    deux solutions:

    1) remplacer le mot clé "const" par "var"

    2) ajouter avant le mot clé "const" la directive {$J+} ou {$WRITEABLECONST ON}

  4. #4
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Points : 3 266
    Points
    3 266
    Par défaut
    Bonjour,

    Pour modifier une constante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    procedure ChangeConst(const Constant; var Value; Size: Integer);
    begin
      Move((@Value)^, (@Constant)^, Size);
    end;
    Testé : Marche avec des constantes du type string ou du type numérique.
    Non testé avec des valeurs du type array of

    A+.

  5. #5
    Membre émérite
    Avatar de skywaukers
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2005
    Messages
    1 219
    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 219
    Points : 2 307
    Points
    2 307
    Par défaut
    Citation Envoyé par Paul TOTH Voir le message
    2) ajouter avant le mot clé "const" la directive {$J+} ou {$WRITEABLECONST ON}
    Et le mot cle "const" perd alors toute sa signification.... C'est un problème de conception là. Si on doit pouvoir modifier la valeur, il faut une variable, pas une constante

    @++
    Dany

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

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

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 466
    Points
    28 466
    Par défaut
    Citation Envoyé par skywaukers Voir le message
    Et le mot cle "const" perd alors toute sa signification.... C'est un problème de conception là. Si on doit pouvoir modifier la valeur, il faut une variable, pas une constante

    @++
    Dany
    $J+ reste une possibilité, ça existe pour des raisons historiques: avant Delphi ne permettait pas d'initialiser une variable, il fallait donc déclarer une constante typée qui était modifiable.

    Par la suite, Borland a considéré que ce n'était pas très logique et ils ont autorisé l'initialisation des variable et rendu les constantes réellement constantes avec un switch pour assurer la compatibilité.

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

Discussions similaires

  1. update - modification d'une occurance
    Par starius dans le forum Langage SQL
    Réponses: 5
    Dernier message: 22/04/2004, 13h12
  2. Réponses: 1
    Dernier message: 08/03/2004, 12h35
  3. [JDialog] Modification dans une fenêtre
    Par cefabien dans le forum Agents de placement/Fenêtres
    Réponses: 3
    Dernier message: 01/10/2003, 14h18
  4. Partage d'une constante entre 2 fichiers en C
    Par elsargento dans le forum C
    Réponses: 6
    Dernier message: 29/09/2003, 23h17
  5. Erreur lors de modification d'une table
    Par seb.49 dans le forum SQL
    Réponses: 11
    Dernier message: 13/01/2003, 18h16

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