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
» Gestion d'un système client-serveur.
Pour découper une image en petits rectangles SANS DLL - Page 2 Emptypar Klaus Ven 17 Mai 2024 - 14:02

» item_index(résolu)
Pour découper une image en petits rectangles SANS DLL - Page 2 Emptypar jjn4 Mar 14 Mai 2024 - 19:38

» Bataille terrestre
Pour découper une image en petits rectangles SANS DLL - Page 2 Emptypar jjn4 Lun 13 Mai 2024 - 15:01

» SineCube
Pour découper une image en petits rectangles SANS DLL - Page 2 Emptypar Marc Sam 11 Mai 2024 - 12:38

» Editeur EliP 6 : Le Tiny éditeur avec 25 onglets de travail
Pour découper une image en petits rectangles SANS DLL - Page 2 Emptypar Marc Sam 11 Mai 2024 - 12:22

» Philharmusique
Pour découper une image en petits rectangles SANS DLL - Page 2 Emptypar jjn4 Ven 10 Mai 2024 - 13:58

» PANORAMIC V 1
Pour découper une image en petits rectangles SANS DLL - Page 2 Emptypar papydall Jeu 9 Mai 2024 - 3:22

» select intégrés [résolu]
Pour découper une image en petits rectangles SANS DLL - Page 2 Emptypar jjn4 Mer 8 Mai 2024 - 17:00

» number_mouse_up
Pour découper une image en petits rectangles SANS DLL - Page 2 Emptypar jjn4 Mer 8 Mai 2024 - 11:59

» Aide de PANORAMIC
Pour découper une image en petits rectangles SANS DLL - Page 2 Emptypar jjn4 Mer 8 Mai 2024 - 11:16

» trop de fichiers en cours
Pour découper une image en petits rectangles SANS DLL - Page 2 Emptypar lepetitmarocain Mer 8 Mai 2024 - 10:43

» Je teste PANORAMIC V 1 beta 1
Pour découper une image en petits rectangles SANS DLL - Page 2 Emptypar papydall Mer 8 Mai 2024 - 4:17

» bouton dans autre form que 0(résolu)
Pour découper une image en petits rectangles SANS DLL - Page 2 Emptypar leclode Lun 6 Mai 2024 - 13:59

» KGF_dll - nouvelles versions
Pour découper une image en petits rectangles SANS DLL - Page 2 Emptypar Klaus Lun 6 Mai 2024 - 11:41

» @Jack
Pour découper une image en petits rectangles SANS DLL - Page 2 Emptypar Jack Mar 30 Avr 2024 - 20:40

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 à ne pas rater :
Display Star Wars Unlimited Ombres de la Galaxie : où l’acheter ?
Voir le deal

 

 Pour découper une image en petits rectangles SANS DLL

Aller en bas 
+4
Severin
Jean Claude
Yannick
Klaus
8 participants
Aller à la page : Précédent  1, 2
AuteurMessage
Klaus

Klaus


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

Pour découper une image en petits rectangles SANS DLL - Page 2 Empty
MessageSujet: Re: Pour découper une image en petits rectangles SANS DLL   Pour découper une image en petits rectangles SANS DLL - Page 2 EmptyMar 7 Aoû 2012 - 16:11

Je comprends bien, Bignono. Le problème n'était pas d'identifier le morceau lorsqu'on clique dessus. C'était plutot de le "coller" à la souris pour le déplacer, alors qu'il peut glisser par-dessous un autre morceau et par la même occasion perdre le focus de la souris qui était accaparé par le morceau situé en avant-plan. Le problème ne se posait pas tant qu'on déplaçait les morceaux par les flèches. Mais dès qu'il faut capter la position de la souris en continu, c'est là qu'il y a un problème.

Bon, le problème est résolu par ma DLL. Et je l'ai appliqué à mon jeu Puzzle. J'ai supprimé le déplacement par les flèches. On joue maintenant de la manière suivante:
- charger un puzzle par la fonction "Ouvrir"
- lancer le mode "jeu" par la fonction "Jouer"
à partir de maintenant:
- clic gauche sur un morceau, et relâcher - le morceau est sélectionné (comme avant). Mais maintenant, il est "collé" à la souris.
- déplacer la souris pour positionner le morceau à l'endroit voulu
- recliquer sur le morceau pour le dé-sélectionner. Il se placera automatiquement, au pixel près, dans la case dont il est le plus proche.
Lorsque le dernier morceau est à la bonne place, le programme le signale avec des félicitations.

Voici le source (seulement 209 lignes) adapté à l'utilisation de MouseOperations.dll:

Code:
' puzzle.bas

label labels : gosub labels
gosub constantes
gosub variables
gosub donnees
gosub form0
gosub menu
gosub GUI
gosub initialisations
end

labels:
  label constantes, variables, donnees, form0, menu, GUI, initialisations
  label open, sortir, jouer, selpic, sel0, tick
  return
 
constantes:
  dim max_lignes% : max_lignes% = 100
  dim max_colonnes% : max_colonnes% = 150
  dim dll$ : dll$ = "MouseOperations.dll"
  return
 
variables:
' variables techniques
  dim no%, no1%, no2%, i%, j%, k%, m%, n%, s$, pic$, w%, h%, f$, x%, y%
  dim f_jouer%, n_select%, x_mouse%, y_mouse%, hnd%
' variables mémorisant des numéros d'objet
  dim no_pic% : ' picture visualisé à l'écran
  dim no_open% : ' open_dialog
  dim no_jouer% : ' ligne "Jouer" dans le menu "Fichiers"
  dim no_detail% : ' dernier numéro d'objet AVANT les pictures de détail
  dim no_image% : ' image pour pouvoir copier un picture de détail
  dim no_transport% : ' picture pour déplacer un picture de détail
  dim no_timer% : ' timer pour le déplacement d'un picture de détail
' variables pour la configuration du découpage
  dim n_lignes%, n_colonnes%
  return

donnees:
  return

form0:
  full_space 0 : on_click 0,sel0
  caption 0,"Résoudre un puzzle"

  return

menu:
  no% = no% + 1 : main_menu no% : no1% = no%
  no% = no% + 1 : sub_menu no% : parent no%,no1% : no2% = no%
    caption no%,"Fichier"
  no% = no% + 1 : sub_menu no% : parent no%,no2%
    caption no%,"Ouvrir" : on_click no%,open
  no% = no% + 1 : sub_menu no% : parent no%,no2%
    caption no%,"Jouer" : on_click no%,jouer
    no_jouer% = no% : inactive no%
  no% = no% + 1 : sub_menu no% : parent no%,no2%
    caption no%,"----------"
  no% = no% + 1 : sub_menu no% : parent no%,no2%
    caption no%,"Sortir" : on_click no%,sortir

  return

GUI:
' objets invisibles
  no% = no% + 1 : open_dialog no% : no_open% = no%
    filter no%,"Puzzle|*.txt"
  no% = no% + 1 : image no% : no_image% = no%
  no% = no% + 1 : timer no% : no_timer% = no% : timer_interval no_timer%,100
    on_timer no_timer%,tick : timer_off no_timer%
 
' form 0
  no% = no% + 1 : picture no% : no_pic% = no%  : 2d_target_is no%
    top no%,10 : left no%,10 : on_click no%,sel0
    width no%,width(0)-8-20 : height no%,height(0)-34-40
   
  no_detail% = no%
 
  return

initialisations:
  n_lignes% = 5
  n_colonnes% = 7
  hnd% = handle(0)
  dll_on dll$
  return
 
sortir:
  terminate

open:
  timer_off no_timer%
  f_jouer% = 0
  2d_target_is 0
  if no%>no_detail%
    for i%=no_detail%+1 to no%+1
      delete i%
    next i%
    color no_pic%,255,255,255
  end_if
  pic$ = ""
  width no_pic%,width(0)-8-20 : height no_pic%,height(0)-34-40
  s$ = file_name$(no_open%)
  if s$="_" then return
  if file_extract_name$(s$)<>"puzzle_config.txt"
    message "Ce n'est pas un puzzle valide."
    return
  end_if
  f$ = file_extract_path$(s$)
  file_open_read 1,s$
  file_readln 1,pic$
  caption 0,"Résoudre le puzzle "+pic$
  file_readln 1,s$
  i% = instr(s$," ")
  w% = val(left$(s$,i%-1))
  file_readln 1,s$
  i% = instr(s$," ")
  h% = val(left$(s$,i%-1))
  file_readln 1,s$
  i% = instr(s$," ")
  n_lignes% = val(left$(s$,i%-1))
  file_readln 1,s$
  i% = instr(s$," ")
  n_colonnes% = val(left$(s$,i%-1))
  file_close 1
 
  no% = no_detail%
  n% = int(h%/n_lignes% + 0.5)
  m% = int(w%/n_colonnes% + 0.5)
  color no_pic%,0,0,0
  2d_target_is no_pic%
  2d_rectangle 0,0,w%,h%
  for i%=1 to n_lignes%
    for j%=1 to n_colonnes%
      s$ = f$ + "puzzle_"+str$(i%)+"_"+str$(j%)+".bmp"
      no% = no% + 1 : picture no%  : width no%,m% : height no%,n%
        left no%,10 + int(rnd(width(no_pic%)-m%))
        top no%,10 + int(rnd(height(no_pic%)-n%))
        file_load no%,s$ : on_click no%,selpic
    next j%
  next i%
  no_transport% = no% + 1 : picture no_transport%  : hide no_transport%
    width no_transport%,m% : height no_transport%,n%
    on_click no_transport%,selpic
  active no_jouer%
  return

jouer:
  inactive no_jouer%
  f_jouer% = 1
  return
 
selpic:
  timer_off no_timer%
  if n_select%>0
    left n_select%,left(no_transport%)
    top n_select%,top(no_transport%)
    show n_select% : hide no_transport%
    if number_click=no_transport%
      top n_select%,int(top(n_select%)/n%+0.5)*n% +10
      left n_select%,int(left(n_select%)/m%+0.5)*m% +10
      x% = 0
      for i%=1 to n_lignes%
        for j%=1 to n_colonnes%
          k% = no_detail% + (i%-1)*n_lignes% + j%
          if (left(k%)<>(10+(j%-1)*m%)) then x% = 1
          if (top(k%)<>(10+(i%-1)*n%)) then x% = 1
        next j%
      next i%
      if x%=0
        off_key_down 0
        message "BRAVO ! Vous avez reconstitué le puzzle !"
        return
      end_if
      n_select% = 0
      return
    end_if
  end_if
  n_select% = number_click
  i% = dll_call3("GetMousePosition",hnd%,adr(x_mouse%),adr(y_mouse%))
  2d_target_is n_select%
  2d_image_copy no_image%,0,0,m%-1,n%-1
  2d_target_is no_transport%
  2d_image_paste no_image%,0,0
  left no_transport%,left(n_select%)
  top no_transport%,top(n_select%)
  show no_transport% : hide n_select%
  timer_on no_timer%
  return
 
sel0:
  timer_off no_timer%
  left n_select%,left(no_transport%)
  top n_select%,top(no_transport%)
  show n_select% : hide no_transport%
  n_select% = 0
  return

tick:
  timer_off no_timer%
  i% = dll_call3("GetMousePosition",hnd%,adr(x%),adr(y%))
  if x%<0 then return
  left no_transport%,x% - x_mouse% + left(no_transport%)
  top no_transport%,y% - y_mouse% + top(no_transport%)
  x_mouse% = x%
  y_mouse% = y%
  timer_on no_timer%
  return
 
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Klaus

Klaus


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

Pour découper une image en petits rectangles SANS DLL - Page 2 Empty
MessageSujet: Re: Pour découper une image en petits rectangles SANS DLL   Pour découper une image en petits rectangles SANS DLL - Page 2 EmptyMar 7 Aoû 2012 - 18:59

Une autre application des fonctions DLL permettant de gérer la position de la souris: déplacer des objets Panoramic par la souris en cours d'exécution ! En effet, ce qui est possible pour les picture contenant des morceaux de puzzle, doit être possible pour d'autres objets !

J'ai donc fait un programme avec un bouton qui permet de passer du mode "Normal" en mode "Mobile" et inversement. Et il y a 3 objets: un EDIT, un MEMO et un PICTURE. En mode normal, un clic dans un de ces objets affiche juste un message en guise de traitement. Mais en mode Mobile, l'objet reste collé à la souris et on peut le placer où on veut, pour le fixer par un autre clic dans l'objet.

Essayez-le, c'est bluffant.

Code:
' test_move_objects.bas

label labels : gosub labels
gosub constantes
gosub variables
gosub donnees
gosub form0
gosub menu
gosub GUI
gosub initialisations
end

labels:
  label constantes, variables, donnees, form0, menu, GUI, initialisations
  label sel, tick, clic_mode, clic_edit, clic_memo, clic_picture
  return
 
constantes:
  dim dll$ : dll$ = "MouseOperations.dll"
  return
 
variables:
' variables techniques
  dim no%, no1%, no2%, i%, j%, k%, m%, n%, s$, pic$, w%, h%, f$, x%, y%
  dim n_select%, x_mouse%, y_mouse%, hnd%, f_mode%
' variables mémorisant des numéros d'objet
  dim no_timer% : ' timer pour le déplacement d'un picture de détail
  return

donnees:
  return

form0:
  return

menu:
  return

GUI:
' objets invisibles
  no% = no% + 1 : timer no% : no_timer% = no% : timer_interval no_timer%,100
    on_timer no_timer%,tick : timer_off no_timer%
 
' form 0
  no% = no% + 1 : button no% : caption no%,"Mode Mobile"
    on_click no%,clic_mode
  no% = no% + 1 : edit no% : top no%,30 : left no%,10
    on_click no%,clic_edit
  no% = no% + 1 : memo no% : top no%,60 : left no%,10
    on_click no%,clic_memo
  no% = no% + 1 : picture no% : top no%,30 : left no%,200
    on_click no%,clic_picture : color no%,255,0,0
  return

initialisations:
  hnd% = handle(0)
  dll_on dll$
  return
 
clic_mode:
  f_mode% = 1 - f_mode%
  if f_mode%=0
    caption number_click,"Mode Mobile"
  else
    caption number_click,"Mode Normal"
  end_if
  return
 
clic_edit:
  if f_mode%=1 then goto sel
  message "Clic normal dans EDIT"
  return

clic_memo:
  if f_mode%=1 then goto sel
  message "Clic normal dans MEMO"
  return

clic_picture:
  if f_mode%=1 then goto sel
  message "Clic normal dans PICTURE"
  return


sel:
  timer_off no_timer%
  if n_select%=number_click then return
  n_select% = number_click
  i% = dll_call3("GetMousePosition",hnd%,adr(x_mouse%),adr(y_mouse%))
  timer_on no_timer%
  return
 
tick:
  timer_off no_timer%
  i% = dll_call3("GetMousePosition",hnd%,adr(x%),adr(y%))
  if x%<0 then return
  left n_select%,x% - x_mouse% + left(n_select%)
  top n_select%,y% - y_mouse% + top(n_select%)
  x_mouse% = x%
  y_mouse% = y%
  timer_on no_timer%
  return
 
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Yannick




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

Pour découper une image en petits rectangles SANS DLL - Page 2 Empty
MessageSujet: re   Pour découper une image en petits rectangles SANS DLL - Page 2 EmptyMar 7 Aoû 2012 - 19:03

C'est super !

On va pouvoir faire plein de truc rigolo avec cette dll... Laughing
J'imagine déjà tous les panoramiciens qui vont s'en servir alien rendeer geek jocolor king albino
Revenir en haut Aller en bas
bignono

bignono


Nombre de messages : 1127
Age : 66
Localisation : Val de Marne
Date d'inscription : 13/11/2011

Pour découper une image en petits rectangles SANS DLL - Page 2 Empty
MessageSujet: Re: Pour découper une image en petits rectangles SANS DLL   Pour découper une image en petits rectangles SANS DLL - Page 2 EmptyMer 8 Aoû 2012 - 0:11

Bonsoir à tous,
j'ai vite fait un petit code pour voir si on pouvait déplacer des picture à la souris sans perdre le focus.
Comme je n'ai pas le temps, il faudrait rechercher plus avant la manière de capter le bon picture lorsqu'il sont l'un sur l'autre, mais on peut déplacer les picture où l'on veut et ils suivent le mouvement de la souris. Si on clique sur le form, c'est le dernier picture qui vient se coller à la souris. Il faut recliquer pour le lacher. Pour sélectionner un picture différents, il faut parfois cliquer plusieurs fois avant d'y parvenir. Je pense qu'en creusant dans cette direction on doit pouvoir arriver à déplacer les picture avec la souris sans l'aide d'une dll.
Klaus essaye de creuser mon idée, peut-être trouveras tu la solution.
Code:
label deplace,deplace_pic1,deplace_pic2
dim a,xp,yp,xp1,yp1,xp2,yp2
full_space 0

picture 1:left 1,100:top 1,100:color 1,100,0,0:' on_click 1,deplace_pic1
picture 2:left 2,400:top 2,400:color 2,0,100,0:' on_click 2,deplace_pic2
timer 10:timer_interval 10,1:on_timer 10,deplace
a=1
end
deplace:
print_locate 010,10:print mouse_x_position(0);"    ";mouse_y_position(0);"    "
print_locate 200,10:print mouse_x_position(1);"    ";mouse_y_position(1);"    "
print_locate 400,10:print mouse_x_position(2);"    ";mouse_y_position(2);"    "
xp=mouse_x_position(0):yp=mouse_y_position(0)
xp1=mouse_x_position(1):yp1=mouse_y_position(1)
xp2=mouse_x_position(2):yp2=mouse_y_position(2)
if scancode=0 then return
timer_off 10
if clicked(1)=1 then a=1:xp=xp1:yp=yp1
if clicked(2)=1 then a=2:xp=xp2:yp=yp2
repeat
  left a,xp:top a,yp
  xp=mouse_x_position(0):yp=mouse_y_position(0)
  if clicked(a)=1 then exit_repeat
until mouse_left_down(a)=1

timer_on 10
return

deplace_pic1:

return
deplace_pic2:

return
Bon courage à tous
Revenir en haut Aller en bas
Klaus

Klaus


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

Pour découper une image en petits rectangles SANS DLL - Page 2 Empty
MessageSujet: Re: Pour découper une image en petits rectangles SANS DLL   Pour découper une image en petits rectangles SANS DLL - Page 2 EmptyMer 8 Aoû 2012 - 0:57

J'ai essayé, mais ton identification du picture visé est aléatoire. Tu peux faire cela simplement en utilisant NUMBER_CLICK qui te donne directement le dernier objet cliqué. Et tu fais le déplacement dans une boucle repeat à l'intérieur de la routine du timer. et tu as un conflit entre clicked(a) et mouse_left_down(a): si tu as cliqué sur le picture, la fonctioin clicked doit retourner 1 et tu sors. Mais si tu n'as pas cliqué sur ce picture, la fonction mouse_left_down ne peut pas sortir...

Regarde le programme que j'ai posté juste avant toi - certes, c'est fait avec une DLL, mais c'est la solution exacte du problème. Quelque soit le moyen, tu ne peux pas obtenir une solution complète en Panoramic, pour les raisons précises que j'ai exposées auparavant. Mouse_x_position et Mouse_y_position ne permettent pas de savoir si le curseur est dedans ou pas, au niveau d'un survol. D'ailleurs, aucune fonction de Panoramic ne permet de savoir cela. Or, avec un picture qui glisse sous un autre, les coordonnées retournées par ces fonctions ne correspondent plus à la réalité, et de ce fait, il y a des mouvements erratiques en résultat.
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Yannick




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

Pour découper une image en petits rectangles SANS DLL - Page 2 Empty
MessageSujet: une petite précision svp ?   Pour découper une image en petits rectangles SANS DLL - Page 2 EmptyLun 20 Aoû 2012 - 0:26

@ Klaus,

comment fais tu pour récupérer les dimensions de l'image ? j'ai du mal à comprendre.
width() et height() renvoi les dimensions du picture mais pas de l'image chargé dedans,
si elle est plus grande que le picture, les dimensions devraient être faussées...non ?
Revenir en haut Aller en bas
Klaus

Klaus


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

Pour découper une image en petits rectangles SANS DLL - Page 2 Empty
MessageSujet: Re: Pour découper une image en petits rectangles SANS DLL   Pour découper une image en petits rectangles SANS DLL - Page 2 EmptyLun 20 Aoû 2012 - 0:42

C'est simple. J' déclare mon picture très grand, sans stretch_on. Je charge une image avec file_load, puis je fais ceci:*
Code:
  2d_flood width(no_pic%)-1,height(no_pic%)-1,0,0,0
Donc, l'excédent du picture à droite et en bas est rempli de noir. Il ne reste plus qu'à regarder de droite à gauche jusqu'au premier pixel non-noir pour avoir la vraie largeur, et pareil de bas en haut pour avoir la hauteur.

Deux remarques:
1. dans mon programme, je dimensionne le picture de sorte qu'il tienne dans l'écran full_space. Pour pouvoir gérer des photos qui sont souvent plus grandes, il vaut mieux choisir des valeurs plus grandes pour width et height du picture.
2. j'ai fait la supposition que les images que je traite, n'ont pas de noir à droite et en bas. Si tel est le cas, il faut changer la couleur du 2d_flood. Tu peux par exemple faire la recherche 3 fois, avec noir, blanc et une couleur quelconque, puis prendre la plus grande des valeurs trouvées à chaque passe pour largeur et hauteur.
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Yannick




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

Pour découper une image en petits rectangles SANS DLL - Page 2 Empty
MessageSujet: re   Pour découper une image en petits rectangles SANS DLL - Page 2 EmptyLun 20 Aoû 2012 - 0:52

je vais voir celà de près, de très près... Wink

c'est peut être une demande que je vais faire çà , une commande Picture_width(N) et Picture_Height(N)
mais je pense que çà doit être possible par extraction aussi puisque quand on sélectionne une image dans un dossier,
les dimensions sont dans le tag.

Merci pour l'astuce Klaus.
Revenir en haut Aller en bas
Contenu sponsorisé





Pour découper une image en petits rectangles SANS DLL - Page 2 Empty
MessageSujet: Re: Pour découper une image en petits rectangles SANS DLL   Pour découper une image en petits rectangles SANS DLL - Page 2 Empty

Revenir en haut Aller en bas
 
Pour découper une image en petits rectangles SANS DLL
Revenir en haut 
Page 2 sur 2Aller à la page : Précédent  1, 2
 Sujets similaires
-
» Découper un rectangle dans une image
» Outil pour écriture sans SCENE2D ou ailleurs
» Pour mes petits-enfants et pour les vôtres
» Comment afficher une image sans fond.
» Impression d'image sans ressource externe

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: