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

Gestion d'une barre de progression (thermomètre)   



L'auteur

Roland38
France France
Membre Simple
# 0000000048
enregistré le 20/10/2004

http://www.passionautes.fr
77 ans

Fiche personnelle


Note des membres
17/20
1 vote


Contributions > 01 - PRG : Programmation

Gestion d'une barre de progression (thermomètre)
# 0000000171
ajouté le 07/04/2005 10:36:18 et modifié le 07/04/2005
consulté 8791 fois
Niveau débutant

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

Description
Ce petit bout de code permet la création et la gestion d'un ProgresBar vertical ou horizontal à n'importe quel endroit d'un Form. Le traitement terminé, ce ProgresBar peut-être supprimer du Form afin d'éviter un encombrement inutile.


Code source :
Le code du Form pour générer et gérer la Progres Bar

*  ************************************************************************************************
*  *"ProgresBar" est le nom de la routine de création de la barre de progression    *
*  *  Param1   = Nom du formulaire (objet)            *
*  *  Param2   = position ligne (en pixel) affichage Barre        *
*  *  Param3   = position colonne (en pixel) affichage Barre        *
*  *  Param4   = hauteur (en pixel) affichage Barre  (13 par défaut)      *
*  *  Param5   = longueur (en pixel) affichage Barre  (370 par défaut)    *
*  *  Param6   = nom de la Barre de Progression  ("ProgresBar" par défaut)  *
*  *  Param7 = Repres. de la barre 0 > pointillés  | 1 > continu (0 par défaut)  *
*  *  Param8 = Présentation Horizonatale (H) (par défaut) ou verticale (V)    *
*************************************************************************************************
*
*  ************************ pour une Barre Horizontale
ThisForm.Height = 369  && Agrandi le formulaire OBLIGATOIRE
      && pour mettre la BP au pied de ton form
Do generate IN ProgresBar WITH ThisForm,336,120,,350,"ProgresBar",1,"H" && Création de la PB

*  ************************ pour une Barre Verticale
*ThisForm.Width = 680
*Do generate IN ProgresBar WITH ThisForm,48,650,240,13,"ProgresBar",1,"V" && Création de la PB

*  **************** ICI la table que tu souhaites visualiser*****************
  Select maTable
  Go TOP
*  ***********************************************************************

*  *************************************************************************
*  * "InitProgresBar" est le nom de la routine de fonctionnement    *
*  *  Param1  = Nom de l'Ojet ProgresBar        *
*  *  Param2  = 1 pour la première entrée, sinon chaine vide    *
*  *  Param3  = valeur maximale de la barre        *
*  *  Param4  = position d'avancement pour afficher la progression  *
*  *  Param5 = Temporisation            *
*  *  Param6  = Nom de l'ojet formulaire        *
*  *************************************************************************
*
nNBEnreg = 0
&& Initialise la ProgresBar
Do initiate IN ProgresBar WITH ThisForm.ProgresBar,"1",RECCOUNT(),1,1,ThisForm
*  *********************** Boucle modifiable pour ta PB ****************
Do While ! EOF()
  nNBEnreg = nNBEnreg + 1
  && Active la ProgresBar avec les Nlles valeurs
  Do initiate IN ProgresBar WITH ThisForm.ProgresBar,"",RECCOUNT(), nNBEnreg ,1,ThisForm
  Skip
EndDo

*  ************************  Code non obligatoire
*MessageBox(" Boucle ProgresBar terminée ",0+32+0," Fin de boucle")
ThisForm.Height = 320    && Remettre le form à l'état initial
*ThisForm.Width  = 620    && Remettre le form à l'état initial

Do generate IN ProgresBar WITH ThisForm,,,,,"ProgresBar",  && Supprime la ProgresBar



**************************************************************************************************
-( ProgresBar.prg )-


*  *********************************************************************************
*  *  ProgresBar  Version 2.0   (10 mars 2005)         *
*  *         Routine de gestion d'une barre de prgression       *
*  *       Description des deux routines "generate" et "initiate" :   *
*  **********************************************************************************    *    *  generate =   génère la ProgresBar Horizontale ou Verticale       *
*  *    et un cadre autour             *
*  *    le 'TextBox' affichant le nombre d'enregistrements traités   *
*  *    le 'TextBox' affichant le pourcentage de progression     *
*  *    Supprime en finalité les Objets créés         *
*  *                     *
*  *  initiate  =  affiche le contenu de la ProgresBar et gére      *
*  *        les deux 'TextBox' d'informations     *
*  *********************************************************************************

FUNCTION generate
*  *****************************************************************
*  *   Création d'un Objet Barre de progression      *
*  *****************************************************************
*  *  (*)oForm   = Nom du formulaire (objet)    *
*  *  (*)oX     = ligne (en pixel) affichage Barre  *
*  *  (*)oY     = colonne (en pixel) affichage Barre  *
*  *  oHaut   = hauteur (en pixel) affichage Barre    *
*  *  oLong   = longueur (en pixel) affichage Barre    *
*  *  oNom   = nom de la Barre de Controle      *
*  *  oRepres = 0 > pointillés  | 1 > continu      *
*  *  oHVpos   = o = (H)orizontale / 1 = (V)erticale    *
*  *---------------------------------------------------------------*
*  *  (*) Eléments obligatoires                *
*  ******************************************************************
*
   PARAMETERS oForm, oX, oY, oHaut, oLong, oNom, oRepres, oHVpos

*  **************************************************************
*  *  Contrôle des paramètres de création et initialisation  *
*  *  des valeurs par défaut éventuellement      *
*  **************************************************************
  oHVpos  = Iif(EMPTY(oHVpos),0,Iif(oHVpos="H",0,1)) && Orientation Horizontale par défaut
  oNom    = Iif(EMPTY(oNom),"BarreControle",oNom)   && Nom par défaut
  oHaut    = Iif(EMPTY(oHaut),Iif(oHVpos=0,13,240),oHaut)  && Hauteur de l'ojet par défaut ( si H = 13 si V = 240)
  oLong    = Iif(EMPTY(oLong),Iif(oHVpos=0,240,13),oLong)  && Longueur par défaut (si H = 240 si V = 13)
  oRepres = Iif(EMPTY(oRepres),0,oRepres)      && Présentation en pointillé par défaut

*  **************************************************************
*  *  Supprime l"objet ProgresBar et son environnement  *
*  **************************************************************
  If EMPTY(oX)
    oForm.RemoveObject(oNom)
    oForm.RemoveObject("CadreP")
    oForm.RemoveObject("nBCComptage")
    oForm.RemoveObject("nBCPourcent")
    Return
  EndIf

*  **************************************************************
*  *  Création de la ProgresBar et de son environnement  *
*  **************************************************************
  oForm.AddObject(oNom,"Thermometre","MSComctlLib.Progctrl.2")
  oForm.AddObject("CadreP","Cadre")
  oForm.AddObject("nBCComptage","txtBCC")
  oForm.AddObject("nBCPourcent","txtBCP")

  oProgres = oForm.&oNom
  WITH oProgres
    .Orientation  = oHVpos
    .Top    = oX
    .Left    = oY
    .Height    = oHaut
    .Width    = oLong
    .Scrolling   = oRepres
    .Visible   = .T.
    .BorderStyle  = 1
  EndWITH

  WITH oForm.CadreP
    .SpecialEffect  = 0
    .Top     = oX-4
    .Left     = oY-4
    .Height    = oHaut+8
    .Width     = oLong+8
    .BackColor  = RGB(250,255,255)
    .Visible   = .T.
  EndWITH

  WITH oForm.nBCComptage
    .Width    = 100
    .Height    = 19
    .Left    = Iif(oHVpos=0 , oY , oY-(.Width/2))
    .Top    = oX - .Height
    .Alignment  = Iif(oHVpos=0, 0, 2)
    .BorderStyle  = 0
    .BackStyle  = 0
    .FontBold  = .T.
    .FontItalic  = .T.
    .FontSize  = 8
    .ForeColor  = RGB(128,64,64)
    .SpecialEffect  = 1
    .Visible   = .T.
  EndWITH

  WITH oForm.nBCPourcent
    .Width    = 50
       .Height    = 23
       .Left    = Iif(oHVpos=0 , oY+((oLong/2)-(.Width/2)) , oY- (.Width / 2))
    .Top    = Iif(oHVpos=0 , oX - .Height, (oHaut/2)+(oX-oLong) )
    .Alignment  = Iif(oHVpos=0, 2, 0)
    .BorderStyle  = 0
    .BackStyle  = 0
    .FontBold  = .T.
    .FontSize  = 8
    .ForeColor  = RGB(0,0,255)
    .SpecialEffect  = 1
    .InputMask  = "999 %"
    .Visible   = .T.
  EndWITH

  Define CLASS Thermometre AS OLEControl
  EndDefine
  Define CLASS Cadre AS Container
  EndDefine
  Define CLASS txtBCC AS TextBox
  EndDefine
  Define CLASS txtBCP AS TextBox
  EndDefine

*  *************\\\\\\\\\\\\\\\\\\\\\\\\*************
FUNCTION initiate
*  *************************************************************************
*  *  Module de gestion d'une barre de progression      *
*  *************************************************************************
*  *  oBProg  = nom de l'objet Barre de progression      *
*  *  cAppel   = 1 pour la première entrée, sinon chaine vide    *
*  *  nValMax  = valeur maximale de la barre        *
*  *  nCount  = position d'avancement pour afficher la progression  *
*  *  nBoucle = Valeur permettant le ralentissement de la progression  *
*  *  oForm  = Nom de l'ojet formulaire        *
*  *************************************************************************
*
   PARAMETERS oBProg, cAppel, nValMax, nCount, nBoucle, oForm

  If cAppel = "1"
    oBProg.Max = nValMax                              && Init Valeur maximale de la barre
    Return
  EndIf

  For iSituation = 1 to nBoucle                    && Boucle de temporisation
  EndFor                              && Pour une progression trop rapide

  oBProg.Value = nCount     && Fait progresser la barre
  oForm.nBCComptage.Value = nCount && Affiche la valeur transmise (RECCOUNT() ou autre)
  oForm.nBCPourcent.Value = INT(( nCount /nValMax)*100)  && Affiche le % de progression
  oForm.nBCPourcent.Refresh

Commentaires
le 07/04/2005, EmanuelL a écrit :
Super ton truc.
le 08/08/2005, Ayad Khaled a écrit :
Enfin!
le 09/08/2006, Jissé a écrit :
Merci Roland
Je teste ca
Jc


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