Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 5 sur 5
  1. #1
    Membre habitué Avatar de retwas
    Homme Profil pro Robin
    Développeur informatique
    Inscrit en
    mars 2010
    Messages
    246
    Détails du profil
    Informations personnelles :
    Nom : Homme Robin
    Localisation : France, Côte d'Or (Bourgogne)

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

    Informations forums :
    Inscription : mars 2010
    Messages : 246
    Points : 127
    Points
    127

    Par défaut Aide pour débogage

    Bonjour,

    J'ai un petit problème avec mon programme.
    Quand je clic sur un TButton je dessine sur un TCanvas.

    Au premier clic j'ai une violation d'accès, et après tout marche correctement.

    Le problème c'est que en pas à pas je passe dans chacune de mes procédures sans aucun problème et à la fin de mon onClick du bouton sur le end; j'ai la violation d'accès...

    Comment je peut faire pour savoir d'ou vient réellement le probleme?

    Merci

    EDIT : Quand je met ce code en commentaire j'ai plus le message, mais je vois pas trop le problème

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    var
      ptTmp : array of TPoint;
      i : integer;
    begin
      SetLength(ptTmp, Length(ptPlan));
      if Length(ptPlan) > 0 then
        for i := 0 to Length(ptPlan) do
        begin
          ptTmp[i].X := untDecalage + ((ptPlan[i].X - untDecalage) div oldMarkTop)  * untMaitreTop;
          ptTmp[i].Y := untDecalage + ((ptPlan[i].Y - untDecalage) div oldMarkLeft) * untMaitreLeft;
     
          ptPlan[i].X := ptTmp[i].X;
          ptPlan[i].Y := ptTmp[i].Y;
        end;
     
      FreeAndNil(ptTmp);

  2. #2
    Membre habitué Avatar de retwas
    Homme Profil pro Robin
    Développeur informatique
    Inscrit en
    mars 2010
    Messages
    246
    Détails du profil
    Informations personnelles :
    Nom : Homme Robin
    Localisation : France, Côte d'Or (Bourgogne)

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

    Informations forums :
    Inscription : mars 2010
    Messages : 246
    Points : 127
    Points
    127

    Par défaut

    Finalement j'ai modifié mon code

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    var
      x, y : integer;
      i : integer;
    begin
      if Length(ptPlan) > 0 then
        for i := 0 to Length(ptPlan) do
        begin
          x := untDecalage + ((ptPlan[i].X - untDecalage) div oldMarkTop)  * untMaitreTop;
          y := untDecalage + ((ptPlan[i].Y - untDecalage) div oldMarkLeft) * untMaitreLeft;
     
          ptPlan[i].X := x;
          ptPlan[i].Y := y;
        end;
    Mais si quelqu'un a une solution je suis preneur

  3. #3
    Membre Expert
    Avatar de Archimède
    Homme Profil pro anthony LAURENT
    Enseignant
    Inscrit en
    avril 2005
    Messages
    1 196
    Détails du profil
    Informations personnelles :
    Nom : Homme anthony LAURENT
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : avril 2005
    Messages : 1 196
    Points : 1 255
    Points
    1 255

    Par défaut

    Length(ptPlan) comprend l'indice 0 donc


    Code :
    for i:=0 to length(ptPlan)-1
    ou high(ptPlan)

    @+

  4. #4
    Membre Expert
    Avatar de Archimède
    Homme Profil pro anthony LAURENT
    Enseignant
    Inscrit en
    avril 2005
    Messages
    1 196
    Détails du profil
    Informations personnelles :
    Nom : Homme anthony LAURENT
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : avril 2005
    Messages : 1 196
    Points : 1 255
    Points
    1 255

    Par défaut

    De plus le FreeAndNil(ptTmp); doit te génerer une erreur.
    Si ton tableau était un tableau d'objets à libérer, dans une boucle, tu ferais :
    tableau[i].free; mais la destruction de ton tableau ici ne s'impose pas...
    Tu peux toujours faire :

    Code :
    1
    2
     
      setlength(ptTmp,0);
    pour le vider

  5. #5
    Membre habitué Avatar de retwas
    Homme Profil pro Robin
    Développeur informatique
    Inscrit en
    mars 2010
    Messages
    246
    Détails du profil
    Informations personnelles :
    Nom : Homme Robin
    Localisation : France, Côte d'Or (Bourgogne)

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

    Informations forums :
    Inscription : mars 2010
    Messages : 246
    Points : 127
    Points
    127

    Par défaut

    Effectivement, merci beaucoup Archimède

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

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •