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
» KGF_dll - nouvelles versions
par Yannick Aujourd'hui à 23:30

» Synedit Parameters
par Yannick Aujourd'hui à 23:26

» Un bug avec USER_EVENT ?
par Yannick Aujourd'hui à 23:16

» Concours de Morpions
par Froggy One Aujourd'hui à 19:30

» Bienvenue à Irikte
par papydall Aujourd'hui à 16:59

» Comment changer le graphisme d’un menu
par Yannick Aujourd'hui à 14:53

» LIBRARY COMMAND FUNCTION
par Jean Claude Aujourd'hui à 13:38

» OBJECT_PARENT NE FONCTIONNE PLUS ?! (RESOLU)
par Jack Aujourd'hui à 12:40

» Menu personalisé avec icones et menu contextuel
par Yannick Aujourd'hui à 12:10

» Doublon - Désolé !
par Laurent (Minibug) Aujourd'hui à 11:55

» Mac OS X sierra
par Irikte Aujourd'hui à 10:01

» Recherche de traductions de mots (@Klaus).
par Pedro Alvarez Hier à 20:34

» Problème avec SendStringAsText.
par Pedro Alvarez Hier à 20:32

» Version instantanée V 0.9.28i10 du 24/06/2017
par Yannick Hier à 18:19

» Mais qui a le focus ?
par Jack Hier à 16:35

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Juin 2017
LunMarMerJeuVenSamDim
   1234
567891011
12131415161718
19202122232425
2627282930  
CalendrierCalendrier

Partagez | 
 

 antibug create_hide

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

avatar

Nombre de messages : 453
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 32 bits :: Vos sources, vos utilitaires à partager-
Sauter vers: