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 :

Delphi XE2 Résultat de calculs incohérents


Sujet :

Langage Delphi

  1. #1
    Membre averti
    Homme Profil pro
    Ingénieur développement en retraite
    Inscrit en
    Juin 2002
    Messages
    411
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement en retraite
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2002
    Messages : 411
    Points : 313
    Points
    313
    Par défaut Delphi XE2 Résultat de calculs incohérents
    Bonjour,
    Je viens de tomber sur un pb bizarre avec XE2.
    Dans cette function de l'unité GR32_image de la GR32 (qui fonctionne avec D2010) :
    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
    function TCustomImage32.GetBitmapRect: TRect;
    var
      Size: TSize;
     
    begin
      if Bitmap.Empty then
        with Result do
        begin
          Left := 0;
          Right := 0;
          Top := 0;
          Bottom := 0;
        end
      else
      begin
        Size := GetBitmapSize;
        with Size do
        begin
          Result := Rect(0, 0, Cx, Cy);
          if BitmapAlign = baCenter then
          begin
            OffsetRect(Result,(Width - Cx) div 2,(Height - Cy) div 2)
          end else if BitmapAlign = baCustom then
            OffsetRect(Result, Round(OffsetHorz), Round(OffsetVert));
        end;
      end;
    end;
    Bien que passant correctement dans la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    OffsetRect(Result,(Width - Cx) div 2,(Height - Cy) div 2)
    le résultat était anormal. En faisant du pas à pas dans la fonction il apparait que le résultat de (Width - Cx) div 2 ou de (Height - Cy) div 2 est toujours égal à 0, ce qui est pour le moins étrange car il aurait du être de l'ordre de 40 et 50, les variables ayant les bonnes valeurs.

    La seule solution que j'ai trouvé, c'est de remplacer la ligne en question par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    OffsetRect(Result,(Self.Width - Cx) div 2,(Self.Height - Cy) div 2)
    Y a-t-il un gros truc que je vois pas ?

  2. #2
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 787
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 787
    Points : 13 442
    Points
    13 442
    Par défaut
    Je n'ai pas XE2, mais La déclaration de TSize a peut-être évolué comme ceci (à contrôler):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
      TSize = record
        case Integer of
          0: (cx, cy: Longint);
          1: (Width, Height: Longint);
      end;
    ps: Ne te fie pas à ce qu'affiche la fenêtre d'info au survol. Elle n'aime pas beaucoup les with

  3. #3
    Membre averti
    Homme Profil pro
    Ingénieur développement en retraite
    Inscrit en
    Juin 2002
    Messages
    411
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement en retraite
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2002
    Messages : 411
    Points : 313
    Points
    313
    Par défaut
    C'est effectivement une possibilité. En pas à pas je pouvais connaitre la valeur de Cx mais pas celle de Cy ?

    Par contre je ne vois pas en quoi le fait de faire référence à self change quelque chose.

    Je me corrige moi même effectivement, cela se confirme, le résultat était toujours égal à 0. Comme Cx et Width ont la même valeur....

    Merci pour tes lumières. je vais voir le TSize

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

Discussions similaires

  1. Résultat du vlookup incohérent
    Par freyliss dans le forum Excel
    Réponses: 2
    Dernier message: 10/08/2007, 10h13
  2. Résultat du calcul =Mod(-1, 10) ?
    Par MiJack dans le forum Excel
    Réponses: 13
    Dernier message: 21/06/2007, 14h50
  3. Affichage d'un résultat de calcul dans une fenêtre
    Par Marcusss dans le forum Interfaces Graphiques
    Réponses: 17
    Dernier message: 03/04/2007, 12h23
  4. Réponses: 5
    Dernier message: 22/11/2006, 16h06
  5. recupération d'un résultat de calcul
    Par Toff !!!!! dans le forum Access
    Réponses: 3
    Dernier message: 17/09/2005, 16h53

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