Novembre 2024 | Lun | Mar | Mer | Jeu | Ven | Sam | Dim |
---|
| | | | 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 | | Calendrier |
|
|
| Petit défi avec un objet memo. | |
|
+5Jicehel papydall Klaus Yannick pan59 9 participants | |
Auteur | Message |
---|
papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Petit défi avec un objet memo. Dim 20 Oct 2013 - 11:10 | |
| Klaus est en forme : le Forum se porte bien ! | |
| | | pan59
Nombre de messages : 367 Age : 67 Localisation : Wattignies Date d'inscription : 16/10/2011
| Sujet: petit défi avec un objet memo. Dim 20 Oct 2013 - 11:40 | |
| Bonjour.
Pour répondre à Jicehel, j'avais un peu décortiqué son code afin de l'adapter à mes besoins.
Mais par contre, je n'avais pas trouvé la solution permettant d'ajouter la position des flèches de direction.
Bon dimanche à tous. | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Petit défi avec un objet memo. Dim 20 Oct 2013 - 11:44 | |
| ok Pan59, si tu n'as pas trouvé, je m'excuse pour mon commentaire. Je suis un peu râleur des fois... | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Dim 20 Oct 2013 - 12:48 | |
| Super le paramètre s% ! On peut même aller jusqu'à 4 pour faire les 4 coins... | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Petit défi avec un objet memo. Dim 20 Oct 2013 - 12:55 | |
| Heu... Est-ce vraiment utile ? Par contre, j'ai ajouté la possibilité de s%=0 pour "aucune flèche", ce qui revient à faire un rectangle aux coins arrondis: - Code:
-
' couleur de fond de la form dim fond_r% : fond_r% = 255 dim fond_g% : fond_g% = 255 dim fond_b% : fond_b% = 255
color 0,fond_r%, fond_g%, fond_b%
dessiner_objet(1,0,100,100,300,200,400,"Traduire")
end
' n%: numero de l'objet de base (n%, n%+1 et n%+2 utilisés) ' s%! sens de la flèche 0 = aucune flèche ' 1=en bas à gauche 2=en bas à droite ' x%,y%: coin en haut à gauche de la zone de dessin ' w%,h%: dimensions de la zone de dessin ' wm%: largeur du mémo ' t$: texte (caption) du bouton sub dessiner_objet(n%,s%,x%,y%,w%,h%,wm%,t$) ' dessiner la bulle picture n% top n%,y% : left n%,x% : width n%,w%+10 : height n%,h% color n%,fond_r%, fond_g%, fond_b% 2d_target_is n% : 2d_pen_width 2 : 2d_pen_color 195,195,196 2d_circle 20,10,10 : 2d_circle w%-10,10,10 if s%=0 2d_circle w%-10,h%-20,10 2d_circle 20,h%-20,10 end_if if s%=1 then 2d_circle w%-10,h%-20,10 if s%=2 then 2d_circle 20,h%-20,10 2d_rectangle 20,0,w%-10,h%-10 2d_rectangle 10,10,w%,h%-20 if s%=1 2d_line 10,h%-20,0,h% 2d_line 20,h%-10,0,h% end_if if s%=2 2d_line w%,h%-20,w%+10,h% 2d_line w%-10,h%-10,w%+10,h% end_if 2d_pen_color fond_r%, fond_g%, fond_b% 2d_line 11,10,w%-2,10 2d_line 11,h%-1,w%-2,h%-1 2d_line 20,2,20,10 : 2d_line w%-11,2,w%-11,10 2d_line 10,h%-21,w%-2,h%-21 2d_line 20,h%-20,20,h%-12 : 2d_line w%-11,h%-20,w%-11,h%-12 2d_pen_color 0,0,0 2d_pen_width 1 2d_flood 100,150,255,255,0
' placer le mémo memo n%+1 : top n%+1,top(1)+10 : left n%+1,left(1)+20 height n%+1,height(1)-30 : width n%+1,wm%
' placer le bouton button n%+2 : width n%+2,100 : caption n%+2,t$ top n%+2,top(n%+1)+height(n%+1) : left n%+2,left(n%+1)+(width(n%+1)-width(n%+2))/2 height n%+2,20 end_sub
| |
| | | Mumu
Nombre de messages : 176 Localisation : 45 Date d'inscription : 20/12/2012
| Sujet: Re: Petit défi avec un objet memo. Dim 20 Oct 2013 - 13:09 | |
| Mais jusque où s’arrêtera t il ?? | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Petit défi avec un objet memo. Dim 20 Oct 2013 - 14:01 | |
| Où ? Je ne sais pas. Voici en tout ras, une nouvelle version. Elle ajoute un nouveau paramètre r% (3ème paramètre), qui donne le rayon du cercle utilisé pour les arrondis (ici, réglé à 15 pixels): - Code:
-
' couleur de fond de la form dim fond_r% : fond_r% = 255 dim fond_g% : fond_g% = 255 dim fond_b% : fond_b% = 255
color 0,fond_r%, fond_g%, fond_b%
dessiner_objet(1,2,15,100,100,300,200,400,"Traduire")
end
' n%: numero de l'objet de base (n%, n%+1 et n%+2 utilisés) ' s%! sens de la flèche 0 = aucune flèche ' 1=en bas à gauche 2=en bas à droite ' r%: rayon du cercle des coins arrondis ' x%,y%: coin en haut à gauche de la zone de dessin ' w%,h%: dimensions de la zone de dessin ' wm%: largeur du mémo ' t$: texte (caption) du bouton sub dessiner_objet(n%,s%,r%,x%,y%,w%,h%,wm%,t$) ' dessiner la bulle picture n% top n%,y% : left n%,x% : width n%,w%+r% : height n%,h% color n%,fond_r%, fond_g%, fond_b% 2d_target_is n% : 2d_pen_width 2 : 2d_pen_color 195,195,196 2d_circle r%*2,r%,r% : 2d_circle w%-r%,r%,r% if s%=0 2d_circle w%-r%,h%-r%*2,r% 2d_circle r%*2,h%-r%*2,r% end_if if s%=1 then 2d_circle w%-r%,h%-r%*2,r% if s%=2 then 2d_circle r%*2,h%-r%*2,r% 2d_rectangle r%*2,0,w%-r%,h%-r% 2d_rectangle r%,r%,w%,h%-r%*2 if s%=1 2d_line r%,h%-r%*2,0,h% 2d_line r%*2,h%-r%,0,h% end_if if s%=2 2d_line w%,h%-r%*2,w%+r%,h% 2d_line w%-r%,h%-r%,w%+r%,h% end_if 2d_pen_color fond_r%, fond_g%, fond_b% 2d_line r%+1,r%,w%-2,r% 2d_line r%+1,h%-1,w%-2,h%-1 2d_line r%*2,2,r%*2,r% : 2d_line w%-r%-1,2,w%-r%-1,r% 2d_line r%,h%-r%*2-1,w%-2,h%-r%*2-1 2d_line r%*2,h%-r%*2,r%*2,h%-r%-2 2d_line w%-r%-1,h%-r%*2,w%-r%-1,h%-r%-2 2d_pen_color 0,0,0 2d_pen_width 1 2d_flood x%+r%+5,y%+5,255,255,0
' placer le mémo memo n%+1 : top n%+1,top(1)+r% : left n%+1,left(1)+r%*2 height n%+1,height(1)-r%*3 : width n%+1,wm%
' placer le bouton button n%+2 : width n%+2,100 : caption n%+2,t$ top n%+2,top(n%+1)+height(n%+1) : left n%+2,left(n%+1)+(width(n%+1)-width(n%+2))/2 height n%+2,20 end_sub
| |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Petit défi avec un objet memo. Dim 20 Oct 2013 - 14:27 | |
| Petites erreurs dans la fin de ton code (références absolues à l'objet 1 et non au numéro de l'objet passé en paramètre) et petit problème d'affichage de l'objet qui dépasse de la bulle et du bouton qui dépasse aussi: - Code:
-
' couleur de fond de la form dim fond_r% : fond_r% = 255 dim fond_g% : fond_g% = 255 dim fond_b% : fond_b% = 255
color 0,fond_r%, fond_g%, fond_b%
dessiner_objet(1,2,15,100,100,300,200,400,"Traduire")
end
' n%: numero de l'objet de base (n%, n%+1 et n%+2 utilisés) ' s%! sens de la flèche 0 = aucune flèche ' 1=en bas à gauche 2=en bas à droite ' r%: rayon du cercle des coins arrondis ' x%,y%: coin en haut à gauche de la zone de dessin ' w%,h%: dimensions de la zone de dessin ' wm%: largeur du mémo ' t$: texte (caption) du bouton sub dessiner_objet(n%,s%,r%,x%,y%,w%,h%,wm%,t$) ' dessiner la bulle picture n% top n%,y% : left n%,x% : width n%,w%+r% : height n%,h% color n%,fond_r%, fond_g%, fond_b% 2d_target_is n% : 2d_pen_width 2 : 2d_pen_color 195,195,196 2d_circle r%*2,r%,r% : 2d_circle w%-r%,r%,r% if s%=0 2d_circle w%-r%,h%-r%*2,r% 2d_circle r%*2,h%-r%*2,r% end_if if s%=1 then 2d_circle w%-r%,h%-r%*2,r% if s%=2 then 2d_circle r%*2,h%-r%*2,r% 2d_rectangle r%*2,0,w%-r%,h%-r% 2d_rectangle r%,r%,w%,h%-r%*2 if s%=1 2d_line r%,h%-r%*2,0,h% 2d_line r%*2,h%-r%,0,h% end_if if s%=2 2d_line w%,h%-r%*2,w%+r%,h% 2d_line w%-r%,h%-r%,w%+r%,h% end_if 2d_pen_color fond_r%, fond_g%, fond_b% 2d_line r%+1,r%,w%-2,r% 2d_line r%+1,h%-1,w%-2,h%-1 2d_line r%*2,2,r%*2,r% : 2d_line w%-r%-1,2,w%-r%-1,r% 2d_line r%,h%-r%*2-1,w%-2,h%-r%*2-1 2d_line r%*2,h%-r%*2,r%*2,h%-r%-2 2d_line w%-r%-1,h%-r%*2,w%-r%-1,h%-r%-2 2d_pen_color 0,0,0 2d_pen_width 1 2d_flood x%+r%+5,y%+5,255,255,0
' placer le mémo memo n%+1 : top n%+1,top(n%)+r% : left n%+1,left(n%)+r%*2 height n%+1,height(n%)-r%*2 - 30 : width n%+1,width(n%)-r%*4
' placer le bouton button n%+2 : width n%+2,100 : caption n%+2,t$ top n%+2,top(n%+1)+height(n%+1)+5 : left n%+2,left(n%+1)+(width(n%+1)-width(n%+2))/2 height n%+2,20 end_sub | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Petit défi avec un objet memo. Dim 20 Oct 2013 - 14:43 | |
| Problème de référence à l'objet 1 corrigé: - Code:
-
' couleur de fond de la form dim fond_r% : fond_r% = 255 dim fond_g% : fond_g% = 255 dim fond_b% : fond_b% = 255
color 0,fond_r%, fond_g%, fond_b%
dessiner_objet(11,1,15,100,100,300,200,400,"Traduire")
end
' n%: numero de l'objet de base (n%, n%+1 et n%+2 utilisés) ' s%! sens de la flèche 0 = aucune flèche ' 1=en bas à gauche 2=en bas à droite ' r%: rayon du cercle des coins arrondis ' x%,y%: coin en haut à gauche de la zone de dessin ' w%,h%: dimensions de la zone de dessin ' wm%: largeur du mémo ' t$: texte (caption) du bouton sub dessiner_objet(n%,s%,r%,x%,y%,w%,h%,wm%,t$) ' dessiner la bulle picture n% top n%,y% : left n%,x% : width n%,w%+r% : height n%,h% color n%,fond_r%, fond_g%, fond_b% 2d_target_is n% : 2d_pen_width 2 : 2d_pen_color 195,195,196 2d_circle r%*2,r%,r% : 2d_circle w%-r%,r%,r% if s%=0 2d_circle w%-r%,h%-r%*2,r% 2d_circle r%*2,h%-r%*2,r% end_if if s%=1 then 2d_circle w%-r%,h%-r%*2,r% if s%=2 then 2d_circle r%*2,h%-r%*2,r% 2d_rectangle r%*2,0,w%-r%,h%-r% 2d_rectangle r%,r%,w%,h%-r%*2 if s%=1 2d_line r%,h%-r%*2,0,h% 2d_line r%*2,h%-r%,0,h% end_if if s%=2 2d_line w%,h%-r%*2,w%+r%,h% 2d_line w%-r%,h%-r%,w%+r%,h% end_if 2d_pen_color fond_r%, fond_g%, fond_b% 2d_line r%+1,r%,w%-2,r% 2d_line r%+1,h%-1,w%-2,h%-1 2d_line r%*2,2,r%*2,r% : 2d_line w%-r%-1,2,w%-r%-1,r% 2d_line r%,h%-r%*2-1,w%-2,h%-r%*2-1 2d_line r%*2,h%-r%*2,r%*2,h%-r%-2 2d_line w%-r%-1,h%-r%*2,w%-r%-1,h%-r%-2 2d_pen_color 0,0,0 2d_pen_width 1 2d_flood x%+r%+5,y%+5,255,255,0
' placer le mémo memo n%+1 : top n%+1,top(n%)+r% : left n%+1,left(n%)+r%*2 height n%+1,height(n%)-r%*3 : width n%+1,wm%
' placer le bouton button n%+2 : width n%+2,80 : caption n%+2,t$ top n%+2,top(n%+1)+height(n%+1) : left n%+2,left(n%+1)+(width(n%+1)-width(n%+2))/2 height n%+2,20 end_sub
Mais le mémo dépasse "par construction": le modèle proposé par Pan59 était justement cela. Ceci dit, la largeur de ce mémo est géré par le paramètre wm%, et est donc adaptable à loisir. Le bouton est placé en principe au milieu du mémo... J'ai réduit un peu sa largeur. | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Petit défi avec un objet memo. Dim 20 Oct 2013 - 19:53 | |
| Il m’arrive parfois de me souvenir soudainement d’une formule ou d’une équation mathématique que j’ai vue il y a trente ans. Mais comme il y a plus de trente ans que je n’ai plus trente ans, cette faculté de me souvenir devient de plus en plus rare. Bref, je me souviens de l’équation de la super-ellipse dite aussi hyper-ellipse d’équation cartésienne : power(abs(x/a),n) + power(abs(y/b),n) = 1Cette même équation peut être mise sous forme paramétrique plus facile à tracer : X(t) = power(abs(cos(t)),2/n) * a * sgn(cos(t)) Y(t) = power(abs(sin(t)),2/n) * b * sgn(sin(t))
Avec cette équation on peut obtenir des courbes de différentes formes et notamment des rectangles à coins arrondis. Le code suivant contient 2 SUBs : Le 1ère SUB Super_ellipse(a,b,n) permet de tracer entre autres un rectangle à coins arrondis. La 2ème Tracer_Memo(numero,a,b,n) permet de tracer un fond pour un MEMO - c'est ici:
- Code:
-
rem ============================================================================ rem SUPER_ELLIPSE.BAS PAR PAPYDALL rem ============================================================================ ' La super-ellipse (ou courbe de Gabriel Lamé) est la figure géométrique définie ' en coordonnées catésiennes comme l'ensemble de tous les points (x,y)vérifiant ' l'équation : power(abs(x/a),n) + power(abs(y/b),n) = 1 ' avec n,a,b nombres positifs. ' Cette formule définit une courbe fermée contenue dans le rectangle : ' -a <= x <= +a et ' -b <= y <= +b ' a et b sont les demi-diamètres de la courbe. ' Lorsque n augmente, la courbe tend vers un rectangle rem ---------------------------------------------------------------------------- rem Si n < 2, la courbe est appelée HYPO-ELLIPSE rem Si n > 2, la courbe est appelée HYPER-ELLIPSE
rem Si n est compris entre 0 et 1, le super-ellipse ressemble à une étoile à rem 4 branches. rem Si n = 1, la courbe est un losange avec des coins (±a,0) et (0,±b). rem Si n = 2, la courbe est une simple ellipse (en particulier, un cercle si a = b) rem Si n > 2, la courbe ressemble superficiellement à un rectangle avec coins arrondis rem ============================================================================ rem Cette même équation peut être exprimée en coordonnées polaires (plus simple à tracer) : rem X(t) = power(abs(cos(t)),2/n) * a * sgn(cos(t)) rem Y(t) = power(abs(sin(t)),2/n) * b * sgn(sin(t)) rem ============================================================================
' Exemples de super-ellipse ' -------------------------- Super_ellipse(200,100,10) : ' Rectangle large avec coins moyennement arrondis ' Super_ellipse(200,100,20) : ' Rectangle large avec coins faiblement arrondis ' Super_ellipse(200,100,5) : ' Rectangle large avec coins fortement arrondis ' Super_ellipse(100,180,8) : ' rectangle haut avec coins arrondis ' Super_ellipse(150,150,5) : ' Carré avec coins arrondis ' Super_ellipse(200,200,50) ' Super_ellipse(50,100,10) ' Super_ellipse(50,100,1) ' Super_ellipse(150,100,.5) ' Super_ellipse(150,100,2.25) ' Super_ellipse(250,100,2) rem ============================================================================ rem Applicaion : rem On peut utiliser la figure générée par cette formule comme fond pour un objet rem MEMO, LIST , etc.. rem ============================================================================ ' Exemples de memo ' ----------------- ' Tracer_Memo(1,200,100,10) ' Tracer_Memo(1,200,100,50) ' Tracer_Memo(1,50,100,10) ' Tracer_Memo(1,200,100,8) ' Tracer_Memo(1,200,200,10)
rem ============================================================================
end rem ============================================================================ ' Paramètres : ' a : demi-diamètre horizontal ' b : demi-diamètre vertical ' n : détermine la nature de la super-ellipse(hypo ou hyper-ellipse) et sa forme ' Plus la valeur de n augmente, plus la courbe obtenue tend vers un rectangle. SUB Super_ellipse(a,b,n) dim_local pi,p,t,x,y, xc,yc ,w,h pi = acos(-1) : p = pi/180 color 0,255,255,255 w = width(0) : h = height(0) picture 9999 : top 9999, (h-2*b)/2 : left 9999,(w-2*a)/2 width 9999, 2*a+10 : height 9999,2*b+10 xc = width(9999)/2 : yc = height(9999)/2
2d_target_is 9999 : 2d_poly_from xc + a,yc ' Tracé de la super-ellipse for t = 0 to 2*pi+p step p x = power(abs(cos(t)),2/n) * a * sgn(cos(t)) y = power(abs(sin(t)),2/n) * b * sgn(sin(t)) 2d_poly_to xc+x,yc+y next t 2d_flood xc-a+2,yc,255,255,0 END_SUB rem ============================================================================ SUB Tracer_Memo(numero,a,b,n) Super_ellipse(a,b,n) memo numero : top numero, top(9999)+15: left numero, left(9999)+15 width numero, 2*a-20 : height numero,2*b-20 item_add numero," *** Ceci est un MEMO ***" END_SUB rem ============================================================================
C’est à vous d’imaginer d’autres applications utilisant un rectangle, ou un carré à coins arrondis. NB : L’équation permet suivant les valeurs des paramètres a,b,n d’obtenir plusieurs formes de figures (étoile, losange, cercle, ellipse …) | |
| | | Invité Invité
| Sujet: Re: Petit défi avec un objet memo. Dim 20 Oct 2013 - 21:54 | |
| Papydall Formidable ta formule. J'avais envie de faire pour mon programme un rectangle avec des coins arrondis. J'ai même pas essayé de le faire, car de toute façon j'aurai perdu beaucoup de temps pour le peu d’intérêt que cela aurait eu en plus. Mais comme tu as fait le code, j'essayerai de m'en servir. Mais pour l'instant je suis sur d'autres outils. |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Petit défi avec un objet memo. Dim 20 Oct 2013 - 22:43 | |
| Voici une SUB pour dessiner un rectangle/carré aux coins arrondis. L’appel se fait par : Rectangle_Coins_Arrondis(xc,yc,a,b,n)avec : xc,yc : centre du rectangle a et b : respectivement demi-côté horizontal et demi-côté vertical n : plus n est grand plus la figure tend vers un rectangle a,b,n doivent être positives - Code:
-
rem ============================================================================ rem Rectangle aux coins arrondis rem par Papydall rem ============================================================================ Rectangle_Coins_Arrondis(300,220,200,100,10) ' Rectangle_Coins_Arrondis(300,220,100,200,10) ' Rectangle_Coins_Arrondis(300,220,100,100,10) end rem ============================================================================ ' Paramètres : ' xc,yc : coordonnées du centre du rectangle ' a et b : respectivement demi-côté horizontal et demi-côté vertical ' n : plus n est grand plus la figure tend vers un rectangle ' a,b,n doivent être positives SUB Rectangle_Coins_Arrondis(xc,yc,a,b,n) dim_local pi,p,t,x,y pi = acos(-1): p = pi/180 if a <= 0 or b <= 0 or n <= 0 then message "a,b,et n doivent être posives" : exit_sub 2d_poly_from xc + a,yc for t = 0 to 2*pi+p step p x = power(abs(cos(t)),2/n) * a * sgn(cos(t)) y = power(abs(sin(t)),2/n) * b * sgn(sin(t)) 2d_poly_to xc+x,yc+y next t END_SUB rem ============================================================================
Dernière édition par papydall le Lun 21 Oct 2013 - 1:04, édité 2 fois | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Petit défi avec un objet memo. Dim 20 Oct 2013 - 22:43 | |
| Tiens cosmos, un rectangle à coins arrondis, moins sophistiqué que la formule de papydall (mais où va t'il chercher tout ça ?), mais le résultat est le même: - Code:
-
PICTURE 1: FULL_SPACE 1 Rectar(1,30,50,500,320,30,16776960) END
SUB Rectar(obj%,x%,y%,w%,h%,r%,coul%) ' Tracé d'un rectangle à coins arrondis dans l'objet obj% ' en x%, y%, de largeur w%, hauteur h%, rayon de l'arrondi r% ' couleur de remplissage coul% (= R*256*256 + G*256 + B) DIM_LOCAL a,cr%,cg%,cb%,xc%,yc%,ps,pi: pi = 4*ATN(1) 2D_TARGET_IS obj% cr% = INT(coul%/65536): cg% = BIN_AND(coul%,65280)/256: cb% = BIN_AND(coul%,255) IF r% = 0 2D_FILL_COLOR cr%,cg%,cb%: 2D_RECTANGLE x%,y%,x%+w%,y%+h% ELSE ps = pi/r% xc% = x%+r%: yc% = y%+r% 2D_LINE x%+w%-r%,y%,xc%,y% FOR a = pi/2 TO pi STEP ps 2D_POLY_TO xc%+r%*COS(a),yc%-r%*SIN(a) NEXT a yc% = y%+h%-r% 2D_POLY_TO x%,yc% FOR a = pi TO 3*pi/2 STEP ps 2D_POLY_TO xc%+r%*COS(a),yc%-r%*SIN(a) NEXT a xc% = x%+w%-r% 2D_POLY_TO xc%,y%+h% FOR a = 3*pi/2 TO 2*pi STEP ps 2D_POLY_TO xc%+r%*COS(a),yc%-r%*SIN(a) NEXT a yc% = y%+r% 2D_POLY_TO x%+w%,yc% FOR a = 0 TO pi/2+ps STEP ps 2D_POLY_TO xc%+r%*COS(a),yc%-r%*SIN(a) NEXT a 2D_FLOOD xc%,yc%,cr%,cg%,cb% END_IF END_SUB | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Petit défi avec un objet memo. Dim 20 Oct 2013 - 22:43 | |
| On s'est croisés papydall ! Ton rectangle est très joli, mais c'est un pseudo-rectangle... | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Petit défi avec un objet memo. Dim 20 Oct 2013 - 23:04 | |
| C’est tout à fait bien JL35 (un bon exercice de réflexion !) Tu as osé et tu as réussi : tu as donc droit à deux mérites. Mais l’équation du mathématicien Gabriel Lamé est plus simple surtout sous sa forme polaire. - JL35 a écrit:
- Ton rectangle est très joli, mais c'est un pseudo-rectangle...
En réalité ça s’appelle une super-ellipse ou une hyper-ellipseSon équation est due au mathématicien français Gabriel Lamé. | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Petit défi avec un objet memo. Dim 20 Oct 2013 - 23:14 | |
| Je reconnais que c'est quand même un exploit de tracer cette figure avec une seule formule, c'est bien plus compact que mon essai, et je te tire volontiers mon (hyper-)chapeau pour cette hyper-ellipse dont je ne savais même pas qu'elle existait (j'étais un peu matheux, mais pas trop...) et Gabriel Lamé non plus, comme quoi on en apprend tous les jours ! | |
| | | Invité Invité
| Sujet: Re: Petit défi avec un objet memo. Dim 20 Oct 2013 - 23:24 | |
| La méthode de Papydall est séduisante. Si je l'avais codé, cela eu été dans une méthode proche de JL35. Maintenant en y réfléchissant, le but est d'avoir des memo avec différents onglets mais en plus avec des onglets de couleurs différentes, mais le cadre prend la couleur de l'onglet. Là ça ce complique! Si quelqu'un a un code propre pour faire cela, ça serait bien. Je ne suis pas chez moi, et j'écris avec une lampe de poche à la main. Maintenant |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Petit défi avec un objet memo. Dim 20 Oct 2013 - 23:55 | |
| Merci, Papydall, pour cette belle formule. Pour mon cas précis, ce sera moins utile, car elle ne dessine que la forme de base, sans la flèche pointant dans une des directions. Je continue donc à pousser mon exemple plus loin. Et voici la dernière mouture. J'ai fait plusieurs améliorations: 1. J'ai placé le dessin de la bulle de notification dans une procédure separée. Ainsi, on peur dessiner une bulle de son choix, sans avoir automatiquement le mémo et le bouton. 2. J'ai ajouté un paramètre p% qui donne la longueur horizontale et verticale de la flèche sortant de la bulle (auparavant, c'était identique au rayon de la courbure...) 3 j'ai ajouté des possibilités au paramètre s% qui donne la position de la flèche: 0 = aucune flèche (rectangle arrondi 1 = flèche en bas à gauche 2 = flèche en vas à droite 3 = flèche en haut à gauche 4 = flèche en haut à droite Voici le code: - Code:
-
' couleur de fond de la form dim fond_r% : fond_r% = 255 dim fond_g% : fond_g% = 255 dim fond_b% : fond_b% = 255
color 0,fond_r%, fond_g%, fond_b%
dessiner_objet(11,1,10,100,100,300,200,20,400,"Traduire")
end
' n%: numero de l'objet de base (n%, n%+1 et n%+2 utilisés) ' s%! sens de la flèche 0=aucune flèche ' 1=en bas à gauche 2=en bas à droite ' 3=en haut à gauche 4=en haut à droite ' r%: rayon du cercle des coins arrondis ' x%,y%: coin en haut à gauche de la zone de dessin ' w%,h%: dimensions de la bulle ' p%: longueur horizontale et verticale de la pointe ' wm%: largeur du mémo ' t$: texte (caption) du bouton sub dessiner_objet(n%,s%,r%,x%,y%,w%,h%,p%,wm%,t$) ' dessiner la bulle dessiner_fond(n%,s%,r%,x%,y%,w%,h%,p%) ' placer le mémo memo n%+1 : top n%+1,top(n%)+p%+r% : left n%+1,left(n%)+p%+r% height n%+1,height(n%)-r%*2-p%*2 : width n%+1,wm% ' placer le bouton button n%+2 : width n%+2,80 : caption n%+2,t$ top n%+2,top(n%+1)+height(n%+1) : left n%+2,left(n%+1)+(width(n%+1)-width(n%+2))/2 height n%+2,20 end_sub
' n%: numero de l'objet ' s%! sens de la flèche 0=aucune flèche ' 1=en bas à gauche 2=en bas à droite ' 3=en haut à gauche 4=en haut à droite ' r%: rayon du cercle des coins arrondis ' x%,y%: coin en haut à gauche de la zone de dessin ' w%,h%: dimensions de la bulle ' p%: longueur horizontale et verticale de la pointe sub dessiner_fond(n%,s%,r%,x%,y%,w%,h%,p%) picture n% top n%,y% : left n%,x% : width n%,w%+p%*2 : height n%,h%+p%*2 color n%,fond_r%, fond_g%, fond_b% 2d_target_is n% : 2d_pen_width 2 : 2d_pen_color 195,195,196 if s%=3 : ' coin en haut à gauche 2d_line 0,0,p%,p%+r% 2d_line 0,0,p%+r%,p% else 2d_circle r%+p%,r%+p%,r% end_if if s%=4 : ' coin en haut à droite 2d_line w%+p%*2,0,w%+p%-r%,p% 2d_line w%+p%*2,0,w%+p%,p%+r% else 2d_circle w%-r%+p%,r%+p%,r% end_if if s%=1 : ' coin en bas à gauche 2d_line 0,h%+p%*2,p%,h%+p%-r% 2d_line 0,h%+p%*2,p%+r%,h%+p% else 2d_circle r%+p%,h%+p%-r%,r% end_if if s%=2 : ' coin en bas à droite 2d_line w%+p%*2,h%+p%*2,w%+p%-r%,h%+p% 2d_line w%+p%*2,h%+p%*2,w%+p%,h%+p%-r% else 2d_circle w%-r%+p%,h%+p%-r%,r% end_if ' parties horizontales de la bulle 2d_rectangle p%+r%,p%,w%+p%-r%,h%+p% 2d_rectangle p%,p%+r%,w%+p%,h%+p%-r% ' effacer les lignes inutiles 2d_pen_color fond_r%, fond_g%, fond_b% 2d_line p%+1,p%+r%,w%+p%-2,p%+r% 2d_line p%+1,h%+p%-r%-1,w%+p%-2,h%+p%-r%-1 2d_line p%+r%,p%+1,p%+r%,p%+r% 2d_line w%+p%-r%-1,p%+1,w%+p%-r%-1,p%+r% 2d_line p%+r%,h%+p%-2,p%+r%,h%+p%-r% 2d_line w%+p%-r%-1,h%+p%-2,w%+p%-r%-1,h%+p%-r% 2d_pen_color 0,0,0 2d_pen_width 1 2d_flood x%+r%+5,y%+5,255,255,0 end_sub
Jouez avec le deuxième paramètre de la ligne 8 (actuellement 1 pour flèche en bas à gauche). | |
| | | Mumu
Nombre de messages : 176 Localisation : 45 Date d'inscription : 20/12/2012
| Sujet: Re: Petit défi avec un objet memo. Lun 21 Oct 2013 - 1:13 | |
| Et vous voulez avec ça que le monde extérieur ne nous prenne pas pour un ramassis d'allumés du bulbe ?
Je lance un jeu de paris. Quelle amélioration / fonctionnalité Klaus va - t - il bien pouvoir imaginer ? | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Petit défi avec un objet memo. Lun 21 Oct 2013 - 1:16 | |
| Oserais-je suggérer une amélioration moi-même ? Et si l'on envisageait d'autres formes, comme les cadres 3D que j'ai déjà mentionnés ? | |
| | | Mumu
Nombre de messages : 176 Localisation : 45 Date d'inscription : 20/12/2012
| Sujet: Re: Petit défi avec un objet memo. Lun 21 Oct 2013 - 1:17 | |
| | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Petit défi avec un objet memo. Lun 21 Oct 2013 - 1:18 | |
| Pour observer les déformations de la figure en fonction du paramètre n. Il s’agit ici du super-cercle (a=b). - Code:
-
rem ============================================================================ rem Super-ellipse par Papydall rem ============================================================================ dim n for n = 0.1 to 10.1 step 0.1 caption 0,"<CLICK> pour arrêter ... Voyez comment la courbe change avec N = " +str$(int(n*10)/10) Super_Ellipse(300,220,200,200,n) wait 200 : cls if scancode <> 0 then end next n Super_Ellipse(300,220,200,200,50) caption 0," N = 50" end rem ============================================================================ ' Paramètres : ' xc,yc : coordonnées du centre de la super-ellipse ' a et b : respectivement demi-diamètre horizontal et demi-diamètre vertical ' Si a = b : la courbe est un super-cercle ' n : plus n est grand plus la figure tend vers un rectangle(ou carré) ' a,b,n doivent être positives SUB Super_Ellipse(xc,yc,a,b,n) dim_local pi,p,t,x,y pi = acos(-1): p = pi/180 if a <= 0 or b <= 0 or n <= 0 then message "a,b,et n doivent être posives" : exit_sub 2d_poly_from xc + a,yc for t = 0 to 2*pi+p step p x = power(abs(cos(t)),2/n) * a * sgn(cos(t)) y = power(abs(sin(t)),2/n) * b * sgn(sin(t)) 2d_poly_to xc+x,yc+y next t END_SUB rem ============================================================================
EDIT : Quand Klaus va bien, le Forum va bien ! Voilà où nous en sommes, après un défi lancé par pan59 | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Petit défi avec un objet memo. Lun 21 Oct 2013 - 3:15 | |
| Voilà un code permettant des info-bulles et/ou des cadres 3d: - Code:
-
' couleur de fond de la form dim fond_r% : fond_r% = 255 dim fond_g% : fond_g% = 255 dim fond_b% : fond_b% = 250
color 0,fond_r%, fond_g%, fond_b% width 0,1000
dessiner_objet_infobulle(11,2,10,100,100,300,200,20,400,"Traduire") dessiner_objet_cadre_3d(21,600,100,300,200,"Traduire")
end
' n%: numero de l'objet de base (n%, n%+1 et n%+2 utilisés) ' s%! sens de la flèche 0=aucune flèche ' 1=en bas à gauche 2=en bas à droite ' 3=en haut à gauche 4=en haut à droite ' r%: rayon du cercle des coins arrondis ' x%,y%: coin en haut à gauche de la zone de dessin ' w%,h%: dimensions de la bulle ' p%: longueur horizontale et verticale de la pointe ' wm%: largeur du mémo ' t$: texte (caption) du bouton sub dessiner_objet_infobulle(n%,s%,r%,x%,y%,w%,h%,p%,wm%,t$) ' dessiner la bulle dessiner_fond(n%,s%,r%,x%,y%,w%,h%,p%) ' placer le mémo memo n%+1 : top n%+1,top(n%)+p%+r% : left n%+1,left(n%)+p%+r% height n%+1,height(n%)-r%*2-p%*2 : width n%+1,wm% ' placer le bouton button n%+2 : width n%+2,80 : caption n%+2,t$ top n%+2,top(n%+1)+height(n%+1) : left n%+2,left(n%+1)+(width(n%+1)-width(n%+2))/2 height n%+2,20 end_sub
' n%: numero de l'objet de base (n%, n%+1 et n%+2 utilisés) ' x%,y%: coin en haut à gauche de la zone de dessin ' w%,h%: dimensions de la bulle ' t$: texte (caption) du bouton sub dessiner_objet_cadre_3d(n%,x%,y%,w%,h%,t$) ' dessiner la bulle dessiner_bord_3d(n%,x%,y%,w%,h%) ' placer le mémo memo n%+1 : top n%+1,top(n%)+2 : left n%+1,left(n%)+2 height n%+1,h% : width n%+1,w% ' placer le bouton button n%+2 : width n%+2,80 : caption n%+2,t$ top n%+2,top(n%+1)+height(n%+1) : left n%+2,left(n%+1)+(width(n%+1)-width(n%+2))/2 height n%+2,20 end_sub
' n%: numero de l'objet ' x%,y%: coin en haut à gauche de la zone de dessin ' w%,h%: dimensions de la bulle sub dessiner_bord_3d(n%,x%,y%,w%,h%) picture n% top n%,y% : left n%,x% : width n%,w%+4 : height n%,h%+4 color n%,fond_r%, fond_g%, fond_b% color n%,242,230,234 2d_target_is n% : 2d_pen_width 1 2d_pen_color 255,254,245 2d_line 0,0,w%+3,0 2d_line 0,0,0,h%+3 2d_pen_color 107,111,97 2d_line w%+3,0,w%+3,h%+4 2d_line 0,h%+3,w%+3,h%+3 2d_pen_color 240,238,225 2d_line 1,1,w%+2,1 2d_line 1,1,1,h%+2 2d_pen_color 169,173,148 2d_line w%+2,1,w%+2,h%+3 2d_line 1,h%+2,w%+2,h%+2 2d_pen_color 0,0,0 : 2d_pen_width 1 end_sub
' n%: numero de l'objet ' s%! sens de la flèche 0=aucune flèche ' 1=en bas à gauche 2=en bas à droite ' 3=en haut à gauche 4=en haut à droite ' r%: rayon du cercle des coins arrondis ' x%,y%: coin en haut à gauche de la zone de dessin ' w%,h%: dimensions de la bulle ' p%: longueur horizontale et verticale de la pointe sub dessiner_fond(n%,s%,r%,x%,y%,w%,h%,p%) picture n% top n%,y% : left n%,x% : width n%,w%+p%*2 : height n%,h%+p%*2 color n%,fond_r%, fond_g%, fond_b% 2d_target_is n% : 2d_fill_color 255,255,0 2d_pen_width 2 : 2d_pen_color 195,195,196 if s%=3 : ' coin en haut à gauche 2d_line 0,0,p%,p%+r% 2d_line 0,0,p%+r%,p% else 2d_circle r%+p%,r%+p%,r% end_if if s%=4 : ' coin en haut à droite 2d_line w%+p%*2,0,w%+p%-r%,p% 2d_line w%+p%*2,0,w%+p%,p%+r% else 2d_circle w%-r%+p%,r%+p%,r% end_if if s%=1 : ' coin en bas à gauche 2d_line 0,h%+p%*2,p%,h%+p%-r% 2d_line 0,h%+p%*2,p%+r%,h%+p% else 2d_circle r%+p%,h%+p%-r%,r% end_if if s%=2 : ' coin en bas à droite 2d_line w%+p%*2,h%+p%*2,w%+p%-r%,h%+p% 2d_line w%+p%*2,h%+p%*2,w%+p%,h%+p%-r% else 2d_circle w%-r%+p%,h%+p%-r%,r% end_if ' parties horizontales de la bulle 2d_rectangle p%+r%,p%,w%+p%-r%,h%+p% 2d_rectangle p%,p%+r%,w%+p%,h%+p%-r% ' effacer les lignes inutiles 2d_pen_color fond_r%, fond_g%, fond_b% 2d_fill_color fond_r%, fond_g%, fond_b% 2d_rectangle p%+r%-1,p%+2,w%+p%-r%+1,h%+p%-2 2d_rectangle p%+2,p%+r%-1,w%+p%-2,h%+p%-r%+1 2d_pen_color 0,0,0 2d_pen_width 1 2d_flood x%+p%+r%,y%+p%+5,255,255,0 end_sub
Le cadre 3d est pratiquement identique au cadre 3d des boutons de l'éditeur de Panoramic (version XP...) | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Petit défi avec un objet memo. Lun 21 Oct 2013 - 7:41 | |
| Bravo Klaus, Vraiment simple à utiliser ce MEMO_BULLE, on va pouvoir écrire des bandes dessinées.
Je suggère d'ajouter "if t$="" then exit_sub" juste avant la création du bouton, ainsi on peut déclarer dans l'appel de le SUB que t$="" et du coup il n'y a pas de bouton.
A+ | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Petit défi avec un objet memo. Lun 21 Oct 2013 - 10:11 | |
| Bonne idée, Jean-Claude ! Voilà qui est fait. En même temps, j'ai légèrement amélioré la présentation du cadre 3D, et j'ai placé chaque fond avec et sans les mémos, dans le programme de démo, et j'ai complètement changé la technique de remplissage de la bulle, en la simplifiant grandement: - Code:
-
' couleur de fond de la form dim fond_r% : fond_r% = 255 dim fond_g% : fond_g% = 255 dim fond_b% : fond_b% = 250
color 0,fond_r%, fond_g%, fond_b% width 0,1000 : height 0,700
dessiner_objet_infobulle(11,2,10,100,100,300,200,20,400,"Traduire") dessiner_objet_cadre_3d(21,600,100,300,200,"Traduire") dessiner_fond(31,3,10,100,350,300,200,20) dessiner_bord_3d(41,600,350,300,200)
end
' n%: numero de l'objet de base (n%, n%+1 et n%+2 utilisés) ' s%! sens de la flèche 0=aucune flèche ' 1=en bas à gauche 2=en bas à droite ' 3=en haut à gauche 4=en haut à droite ' r%: rayon du cercle des coins arrondis ' x%,y%: coin en haut à gauche de la zone de dessin ' w%,h%: dimensions de la bulle ' p%: longueur horizontale et verticale de la pointe ' wm%: largeur du mémo ' t$: texte (caption) du bouton sub dessiner_objet_infobulle(n%,s%,r%,x%,y%,w%,h%,p%,wm%,t$) ' dessiner la bulle dessiner_fond(n%,s%,r%,x%,y%,w%,h%,p%) ' placer le mémo memo n%+1 : top n%+1,top(n%)+p%+r% : left n%+1,left(n%)+p%+r% height n%+1,height(n%)-r%*2-p%*2 : width n%+1,wm% ' placer le bouton if t$="" then exit_sub button n%+2 : width n%+2,80 : caption n%+2,t$ top n%+2,top(n%+1)+height(n%+1) : left n%+2,left(n%+1)+(width(n%+1)-width(n%+2))/2 height n%+2,20 end_sub
' n%: numero de l'objet de base (n%, n%+1 et n%+2 utilisés) ' x%,y%: coin en haut à gauche de la zone de dessin ' w%,h%: dimensions de la bulle ' t$: texte (caption) du bouton sub dessiner_objet_cadre_3d(n%,x%,y%,w%,h%,t$) ' dessiner la bulle dessiner_bord_3d(n%,x%,y%,w%,h%) ' placer le mémo memo n%+1 : top n%+1,top(n%)+7 : left n%+1,left(n%)+7 height n%+1,h%-10 : width n%+1,w%-10 ' placer le bouton if t$="" then exit_sub button n%+2 : width n%+2,80 : caption n%+2,t$ top n%+2,top(n%+1)+height(n%+1) : left n%+2,left(n%+1)+(width(n%+1)-width(n%+2))/2 height n%+2,20 end_sub
' n%: numero de l'objet ' x%,y%: coin en haut à gauche de la zone de dessin ' w%,h%: dimensions de la bulle sub dessiner_bord_3d(n%,x%,y%,w%,h%) picture n% top n%,y% : left n%,x% : width n%,w%+4 : height n%,h%+4 color n%,fond_r%, fond_g%, fond_b% color n%,242,230,234 2d_target_is n% : 2d_pen_width 1 2d_pen_color 255,254,245 2d_line 0,0,w%+3,0 2d_line 0,0,0,h%+3 2d_pen_color 107,111,97 2d_line w%+3,0,w%+3,h%+4 2d_line 0,h%+3,w%+3,h%+3 2d_pen_color 240,238,225 2d_line 1,1,w%+2,1 2d_line 1,1,1,h%+2 2d_pen_color 169,173,148 2d_line w%+2,1,w%+2,h%+3 2d_line 1,h%+2,w%+2,h%+2 2d_pen_color 0,0,0 : 2d_pen_width 1 end_sub
' n%: numero de l'objet ' s%! sens de la flèche 0=aucune flèche ' 1=en bas à gauche 2=en bas à droite ' 3=en haut à gauche 4=en haut à droite ' r%: rayon du cercle des coins arrondis ' x%,y%: coin en haut à gauche de la zone de dessin ' w%,h%: dimensions de la bulle ' p%: longueur horizontale et verticale de la pointe sub dessiner_fond(n%,s%,r%,x%,y%,w%,h%,p%) picture n% top n%,y% : left n%,x% : width n%,w%+p%*2 : height n%,h%+p%*2 color n%,fond_r%, fond_g%, fond_b% 2d_target_is n% : 2d_fill_color 255,255,0 2d_pen_width 2 : 2d_pen_color 195,195,196 if s%=3 : ' coin en haut à gauche 2d_line 0,0,p%,p%+r% 2d_line 0,0,p%+r%,p% else 2d_circle r%+p%,r%+p%,r% end_if if s%=4 : ' coin en haut à droite 2d_line w%+p%*2,0,w%+p%-r%,p% 2d_line w%+p%*2,0,w%+p%,p%+r% else 2d_circle w%-r%+p%,r%+p%,r% end_if if s%=1 : ' coin en bas à gauche 2d_line 0,h%+p%*2,p%,h%+p%-r% 2d_line 0,h%+p%*2,p%+r%,h%+p% else 2d_circle r%+p%,h%+p%-r%,r% end_if if s%=2 : ' coin en bas à droite 2d_line w%+p%*2,h%+p%*2,w%+p%-r%,h%+p% 2d_line w%+p%*2,h%+p%*2,w%+p%,h%+p%-r% else 2d_circle w%-r%+p%,h%+p%-r%,r% end_if ' parties horizontales de la bulle 2d_rectangle p%+r%,p%,w%+p%-r%,h%+p% 2d_rectangle p%,p%+r%,w%+p%,h%+p%-r% ' effacer les lignes inutiles 2d_pen_color 255,255,0 2d_rectangle p%+r%-1,p%+2,w%+p%-r%+1,h%+p%-2 2d_rectangle p%+2,p%+r%-1,w%+p%-2,h%+p%-r%+1 ' remplir la pointe select s% case 1 2d_flood p%+r%-5,p%+h%-r%+5,255,255,0 case 2 2d_flood p%+w%-r%+5,p%+h%-r%+5,255,255,0 case 3 2d_flood p%+r%-5,p%+r%-5,255,255,0 case 4 2d_flood p%+w%-r%+5,p%+r%-5,255,255,0 end_select 2d_pen_color 0,0,0 2d_pen_width 1 end_sub
| |
| | | Contenu sponsorisé
| Sujet: Re: Petit défi avec un objet memo. | |
| |
| | | | Petit défi avec un objet memo. | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |