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

  1. #1
    Membre du Club
    Inscrit en
    Septembre 2009
    Messages
    68
    Détails du profil
    Informations personnelles :
    Âge : 66

    Informations forums :
    Inscription : Septembre 2009
    Messages : 68
    Points : 50
    Points
    50
    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 464
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 464
    Points : 4 311
    Points
    4 311
    Par défaut
    As-tu essayer un transtypage de la valeur retournée par TextExtent en LongWord ?
    M.Dlb - Modérateur z/OS - Rédacteur et Modérateur Pascal

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

    Informations forums :
    Inscription : Septembre 2009
    Messages : 68
    Points : 50
    Points
    50
    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 expérimenté
    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 : 55
    Localisation : France

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

    Informations forums :
    Inscription : Juillet 2007
    Messages : 378
    Points : 1 688
    Points
    1 688
    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 du Club
    Inscrit en
    Septembre 2009
    Messages
    68
    Détails du profil
    Informations personnelles :
    Âge : 66

    Informations forums :
    Inscription : Septembre 2009
    Messages : 68
    Points : 50
    Points
    50
    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 expérimenté
    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 : 55
    Localisation : France

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

    Informations forums :
    Inscription : Juillet 2007
    Messages : 378
    Points : 1 688
    Points
    1 688
    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

    @+

  7. #7
    Membre du Club
    Inscrit en
    Septembre 2009
    Messages
    68
    Détails du profil
    Informations personnelles :
    Âge : 66

    Informations forums :
    Inscription : Septembre 2009
    Messages : 68
    Points : 50
    Points
    50
    Par défaut
    Bon, quand je serai de retour chez-moi, je vais essayer de reproduire l'erreur de compilation sur un exemple plus petit, et te l'envoyer.

    Mais tu as fait l'essai sur quelle version(s) exactement ? Moi c'est sur linux 0.9.28.2 et, pour l'instant, je n'ai pas envie d'utiliser SVN.

    A+

    Martinus

  8. #8
    Membre expérimenté
    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 : 55
    Localisation : France

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

    Informations forums :
    Inscription : Juillet 2007
    Messages : 378
    Points : 1 688
    Points
    1 688
    Par défaut
    Je n'ai pas de version svn à la maison sur linux, uniquement sur wdows donc je referais le test avec ton code sur mon petit nunux en 0.9.28

    @+

  9. #9
    Membre du Club
    Inscrit en
    Septembre 2009
    Messages
    68
    Détails du profil
    Informations personnelles :
    Âge : 66

    Informations forums :
    Inscription : Septembre 2009
    Messages : 68
    Points : 50
    Points
    50
    Par défaut
    Bon, en faisant un test plus petit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    uses Types ;
     
    procedure TForm1.Button1Click(Sender: TObject);
     
    var
      Taille : TSize ;
     
    begin
      Taille := Form1.Canvas.TextExtent('AAA');
      showmessage ( IntToStr(Taille.Cx) );
    end;
    Il n'y a pas d'erreur, tout marche bien...

    J'en conclus qu'il doit y avoir un conflit sur le type TSize, qui doit être présent dans plusieurs unités.

    Il est effectivement présent dans l'unité Types, où selon les directives de compilation il est défini différemment, notamment à partir de Windows.TSize quand on est sous Windows (où je ne suis pas).

    L'erreur survient quand on met Unix (sous Linux), et pas Types dans les uses. Avec les 2, dont Types en implementation (pas en interface), il n'y a pas d'erreur. De même si on ne met que Types, quand on peut se passer de Unix.

    Toutefois, je n'arrive pas à trouver sur toute ma machine les sources de Unix ou Windows (.pas ou .pp) pour essayer de comprendre, où sont-elles donc ? Si vous le savez, je serais intéressé !

  10. #10
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 036
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 036
    Points : 40 941
    Points
    40 941
    Billets dans le blog
    62
    Par défaut
    Recherche aussi dans les .inc
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  11. #11
    Membre du Club
    Inscrit en
    Septembre 2009
    Messages
    68
    Détails du profil
    Informations personnelles :
    Âge : 66

    Informations forums :
    Inscription : Septembre 2009
    Messages : 68
    Points : 50
    Points
    50
    Par défaut
    Ouais, j'ai trouvé mais ça a l'air un peu compliqué...

    On va dire que c'est résolu, mais je crois que ce n'est pas tout à fait normal qu'on ait des erreurs de compilation selon l'ordre des Uses, du moins pour un type aussi basique.

    Merci à ceux qui m'ont aidé !

+ 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