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 :

Dessin et vecteur


Sujet :

Langage Delphi

  1. #81
    Membre habitué Avatar de stfanny31
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2008
    Messages
    254
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2008
    Messages : 254
    Points : 163
    Points
    163
    Par défaut
    Cher Mr:Gilbert Geyer bonjour
    je voudrais supprimer ma ligne a l'aide de la touche supper
    j'ai pencer a le faire avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if (key = Chr(VK_DELETE)) then
    form1.Canvas.Destroy;
    mais cela passe pas !!
    vous pouvez m'expliqué pourquoi
    merci encor
    merci bcp

  2. #82
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Points : 3 263
    Points
    3 263
    Par défaut
    Salut,

    1) Rép à ton msg d'Aujourd'hui, 01h38
    j'ai pas pu voir votre excutable si vous pouvé le trouvais cela me servira a aproffendir mes idés sur le sujet
    ... je t'ai envoyé hier par mail le Zip du code va consulter ta boîte aux lettres.

    1.1)
    procedure TForm1.FormResize(Sender: TObject); ...
    end;cela fonctionne que quant on en fait un rétrissicement pas quand on fait un agrandissemnt de la fenétre.
    ... chez moi ça fonctionne faut mettre le Autosize de image1 à False.


    2) Rép à ton msg d'Aujourd'hui, 01h54
    dans l'explication(texte N°58) ,qui parler du Pen.Mode
    j'ai bien compri les Mode simple mais les combiné!!!
    peutons dir que ... pmNotXor remplace pmNot ... ou pmCopy
    ... c'est quoi "(texte N°58)" ?
    ... pmNotXor ne remplace ni pmNot ni pmCopy

    Les modes qui combinent la valeur de pen.color et avec la couleur de l'écran sont :
    - pmMergePenNot : combine pen.color avec l'inverse de l'écran
    - pmMaskPenNot : retient les couleurs communes à pen.color et l'inverse de l'écran
    - pmMergeNotpen : NOT pen.color combiné à celle de l'écran
    - pmMaskNotPen : couleurs communes à NOT pen.color et à celle de l'écran
    - pmMerge : Pen.color combinée à celle de l'écran
    - pmNotMerge : NOT (pen.color combiné à celle de l'écran)
    - pmMask : couleurs communes à pen.color et celle de l'écran
    - pmNotMask : NOT (couleurs communes à pen.color et celle de l'écran)
    - pmXor : c'est Pen.color XOR écran
    - pmNotXor : NOT (pen.color XOR écran)
    ... ceci donne une idée des possibilités mais pour se rendre compte de l'effet visuel faut que tu fasses des essais ... et tu verras par toi même pourquoi les modes les plus utilisés sont pmCopy, pmXor, et pmNotXor.


    3) Rép à ton masg d'Aujourd'hui, 10h02
    je voudrais supprimer ma ligne a l'aide de la touche suppr
    j'ai pensé à le faire avec if (key = Chr(VK_DELETE)) then
    form1.Canvas.Destroy; mais cela passe pas !!
    vous pouvez m'expliqué pourquoi
    ... ben tout bêtement parceque la destruction du canvas de form1 n'a aucun effet sur le image1 dans lequel tu dessines.
    ... pour supprimer une ligne tracée un 1ère fois avec pmNotXor il suffit, pour l'effacer, de la retracer par-dessus elle-même une deuxième fois avec pmNotXor. Et pour supprimer toutes les lignes le plus simple est d'utiliser canvas.FillRect(const Rect: TRect);

    A+
    N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

  3. #83
    Membre habitué Avatar de stfanny31
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2008
    Messages
    254
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2008
    Messages : 254
    Points : 163
    Points
    163
    Par défaut Enregistrement de notre ellips
    cher Mr:Gilbert Geyer bonjour
    avant tt je tener a vous dir "1000 merci "
    *merci pour vous explication
    *merci pour l'ecutable il est top .
    *et surtout merci pour votre passiance avec moi

    quant j'ai dis :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    l'explication(texte N°58)
    je parles du texte 58 de ce forum

    votre excutable est trés bien fait
    mais croyé vous que un utilisateur simple comprent ce que (X,Y)[qui apparaisse dans la petit boite de dialogue] ??
    pour l'enregistrement je vouler vous enparlé:
    vous enregistrer l'image au avec l'extention *.bmp qui veut dir que on pe pas changé notre dessin !!
    moi j'ai pencer a sauvgarder tt les donné dans une table est quant on fait
    :ouvrir dans le onshow de la Timage(le shéma ce redéssine tt seul)
    q'on pencer vous !!
    je c'est que cela demande bcp de temps mais esque c possible !!!
    merci encor
    merci bcp

  4. #84
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Points : 3 263
    Points
    3 263
    Par défaut
    Salut,

    1)
    je parles du texte 58 de ce forum
    ... et on le trouve comment ce "texte 58" ???

    2)
    votre excutable est trés bien fait mais croyé vous que un utilisateur simple comprent ce que (X,Y)[qui apparaisse dans la petit boite de dialogue] ??
    ... il finira bien par comprendre ... de toutes façons peu importe le X,Y puisque il peut déplacer les objets avec la souris.

    3)
    pour l'enregistrement je vouler vous enparlé:
    vous enregistrer l'image au avec l'extention *.bmp qui veut dir que on pe pas changé notre dessin !!
    moi j'ai pencer a sauvgarder tt les donné dans une table est quant on fait
    :ouvrir dans le onshow de la Timage(le shéma ce redéssine tt seul)
    q'on pencer vous !!
    je c'est que cela demande bcp de temps mais esque c possible !!!
    ... effectivement la sauvegarde actuelle est seulement faite pour un dessin entièrement achevé j'avais eu la flemme de faire les routines qui sauvent les données sur disque et qui les relisent pour pouvoir les modifier. Et puis faudrait que la "partie dessin" du code soit complètement achevée pour le faire. C'est possible de le faire mais comme tu dis ça demande bcp de temps.

    Je viens encore d'ajouter dans le code le dessin d'autres trucs déplaçables ce qui m'a permis de supprimer entre-autres une erreur qui provoque de temps en temps une division par zéro : dans l'unité uDlgParams il faut modifier la procedure procedure TfrmDlg.edNbCotesChange comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    procedure TfrmDlg.edNbCotesChange(Sender: TObject);
    begin     val(edNbCotes.text,v_N,code);
              if v_N=0 then EXIT; //< éviter division par zéro
              if (pos('non étoilé',caption)>0) and (v_N<3)
              then edNbCotes.text:=intToStr(3) else
              if (caption='Polygone régulier étoilé') and (v_N<5)
              then edNbCotes.text:=intToStr(5);
              v_Inclinaison:=(Pi/2)-(Pi/v_N);
    end;
    Quand j'aurai fini d'ajouter d'autres trucs à dessiner je t'enverrai le Zip.

    A+
    N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

  5. #85
    Membre habitué Avatar de stfanny31
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2008
    Messages
    254
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2008
    Messages : 254
    Points : 163
    Points
    163
    Par défaut la droite inclinée "y = a.x + b"
    Cher Mr Gilbert Geyer Bonjour
    pour le texte N°58:
    ... et on le trouve comment ce "texte 58" ???
    le 1er article de ce forum porte le N°1 et a chaque fois que on écrit des message y'a un compteur qui s'incrémente [inc(i)]
    //i:donne le nombre d'article du forum
    (example le message de aujourduit porte le num 85)
    et ce num on peut le voir a droite on haut de chaque message

    pour la droite inclinée :
    je ss entrain de lire et esséye de comprendre votre programme ,esque vous pouvé m'expliqué c'est qulque ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
                       yc:=round(a*xs + b);     // y-calculé(xs)
                       lg:=sqrt(dx*dx + dy*dy); // longueur tronçon de droite
                       miEp:=abs(miEp*lg/dx);   // projection de miEp sur la verticale yc-ys en xs
                       if (yc + miEp >= ys) and (yc - miEp <= ys) and okx and oky then
                           Result:=(xs - Droite.xo)/dx;
                     end;
    1-a quoi cela sert de calucler Yc
    2-quelle est la différance entre Yc,et Ys ??
    3-pourqoi en a changer miEp?

    quant vous dite
    ... il finira bien par comprendre ... de toutes façons peu importe le X,Y puisque il peut déplacer les objets avec la souris.
    je ss d'acord et c'est pour cela que c'est mieux que l'utilisateu ne vois (x,y)!!

    pour l'option de sauvgarde :
    dans votre Zip.2 quant j'enregistre l'image *.bmp , je peut pas l'ouvrir dans le paint !!pourquoi ??

    merci encor
    merci bcp

  6. #86
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Points : 3 263
    Points
    3 263
    Par défaut
    Salut,

    1)
    et ce num on peut le voir a droite on haut de chaque message
    ... ok, vu.

    2) pour la droite inclinée :
    - différence entre Yc et Ys : Ys = "Y de la souris" ... (et Xs="X de la souris")
    et Yc = valeur calculée à partir de l'équa générale d'une droite ("y = a.x + b") qui donne ici yc:=round(a*xs + b) = valeur calculée avec xs ... et donc si Yc est très différent de Ys alors le point Xs,Ys est en-dehors de la droite.
    - pourqoi changer miEp : ben, comme on compare Ys à Yc c'est à dire des distances verticales il faut tenir compte du fait que l'épaisseur de la droite projettée sur la verticale est plus grande que cette épaisseur.

    3) Tu dis "je ss d'acord et c'est pour cela que c'est mieux que l'utilisateu ne vois (x,y)!!"
    ... comme t'as le code rien ne t'empêche de le modifier.

    4) Tu dis que si tu enregistres l'image *.bmp , tu peux pas l'ouvrir avec Paint : Je viens de vérifier avec Paint chez moi ça marche donc bizarre que cela ne marche pas chez toi. Essayes donc de charger le *.bmp via l'Inspecteur d'objets dans la propriété Picture de Image1 juste pour voir.

    A+
    N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

  7. #87
    Membre habitué Avatar de stfanny31
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2008
    Messages
    254
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2008
    Messages : 254
    Points : 163
    Points
    163
    Par défaut déplacement d'une Ellipse d'aprés moi !!
    Cher Mr:Gilbert Geyer bonjour
    comme je vous l'ai dis dans un message précédent ,je me ss inspiré de votre programme pr fair un ,qui permet de déplacer les ellips sont les redimentionné
    je pence avoir tt fait mais il ne marche pas !!!
    esque vous pouvé me dir ou est l'erreur ??
    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
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
     
    unit Unit1;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      StdCtrls;
     
    type
      TForm1 = class(TForm)
        procedure FormShow(Sender: TObject);
        procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
          Shift: TShiftState; X, Y: Integer);
        procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,
          Y: Integer);
        procedure FormMouseUp(Sender: TObject; Button: TMouseButton;
          Shift: TShiftState; X, Y: Integer);
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
      end;
     
    var
      Form1: TForm1;
     
    implementation
     
    {$R *.DFM}
    type Tcercle= record
         visibe:boolean;
         color:tcolor;
         x0,y0:integer;
     
       end;
       cercle =array of  Tcercle ;
     
    var moncercle:cercle;
        pm:tpenmode;
        cercleselect:integer;
        dedans:boolean;
        XMP,YMP:integer;
    procedure tracecercle(c:Tcanvas;cercle:Tcercle;mode:Tpenmode);
        begin with c do
               begin pen.mode:=mode;
                     pen.Color:=cercle.color;
                     ellipse(cercle.x0,cercle.y0,cercle.x0+50,cercle.y0+50);
                end;
        end;
     
    function detectecercle(xs,ys:integer;cercle:Tcercle):boolean ;
      begin
       if (xs>cercle.x0)and (xs<cercle.x0+50)and(ys>cercle.y0)and(ys<cercle.y0+50) then
         begin
         result:=true;
         exit ;
         end
       else
         begin
         result:=false;
         exit ;
         end ;
      end;
     
    function newcercle(p:Tpoint;coul:tcolor):integer;
    var cont,j:integer;
      begin
        cont:=length(moncercle);
        inc(cont);
        setlength(moncercle,cont);
        j:=cont-1;
        with moncercle[j]do
        begin
           x0:=p.x;
           y0:=p.y;
        end;
        tracecercle(form1.canvas,moncercle[j],pm);
        moncercle[j].visibe:=true;
        result:=j;
     
      end;
     
    procedure TForm1.FormShow(Sender: TObject);
    begin
       color:=clwhite;
       pm:=pmnotxor;
       setlength(moncercle,0);
       cercleselect:=-1;
    end;
     
    procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;Shift: TShiftState; X, Y: Integer);
    var j:integer;   p1:Tpoint;
      begin
      j:=-1;
      cercleselect:=-1;
      dedans:=false;
      if length(moncercle)>0 then
      begin
          repeat inc(j) ;
            if moncercle[j].visibe then
             dedans:= detectecercle(x,y,moncercle[j]);
           until (dedans=true )or (j=High(moncercle)) ;
           if dedans=true and moncercle[j].visibe then
             begin
                 cercleselect :=j;
                 screen.Cursor:=crhandPoint;
             end;
           if  cercleselect <0 then
           begin
           p1.x:=x;p1.y:=y;
               cercleselect:=newcercle(p1,clred);
               XMP:=X;YMP:=y;
           end;
      end;
     
     
    end;
     
    procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
      var j,dxs,dys:integer;
      begin
        j:= cercleselect;
           if j>=0then
             begin
                screen.Cursor:=crhandpoint;
                dxs:=X-XMP;dys:=Y-YMP;
                 with  moncercle[j] do
                   begin
                   if dedans= true then
                      begin
                        x0:=x+dxs;y0:=y+dys;
                      end;
                     tracecercle(form1.canvas,moncercle[j],pm);
                    end;
               end;
            XMP:=X;YMP:=Y;
       end;
     
    procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
        cercleselect :=-1;
        screen.Cursor:=crdefault;
    end;
     
    end.
    c'est le méme que le votre pour les ligne
    sauf que ici c'est plus simple a détécté car (notre cercle peut avoir que un etat)
    si vous pouvé m'aidé cela seré cooul
    merci encor
    merci bcp

  8. #88
    Membre habitué Avatar de stfanny31
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2008
    Messages
    254
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2008
    Messages : 254
    Points : 163
    Points
    163
    Par défaut la sauvgarde
    Cher Mr:Gilbert Geyer
    au sujet de la sauvgarde ,quant je enregistre l'image,son icone n'est pas reconu!!
    danc méme si j'ésseye de l'ouvrire dans la propriété picture de la Timage il ne la reconné pas
    si vous pouvé m'éclairé sur ce sujet cela serais bien
    merci encor
    merci bcp

  9. #89
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Points : 3 263
    Points
    3 263
    Par défaut
    Salut,

    Voiçi ton code rectifié et testé : marche:
    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
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
     
    unit uStef;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      StdCtrls;
     
    type
      TForm1 = class(TForm)
        Label1: TLabel;
        procedure FormShow(Sender: TObject);
        procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
          Shift: TShiftState; X, Y: Integer);
        procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,
          Y: Integer);
        procedure FormMouseUp(Sender: TObject; Button: TMouseButton;
          Shift: TShiftState; X, Y: Integer);
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
      end;
     
    var
      Form1: TForm1;
     
    implementation
     
    {$R *.DFM}
     
    type Tcercle= record
                  visibe       : boolean;
                  color        : tcolor;
                  x0,y0,Rayon  : integer; //+ le Rayon
                  end;
     
        Cercles =array of  Tcercle; // <<
     
    var mesCercles  : cercles; // <<
        pm          :tpenmode;
        cercleselect:integer;
        dedans      :boolean;
        XMP,YMP     :integer;
     
    procedure tracecercle(c:Tcanvas;cercle:Tcercle;mode:Tpenmode);
        begin with c do
               begin pen.mode:=mode;
                     pen.Color:=cercle.color;
                     ellipse(cercle.x0,cercle.y0,cercle.x0+cercle.Rayon,cercle.y0+cercle.Rayon); //<<
                end;
        end;
     
    function detectecercle(xs,ys:integer;cercle:Tcercle):boolean ;
      begin
       with Cercle do if (xs>x0) and (xs<x0+Rayon) and (ys>y0) and (ys<y0+Rayon) //<<
                      then result:=true
                      else result:=false;
      end;
     
    function newcercle(p:Tpoint; iRayon : integer; coul:tcolor):integer; //<<
    var cont,j:integer;
      begin
        cont:=length(mesCercles); //<<
        inc(cont);
        setlength(mesCercles,cont);  //<<
        j:=cont-1;
        with mesCercles[j]do  //<<
        begin
           Rayon:=iRayon;  //<<
           color:=coul; //<<
           x0:=p.x;
           y0:=p.y;
        end;
        traceCercle(form1.canvas,mesCercles[j],pm);
        mesCercles[j].visibe:=true;
        result:=j;
     
      end;
    procedure TForm1.FormShow(Sender: TObject);
    begin     color:=clwhite;
              pm:=pmnotxor;
              setlength(mesCercles,0);
              cercleselect:=-1;
    end;
     
    procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
     
    var j:integer;   p1:Tpoint;
      begin
      j:=-1;
      cercleselect:=-1;
      dedans:=false;
      if length(mesCercles)>0 then //il y a déjà des cercles
      begin
          repeat inc(j) ;
            if mesCercles[j].visibe then
             dedans:= detecteCercle(x,y,mesCercles[j]);
           until (dedans=true )or (j=High(mesCercles)) ;
           if dedans=true and mesCercles[j].visibe then
             begin
                 cercleSelect :=j;
                 screen.Cursor:=crhandPoint;
             end;
           {if  cercleselect <0 then
           begin p1.x:=x;p1.y:=y;
                 cercleselect:=newcercle(p1,clred); : peut pas marcher ici
                 XMP:=X;YMP:=y;
           end; }
      end;
      if ssCtrl in Shift then //Création cercle
      begin p1.x:=x;p1.y:=y;
                  cercleselect:=newcercle(p1,50,clred);
                  XMP:=X;YMP:=y;
      end;
    end;
     
    procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    var j,dxs,dys:integer;
    begin
        j:= cercleselect;
           if j>=0then
             begin
                screen.Cursor:=crhandpoint;
                dxs:=X-XMP;dys:=Y-YMP;
                 with  mesCercles[j] do
                   begin
                   if dedans= true then
                      begin
                        tracecercle(form1.canvas,mesCercles[j],pm); //<Ajouté car il faut effacer avant de re-tracer dans la nouvelle position
                        x0:=x+dxs;y0:=y+dys;
                      end;
                     tracecercle(form1.canvas,mesCercles[j],pm);
                    end;
               end;
            XMP:=X;YMP:=Y;
       end;
     
    procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin     cercleselect :=-1;
              screen.Cursor:=crdefault;
    end;
     
    end.
    ... il y a des retouches mineures repérées par "// <<"
    ... et ce qui faisait que cela ne marchait pas :

    a : dans la proc FormMouseDown le newcercle(p1,clred) ne pouvait être créé à cet emplacement. Pour un créer un nouveau cecrle : Touche Ctrl+MouseDwn maintenant.

    b: et dans FormMouseMove il manquait le tracecercle(form1.canvas,mesCercles[j],pm); destiné à effacer le cercle avant de le re-tracer dans la nouvelle position.

    au sujet de la sauvgarde ,quant je enregistre l'image,son icone n'est pas reconu!!
    danc méme si j'ésseye de l'ouvrire dans la propriété picture de la Timage il ne la reconné pas
    si vous pouvé m'éclairé sur ce sujet cela serais bien
    ... la sauvegarde crée sur le disque un fichier monFichier.bmp et c'est Windows qui lui associe une icône et c'est le fichier monFichier.bmp qu'on peut charger dans la propriété picture de la Timage ce qui suppose qu'un TImage soit présent sur la Form.

    A+
    N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

  10. #90
    Membre habitué Avatar de stfanny31
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2008
    Messages
    254
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2008
    Messages : 254
    Points : 163
    Points
    163
    Par défaut effacer !!!
    Mr Gilbert Geyer Bojour
    merci pour votre correction cela marche bien
    question :
    a quelle niveau ce fait l'éffacement ??j'arrive pas a bien saisir
    car:
    j'ai associer mais deux programme ,déplacement des ligne et déplacement des cercele mais
    1-quant je clique sur le bouton ajouter un cercle ,je pe pas déplacer mé ligne
    2-quant j'ajoute des ligne mes cercle s'efface !!!

    et pour la souvgarde ,j'ai utilisé votre programe (Zip2)pour la faire,et j'arrive pas a l'ouvrire dans mon inspécteur d'objet ??
    merci encor
    merci bcp

  11. #91
    Membre habitué Avatar de stfanny31
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2008
    Messages
    254
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2008
    Messages : 254
    Points : 163
    Points
    163
    Par défaut "Ctrl"??
    Mr Gilbert Geyer ReBojour
    pourquoi obliger l'utilisateur a utilisé la touche "Ctrl"
    c'est pas vrément trés pratique !!
    on peux pas tout simplement fair (MouseDwn)tt seul
    merci encor
    merci bcp

  12. #92
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Points : 3 263
    Points
    3 263
    Par défaut
    Salut,

    pourquoi obliger l'utilisateur a utilisé la touche "Ctrl"
    c'est pas vrément trés pratique !!
    on peux pas tout simplement fair (MouseDwn)tt seul
    ... on n'oblige personne. Comme ton code ne marchait pas il fallait bien choisir une parade et j'ai choisi la touche Ctrl.
    Le MouseDown tout seul ne suffit pas il faut MouseDown + "autre chose" pour différencier du MouseDown utilisé pour détecter la sélection d'un cercle pré-existant : à toi de choisir ce "autre chose" : par exemple un if Button=mbRight then ...

    De toutes façons si tu ajoutes à ton code en plus des cercles, des rectangles, et d'autres trucs, tu seras bien obligé de choisir des parades différentes pour chaque truc.

    A+
    N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

  13. #93
    Membre habitué Avatar de stfanny31
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2008
    Messages
    254
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2008
    Messages : 254
    Points : 163
    Points
    163
    Par défaut pmNotXor !!!
    cher Mr:Gilbert Geyer
    esque vous pouvez m'expliqué a quelle niveau ce fait l'effacement !!!
    j'ai pas bien saisi l'influance de pmNotXor
    merci bcp
    merci bcp

  14. #94
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Points : 3 263
    Points
    3 263
    Par défaut
    Salut,

    esque vous pouvez m'expliqué a quelle niveau ce fait l'effacement !!!
    j'ai pas bien saisi l'influance de pmNotXor
    ... dans ton code que j'ai rectifié hier c'est marqué en commentaire : voir l'extrait où cette fois-ci je l'ai passé en vert :
    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
    procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    var j,dxs,dys:integer;
    begin
        j:= cercleselect;
           if j>=0then
             begin
                screen.Cursor:=crhandpoint;
                dxs:=X-XMP;dys:=Y-YMP;
                 with  mesCercles[j] do
                   begin
                   if dedans= true then
                      begin
                        tracecercle(form1.canvas,mesCercles[j],pm); //<Ajouté car il faut effacer avant de re-tracer dans la nouvelle position                    x0:=x+dxs;y0:=y+dys;
                      end;
                     tracecercle(form1.canvas,mesCercles[j],pm);
                    end;
               end;
            XMP:=X;YMP:=Y;
       end;
    .. quand on retrace la même chose au même endroit avec pmNotXor ça efface (puisque ça trace en blanc sur un écran blanc) et quand on retrace la même chose au même endroit avec pmNotXor ça le re-trace en visible : ça fonctionne comme une bascule.

    Trace donc sous pmNotXor deux traits épais de 8 pixels et qui se croisent tu verras ce qui se passe au croisement.

    A+
    N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

  15. #95
    Membre habitué Avatar de stfanny31
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2008
    Messages
    254
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2008
    Messages : 254
    Points : 163
    Points
    163
    Par défaut effacer ou détruire ??
    Cher Mr:Gilbert Geyer Bonjour
    merci maintenant j'ai saisi
    j'ai une autre question pour vous :
    quant je supprime un éllips (c'est cooul)
    mais sa présence(son éspri)est toujour la méme si il est invisible
    je veut le détruire complétement ,pour que mon curseur ne le détecte pas ,pas le mettre on invisible

    et si vous pouvé n'envoyé les instruction pour sauvgarder l'image,puisque j'arrive pas a ourir votre sauvgarde

    merci bcp
    merci bcp

  16. #96
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Points : 3 263
    Points
    3 263
    Par défaut
    Salut,

    1)
    quant je supprime un éllips (c'est cooul)
    mais sa présence(son éspri)est toujour la méme si il est invisible
    je veut le détruire complétement ,pour que mon curseur ne le détecte pas ,pas le mettre on invisible
    ... ton curseur ne peut le détecter que s'il est visible et il ne peut pas être détecté s'il est invisible puisque les détections se font dans le MouseDown selon l'exemple suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    repeat inc(j) ;
            if mesCercles[j].visibe 
            then dedans:= detecteCercle(x,y,mesCercles[j]);
    until (dedans=true )or (j=High(mesCercles)) ;
    ... mais si ça t'amuse en plus de ça de le détruire complètement tu peux toujours ajouter dans ton bloc d'instructions de suppression les suivantes qui vont alourdir le code pour pas grand-chose :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Count:=length(mesCercles);
    mesCercles[id]:=mesCercles[Count - 1]; //< id = indice du truc à détruire
    dec(Count);
    SetLength(mesCercles,Count);
    2) et si vous pouvé n'envoyé les instruction pour sauvgarder l'image,puisque j'arrive pas a ourir votre sauvgarde
    ... ??? mais tu les as déjà : vas voir dans le code que je t'ai envoyé où elles sont regroupées dans la procedure TfrmImgD.btnSauverClick().

    A+
    N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

  17. #97
    Membre habitué Avatar de stfanny31
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2008
    Messages
    254
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2008
    Messages : 254
    Points : 163
    Points
    163
    Par défaut
    salut cher Mr Gilbert Geyer
    comment aller vous,j'éspére que vous allez bien et que vous avez passé un bon week end .
    moi cava ,je ss entrain de relier mes deux programme de ligne et de cercele mais j'ai quelque difficulté
    des que j'aurais fini je vous l'envére pour que vous me donné votre avis
    et vous cela avance votre programe dont vousm'avé parlé !!
    j'éspér que oui

    a bientot j'éspér
    merci bcp

  18. #98
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Points : 3 263
    Points
    3 263
    Par défaut
    Salut,

    1)
    comment aller vous,j'éspére que vous allez bien et que vous avez passé un bon week end .
    ... ok, ça gaze.

    2)
    je ss entrain de relier mes deux programme de ligne et de cercele mais j'ai quelque difficulté des que j'aurais fini je vous l'envére pour que vous me donné votre avis
    ... ok.

    3)
    et vous cela avance votre programe dont vous m'avé parlé !!
    j'éspér que oui
    ... ben, je suis en-train d'ajouter des trucs gérés par des équations polaires : trèfle à n feuilles, coeur, bouche, fleurs, rosaces : je te passerai le code quand il sera présentable. En fait je suis plutôt en-train d'explorer le sujet que de faire une appli destinée à être diffusée et la version en cours est un avant-projet.

    A+
    N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

  19. #99
    Membre habitué Avatar de stfanny31
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2008
    Messages
    254
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2008
    Messages : 254
    Points : 163
    Points
    163
    Par défaut une fléche pour ma ligne
    cher Mr:Gilbert Geyer Bonjour

    dans l'éspoir d"ajouter une fléche a ma ligne j'ai commance par faire 2ligne
    (la 1er début fixe la 2éme fin fixe)qui bouge on méme moment
    cela marche trés bien
    ce qui me dérrange c'est juste le trace qui reste ou début ,comme si la ligne ne s'efface pas bien !!!
    voici mon programme ,si vous pouvé me dir cequi cloche !!!
    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
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
     
    var
      Form1: TForm1;    p2,p1,p3:tpoint;i,j:integer; oui:boolean;
     
    implementation
     
    {$R *.DFM}
     
    procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    begin
             if (i=1) or (j=1) then     { juste pr effacer }
               begin                     {la ligne1}
                canvas.MoveTo(50,50) ;       {}
                canvas.LineTo(p1.x,p1.y);    {}
                                          {la ligne2}
                canvas.MoveTo(p3.x,p3.y) ;   {}
                canvas.LineTo(90,90);        {}
     
               i:=2;  j:=2;
              end;
           if i=2 then
                begin
             canvas.Pen.Mode:=pmNotXor  ;
            canvas.MoveTo(50,50) ;      {Redéssine la ligne 1}
             canvas.LineTo(p2.x,p2.y);
             canvas.MoveTo(50,50) ;
             canvas.LineTo(x,y);
             p2:=point(x,y);
     
             canvas.MoveTo(p3.x,p3.y) ;{Redéssine la ligne 2}
             canvas.LineTo(90,90);
             canvas.MoveTo(x,y) ;
             canvas.LineTo(90,90);
             p3:=point(x,y);
             end;
     
    end;
    procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;Shift: TShiftState; X, Y: Integer);
    begin
     
     p2:=point(x,y);
     i:=1; j:=1;
    canvas.MoveTo(50,50) ;
    canvas.LineTo(x,y);
     
    canvas.MoveTo(x,y);
    canvas.LineTo(90,90);
    p1:=point(x,y);
    p3:=point(x,y);
    end;
    merci bcp
    merci bcp

  20. #100
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Points : 3 263
    Points
    3 263
    Par défaut
    Salut,

    dans l'éspoir dajouter une fléche a ma ligne ... ce qui me dérrange c'est juste le trace qui reste ou début ,comme si la ligne ne s'efface pas bien !!!
    voici mon programme ,si vous pouvé me dir cequi cloche !!!
    ... je suppose que tu veux faire une ligne avec une flèche comme ceci ------->

    - Soit ton problème provient de l'emplacement de l'instruction canvas.Pen.Mode:=pmNotXor dans :
    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
     procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    begin   canvas.Pen.Mode:=pmNotXor //< à déplacer ici
             if (i=1) or (j=1) then     { juste pr effacer }
               begin                     {la ligne1}
                canvas.MoveTo(50,50) ;       {}
                canvas.LineTo(p1.x,p1.y);    {}
                                          {la ligne2}
                canvas.MoveTo(p3.x,p3.y) ;   {}
                canvas.LineTo(90,90);        {}
     
               i:=2;  j:=2;
              end;
           if i=2 then
                begin
             //canvas.Pen.Mode:=pmNotXor  ; le pmNotXor doit être déclaré même si i=1
    ... et si cette modification ne supprime pas les traces, il se peut que le problème provient du fait qu'il y a des pixels qui se cheveauchent à l'extrémité de la ligne et le deux barres de la flèche et dans ce cas pour éviter la trace qui subsiste il faut faire en sorte que qu'il n'y ait aucun pixel commun entre la ligne et les deux barres de la flèche ni entre ces deux barres. Dans ce cas il faut une paire de points (p1 et p2) pour la ligne et une paire de points (p2,p3) pour la 1ère barre de la flèche et une paire de points (p4,p5) pour la deuxième barre et les valeurs x,y de ces points ne doivent pas cheveaucher les mêmes pixels. (C'est facile à faire dans le cas d'une ligne verticale ou horizontale mais agaçant dans le cas de lignes inclinées et qu'on déplace).

    A+
    N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

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

Discussions similaires

  1. dessiner vecteur 3D
    Par zaffef dans le forum MATLAB
    Réponses: 3
    Dernier message: 19/06/2015, 11h36
  2. Dessiner les vecteurs de flux optique
    Par nesnes2011 dans le forum OpenCV
    Réponses: 1
    Dernier message: 16/06/2015, 14h31
  3. dessiner un vecteur 3D
    Par sdecorme dans le forum MATLAB
    Réponses: 1
    Dernier message: 06/11/2013, 10h54
  4. [vecteurs] dessiner les courbes de Bezier
    Par luta dans le forum Flash
    Réponses: 4
    Dernier message: 03/07/2006, 09h58
  5. Réponses: 3
    Dernier message: 12/06/2002, 19h03

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