FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  RechercherRechercher  Dernières imagesDernières images  S'enregistrerS'enregistrer  MembresMembres  Connexion  
Derniers sujets
» PANORAMIC V 1
Déplacer dynamiquement un objet dans une form Emptypar Klaus Aujourd'hui à 10:28

» Gestion d'un système client-serveur.
Déplacer dynamiquement un objet dans une form Emptypar Klaus Hier à 23:59

» Editeur EliP 6 : Le Tiny éditeur avec 25 onglets de travail
Déplacer dynamiquement un objet dans une form Emptypar Marc Hier à 12:14

» @Jack
Déplacer dynamiquement un objet dans une form Emptypar Jack Mar 30 Avr 2024 - 20:40

» trop de fichiers en cours
Déplacer dynamiquement un objet dans une form Emptypar papydall Lun 29 Avr 2024 - 23:39

» Une calculatrice en une ligne de programme
Déplacer dynamiquement un objet dans une form Emptypar jean_debord Dim 28 Avr 2024 - 8:47

» Form(résolu)
Déplacer dynamiquement un objet dans une form Emptypar leclode Sam 27 Avr 2024 - 17:59

» Bataille navale SM
Déplacer dynamiquement un objet dans une form Emptypar jjn4 Ven 26 Avr 2024 - 17:39

» Les maths du crocodile
Déplacer dynamiquement un objet dans une form Emptypar jean_debord Jeu 25 Avr 2024 - 10:37

» Naissance de Crocodile Basic
Déplacer dynamiquement un objet dans une form Emptypar jean_debord Jeu 25 Avr 2024 - 8:45

» Dessine-moi une galaxie
Déplacer dynamiquement un objet dans une form Emptypar jjn4 Lun 22 Avr 2024 - 13:47

» Erreur END_SUB
Déplacer dynamiquement un objet dans une form Emptypar jjn4 Lun 22 Avr 2024 - 13:43

» Bug sur DIM_LOCAL ?
Déplacer dynamiquement un objet dans une form Emptypar papydall Dim 21 Avr 2024 - 23:30

» 2D_fill_color(résolu)
Déplacer dynamiquement un objet dans une form Emptypar leclode Sam 20 Avr 2024 - 8:32

» Consommation gaz électricité
Déplacer dynamiquement un objet dans une form Emptypar leclode Mer 17 Avr 2024 - 11:07

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Mai 2024
LunMarMerJeuVenSamDim
  12345
6789101112
13141516171819
20212223242526
2728293031  
CalendrierCalendrier
Le Deal du moment :
Jeux, jouets et Lego : le deuxième à ...
Voir le deal

 

 Déplacer dynamiquement un objet dans une form

Aller en bas 
3 participants
AuteurMessage
Klaus

Klaus


Nombre de messages : 12277
Age : 74
Localisation : Ile de France
Date d'inscription : 29/12/2009

Déplacer dynamiquement un objet dans une form Empty
MessageSujet: Déplacer dynamiquement un objet dans une form   Déplacer dynamiquement un objet dans une form EmptyMar 23 Déc 2014 - 2:28

Déplacer dynamiquement un objet dans une form - on sait faire. Certes. On peut changer les valeurs de TOP, LEFT, WIDTH et HEIGHT de n'importe quel objet visible. Mais comment faire pour commander cela par la souris, en tirant des poignées comme on le ferait dans certains logiciels d'édition? Dans un EDI de Delphi, VisualBasic ou autre ? Ou comme dans Word pour dimensionner une image ?

Eh bien, je vais vous donner le moyen d'afficher un cadre avec des poignées autour de n'importe quel objet Panoramic visible, et de déplacer cet objet en tirant le cadre, ou en changeant des dimensions en tirant une des 8 poignées:
Déplacer dynamiquement un objet dans une form Aa1113

Ca vous rappelle quelque chose ? Alors, on va s'y mettre. J'ai implémenté cela à l'aide de KGF.dll, car il fallair utiliser une FORM mobile placée toujours en avant-plan pour dessiner le cadre, et découper un trou rectangulaire dans cette form pour laisser apparaître l'objet à déplacer ! Il faut utiliser d'ailleurs pour cela la nouvelle version KGF.dll V03.99 du 22/12/2014, à cause d'une nouvelle fonction.

Le programme suivant propose deux objets à reconfigurer: un mémo et un bouton. Pour chacun de ces objets, il y a un bouton "Saisir ..." qui "saisit" l'objet et affiche le cadre avec les poignées. Pour déplacer l'objet, il suffit de placer le curseur sur une des liges droites du cadre, enfoncer la touche Control et déplacer le curseur. Le mouvement s'arrête lorsqu'on relâche le bouton Control. Il ne sert à rien de cliquer à ce niveau-là: Panoramic n'a pas les évènements ON_MOUSE_DOWN ni ON_MOUSE_UP. J'utilise donc les évènements ON_KEY_DOWN et ON_KEY_UP sur le cadre. Pour utiliser une des poignée, il faut placer le curseur dans une de ces poignées, enfoncer la touche Control et déplacer la souris, puis relâcher Control. Il y a un bouton "Lâcher l'objet" qui fait disparaître le cadre.

Voici le code:
Code:
' test_déplacer_dimensionner_un_objet.bas

label saisir_memo, saisir_button, lacher, down, up, tic

dim res%, reg%, trou%, wtrou%, htrou%, x0%, y0%, w0%, h0%, down%, zoom%
dim posx%, posy%, dx%, dy%, curx%, cury%, selobj%, x%, y%

dim cadre% : cadre% = 1000
form cadre% : hide cadre% : border_hide cadre% : ' color cadre%,255,255,0

button 1 : top 1,10 : left 1,10 : caption 1,"Saisir mémo"
  on_click 1,saisir_memo
button 2 : top 2,10 : left 2,200 : caption 2,"Saisir bouton"
  on_click 2,saisir_button
button 3 : top 3,10 : left 3,390 : caption 3,"Lâcher l'objet"
  on_click 3,lacher

dim memo% : memo% = 10
memo memo% : top memo%,40 : left memo%,10
  item_add memo%, "mémo à dimensionner"
  
dim button% : button% = 20
button button% : top button%,40 : left button%,200 : width button%,150
  caption button%,"bouton à dimensionner"

dll_on "KGF.dll"

timer 99 : on_timer 99,tic : timer_off 99 : on_timer 99,tic : timer_interval 99,10

end

saisir_memo:
  dessiner_cadre(memo%)
  return
  
saisir_button:
  dessiner_cadre(button%)
  return
  
lacher:
  timer_off 99
  hide cadre%
  off_key_down cadre%
  off_key_up cadre%
  return
  
sub dessiner_cadre(obj%)
  selobj% = obj%
  show cadre%
  res% = DLL_call2("WindowTopMost",handle(cadre%),1)
  if trou%=1 then res% = DLL_call6("WindowRectangleHole",handle(cadre%),0,3,3,wtrou%,htrou%)
  wtrou% = width(obj%)
  htrou% = height(obj%)
  trou% = 1
  res% = dll_call5("GetFormClientMetrics",handle(0),adr(x0%),adr(y0%),adr(w0%),adr(h0%))
  top cadre%,top(obj%)-5 + y0%
  left cadre%,left(obj%)-5 + x0%
  width cadre%,width(obj%)+10
  height cadre%,height(obj%)+10
  res% = DLL_call6("WindowRectangleHole",handle(cadre%),1,5,5,wtrou%,htrou%)
  2d_target_is cadre%
  2d_clear
  2d_pen_color 1,1,1
  2d_rectangle 3,3,wtrou%+7,htrou%+7
  2d_pen_color 0,0,0
  2d_fill_color 0,0,0
  2d_fill_on
  ' poignées:
  2d_rectangle 0,0,5,5                                        : ' HG
  2d_rectangle 5+wtrou%/2-2,0,5+wtrou%/2+3,5                  : ' HM
  2d_rectangle 5+wtrou%,0,5+wtrou%+5,5                        : ' HD
  2d_rectangle 0,5+htrou%/2-2,5,5+htrou%/2+3                  : ' MG
  2d_rectangle 5+wtrou%,5+htrou%/2-2,5+wtrou%+5,5+htrou%/2+3  : ' MD
  2d_rectangle 0,5+htrou%,5,5+htrou%+5                        : ' BG
  2d_rectangle 5+wtrou%/2-2,5+htrou%,5+wtrou%/2+3,5+htrou%+5  : ' BM
  2d_rectangle 5+wtrou%,5+htrou%,5+wtrou%+5,5+htrou%+5        : ' BD
  2d_fill_off
  to_foreground cadre%
  on_key_down cadre%,down
  on_key_up cadre%,up
' res% = dll_call2("AbsoluteMousePosition",left(cadre%),top(cadre%))
end_sub

down:
  if key_down_code<>17 then return
  if down%=1 then return
  zoom% = 0
  res% = DLL_call5("GetFormMetrics",handle(cadre%),adr(posx%),adr(posy%),adr(w0%),adr(h0%))
  res% = dll_call2("GetAbsoluteMousePosition",adr(curx%),adr(cury%))
  detecter_zoom()
  caption 0,"zoom="+str$(zoom%)
  
  down% = 1
  timer_on 99
  return
sub detecter_zoom()
  if (curx%>=posx%) and (curx%<(posx%+5))
    if (cury%>=posy%) and (cury%<(posy%+5))
      zoom% = 1 : ' HG
      exit_sub
    end_if
    if (cury%>=(posy%+5+htrou%/2-2)) and (cury%<(posy%+5+htrou%/2+3))
      zoom% = 2 : ' MG
      exit_sub
    end_if
    if (cury%>=(posy%+5+htrou%)) and (cury%<(posy%+5+htrou%+5))
      zoom% = 3 : ' BG
      exit_sub
    end_if
  end_if
  if (curx%>=(posx%+5+wtrou%/2-2)) and (curx%<(posx%+5+wtrou%/2+3))
    if (cury%>=posy%) and (cury%<(posy%+5))
      zoom% = 4 : ' MH
      exit_sub
    end_if
    if (cury%>=(posy%+5+htrou%)) and (cury%<(posy%+5+htrou%+5))
      zoom% = 5 : ' MB
      exit_sub
    end_if
  end_if
  if (curx%>=(posx%+5+wtrou%)) and (curx%<(posx%+5+wtrou%+5))
    if (cury%>=posy%) and (cury%<(posy%+5))
      zoom% = 6 : ' HD
      exit_sub
    end_if
    if (cury%>=(posy%+5+htrou%/2-2)) and (cury%<(posy%+5+htrou%/2+3))
      zoom% = 7 : ' MD
      exit_sub
    end_if
    if (cury%>=(posy%+5+htrou%)) and (cury%<(posy%+5+htrou%+5))
      zoom% = 8 : ' BD
      exit_sub
    end_if
  end_if

end_sub

up:
  timer_off 99
  down% = 0
  return

tic:
  timer_off 99
  res% = dll_call2("GetAbsoluteMousePosition",adr(x%),adr(y%))
  dx% = x% - curx%
  dy% = y% - cury%
  select zoom%
    case 0 : ' move normal
      bouger(dx%,dy%)
    case 1 : ' HG
      bouger(dx%,dy%)
      zoomer(dx%,dy%)
    case 2 : ' MG
      bouger(dx%,0)
      zoomer(dx%,0)
    case 3 : ' BG
      bouger(dx%,0)
      zoomer(dx%,0-dy%)
    case 4 : ' MH
      bouger(0,dy%)
      zoomer(0,dy%)
    case 5 : ' MB
      bouger(0,0)
      zoomer(0,0-dy%)
    case 6 : ' HD
      bouger(0,dy%)
      zoomer(0-dx%,dy%)
    case 7 : ' MD
      bouger(0,0)
      zoomer(0-dx%,0)
    case 8 : ' BD
      bouger(0,0)
      zoomer(0-dx%,0-dy%)
  end_select
  timer_on 99
  return

sub bouger(dx%,dy%)
  left cadre%, left(cadre%) + dx%
  top cadre%, top(cadre%) + dy%
  left selobj%, left(selobj%) + dx%
  top selobj%, top(selobj%) + dy%
  posx% = left(cadre%)
  posy% = top(cadre%)
  curx% = x%
  cury% = y%
end_sub

sub zoomer(dx%,dy%)
  width cadre%,width(cadre%) - dx%
  height cadre%,height(cadre%) - dy%
  width selobj%,width(selobj%) - dx%
  height selobj%,height(selobj%) - dy%
  dessiner_cadre(selobj%)
end_sub

EDIT

Ci-dessus une version un peu optimisée, techniquement.


Dernière édition par Klaus le Mar 23 Déc 2014 - 11:44, édité 2 fois
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Invité
Invité




Déplacer dynamiquement un objet dans une form Empty
MessageSujet: Re: Déplacer dynamiquement un objet dans une form   Déplacer dynamiquement un objet dans une form EmptyMar 23 Déc 2014 - 4:09

Bonjour,
J'ai du me relever pour évacuer une douleur, et vu cette démo.

juste un détour:


Dernière édition par cosmos70 le Mar 23 Déc 2014 - 14:13, édité 1 fois
Revenir en haut Aller en bas
Invité
Invité




Déplacer dynamiquement un objet dans une form Empty
MessageSujet: Re: Déplacer dynamiquement un objet dans une form   Déplacer dynamiquement un objet dans une form EmptyMar 23 Déc 2014 - 14:12

Je suis désolé Klaus, apparemment mon intervention à l'air de poser problème, et c'était pas mon but.
Revenir en haut Aller en bas
Klaus

Klaus


Nombre de messages : 12277
Age : 74
Localisation : Ile de France
Date d'inscription : 29/12/2009

Déplacer dynamiquement un objet dans une form Empty
MessageSujet: Re: Déplacer dynamiquement un objet dans une form   Déplacer dynamiquement un objet dans une form EmptyMar 23 Déc 2014 - 14:56

Pourquoi ça poserait des problèmes, Cosmos70 ? Ton avis est toujours intéressant. Ne crois surtout pas que je refuse une mise en perspective de ce que je fais.
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Yannick




Nombre de messages : 8610
Age : 53
Localisation : Bretagne
Date d'inscription : 15/02/2010

Déplacer dynamiquement un objet dans une form Empty
MessageSujet: re   Déplacer dynamiquement un objet dans une form EmptyMar 23 Déc 2014 - 16:21

cheers Encore un cadeau au pied du sapin !

Bravo Klaus, cela promet de nouveaux jours pour ton éditeur wysiwyg...
Revenir en haut Aller en bas
Klaus

Klaus


Nombre de messages : 12277
Age : 74
Localisation : Ile de France
Date d'inscription : 29/12/2009

Déplacer dynamiquement un objet dans une form Empty
MessageSujet: Re: Déplacer dynamiquement un objet dans une form   Déplacer dynamiquement un objet dans une form EmptyMar 23 Déc 2014 - 16:31

Oui. J'explore plusieurs pistes à ce sujet, et celle-ci en est une...
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Jicehel

Jicehel


Nombre de messages : 5947
Age : 51
Localisation : 77500
Date d'inscription : 18/04/2011

Déplacer dynamiquement un objet dans une form Empty
MessageSujet: Re: Déplacer dynamiquement un objet dans une form   Déplacer dynamiquement un objet dans une form EmptyMar 23 Déc 2014 - 23:09

Merci en effet pour cette nouvelle possibilité qui peut être utilisée dans bien des usages.
Revenir en haut Aller en bas
Contenu sponsorisé





Déplacer dynamiquement un objet dans une form Empty
MessageSujet: Re: Déplacer dynamiquement un objet dans une form   Déplacer dynamiquement un objet dans une form Empty

Revenir en haut Aller en bas
 
Déplacer dynamiquement un objet dans une form
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Faire un trou complexe dans un objet FORM
» Ajout d'un nouveau type d'objet dans une form Panoramic !
» SUB centrer objet à partir d'1 form divisé en lig. et col.
» Comment lier un objet à un FORM
» Demande de nouvelles fonctions sur l'objet FORM

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: PANORAMIC :: Vos sources, vos utilitaires à partager-
Sauter vers: