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. #101
    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 calcule angle
    Mr Gilbert Geyer Bonjour

    pour fair ma fléche ,j'ai besoin de connaitre l'angle que fait ma droite
    pour calculer l'angle j'ai utiliser le théoréme de Pythagore
    je suppose que mon point d'origine (100,100)
    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
     
    var
      Form1: TForm1;cosA:extended;
     
    implementation
     
    {$R *.DFM}
    procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    begin
     
    if (x>100)and (y<100)then
      begin
     cosA:=(x)/sqrt(sqr(x)+sqr(100-y))  ;
     end;
    end;
    cela ne marche pas !!
    esque il y'a une instruction qui calcule directement l'angle !!!
    merci
    merci bcp

  2. #102
    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 266
    Points
    3 266
    Par défaut
    Salut,

    esque il y'a une instruction qui calcule directement l'angle !!!
    oui :
    si xo,yo,xe,ye sont respectivement les coordonnées d'origine et d'extrémité du tronçon de droite alors l'angle Theta (Theta : Extended) de cette droite avec l'horizontale est égal à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    if xe<>xo then Theta:=ArcTan2(ye-yo,xo-xe) //< droite inclinée
    else Teta:=Pi/2; //< droite verticale
    ArcTan2 renvoie l'angle en radians compris entre -Pi et +Pi radians et ceci dans le quadrant correct. (ArcTan2 est meilleur que ArcTan qui existe aussi)

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

  3. #103
    Membre émérite
    Avatar de ALWEBER
    Homme Profil pro
    Expert Delphi
    Inscrit en
    Mars 2006
    Messages
    1 502
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Expert Delphi

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 502
    Points : 2 769
    Points
    2 769
    Billets dans le blog
    10
    Par défaut
    Voici quelques éléments te permettant de localiser la ligne dont le curseur de la souris est le plus près via CalculePerpendiculaire

    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
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
     
    unit BibMaths1;
     
    interface
     
    uses
      Windows, Math ;
     
    type
      TDPoint = record
        X,Y : Double ;
      end ;
     
      TDSegment = record
        Dp1,Dp2 : TDPoint ; // points
      end ;
     
    function AnglePoint(pt1 : TPoint) : double ;
    function AnglePointA(pt1 : TDPoint) : double ;
    funcTion DistanceDeuxPoints (Pt1 : TPoint; Pt2 : TPoint) : Double;
    funcTion DistanceDeuxPointsA (Pt1 : TDPoint; Pt2 : TDPoint) : Double;
    function CalculePoint (Distance,  Angle : Double) : TDPoint ;
    function CalculeIntersec (P1,P2,P3,P4 : TDPoint; var X,Y : Double ) : boolean ;
    function ExisteIntersec (P1,P2,P3,P4 : TPoint; var X,Y : Integer ) : boolean ;
    function CalculeMilieu (P1,P2 : TPoint) : TDPoint ;
    function CalculePerpendiculaire (P1,P2,P3 : TDPoint; var P4 : TDPoint ) : boolean ;
    procedure CalculeFibonnacci (l,h : integer ; var x,y : integer) ;
     
    implementation
     
    procedure CalculeFibonnacci (l,h : integer ; var x,y : integer) ;
    var
      i4,i5 : integer ;
     
      procedure CalculeI5  ;
      var
        i1,i2,i3 :  integer ;
      begin
        i5 := 0  ;
        repeat
          i1 := 1 ;
          i2 := 1 ;
          while true do
          begin
            i3 := i1 + i2 ;
            if (I2+I3) > i4 then break ;
            i1 := i2 ;
            i2 := i3 ;
          end ;
          i5 := i5 + i1 ;
          i4 := i4 - i1 - i2 ;
        until i4 < 4 ;
      end ;
    begin
      i4 := l ;
      CalculeI5 ;
      x := i5 ;
      i4 := h ;
      CalculeI5 ;
      y := i5 ;
    end ;
     
     
    funcTion DistanceDeuxPoints (Pt1 : TPoint; Pt2 : TPoint) : Double;
    var
      dx,dy : Double;
    begin
      dx:= pt1.x - pt2.x;
      dy:= pt1.y - pt2.y;
      Result := Sqrt((Dx * Dx) + (Dy * Dy));
    end;
     
    funcTion DistanceDeuxPointsA (Pt1 : TDPoint; Pt2 : TDPoint) : Double;
    var
      dx,dy : Double;
    begin
      dx:= pt1.x - pt2.x;
      dy:= pt1.y - pt2.y;
      Result := Sqrt((Dx * Dx) + (Dy * Dy));
    end;
     
    function AnglePointA (pt1 : TDPoint) : double;
    // angle point depuis 0,0
    const
      K1 = 180 / Pi ;
    begin
      if ((Pt1.x = 0) and (Pt1.y < 0)) then
        Result := 270
      else
        if ((Pt1.x = 0) and (Pt1.y > 0)) then
          Result := 90
        else
          if ((Pt1.x > 0) and (Pt1.y >= 0)) then
            Result := ArcTan(Pt1.y / Pt1.x) * K1
          else
            if ((Pt1.x < 0) And (Pt1.y > 0)) then
              Result := 180 - (ArcTan(Pt1.y / Abs(Pt1.x))* K1)
            else
              if ((Pt1.x < 0) And (Pt1.y <= 0)) then
                Result := 180 + (ArcTan(Pt1.y / Pt1.x) * K1)
              else
                if ((Pt1.x > 0) and (Pt1.y < 0)) then
                  Result := 360 - (ArcTan(Abs(Pt1.y) / Pt1.x) * K1)
                else
                  Result:=0;
    end;
     
    function AnglePoint (pt1 : TPoint) : double;
    // angle point depuis 0,0
    const
      K1 = 180 / Pi ;
    begin
      if ((Pt1.x = 0) and (Pt1.y < 0)) then
        Result := 270
      else
        if ((Pt1.x = 0) and (Pt1.y > 0)) then
          Result := 90
        else
          if ((Pt1.x > 0) and (Pt1.y >= 0)) then
            Result := ArcTan(Pt1.y / Pt1.x) * K1
          else
            if ((Pt1.x < 0) And (Pt1.y > 0)) then
              Result := 180 - (ArcTan(Pt1.y / Abs(Pt1.x))* K1)
            else
              if ((Pt1.x < 0) And (Pt1.y <= 0)) then
                Result := 180 + (ArcTan(Pt1.y / Pt1.x) * K1)
              else
                if ((Pt1.x > 0) and (Pt1.y < 0)) then
                  Result := 360 - (ArcTan(Abs(Pt1.y) / Pt1.x) * K1)
                else
                  Result:=0;
    end;
     
    function CalculePoint (Distance,  Angle : Double) : TDPoint ;
    //convertit les coordonnées polaires en coordonnées rectangulaires
    var
      Pt1 : TDPoint ;
      Radians : Double ;
    begin
      Radians := DegToRad (Angle) ;
      Pt1.x := Distance * Cos(Radians);
      Pt1.y := Distance * Sin(Radians);
      Result := Pt1 ;
    end ;
     
    function CalculeIntersec (P1,P2,P3,P4 : TDPoint; var X,Y : Double ) : boolean ;
    var
      a1,a2,b1,b2 : Double ;
    begin
      Result := false ;
      if ((P1.x-P2.x)=0) or ((P3.x-P4.x)=0) then
        exit ;
      a1 := (P1.y-P2.y)/(P1.x-P2.x) ;
      b1 := P1.y - (P1.x * a1)  ;
      a2 := (P3.y-P4.y)/(P3.x-P4.x) ;
      b2 := P3.y - (P3.x * a2) ;
      if a1=a2 then exit ;
      x := (b2-b1)/(a1-a2) ;
      y := a1*x + b1 ;
      Result := true ;
    end ;
     
    function ExisteIntersec (P1,P2,P3,P4 : TPoint; var X,Y : Integer ) : boolean ;
    var
      ia1,ia2,ib1,ib2 : Double ;
      b1, b2 : boolean ;
    begin
      Result := false ;
      if ((P1.x-P2.x)=0) or ((P3.x-P4.x)=0) then
        exit ;
      ia1 := (P1.y-P2.y)/(P1.x-P2.x) ;
      ib1 := P1.y - (P1.x * ia1)  ;
      ia2 := (P3.y-P4.y)/(P3.x-P4.x) ;
      ib2 := P3.y - (P3.x * ia2) ;
      if ia1=ia2 then exit ;
      x := Round((ib2-ib1)/(ia1-ia2)) ;
      y := Round(ia1*x + ib1) ;
      b1 := (P1.x<X) and (X<P2.x) and (P3.x<X) and (X<P4.x) ;
      b2 := (P1.Y<Y) and (Y<P2.Y) and (P3.Y<Y) and (Y<P4.Y) ;
      Result := b1 and b2 ;
    end ;
     
    function CalculeMilieu (P1,P2 : TPoint) : TDPoint;
    var
      Dp1 : TDpoint ;
    begin
      Dp1.X := (P1.X + P2.X) / 2 ;
      Dp1.Y := (P1.Y + P2.Y) / 2 ;
      Result := Dp1 ;
    end ;
     
    function CalculePerpendiculaire (P1,P2,P3 : TDPoint; var P4 : TDPoint ) : boolean ;
    var
      p5 : TPoint ;
      a1 : double ;
      dp6 : TDPoint ;
     
    begin
      p5.X := round(p3.x - p2.x) ;
      p5.y := round(p3.y - p2.y) ;
      a1 := AnglePoint (p5) + 90 ;
      dp6 := CalculePoint (10,a1) ;
      dp6.X := dp6.X+p1.x ;
      dp6.y := dp6.y+p1.y ;
      CalculeIntersec (p2,p3,p1,Dp6,p4.X,p4.Y) ;
      result := true
    end ;
     
    end.

  4. #104
    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 calcule angle exacte
    bjr Mr Gilbert Geyer

    j'ai arrager un peut votre formule pour le calcule de l'angle
    et je la vérais bcp mieux comme ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    if xe<>x0 then  Teta:=(ArcTan2(ye-y0,x0-xe) )
    else
         begin
         if y0>ye then Teta:=-Pi/2
         else  teta :=pi/2;
         end;
    ic:=RadToDeg(teta)+180;
    merci pour l'idé
    merci bcp

  5. #105
    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
    Mr ALWEBER merci pour votre idée
    je vais l'étudié et je vous donnerais mon avis bientôt
    merci encor
    merci bcp

  6. #106
    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 266
    Points
    3 266
    Par défaut
    Salut,

    j'ai arrager un peut votre formule pour le calcule de l'angle
    et je la vérais bcp mieux comme ca
    ... effectivement c'est mieux pour les verticales.

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

  7. #107
    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 Un numéro diffarant a mes cercle
    Bjr Mr Gilbert Geyer
    j"ai voulu ajouter des numéro diffarant a mes cercle (visible)
    donc j'ai ajouter un chanp dans ma table (num:numéro de cercle)et je l"ai choisi comme clé primaire.
    sachons que c'est l'utilisateur qui choisi le numéro a chque fois
    comment géré les erreur de violation de clé !!
    j'éspére que vous pouvé m'aidé

    merci bcp
    merci bcp

  8. #108
    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 266
    Points
    3 266
    Par défaut
    Salut,

    j"ai voulu ajouter des numéro diffarant a mes cercle (visible)
    donc j'ai ajouter un chanp dans ma table (num:numéro de cercle)et je l"ai choisi comme clé primaire.
    sachons que c'est l'utilisateur qui choisi le numéro a chque fois
    comment géré les erreur de violation de clé !!
    j'éspére que vous pouvé m'aidé
    Dans le code inclu dans ton message du 16/04/2008, 11h06 tu as ta function newcercle(p:Tpoint;coul:tcolor) : integer; que voiçi :
    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
    function newcercle(p:Tpoint;coul:tcolor):integer;
    var cont,j:integer;
      begin
        cont:=length(moncercle); //< vaudrait mieux remplcer le nom de "moncercle" par "MesCercles" puisqu'il s'agit d'un tableau comportant plusieurs cercles
        inc(cont);
        setlength(moncercle,cont);
        j:=cont-1;
        with moncercle[j]do
        begin
           x0:=p.x;
           y0:=p.y;
           Num:=j; //ajouté aujourd'hui
        end;
        tracecercle(form1.canvas,moncercle[j],pm);
        moncercle[j].visibe:=true;
        result:=j;
     
      end;
    ... et celle-ci renvoie l'indice de chaque nouveau cercle lors de sa création mais cet indice peut changer lors de la suppression d'un des cercles donc t'as eu raison d'ajouter un numéro dans ta table si ton utilisateur choisit les cercles par un numéro qui doit leur être affecté lors de cette création (comme ci-dessus en vert).
    Dans ce cas, pour éviter par la suite le risque de violation il suffit, immédiatement lors du choix par l'utilisateur du numéro, de faire une boucle du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    j:=-1; count:=length(moncercle); 
    repeat inc(j);
    until (moncercle[j].Num = NumeroChoisiParLutilisateur) or (j = count - 1);
    if moncercle[j].Num <> NumeroChoisiParLutilisateur
    then begin ShowMessage('Le Numero choisi n''existe plus'); EXIT; end
    else ...;
    A+
    N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

  9. #109
    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 accédé a un champ
    cher Mr Gilbert Geyer Bonjour
    pour la solution que vous m'avé envoyé merci
    mais moi je pencé plus a un truc du jor :
    je connaissé ce bloc mais je l'ai oublié

    esque vous pouver m'expliqué :
    comment pouvoir accédé champ('num') du n°éme enregistrement
    par example:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    for k:=0 to 1000 do 
     remplir tt le champ ('nom') par Pierre 
    ou mettre le champ ('nom') du 10éme enregistrement = pierre
    merci bcp
    merci bcp

  10. #110
    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 266
    Points
    3 266
    Par défaut
    Salut,

    1) Effectivement tu peux aussi utiliser :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    try ChoixParLutilisateurDunNuméro
         ...
    except
         ShowMessage('Le Numero choisi n''existe plus'); 
    end;
    2) Tu peux faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    for k:=0 to 1000 do moncercle[k].Nom:='Pierre';
     
    ou : moncercle[9].Nom:='Pierre'; //< 9 = indice du "10éme enregistrement"
     
    ou encore :
     
    for k:=0 to 1000 do
    begin if moncercle[k].Num=10 then moncercle[k].Nom:='Pierre'; // si tu cibles l'enregistrement numéroté 10.
    end;
    ... Par contre il vaut mieux éviter d'utiliser for k:=0 to 1000 c'est une source de bug's, prendre l'habitude d'utiliser :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    for k:=Low(mesCercles) to High(mesCercles) do ...
    A+

    P.S : au fait je t'ai envoyé samedi un mail avec la version n+1 du code de dessin, t'ouvres jamais ta boîte aux lettres ?
    N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

  11. #111
    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 liste d'un TDcomboBox
    Mr Gilbert Geyer ReBonjour
    pour remplir la liste d'un TDcomboBox a l'ouvertur de ma forme
    (remplir avec les élément du champ 'num'de la table1)
    j'ai utilisé le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    procedure Tform2.FormShow(Sender: TObject);
    var remplir:integer ;
    begin
     
    for remplir:=1 to Tble1.RecordCount do
       begin
            form1.Tble1.Append;
            TDcomboBox.Items.Add(f1.Table1['num']);
            form1.Tble1.Post;
            form1.Tble1.Next;
       end;
     
    end;
    mais cela ne marche pas
    vous pouvé me corrigé ??
    merci bcp [/QUOTE]
    merci bcp

  12. #112
    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 266
    Points
    3 266
    Par défaut
    Re-Salut,

    1)
    pour remplir la liste d'un TDcomboBox a l'ouvertur de ma forme
    ... 'TDcomboBox' : connais pas : tu veux dire une ComboBox standard je suppose.

    2) Pour le reste faudrait que tu donnes aussi le code du type de 'Tble1'.

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

  13. #113
    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
    Mr Gilbert Geyer
    pour votre programe
    mais autons que utilsateur j'aurais bien voulu vour le shéma qui change a chaque fois que je chage un paramétre (jor un petit apercu )
    je sais que c'est difficile mais a mon avie cela serais mieux
    merci bcp
    merci bcp

  14. #114
    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 DBComboBox /ComboBox
    Re-Bonjour

    DBComboBox c'est comme un ComboBox mais
    qui a des proriété pour le lier a la table
    DBComboBox .DataField
    DBComboBox .DataSource
    je sais pas vrément utilisé c'est propiété mais !!!

    Tble1:c'est le nom de ma table et 'num' c'est le champ que je veut affectter dans mon DBComboBox....
    ok ,si j'utilise un ComboBox normal ,comment faire !!

    merci bcp
    merci bcp

  15. #115
    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 266
    Points
    3 266
    Par défaut
    Re-Salut,

    mais autons que utilsateur j'aurais bien voulu vour le shéma qui change a chaque fois que je change un paramétre (jor un petit apercu
    je sais que c'est difficile mais a mon avie cela serais mieux.
    ... absolument d'accord ce serait mieux, mais pour l'instant je n'en étais qu'au stade de l'exploration de ce que l'on peut tirer des polaires en matière de dessins déplaçables et déformables à la souris ... et en plus depuis samedi je suis reparti sur les courbes de Béziers (l'ancienne approche était limitée à une poignée de points de contrôle ... et en plus le code était touffu alors que j'ai trouvé une combine pour simplifier le code tout en augmentant le nombre de points de contrôle et la rapidité d'exécution)
    ... il reste donc du pain sur la planche...

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

  16. #116
    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 266
    Points
    3 266
    Par défaut
    Re-Salut,

    1) TDBComboBox : comme t'avais dit utiliser Delphi-5 (comme moi) je n'ai pas trouvé le composant parmi ceux présents sur les onglets de l'éditeur mais evec F1 sur TDBComboBox je viens de découvrir ce truc.

    2)
    Tble1:c'est le nom de ma table et 'num' c'est le champ que je veut affectter dans mon DBComboBox....
    ok ,si j'utilise un ComboBox normal ,comment faire !!
    ... pour moi le mot table signifie tableau donc Tble1 est du type Array of QelqueChose et dans ce cas on ne peut pas écrire "for remplir:=1 to Tble1.RecordCount" do ...
    ... donc je repose ma question : Tble1 est de quel type ? (je me doute bien que Tble1 c'est le nom de la table, mais c'est son type qui m'intéresse, et je pense qu'il s'agit également d'un truc que n'ai jamais utilisé).

    ... sinon, en utilisant un ComboBox normal il suffit d'écrire maComboBox.Items.Add(maChaine);


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

  17. #117
    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 Table1.RecordCount
    Re-bonjour et merci de me répendre
    ma table et la plus simple des table
    pour crée une table je fait
    -module base de données
    -paradoox7
    -je donne les nom de champs ,leur type tous (A)
    -et j'enregistre directement

    le :Tble1.RecordCount marche trés bien je l'ai esséyé ,
    il permet d'avoir le nombre d'enregistrement .
    et le composant est dans la palette " ControleBD "

    merci bcp
    merci bcp

  18. #118
    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
    Re-Bonjour c'est encor moi
    j'ai un peut changer votre function de détection car j'utilise une table
    donc elle est devenu comme suite
    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
    function detectligne(xs,ys : integer;table1:Ttable) : Extended;
    var      a, b, miEp, lg : Extended; dx,dy,yc : integer; okx,oky : boolean;
      begin
             Result:=-1;
             miEp:=f1.tligne['Ep']/2;
            dx:=f1.tligne['Xe'] -f1.tligne['X0'] ;
               dy:=f1.tligne['Ye'] -f1.tligne['Y0'];
    
              okx:=False; oky:=False;
              if ((dy<0) and (ys<=f1.tligne['Y0']) and (ys>=f1.tligne['Ye']))or ((dy>0) and (ys<=f1.tligne['Ye']) and (ys>=f1.tligne['Y0'])) then oky:=True;
             if ((dx>0) and (xs<=f1.tligne['Xe']) and (xs>=f1.tligne['X0']))or ((dx<0) and (xs<=f1.tligne['X0']) and (xs>=f1.tligne['Xe'])) then okx:=True;
    
    
              if (dx=0) and (dy=0) then begin if (xs - miEp <=f1.tligne['X0']) and (f1.tligne['X0']<= xs + miEp)and (ys - miEp <=f1.tligne['Y0']) and (f1.tligne['Y0'] <= ys + miEp)then Result:=-maxInt; EXIT;end;
    
               if (dx=0) then
                   begin if (xs - miEp <=f1.tligne['X0']) and (f1.tligne['X0'] <= xs + miEp)and oky then Result:=(ys - f1.tligne['Y0'])/dy;EXIT;end
                     else
                        if (dy=0) then
                         begin if (ys - miEp <=f1.tligne['Y0']) and (f1.tligne['Y0'] <= ys + miEp)and okx then Result:=(xs - f1.tligne['X0'])/dx;EXIT;end
                          else
                              begin
                                a:=dy/dx;
                                b:=f1.tligne['Y0'] - a*f1.tligne['X0'];
                                 yc:=round(a*xs + b);
                                lg:=sqrt(dx*dx + dy*dy);
                                miEp:=abs(miEp*lg/dx);
                               if (yc + miEp >= ys) and (yc - miEp <= ys) and okx and oky then  Result:=(xs - f1.tligne['X0'])/dx;
                    end;
             end;
    comme vous voyé j'ai rien fait de spéciale ,
    j'ai juste remplacer par f1.tligne['X0'])// f1:forme1
    et j'ai mis detectligne(xs,ys : integer;table1:Ttable) : Extended;

    le probléme et que dans cette instruction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    procedure Tf1.i1MouseMove(Sender: TObject; Shift: TShiftState; X,Y: Integer);
    begin
    var detcligen: Extended;
    detcligen :=detectligne(x,y,f1.tligne);
    end;
    une erreur ce produit !!!
    j'ai pas compri pourqoi

    esque vous pouvez m'aidé
    merci bcp

  19. #119
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 434
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 434
    Points : 5 846
    Points
    5 846
    Par défaut
    salut

    c'est quoi le libelle de l'erreur ??

    @+ Phil

    PS

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    procedure Tf1.i1MouseMove(Sender: TObject; Shift: TShiftState; X,Y: Integer);
    var 
      detcligen: Extended; // place ici ce serait mieux
    begin
    detcligen :=detectligne(x,y,f1.tligne);
    end;
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  20. #120
    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 266
    Points
    3 266
    Par défaut
    Re-Salut,

    A Stfanny31 : ControleBD : pas trouvé dans les options d'environnement de l'éditeur de Delphi-5 ?????

    En plus de la remarque d'Anapurna il y a d'autres trucs bizarres dans ta function detectligne :
    - les var a, b, miEp, lg sont du type Extended,
    - et les var dx,dy,yc du type integer
    ... et tu écris :

    miEp:=f1.tligne['Ep']/2; (pour un Extended) puis
    dx:=f1.tligne['Xe'] -f1.tligne['X0'] ; (pour un Integer) et ainsi de suite,
    or f1.tligne['nom'] ne peut pas forcément renvoyer un Extended dans un cas et un Integer dans le deuxième cas.
    Faut vérifier le type renvoyé par f1.tligne['nom'] et convertir vers le bon type le cas échéant.

    S.V.P : Au lieu de dire "une erreur se produit !!!" ("une" on s'en fout, laquelle c'est déjà mieux) prendre l'habitude de donner le libellé de l'erreur.

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

+ Répondre à la discussion
Cette discussion est résolue.
Page 6 sur 8 PremièrePremière ... 2345678 DernièreDernière

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