FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  FAQFAQ  RechercherRechercher  S'enregistrerS'enregistrer  MembresMembres  GroupesGroupes  Connexion  
Derniers sujets
» Problème de math
par papydall Aujourd'hui à 1:53

» A propos des attributs de fichier
par papydall Hier à 14:33

» Problème de math
par Marc37 Sam 21 Oct 2017 - 23:04

» I Love You
par papydall Sam 21 Oct 2017 - 19:22

» Un petit "coucou" à tous les Panoramiciens !
par mindstorm Sam 21 Oct 2017 - 17:06

» MARK_ON déclenche un événement ON_CLICK à la place de ...
par Jean Claude Mer 18 Oct 2017 - 18:08

» mise a jour calculatrice
par joeeee2017 Mer 18 Oct 2017 - 15:57

» [solved] 3D_LINE How to ?
par Jicehel Mer 18 Oct 2017 - 11:01

» Convertisseur de base 10 de 2 à 36
par gigi75 Mar 17 Oct 2017 - 18:49

» calculatrice avec touches movibles
par joeeee2017 Dim 15 Oct 2017 - 1:11

» CORTANA
par gigi75 Sam 14 Oct 2017 - 16:32

» Calculatrice
par Jean Claude Sam 14 Oct 2017 - 12:30

» Compilateur FBPano
par jean_debord Jeu 12 Oct 2017 - 9:53

» KGF_dll - nouvelles versions
par Klaus Mar 10 Oct 2017 - 18:49

» à propos de Panoramic_Editor [Résolu]
par Klaus Mar 10 Oct 2017 - 3:19

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Octobre 2017
LunMarMerJeuVenSamDim
      1
2345678
9101112131415
16171819202122
23242526272829
3031     
CalendrierCalendrier

Partagez | 
 

 antibug create_hide

Voir le sujet précédent Voir le sujet suivant Aller en bas 
AuteurMessage
silverman

avatar

Nombre de messages : 466
Age : 45
Localisation : Picardie
Date d'inscription : 19/03/2015

MessageSujet: antibug create_hide   Mar 27 Sep 2016 - 18:54

Bonjour à tous!

Vous le savez, à cause d'un bug, les forms ne sont pas positionnés correctement lorsqu'on les crés caché avec la commande 'CREATE_HIDE'. Pour corriger ce défaut, je vous pésente une sub très simple à utiliser, puisqu'il suffit de la placer n'importe où entre 'CREATE_HIDE' et 'CREATE_SHOW'(pourvu que le form ait été créé), c'est tout! Ensuite, le form peut être positionné avec les commandes habituelles, ça REmarche Cool
Sa syntaxe : ANTIBUG_CREATE_HIDE(frm_nb%)"
Code:
'
'
' Fixe le bug de la commande CREATE_HIDE
'
'

dim frm_nb% , maxi%
maxi%=3


'  les prochains objets système créés ne seront pas visibles
 CREATE_HIDE


' cré des forms invisibles
for frm_nb%=1 to maxi%
   form frm_nb%                                                                :' un form
   ANTIBUG_CREATE_HIDE(frm_nb%)
   left frm_nb%,50+(20*frm_nb%) : top frm_nb%,100+(20*frm_nb%)                 :' placé ou je l'ai décidé!
next frm_nb%


'  les prochains objets système créés seront visibles
 CREATE_SHOW


' maintenant que les forms sont créés, on y insère ce que l'on veut
picture 300 : parent 300,1 : full_space 300


' affiche les forms
caption 0,"Une petite pause pour faire durer le suspense..."
 PAUSE 1500
for frm_nb%=1 to maxi%
   show frm_nb%
next frm_nb%
caption 0,"et voila!"


END
'
'
'
SUB ANTIBUG_CREATE_HIDE(v_form%)
 if object_exists(v_form%)=0
    if message_error_ok("l'objet numéro "+str$(v_form%)+" n'existe pas")=1 then terminate
    terminate
 end_if
' variables pour la structure
 dim_local WINDOWPLACEMENT$
 dim_local WINDOWPLACEMENT_ptr% , long%,adr_source% , adr_destination% , buffer_position%
 
' variables pour les données de la structure
 dim_local tmpv_left% , tmpv_top% , v_left% , v_top% , v_width% , v_height%

' variables pour la recherche d'une 'library' disponible
 dim_local my_library$ , my_dll$
 dim_local i% , k% , found%
 if variable("antibug_create_hide_LIBRARY_KEYWORD_CREATION%")=0
    dim antibug_create_hide_LIBRARY_KEYWORD_CREATION%
 end_if
 
 
' recherche si 'user32' est déjà utilisé :
'
'
   i%=0
   k%=0
   found%=0
   my_dll$="user32"
   '
   repeat
      k%=k%+1
   until library$(k%)="_"

   repeat
      i%=i%+1
         my_library$=lower$(library$(i%))
         '
         if my_library$=my_dll$
            found%=1
            exit_repeat
         end_if
   until i%=k%

   ' on ne peut pas savoir si les commandes utilisateur ont déjà été créé, il faut ruser
   if antibug_create_hide_LIBRARY_KEYWORD_CREATION%=0
      antibug_create_hide_LIBRARY_KEYWORD_CREATION%=1
      if found%=0
         LIBRARY i%,my_dll$
      end_if
      command "antibug_create_hide_GET_PLACEMENT","GetWindowPlacement",i%,"II","stdcall"
      command "antibug_create_hide_SET_PLACEMENT","SetWindowPlacement",i%,"II","stdcall"
   end_if


' préparation de la structure :
'
'   créer une structure pour 11 integers
   WINDOWPLACEMENT$=string$(44,chr$(0))
  
'   GET_STRUCTURE_PTR(adr(WINDOWPLACEMENT_ptr%),adr(WINDOWPLACEMENT$))         :' récupère l'adresse de la structure et écrit là dans la variable 'WINDOWPLACEMENT_ptr%'
   adr_source%=adr(WINDOWPLACEMENT$)
   adr_destination%=adr(WINDOWPLACEMENT_ptr%)
   poke adr_destination%,peek(adr_source%)
   poke adr_destination%+1,peek(adr_source%+1)
   poke adr_destination%+2,peek(adr_source%+2)
   poke adr_destination%+3,peek(adr_source%+3)

'   WRITE_STRUCTURE_LONG(WINDOWPLACEMENT_ptr%,0,44)                            :' écrit sa taille(imposé par par 'user32' pour utiliser 'GetWindowPlacement')
   long%=44
   buffer_position%=0
   poke WINDOWPLACEMENT_ptr%+buffer_position%,peek(adr(long%))
   poke WINDOWPLACEMENT_ptr%+1+buffer_position%,peek(adr(long%)+1)
   poke WINDOWPLACEMENT_ptr%+2+buffer_position%,peek(adr(long%)+2)
   poke WINDOWPLACEMENT_ptr%+3+buffer_position%,peek(adr(long%)+3)

   ' récupère la position courante du form  qu'elle ne soit altéré
   v_left% = left(v_form%) : v_top% = top(v_form%)                             :' récupère la position courante du form avant qu'elle ne soit altéré

' remplir la structure :
'
'   null%=dll_call2("GetWindowPlacement",handle(v_form%),WINDOWPLACEMENT_ptr%) :' lit l'état du form
   antibug_create_hide_GET_PLACEMENT handle(v_form%),WINDOWPLACEMENT_ptr%


' lecture de données :
'
'   READ_STRUCTURE_LONG(adr(v_left%),WINDOWPLACEMENT_ptr%,28)                  :' positionnement horizontal <---- c'est cette valeur qui cause le bug
   adr_destination%=adr(tmpv_left%)
   buffer_position%=28
   poke adr_destination%,peek(WINDOWPLACEMENT_ptr%+buffer_position%)
   poke adr_destination%+1,peek(WINDOWPLACEMENT_ptr%+1+buffer_position%)
   poke adr_destination%+2,peek(WINDOWPLACEMENT_ptr%+2+buffer_position%)
   poke adr_destination%+3,peek(WINDOWPLACEMENT_ptr%+3+buffer_position%)

'   READ_STRUCTURE_LONG(adr(v_left%),WINDOWPLACEMENT_ptr%,36)                  :' positionnement horizontal + largeur
   adr_destination%=adr(v_width%)
   buffer_position%=36
   poke adr_destination%,peek(WINDOWPLACEMENT_ptr%+buffer_position%)
   poke adr_destination%+1,peek(WINDOWPLACEMENT_ptr%+1+buffer_position%)
   poke adr_destination%+2,peek(WINDOWPLACEMENT_ptr%+2+buffer_position%)
   poke adr_destination%+3,peek(WINDOWPLACEMENT_ptr%+3+buffer_position%)
   v_width%=v_width%-tmpv_left%                                                :' largeur du form
  
'   READ_STRUCTURE_LONG(adr(v_left%),WINDOWPLACEMENT_ptr%,32)                  :' positionnement vertical <---- c'est aussi cette valeur qui cause le bug
   adr_destination%=adr(tmpv_top%)
   buffer_position%=32
   poke adr_destination%,peek(WINDOWPLACEMENT_ptr%+buffer_position%)
   poke adr_destination%+1,peek(WINDOWPLACEMENT_ptr%+1+buffer_position%)
   poke adr_destination%+2,peek(WINDOWPLACEMENT_ptr%+2+buffer_position%)
   poke adr_destination%+3,peek(WINDOWPLACEMENT_ptr%+3+buffer_position%)

'   READ_STRUCTURE_LONG(adr(v_left%),WINDOWPLACEMENT_ptr%,40)                  :' positionnement vertical + hauteur
   adr_destination%=adr(v_height%)
   buffer_position%=40
   poke adr_destination%,peek(WINDOWPLACEMENT_ptr%+buffer_position%)
   poke adr_destination%+1,peek(WINDOWPLACEMENT_ptr%+1+buffer_position%)
   poke adr_destination%+2,peek(WINDOWPLACEMENT_ptr%+2+buffer_position%)
   poke adr_destination%+3,peek(WINDOWPLACEMENT_ptr%+3+buffer_position%)
   v_height%=v_height%-tmpv_top%                                               :' hauteur du form

  
' écriture de donnees :
'
'   WRITE_STRUCTURE_LONG(WINDOWPLACEMENT_ptr%,8,0)                             :' le laisser tel quel(visible/non visible)
   long%=show(frm_nb%)
   buffer_position%=8
   poke WINDOWPLACEMENT_ptr%+buffer_position%,peek(adr(long%))
   poke WINDOWPLACEMENT_ptr%+1+buffer_position%,peek(adr(long%)+1)
   poke WINDOWPLACEMENT_ptr%+2+buffer_position%,peek(adr(long%)+2)
   poke WINDOWPLACEMENT_ptr%+3+buffer_position%,peek(adr(long%)+3)

'   WRITE_STRUCTURE_LONG(WINDOWPLACEMENT_ptr%,28,v_left%)                      :' écrit la nouvelle position horizontale
   long%=v_left%
   buffer_position%=28
   poke WINDOWPLACEMENT_ptr%+buffer_position%,peek(adr(long%))
   poke WINDOWPLACEMENT_ptr%+1+buffer_position%,peek(adr(long%)+1)
   poke WINDOWPLACEMENT_ptr%+2+buffer_position%,peek(adr(long%)+2)
   poke WINDOWPLACEMENT_ptr%+3+buffer_position%,peek(adr(long%)+3)

'   WRITE_STRUCTURE_LONG(WINDOWPLACEMENT_ptr%,32,v_top%)                       :' écrit la nouvelle position verticale
   long%=v_top%
   buffer_position%=32
   poke WINDOWPLACEMENT_ptr%+buffer_position%,peek(adr(long%))
   poke WINDOWPLACEMENT_ptr%+1+buffer_position%,peek(adr(long%)+1)
   poke WINDOWPLACEMENT_ptr%+2+buffer_position%,peek(adr(long%)+2)
   poke WINDOWPLACEMENT_ptr%+3+buffer_position%,peek(adr(long%)+3)

'   WRITE_STRUCTURE_LONG(WINDOWPLACEMENT_ptr%,36,v_width%+v_left%)             :' écrit la largeur
   long%=v_width%+v_left%
   buffer_position%=36
   poke WINDOWPLACEMENT_ptr%+buffer_position%,peek(adr(long%))
   poke WINDOWPLACEMENT_ptr%+1+buffer_position%,peek(adr(long%)+1)
   poke WINDOWPLACEMENT_ptr%+2+buffer_position%,peek(adr(long%)+2)
   poke WINDOWPLACEMENT_ptr%+3+buffer_position%,peek(adr(long%)+3)

'   WRITE_STRUCTURE_LONG(WINDOWPLACEMENT_ptr%,40,v_height%+v_top%)             :' écrit la hauteur
   long%=v_height%+v_top%
   buffer_position%=40
   poke WINDOWPLACEMENT_ptr%+buffer_position%,peek(adr(long%))
   poke WINDOWPLACEMENT_ptr%+1+buffer_position%,peek(adr(long%)+1)
   poke WINDOWPLACEMENT_ptr%+2+buffer_position%,peek(adr(long%)+2)
   poke WINDOWPLACEMENT_ptr%+3+buffer_position%,peek(adr(long%)+3)
  
  
' écrit le nouvel état du form :
'
'   null%=dll_call2("SetWindowPlacement",handle(v_form%),WINDOWPLACEMENT_ptr%) :' écrit le nouvel état du form
   antibug_create_hide_SET_PLACEMENT handle(v_form%),WINDOWPLACEMENT_ptr%

END_SUB
Il y a également une fonction équivalente dans la dll de Klaus.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
 
antibug create_hide
Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 1 sur 1

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: