Juin 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 |
|
| | Nouveau challenge : Méthode de déplacement des objets | |
| | Auteur | Message |
---|
Minibug
Nombre de messages : 4566 Age : 57 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Nouveau challenge : Méthode de déplacement des objets Dim 27 Sep 2015 - 17:30 | |
| Bonsoir a tous ! Après avoir eu des propositions pour créer un MENU DÉROULANT, Je vous propose de vous pencher sur le déplacement d'un objet PANORAMIC dans un FORM. Prenons un exemple simple d'un bouton. Voici le cahier des charges : 1/ Identifier facilement l'objet sélectionné pour le déplacement 2/ Pouvoir déplacer facilement l'objet sur le FORM 3/ Accessoirement, pouvoir modifier la taille de l'objet sélectionné 4/ Désélectionné l'objet pour éventuellement passer a un autre 5/ Le principe doit fonctionner avec tous les objets Panoramic Tout cela bien sûr en utilisant le moins de lignes et de variables possible. L'usage de la DLL de Klaus est autorisé. Le tout restant le plus simple possible, bien entendu ! A vos claviers... | |
| | | pascal10000
Nombre de messages : 812 Localisation : Troyes Date d'inscription : 05/02/2011
| Sujet: Re: Nouveau challenge : Méthode de déplacement des objets Dim 27 Sep 2015 - 17:47 | |
| minibug tu peut déjà commencer a étudié editbas lui il le fait tu sélectionne l'objet à partir du liste a gauche et le tour est joué tu déplace les objets à laide de la souris ou tu veux a volonté et changé aussi leurs dimensions en sélectionnant une des cases appropriées au grid du dessous comme gpp la différence c que tu saisi directement sa valeur contrairement a GPP qui utilise un spin | |
| | | Klaus
Nombre de messages : 12301 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Nouveau challenge : Méthode de déplacement des objets Dim 27 Sep 2015 - 17:57 | |
| Tel que le défi est présenté, ce sera compliqué. En effet, tu n'as pas de moyen identique pour tous les objets pour le sélectionner. L'évènement évident (on_click) n'est pas utilisable sur tous les objets, même pas sur tous les objets visibles (scroll_bar, container_tab, ...). Il faut donc trouver un autre moyen pour sélectioner l'objet, comme par exemple un clic dans une liste des objets définis, façon liste des objets d'un IDE.
Une fois cette phase bien définie, on peut aller plus loin. | |
| | | Minibug
Nombre de messages : 4566 Age : 57 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: Nouveau challenge : Méthode de déplacement des objets Dim 27 Sep 2015 - 18:17 | |
| Bonsoir Klaus ! Oui tu as raison, je ne l'ai pas précisé. Dans le cas présent c'est a partir d'un LIST et d'un numéro d'objet que l'on devra agir. Il s'agit de trouver une solution pour GPP sur l'ensemble des objets a l’exception des TIMER, DIALOG, etc... ATTENTION, on doit aussi pouvoir agir sur plusieurs FORM selon l’emplacement des objets ! | |
| | | Klaus
Nombre de messages : 12301 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Nouveau challenge : Méthode de déplacement des objets Dim 27 Sep 2015 - 19:31 | |
| Voici, en avant-première, comment "sélectionner" n'importe quel objet à partir d'une liste d'objets, et de visualiser la sélection, quelque soit la form dans laquelle l'objet se trouve. - Code:
-
label selobj
dim n_objets%, objet_choisi% dim objets$(500,2)
full_space 0 list 999 : full_space 999 : width 999,150 : on_click 999,selobj
AddObject(0,0,"Objets:") memo 1 : left 1,200 AddObject(1,0,"Memo1") scroll_bar 2 : left 2,200 : top 2,150 AddObject(2,0,"Scroll_Bar1")
objet_choisi% = 0
end
selobj: SelectObj() return
sub AddObject(no%,par%,nom$) item_add 999,nom$ n_objets% = n_objets% + 1 objets$(n_objets%,0) = nom$ objets$(n_objets%,1) = str$(no%) objets$(n_objets%,2) = str$(par%) end_sub
sub SelectObj() dim_local no%, i%, k%, s$ if objet_choisi%>0 delete 998 show objet_choisi% objet_choisi% = 0 end_if if item_index(999)=1 then exit_sub for k%=1 to n_objets% if objets$(k%,0)=item_index$(999) no% = val(objets$(k%,1)) exit_for end_if next k% objet_choisi% = no% hide no% container 998 : hide 998 : color 998,255,255,0 if objets$(objet_choisi%,2)<>"0" then parent 998,val(objets$(objet_choisi%,2)) top 998,top(objet_choisi%) : left 998,left(objet_choisi%) width 998,width(objet_choisi%) : height 998,height(objet_choisi%) caption 998,item_index$(999) show 998 end_sub
Je travaille sur les déplacements d'objet, mais je viens de découvrir un bug dans Panoramic ! | |
| | | Minibug
Nombre de messages : 4566 Age : 57 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| | | | Klaus
Nombre de messages : 12301 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Nouveau challenge : Méthode de déplacement des objets Dim 27 Sep 2015 - 19:50 | |
| Et je remplace visuellement l'objet par un Container, pour deux raisons: 1. avoir une représentation visuelle uniforme pour tout objet sélectionné 2. pouvoir placer à terme des boutons et zones dans ce container afin de paramétrer l'objet sélectionné. Mais j'attends la solution pour le bug avec MOUSE_LEFT_DOWN pour pouvoir déplacer l'objet à la souris... | |
| | | Invité Invité
| Sujet: Re: Nouveau challenge : Méthode de déplacement des objets Dim 27 Sep 2015 - 20:26 | |
| Bonsoir. J'ignore si c'est un gros mot de vous dire cela, et j'en ai déjà parlé, mais j'ai ce principe de délacement d'un objet sur une forme sur mon site, concernant un IDE simplifié. Ca me 'turbine' de vous en parler, mais il me semble que ça correspond en grande partie à la demande. Je vous prie de m'excuser si je me trompe, j'ai l'impression que bien souvent je comprend de travers. EDIT: je ne sais pas ce qui c'est passé, mais je n'ai vu que le début du post. Maintenant je vois d'autres réponses, et je ne suis sure d'avoir bien fait d'intervenir. Je sors.
Dernière édition par cosmos70 le Dim 27 Sep 2015 - 20:29, édité 1 fois |
| | | Minibug
Nombre de messages : 4566 Age : 57 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: Nouveau challenge : Méthode de déplacement des objets Dim 27 Sep 2015 - 20:27 | |
| Ok ! Merci Cosmos. Je vais regarder... | |
| | | Minibug
Nombre de messages : 4566 Age : 57 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: Nouveau challenge : Méthode de déplacement des objets Dim 27 Sep 2015 - 20:58 | |
| @Cosmos : Sympa ce petit éditeur, j'en ai pas entendu parlé !
J'ai regardé vite fait. Il y a des choses très bien comme le déplacement par pas de 10 pixels. J'aime bien aussi le sélection avec le petit cercle au coin de l'objet.
Merci pour ton aide Cosmos. | |
| | | Klaus
Nombre de messages : 12301 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Nouveau challenge : Méthode de déplacement des objets Dim 27 Sep 2015 - 22:38 | |
| Avec l'astuce de Jl35, on peut "contourner" le bug de Panoramic en l'exploitant doublement,, une fois sur MOUSE_LEFT_DOWN, puis sur MOUSE_LEFT_UP. Les deux fonctions (et certainement également celles de _RIGHT_) souffrent du même bug. Mais du coup, on peut déplacer l'objet sélectionné (en jaune) en le faisant glisser avec la souris: - Code:
-
' selection_et_deplacement_objets_par_liste.bas
label selobj, tick
dim n_objets%, objet_choisi%, xold%, yold%, xdown%, ydown%, xobj%, yobj% dim objets$(500,2), actif%
full_space 0 list 999 : full_space 999 : width 999,150 : on_click 999,selobj timer 997 : timer_off 997 : timer_interval 997,100 : on_timer 997,tick
AddObject(0,0,"Objets:") memo 1 : left 1,200 AddObject(1,0,"Memo1") scroll_bar 2 : left 2,200 : top 2,150 AddObject(2,0,"Scroll_Bar1")
objet_choisi% = 0
end
selobj: timer_off 997 SelectObj() return tick: ChangeObjet() return
sub AddObject(no%,par%,nom$) item_add 999,nom$ n_objets% = n_objets% + 1 objets$(n_objets%,0) = nom$ objets$(n_objets%,1) = str$(no%) objets$(n_objets%,2) = str$(par%) end_sub
sub SelectObj() dim_local no%, i%, k%, s$ if objet_choisi%>0 delete 998 show objet_choisi% objet_choisi% = 0 end_if xdown% = -1 ydown% = -1 if item_index(999)=1 then exit_sub for k%=1 to n_objets% if objets$(k%,0)=item_index$(999) no% = val(objets$(k%,1)) exit_for end_if next k% objet_choisi% = no% hide no% container 998 : hide 998 : color 998,255,255,0 if objets$(objet_choisi%,2)<>"0" then parent 998,val(objets$(objet_choisi%,2)) top 998,top(objet_choisi%) : left 998,left(objet_choisi%) width 998,width(objet_choisi%) : height 998,height(objet_choisi%) caption 998,item_index$(999) xobj% = left(998) yobj% = top(998) show 998 timer_on 997 end_sub
sub ChangeObjet() dim_local x%, y%, xact%, yact% timer_off 997 if mouse_left_down(998)=1 actif% = 1 xact% = mouse_x_position(998) yact% = mouse_y_position(998) if xold%<0 xold% = xact% yold% = yact% end_if x% = xobj% + xact% - xold% y% = yobj% + yact% - yold% xobj% = x% yobj% = y% left 998,x% : top 998,y% else if actif%=1 if mouse_left_up(998)=1 actif% = 0 left objet_choisi%,left(998) : top objet_choisi%,top(998) xold% = -1 yold% = -1 else xact% = mouse_x_position(998) yact% = mouse_y_position(998) if xold%<0 xold% = xact% yold% = yact% end_if
x% = xobj% + xact% - xold% y% = yobj% + yact% - yold% xobj% = x% yobj% = y% left 998,x% : top 998,y% end_if timer_on 997 exit_sub end_if left objet_choisi%,left(998) : top objet_choisi%,top(998) xold% = -1 yold% = -1 end_if timer_on 997 end_sub
Pour désélectionner l'objet sans en sélectionner un autre, cliquer sur la première ligne de la liste... | |
| | | Invité Invité
| Sujet: Re: Nouveau challenge : Méthode de déplacement des objets Dim 27 Sep 2015 - 23:09 | |
| - Minibug a écrit:
- ... ce petit éditeur, j'en ai pas entendu parlé !
En réalité, j'y ai fait allusion pour des sujets du même genre, le déplacement d'objet. Autrement je n'ai pas fait de post pour mon I.D.E. Il y avait celui de Klaus, qui ne pouvait qu'être meilleurs que celui-ci, fait je crois en Delphi, malgré que je ne l'ai jamais essayé, et pour cause, je ne le trouvais pas. Et l'idée m'était venu de tester une idée sur le déplacement d'objet, et voir ce qu'on pouvait faire avec. Ce n'était qu'un teste, pas intéressant pour s'en servir, donc d'être publié. |
| | | Klaus
Nombre de messages : 12301 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Nouveau challenge : Méthode de déplacement des objets Dim 27 Sep 2015 - 23:44 | |
| Et voici le même code, permettant de dimensionner un objet sélectionné par la souris ! Il faut enfoncer le bouton gauche près du bord droit ou bas (actuellement 20 pixels) et tirer - l'objet va changer de largeur ou de hauteur, en augmentant ou diminuant selon le sens dans lequel on tire. Le déplacement ets identique à ce qu'il y avait avant: - Code:
-
' selection_et_deplacement_objets_par_liste.bas
label selobj, tick
dim n_objets%, objet_choisi%, xold%, yold%, xdown%, ydown%, xobj%, yobj% dim objets$(500,2), actif%, resize%
full_space 0 list 999 : full_space 999 : width 999,150 : on_click 999,selobj timer 997 : timer_off 997 : timer_interval 997,100 : on_timer 997,tick
AddObject(0,0,"Objets:") memo 1 : left 1,200 AddObject(1,0,"Memo1") scroll_bar 2 : left 2,200 : top 2,150 AddObject(2,0,"Scroll_Bar1")
objet_choisi% = 0
end
selobj: timer_off 997 SelectObj() return tick: ChangeObjet() return
sub AddObject(no%,par%,nom$) item_add 999,nom$ n_objets% = n_objets% + 1 objets$(n_objets%,0) = nom$ objets$(n_objets%,1) = str$(no%) objets$(n_objets%,2) = str$(par%) end_sub
sub SelectObj() dim_local no%, i%, k%, s$ if objet_choisi%>0 delete 998 show objet_choisi% objet_choisi% = 0 end_if xdown% = -1 ydown% = -1 if item_index(999)=1 then exit_sub for k%=1 to n_objets% if objets$(k%,0)=item_index$(999) no% = val(objets$(k%,1)) exit_for end_if next k% objet_choisi% = no% hide no% container 998 : hide 998 : color 998,255,255,0 if objets$(objet_choisi%,2)<>"0" then parent 998,val(objets$(objet_choisi%,2)) top 998,top(objet_choisi%) : left 998,left(objet_choisi%) width 998,width(objet_choisi%) : height 998,height(objet_choisi%) caption 998,item_index$(999) xobj% = left(998) yobj% = top(998) show 998 timer_on 997 end_sub
sub ChangeObjet() dim_local x%, y%, xact%, yact%, xdelta%, ydelta% timer_off 997 xact% = mouse_x_position(998) yact% = mouse_y_position(998) if mouse_left_down(998)=1 actif% = 1 if xold%<0 xold% = xact% yold% = yact% end_if x% = xobj% + xact% - xold% y% = yobj% + yact% - yold% xobj% = x% yobj% = y% left 998,x% : top 998,y% else if actif%=1 if mouse_left_up(998)=1 actif% = 0 left objet_choisi%,left(998) : top objet_choisi%,top(998) width objet_choisi%,width(998) : height objet_choisi%,height(998) xold% = -1 yold% = -1 resize% = 0 else if xold%<0 xold% = xact% yold% = yact% end_if xdelta% = xact% - xold% ydelta% = yact% - yold%
if (resize%<>1) and ((resize%=2) or (xact%>(width(998)-20))) resize% = 2 width 998,width(998) + xdelta% xold% = xact% yold% = yact% timer_on 997 exit_sub else if (resize%<>1) and ((resize%=3) or (yact%>(height(998)-20))) resize% = 3 height 998,height(998) + ydelta% xold% = xact% yold% = yact% timer_on 997 exit_sub else if resize%<=1 resize% = 1 x% = xobj% + xdelta% y% = yobj% + ydelta% xobj% = x% yobj% = y% left 998,x% : top 998,y% end_if end_if end_if end_if timer_on 997 exit_sub end_if left objet_choisi%,left(998) : top objet_choisi%,top(998) width objet_choisi%,width(998) : height objet_choisi%,height(998) xold% = -1 yold% = -1 end_if timer_on 997 end_sub
Et on est toujours en 100 % Panoramic, sans DLL ! | |
| | | Klaus
Nombre de messages : 12301 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Nouveau challenge : Méthode de déplacement des objets Lun 28 Sep 2015 - 2:59 | |
| Après la correction d'un petit bug, j'ai pu ajouuter un CONTAINER_TAB avec deux TABs, un LIST dans le premier TAB et un BUTTON dans le second. Et on peut déplacer et redimensiionner le CONGTAINER_TAB, tout comme individuellement la LIST et le BUTTON: - Code:
-
' selection_et_deplacement_objets_par_liste.bas
label selobj, tick
dim n_objets%, objet_choisi%, xold%, yold%, xdown%, ydown%, xobj%, yobj% dim objets$(500,2), actif%, resize%, object_index%
full_space 0 list 999 : full_space 999 : width 999,150 : on_click 999,selobj timer 997 : timer_off 997 : timer_interval 997,100 : on_timer 997,tick
AddObject(0,0,"Objets:") memo 1 : left 1,200 AddObject(1,0,"Memo1") scroll_bar 2 : left 2,200 : top 2,150 AddObject(2,0,"Scroll_Bar1") container_tab 3 : left 3,200 : top 3,200 AddObject(3,0,"Container_Tab1") tab 4 : parent 4,3 : caption 4,"Fichiers" tab 5 : parent 5,3 : caption 5,"Dossiers" List 6 : parent 6,4 : top 6,20 : left 6,10 AddObject(6,4,"List1") button 7 : parent 7,5 : top 5,20 :left 7,10 AddObject(7,5,"Button1")
objet_choisi% = 0
end
selobj: timer_off 997 SelectObj() return tick: ChangeObjet() return
sub AddObject(no%,par%,nom$) item_add 999,nom$ n_objets% = n_objets% + 1 objets$(n_objets%,0) = nom$ objets$(n_objets%,1) = str$(no%) objets$(n_objets%,2) = str$(par%) end_sub
sub SelectObj() dim_local no%, i%, k%, s$ if objet_choisi%>0 delete 998 show objet_choisi% objet_choisi% = 0 end_if xdown% = -1 ydown% = -1 if item_index(999)=1 then exit_sub for k%=1 to n_objets% if objets$(k%,0)=item_index$(999) object_index% = item_index(999) no% = val(objets$(k%,1)) exit_for end_if next k% objet_choisi% = no% hide no% container 998 : hide 998 : color 998,255,255,0 if objets$(object_index%,2)<>"0" then parent 998,val(objets$(object_index%,2)) top 998,top(objet_choisi%) : left 998,left(objet_choisi%) width 998,width(objet_choisi%) : height 998,height(objet_choisi%) caption 998,item_index$(999) xobj% = left(998) yobj% = top(998) show 998 timer_on 997 end_sub
sub ChangeObjet() dim_local x%, y%, xact%, yact%, xdelta%, ydelta% timer_off 997 xact% = mouse_x_position(998) yact% = mouse_y_position(998) if mouse_left_down(998)=1 actif% = 1 if xold%<0 xold% = xact% yold% = yact% end_if x% = xobj% + xact% - xold% y% = yobj% + yact% - yold% xobj% = x% yobj% = y% left 998,x% : top 998,y% else if actif%=1 if mouse_left_up(998)=1 actif% = 0 left objet_choisi%,left(998) : top objet_choisi%,top(998) width objet_choisi%,width(998) : height objet_choisi%,height(998) xold% = -1 yold% = -1 resize% = 0 else if xold%<0 xold% = xact% yold% = yact% end_if xdelta% = xact% - xold% ydelta% = yact% - yold%
if (resize%<>1) and ((resize%=2) or (xact%>(width(998)-20))) resize% = 2 width 998,width(998) + xdelta% xold% = xact% yold% = yact% timer_on 997 exit_sub else if (resize%<>1) and ((resize%=3) or (yact%>(height(998)-20))) resize% = 3 height 998,height(998) + ydelta% xold% = xact% yold% = yact% timer_on 997 exit_sub else if resize%<=1 resize% = 1 x% = xobj% + xdelta% y% = yobj% + ydelta% xobj% = x% yobj% = y% left 998,x% : top 998,y% end_if end_if end_if end_if timer_on 997 exit_sub end_if left objet_choisi%,left(998) : top objet_choisi%,top(998) width objet_choisi%,width(998) : height objet_choisi%,height(998) xold% = -1 yold% = -1 end_if timer_on 997 end_sub
| |
| | | Minibug
Nombre de messages : 4566 Age : 57 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: Nouveau challenge : Méthode de déplacement des objets Lun 28 Sep 2015 - 9:41 | |
| Merci Klaus ! J'ai testé et cela fonctionne parfaitement. Je suis en train de décortiquer et adapter le code a ma façon. Je cherche a augmenter simultanément la largeur et la hauteur, ça ne devrai pas être trop difficile... J'avais déjà fais en partie ce travail sur GPP mais tu me donne de nouvelles idées et façons de faire. Je t'en remercie. Bonne journée | |
| | | Contenu sponsorisé
| Sujet: Re: Nouveau challenge : Méthode de déplacement des objets | |
| |
| | | | Nouveau challenge : Méthode de déplacement des objets | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |