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 :

Problème de PPoint


Sujet :

Lazarus Pascal

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 16
    Par défaut Problème de PPoint
    Bonjour à tous,

    Je cherche à utiliser la fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    function CreatePolygonRgn( Points: PPoint;NumPts: Integer;FillMode: Integer):HRGN;
    Mais j'ai quelques difficultés. Je ne comprends pas comment utiliser le "PointsPoint".

    J'ai déjà un tableau de points défini :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    P:array[1..nbpts] of Tpoint;
    (avec nbpts =5)

    Je fais donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CreatePolygonRgn(P, nbpts, WINDING)
    Et en compilant, j'ai une erreur :
    uinterface.pas(82,25) Error: Incompatible type for arg no. 1: Got "Array[1..5] Of POINT", expected "PPoint"
    Donc, il attend un "PPoint" qui doit être un pointeur vers un TPoint, mais après j'ai essayé diverses solutions, ça me redonne toujours le même message d'erreur...


  2. #2
    Membre émérite Avatar de DOLPat®
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Février 2003
    Messages
    426
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 426
    Par défaut
    Bonjour

    Bizarre bizarre... Je viens de tester la compilation du code ci-dessous et cela compile sans accroc... (Lazarus 0.9.31)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    procedure Test;
     const
       nbpts = 5;
     var
       P:array[1..nbpts] of Tpoint;
    begin
      CreatePolygonRgn(P, nbpts, WINDING);
    end;

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 16
    Par défaut
    Je suis sous Lazarus 0.9.30, voila ma procedure :

    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
    procedure TForm1.Timer1Timer(Sender: TObject);
    const nbpts=5;
    var 
    R1,R2:HRGN;
    P:array[1..nbpts] of Tpoint;
     
    begin
     
         P[1].X:=(round(x+20*cos(alpha)));
         P[1].Y:=(round(y+20*sin(alpha)));
         P[2].X:=(round(x-30*sin(alpha)));
         P[2].Y:=(round(y+30*cos(alpha)));
         P[3].X:=(round(x-20*cos(alpha)));
         P[3].Y:=(round(y-20*sin(alpha))) ;
         P[4].X:=(round(x-20*cos(alpha)+50*sin(alpha)));
         P[4].Y:=(round(y-50*cos(alpha)-20*sin(alpha)));
         P[5].X:=(round(x+20*cos(alpha)+50*sin(alpha)));
         P[5].Y:=(round(y-50*cos(alpha)+20*sin(alpha)));
     
    self.canvas.Brush.Color:=$9C0000;
    R1:=CreateRectRgn(1, 1, TEdForcevent.Left-5, height);
    self.canvas.FillRect(1,1,TEdForcevent.Left-5,height);
    R2 :=CreatePolygonRgn(P,nbpts,WINDING);
     end;
    J'ai toujours la même erreur de compilation, j'ai un peu de mal à comprendre

  4. #4
    Membre émérite Avatar de DOLPat®
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Février 2003
    Messages
    426
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 426
    Par défaut
    Je viens de compiler ton code. Comme je n'en ai pas la totalité, j'ai supposé que:
    TEdForcevent: TEdit;
    x, y et Alpha: Integer;
    Cela ne pose aucun problème de compilation...

    À tout hasard, dans la déclaration Uses de ton unité, mets l'unité Windows avant les autres.

    Si c'est sans résultat, je penche pour un bug Lazarus.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 16
    Par défaut
    Effectivement avec windows dans les uses, ça compile sous.. windows.

    J'ai oublié de préciser que j''essaie de compiler mon programme sous Linux(Ubuntu), du coup, pas possibilité d'utiliser des librairies de windows.

  6. #6
    Membre Expert
    Avatar de Dr.Who
    Inscrit en
    Septembre 2009
    Messages
    980
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Septembre 2009
    Messages : 980
    Par défaut
    salut, correction, optimisation :

    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
     
    uses Math;
     
    procedure TForm1.Timer1Timer(Sender: TObject);
    const 
      PointsCount=5;
    var 
      R1, R2:HRGN;
      P: array[0..PointsCount-1] of Tpoint;
      S, C, S20, C20, S50, C50: Extended;
    begin
      // devrait être délocalisé à l'assignation d'Alpha 
      // 1 seul calcul SinCos donc plus de performance
      SinCos(Alpha, S, C);
      S20 := 20*S;
      C20 := 20*C;
      S50 := 50*S;
      C50 := 50*C;
      // ---------------
     
      P[0].X:=round(x+C20);
      P[0].Y:=round(y+S20);
      P[1].X:=round(x-30*S);
      P[1].Y:=round(y+30*C);
      P[2].X:=round(x-C20);
      P[2].Y:=round(y-S20) ;
      P[3].X:=round(x-C20+S50);
      P[3].Y:=round(y-C50-S20);
      P[4].X:=round(x+C20+S50);
      P[4].Y:=round(y-C50+S20);
     
      Canvas.Brush.Color:=$9C0000;
      R1 := CreateRectRgn(1, 1, TEdForcevent.Left-5, height);
      canvas.FillRect(1,1,TEdForcevent.Left-5,height);
      R2 := CreatePolygonRgn(PPoint(@P), PointsCount, WINDING);
     end;
    [ Sources et programmes de Dr.Who | FAQ Delphi | FAQ Pascal | Règlement | Contactez l'équipe ]
    Ma messagerie n'est pas la succursale du forum... merci!

Discussions similaires

  1. Problème d'installation oracle 8.1.7 sous NT
    Par Anonymous dans le forum Installation
    Réponses: 7
    Dernier message: 02/08/2002, 14h18
  2. Problème d'impression
    Par IngBen dans le forum C++Builder
    Réponses: 7
    Dernier message: 22/05/2002, 11h37
  3. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 16h10
  4. Réponses: 6
    Dernier message: 25/03/2002, 21h11

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