ATOUTFOX
COMMUNAUTÉ FRANCOPHONE DES PROFESSIONNELS FOXPRO
Visual FoxPro : le développement durable

Positionner des formulaires avec _screen.TabFormulaire   



L'auteur

eddymaue
Canada Canada
Membre Simple
# 0000000075
enregistré le 26/10/2004
Maue Eddy
j8j 8j8 Gatineau
de la société Formatek
Fiche personnelle


Note des membres
pas de note

Contributions > 01 - PRG : Programmation

Positionner des formulaires avec _screen.TabFormulaire
# 0000000756
ajouté le 15/05/2010 21:47:17 et modifié le 15/05/2010
consulté 3908 fois
Niveau débutant

Version(s) Foxpro :
VFP 9.0
VFP 8.0
VFP 7.0
VFP 6.0

Description
En gros il est préférable d'ajouter un tableau à _screen et d'y référencer les formulaires à contrôler. L'emploit d'une table est à proscrire pour une raison simple, si les formulaires sont en sessions privés, ca va être difficile à gérer. Voir presqu'impossible.

Aussi l'emploit du tableau variable rend flexible la possibilité de contrôler la fermeture, le déplacement ou tout autres actions sur les formulaires avec toutes sortes de critères

a+
Code source :
* Soit dans l'init, load ou activate et aussi ca peut etre une classe et moi j'opterais pour une classe que tu déposes sur tes formulaires
* donc y va

#define LEFT_AJOUT 20
#define TOP_AJOUT 20

Set Step On
Declare laForm(27)



For i = 1 To 27


  laForm(i) =  Createobject("MesForms")
  laForm(i).Show()

Endfor


Define Class MesForms As Form

  Width = 200
  Heigh = 200
  Add Object  oFormPosition As clssFormPosition

  Procedure Destroy()
    This.oFormPosition.Fermeture()
  Endproc

Enddefine

Define  Class clssFormPosition As Custom
  ref = Sys(2015)
  i = 0

  *  /¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ close
  * / Eddy Maue a+  --   Créer le : 2010-05-15
  Procedure Fermeture

    With _Screen


      * efface la référence dans le tableau .tabformulaire
      If This.i > 0

        Store .F. To .tabformulaire ( This.i , 2) , .tabformulaire( This.i , 2)

      Endif
    Endwith

  Endproc && close


  *  /¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ Init
  * / Eddy Maue a+  --   Créer le : 2010-05-15
  Procedure Init
    With _Screen As Form

      && vérification le l'existance de "tabFormulaire" dans _screen

      Do Case
        Case Vartype(.tabformulaire)=="U"  && undefine

          .AddProperty("tabFormulaire(1,2)")

        Case Ascan(.tabformulaire,.F.,1) > 0 And IifAscan(.tabformulaire,Null)>0,This.ViderTableau(),.T.)

          This.i = Asubscript(.tabformulaire ,Ascan(.tabformulaire,.F.,1) ,1)

        Otherwise

          * incrémente le tableau d'une rangé
          Declare .tabformulaire( Alen(.tabformulaire,1) +1 ,2 )
      Endcase

      This.i = Iif(  ;
        This.i = 0 ;
        ,  Alen(.tabformulaire,1) ;
        ,   This.i )

      .tabformulaire(This.i ,1) = This.ref  && c'est seulement une référence
      .tabformulaire(m.this.i ,2) = Thisform        && ca l'objet formulaire

      * là on va positionner notre nouveau formulaire qui vient de s'ouvrir
      Do Case
        Case This.i > 1 And Vartype(.tabformulaire(m.this.i -1,2))= "O"

          Thisform.Left = .tabformulaire(m.this.i -1,2).Left + TOP_AJOUT
          Thisform.Top  = .tabformulaire(m.this.i -1,2).Top  + LEFT_AJOUT

        Otherwise

      Endcase

    Endwith

  Endproc && Init


  *  /¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ ViderTableau
  * / Eddy Maue a+  --   Créer le : 2010-05-15
  Procedure ViderTableau

    Local iCible
    With _Screen

      For m.iCible = 1 To Alen(.tabformulaire,1)

        If InlistVartype(.tabformulaire( iCible ,2)),"L","X")
          Store .F. To .tabformulaire( iCible ,1 ),.tabformulaire( m.iCible , 2 )
        Endif
      Endfor
    Endwith

    Return .T.

  Endproc && ViderTableau

Enddefine


Local iCible As Integer

Set Step On

Commentaires
Aucun commentaire enregistré ...

Publicité

Les pubs en cours :

www.atoutfox.org - Site de la Communauté Francophone des Professionnels FoxPro - v3.4.0 - © 2004-2018.
Cette page est générée par un composant COM+ développé en Visual FoxPro 9.0