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

Lazarus Pascal Discussion :

[0.9.28] Error: Incompatible types: got "TSize" expected "LongWord" [Lazarus]


Sujet :

Lazarus Pascal

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Septembre 2009
    Messages
    68
    Détails du profil
    Informations personnelles :
    Âge : 67

    Informations forums :
    Inscription : Septembre 2009
    Messages : 68
    Par défaut [0.9.28] Error: Incompatible types: got "TSize" expected "LongWord"
    Bonjour,

    J'avais sous Delphi le code suivant qui compilait bien :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    var
      Taille : TSize; 
      Fond : TBitMap ;
      UnTexte : string ;
     
    begin
       UnTexte := 'aaaaaaaa';
       Taille := Fond.Canvas.TextExtent(UnTexte);
    Avec Lazarus 0.9.28, j'ai une erreur de compilation sur la dernière ligne :

    Error: Incompatible types: got "TSize" expected "LongWord"


    Je ne comprends pas pourquoi, puisque que la fonction TextExtent du Canvas semble toujours retourner un TSize, et pas un LongWord.

    Vous pourriez m'aider ?

  2. #2
    Rédacteur/Modérateur
    Avatar de M.Dlb
    Inscrit en
    Avril 2002
    Messages
    2 466
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 466
    Par défaut
    As-tu essayer un transtypage de la valeur retournée par TextExtent en LongWord ?

  3. #3
    Membre averti
    Inscrit en
    Septembre 2009
    Messages
    68
    Détails du profil
    Informations personnelles :
    Âge : 67

    Informations forums :
    Inscription : Septembre 2009
    Messages : 68
    Par défaut
    Si je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Taille := TSize( Fond.Canvas.TextExtent(UnTexte))
    j'ai une erreur de compilation :

    Error: Illegal type conversion: "<record type>" to "DWord"


    Le seul contournement que j'ai trouvé est de déclarer H et L comme Integer et de faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      L := Fond.Canvas.TextExtent(UnTexte).Cx;
      H := Fond.Canvas.TextExtent(UnTexte).Cy;
    C'est moins élégant... et non compatible avec Delphi.

  4. #4
    Membre émérite
    Avatar de chris37
    Homme Profil pro
    Directeur des systèmes d'information
    Inscrit en
    Juillet 2007
    Messages
    378
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France

    Informations professionnelles :
    Activité : Directeur des systèmes d'information
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 378
    Par défaut
    Ca marche pas ca ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Canvas.TextWidth('MON TEXTE');
    Canvas.TextHeight('MON TEXTE');


    J'ai fais ce test rapidos

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    procedure TForm1.Button1Click(Sender: TObject);
    var
      Taille : TSize; //Mettre Types dans le uses
    begin
     Taille:=Canvas.TextExtent('TOTO');
     ShowMessage(inttostr(taille.cx)+#13#10+inttostr(Canvas.TextWidth('TOTO')));
    end;
    Ça roule, j'obtiens la même valeur...

  5. #5
    Membre averti
    Inscrit en
    Septembre 2009
    Messages
    68
    Détails du profil
    Informations personnelles :
    Âge : 67

    Informations forums :
    Inscription : Septembre 2009
    Messages : 68
    Par défaut
    Oui, si ça marche aussi bien sûr, mais ça fait un peu plus de modifications au code.

    J'aurais quand même bien aimé comprendre pourquoi le code initial ne se compile pas.

    Est-ce que les fonctions ne peuvent pas renvoyer un type structuré en FPC ? (Si oui, l'erreur de compilation devrait être au niveau de la fonction).

    A+

    Martinus

  6. #6
    Membre émérite
    Avatar de chris37
    Homme Profil pro
    Directeur des systèmes d'information
    Inscrit en
    Juillet 2007
    Messages
    378
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France

    Informations professionnelles :
    Activité : Directeur des systèmes d'information
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 378
    Par défaut
    Salut Martin,

    Ton code initial fonctionne bien chez moi

    Si bien sur, une fonction peut renvoyer ce que tu veux !

    Passe moi ton code si c'est possible, on va regarder ca

    @+

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

Discussions similaires

  1. error: incompatible types when assigning
    Par quentinb56 dans le forum C
    Réponses: 2
    Dernier message: 05/12/2013, 20h31
  2. error: incompatible types in assignment
    Par Ganondorf dans le forum Débuter
    Réponses: 6
    Dernier message: 16/09/2010, 16h04
  3. error: incompatible types in assignement
    Par Melwen dans le forum Débuter
    Réponses: 3
    Dernier message: 02/05/2010, 20h34
  4. Réponses: 4
    Dernier message: 25/02/2010, 17h14
  5. error: incompatible types in assignment
    Par panda31 dans le forum C
    Réponses: 2
    Dernier message: 13/06/2006, 10h46

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