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 :

debutant delphi (habitué Tpascal7 objet)- Stack overflow (Gnii?)


Sujet :

Delphi

  1. #1
    Membre régulier
    Profil pro
    Responsable de service informatique
    Inscrit en
    Mars 2003
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France, Dordogne (Aquitaine)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2003
    Messages : 99
    Points : 108
    Points
    108
    Par défaut debutant delphi (habitué Tpascal7 objet)- Stack overflow (Gnii?)
    Delphi 6 perso....

    salut, j'ai beau retourner mon petit programme simplicime en long en large et en travers, mais ca marche PO.... Et ca plante a des endroits vraiment bizarre... là ou il ne devrais pas avoir de PB... , j'ai lu que delphi gere mal les sous programme C, j'ai SETACL.ocx d'installé, est ce que ca viendrais des string, et de leurs mauvaise manipulation ? comment je dois régler ca ? (si ca viens de ca)

    l'endrois marqué d'une fleche, une foi retirer ca plante plus. en fait l'utilisation normal du programe ne provoque pas d'erreur, par contre dès que l'on rempli une case mot de passe (la seconde de verification) sans remplir la premiere, puis si on appuie sur le checkbox "protection" rien ne va plus il s'embale et paf stack overflow... je pige 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
    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
     
     
    //========================================================
     
    procedure TMForm.ProtectionClick(Sender: TObject);
     
    begin
     
    //si le mot de passe n'existe pas encore ou que la protection n'st pas activÈe
     
    if MForm.Protection.Checked then
     
     begin
     
       if (MForm.Password.Text=MForm.password2.Text) and (Length(MForm.Password.Text)>0) then
     
       begin //les 2 mots de passe sont prÈsent et identique
     
             //on met a jour l'objet config
     
             pwd:=MForm.password.Text;
     
             //on sauvegarde la config dans a base de registre.
     
             MForm.savConfigClick(Sender);
     
             //on gËle les options de config
     
             MForm.PrinterUNC.Enabled:=False;
     
             MForm.UserUNC.Enabled:=False;
     
             MForm.password2.Enabled:=False;
     
             MForm.password2.text:='';MForm.password.text:='';
     
             MForm.savconfig.Enabled:=False;
     
             PP_Output('- Configuration protÈgÈe ...');
     
       end
     
       else begin
     
            MForm.Protection.Checked:=False;  // <======VERS ICI BOOOOM PLANTAGE
     
            PP_Output('-ERREUR- Le mot de passe est nul, ou la confirmation n''est pas identique ...');
     
       end;
     
     end
     
     else begin
     
     // sinon la config est dÈj‡ protÈgÈ. Avant de valider le retrait de la protection
     
     // on compare le mot de passe dans config a celui dans password // ShowMessage(Msg)
     
       if pwd = MForm.password.Text then
     
         begin
     
             // si il est identique on dÈverouille tout.
     
             MForm.PrinterUNC.Enabled:=True;
     
             MForm.UserUNC.Enabled:=True;
     
             MForm.password2.Enabled:=True;
     
             MForm.savconfig.Enabled:=True;
     
             MForm.password2.text:='';MForm.password.text:='';
     
             PP_Output('- Configuration modifiable.');
     
         end else begin
     
         // SINON, on recoche la case pour annuler le changement et on affiche un message d'erreur.
     
         MForm.Protection.Checked:=True;
     
         PP_Output('-ERREUR- Mauvais mot de passe ...');
     
       end;
     
     end;
     
    end;
    si vous trouvez merci d'avance.... j'ai essayé de réécrire les sructures if then else de différentes façon ca change rien. le code en piece jointe.
    Fichiers attachés Fichiers attachés

  2. #2
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Je pense que le problème vient surtout du fait que le click sur ta checkbox protection se fait en boucle.

    Essaie le code ci-dessous

    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
     
    procedure TMForm.ProtectionClick(Sender: TObject);
     
    begin
      // on desactive l'evenement on click pour eviter qu'il ne se redeclenche
     Protection.OnClick := nil;
      try
    //si le mot de passe n'existe pas encore ou que la protection n'st pas activÈe
     
    if MForm.Protection.Checked then
     
     begin
     
       if (MForm.Password.Text=MForm.password2.Text) and (Length(MForm.Password.Text)>0) then
     
       begin //les 2 mots de passe sont prÈsent et identique
     
             //on met a jour l'objet config
     
             pwd:=MForm.password.Text;
     
             //on sauvegarde la config dans a base de registre.
     
             MForm.savConfigClick(Sender);
     
             //on gËle les options de config
     
             MForm.PrinterUNC.Enabled:=False;
     
             MForm.UserUNC.Enabled:=False;
     
             MForm.password2.Enabled:=False;
     
             MForm.password2.text:='';MForm.password.text:='';
     
             MForm.savconfig.Enabled:=False;
     
             PP_Output('- Configuration protÈgÈe ...');
     
       end
     
       else begin
     
            MForm.Protection.Checked:=False;  // <======VERS ICI BOOOOM PLANTAGE
     
            PP_Output('-ERREUR- Le mot de passe est nul, ou la confirmation n''est pas identique ...');
     
       end;
     
     end
     
     else begin
     
     // sinon la config est dÈj‡ protÈgÈ. Avant de valider le retrait de la protection
     
     // on compare le mot de passe dans config a celui dans password // ShowMessage(Msg)
     
       if pwd = MForm.password.Text then
     
         begin
     
             // si il est identique on dÈverouille tout.
     
             MForm.PrinterUNC.Enabled:=True;
     
             MForm.UserUNC.Enabled:=True;
     
             MForm.password2.Enabled:=True;
     
             MForm.savconfig.Enabled:=True;
     
             MForm.password2.text:='';MForm.password.text:='';
     
             PP_Output('- Configuration modifiable.');
     
         end else begin
     
         // SINON, on recoche la case pour annuler le changement et on affiche un message d'erreur.
     
         MForm.Protection.Checked:=True;
     
         PP_Output('-ERREUR- Mauvais mot de passe ...');
     
       end;
     
     end;
      // on a fini le traitement on remet l'evenement onclick
     finally
      Protection.OnClick := ProtectionClick;
     end; 
    end;
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  3. #3
    Membre régulier
    Profil pro
    Responsable de service informatique
    Inscrit en
    Mars 2003
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France, Dordogne (Aquitaine)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2003
    Messages : 99
    Points : 108
    Points
    108
    Par défaut ahhh?
    Salut merci de ta réponse rapide.
    donc si j'ai bien compris en fait quand on fait une modification en ligne de code sur la valeur checkbox.checked, ca déclanche en un evenement click sur se dit objet ?
    C'est pas super normal. ils ont fumé quoi chez borland ???, c bizarre ce probleme me dit quelque chose....

    je verifie ca dès ce soir... merci.

  4. #4
    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 : 54
    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 445
    Points
    28 445
    Par défaut
    bonjour,

    bon je regarde ton source et il m'inspire quelques remarques

    - la procédure PP_output devrait être une méthode de TMForm puisqu'elle manipule celle-ci
    - la fonction Encrypt déclare sResult alors que Delphi propose déjà Result
    - les méthodes de TMForm font systématique référence à la variable global MForm, c'est une erreur, et cela ne peut fonctionner que s'il n'existe qu'une seule instance de la fiche. Si tu utilises MForm pour l'aide à la saisie, dans ce cas remplace le par Self, sinon l'appel n'a pas besoin d'être préfixé.

    pour ce qui est des strings, tu as peut-être un pb de ce type: elles sont compatibles PChar, mais tu as peut-être un pb de référence à une chaine libérée...voici un exemple classique de ce qu'il ne faut pas faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    function test;
    var 
      s: string;
    begin
      s:= 'toto';
    // ceci est valable SI et SEULEMENT SI la méthode  ne garde aucune
    // référence au PChar, car en fin de procédure S sera libérée, et le PChar
    // deviendra invalide
      passerLeParametreEnPChar(pchar(s));
    end;
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

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

Discussions similaires

  1. Réponses: 22
    Dernier message: 15/07/2014, 18h04
  2. Stack OverFlow
    Par Goundy dans le forum Langage
    Réponses: 2
    Dernier message: 24/12/2005, 21h35
  3. Problème de stack overflow
    Par heider dans le forum Langage
    Réponses: 13
    Dernier message: 22/09/2005, 19h50
  4. [debutant][JNI]Stocker des objet pour les rappeler plus tard
    Par Celenor dans le forum Entrée/Sortie
    Réponses: 7
    Dernier message: 28/03/2004, 01h28
  5. Stack overflow
    Par portu dans le forum Langage
    Réponses: 3
    Dernier message: 26/11/2003, 15h16

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