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

BasicSubClass : Création d'un VCX contenant une surcharge "vide" des classes visuelles de base   



L'auteur

Francis Faure
France France
Membre Actif (personne physique)
# 0000000001
enregistré le 11/10/2004

http://www.wanagain.net
56 ans
Faure Francis
de la société Design Or Decline
Fiche personnelle


Note des membres
pas de note

Contributions > 06 - VCX - Bibliothèque de classes visuelles

BasicSubClass : Création d'un VCX contenant une surcharge "vide" des classes visuelles de base
# 0000000752
ajouté le 20/04/2010 20:04:48 et modifié le 21/04/2010
consulté 9428 fois
Niveau débutant

Version(s) Foxpro :
VFP 9.0

Description

Bonjour,

Les "Best Practices" indiquent (à juste titre à mon avis) qu'il faut considérer les classes de bases visuelles de VFP comme "Abstract" et donc commencer un projet VFP par générer ses propres classes visuelles en surchargant les classes visuelles de bases.
Comme c'est un peu long à faire à la "mano" ci-aprés un programme permmettant de générer un VCX directement
C'est tellement plus pratique ensuite de n'avoir qu'a modifier ses propres classes "de bases" ...


Cordialement

Francis Faure

Code source :
*--------------------------------------------------------------------------------------------------------
* BasicSubClass
* Par Francis FAURE
*--------------------------------------------------------------------------------------------------------
* But : Créer une bibliothèque VCX contenant une surcharge "vide" des classes visuelles de base de VFP
*--------------------------------------------------------------------------------------------------------


* test : Créer un MesClasses.VCX contenant une surcharge des classes visuelles VFP de base

=CreateBasicSubClass("S:\vfp\BasicSubClass\MesClasses.vcx""My_")

Return



Procedure CreateBasicSubClass(lsDir_File_VCX As String, lsPrefix As String, llEcraserSiExiste as Boolean)
LOCAL lobj as Object
If Type("m.lsDir_File_VCX")<>"C" OR Empty(m.lsDir_File_VCX)
  lsDir_File_VCX = "MyClass.vcx"
Else
  m.lsDir_File_VCX = Alltrim(m.lsDir_File_VCX)
Endif
If Type("m.lsPrefix")<>"C" or Empty(m.lsPrefix)
  lsPrefix = "u_"
Else
  m.lsPrefix = Alltrim(m.lsPrefix)
Endif
* Que faire en cas d'existence du VCX demandé ?
If File(m.lsDir_File_VCX)
  IF m.llEcraserSiExiste
    CLEAR CLASSLIB (m.lsDir_File_VCX)
    ERASE (m.lsDir_File_VCX)
  else
    =Messagebox("La bibliothèque VCX : " + m.lsDir_File_VCX + " Existe déjà !" + Chr(13)+Chr(10) + "Opération Annulée.")
    Return .F.
  endif
Endif

*  Ajout des classes visuelles
* (bizarrement dans l'ordre inverse de l'affichage dans le form designer...)
CREATE CLASSLIB (m.lsDir_File_VCX)

lobj=Createobject("Form")
  * --- personnalisations Form ---
  lobj.width=800
  lobj.height=600
lobj.SaveAsClass(m.lsDir_File_VCX, m.lsPrefix+"Form")

lobj=Createobject("Container")
  * --- personnalisations Container ---
lobj.SaveAsClass(m.lsDir_File_VCX, m.lsPrefix+"Container")

lobj=Createobject("Shape")
  * --- personnalisations Shape ---
lobj.SaveAsClass(m.lsDir_File_VCX, m.lsPrefix+"Shape")

lobj=Createobject("Line")
  * --- personnalisations Line ---
lobj.SaveAsClass(m.lsDir_File_VCX, m.lsPrefix+"Line")

lobj=Createobject("PageFrame")
  * --- personnalisations PageFrame ---
  lobj.PageCount=2
lobj.SaveAsClass(m.lsDir_File_VCX, m.lsPrefix+"PageFrame")

lobj=Createobject("Timer")
  * --- personnalisations Timer ---
  lobj.width=24
  lobj.height=24
lobj.SaveAsClass(m.lsDir_File_VCX, m.lsPrefix+"Timer")

lobj=Createobject("Image")
  * --- personnalisations Image ---
lobj.SaveAsClass(m.lsDir_File_VCX, m.lsPrefix+"Image")

lobj=Createobject("Grid")
  * --- personnalisations Grid ---
lobj.SaveAsClass(m.lsDir_File_VCX, m.lsPrefix+"Grid")

lobj=Createobject("Spinner")
  * --- personnalisations Spinner ---
  lobj.height=27
lobj.SaveAsClass(m.lsDir_File_VCX, m.lsPrefix+"Spinner")

lobj=Createobject("ListBox")
  * --- personnalisations ListBox ---
lobj.SaveAsClass(m.lsDir_File_VCX, m.lsPrefix+"ListBox")

lobj=Createobject("CheckBox")
  * --- personnalisations CheckBox ---
lobj.SaveAsClass(m.lsDir_File_VCX, m.lsPrefix+"CheckBox")

lobj=Createobject("OptionGroup")
  * --- personnalisations OptionGroup ---
  lobj.ButtonCount=2
  lobj.width=100
  lobj.height=50
lobj.SaveAsClass(m.lsDir_File_VCX, m.lsPrefix+"OptionGroup")

lobj=Createobject("CommandButton")
  * --- personnalisations ComandButton ---
  lobj.height=27
lobj.SaveAsClass(m.lsDir_File_VCX, m.lsPrefix+"CommandButton")

*LOCAL  lobj as CommandGroup
lobj=Createobject("CommandGroup")
  * --- personnalisations CommandGroup ---
  lobj.width=110
  lobj.height=70
  lobj.MemberClass = m.lsPrefix+"CommandButton"
  lobj.MemberClassLibrary = m.lsDir_File_VCX
  lobj.ButtonCount=2
lobj.SaveAsClass(m.lsDir_File_VCX, m.lsPrefix+"CommandGroup")

lobj=Createobject("Editbox")
  * --- personnalisations EditBox ---
lobj.SaveAsClass(m.lsDir_File_VCX, m.lsPrefix+"EditBox")

lobj=Createobject("Textbox")
  * --- personnalisations TextBox ---
lobj.SaveAsClass(m.lsDir_File_VCX, m.lsPrefix+"TextBox")

lobj=Createobject("Label")
  * --- personnalisations Label ---
  lobj.AutoSize = .T.
  lobj.BackStyle = 0
lobj.SaveAsClass(m.lsDir_File_VCX, m.lsPrefix+"Label")

Endproc

Commentaires
le 20/04/2010, Jean à Grenoble a écrit :
Juste une petite remarque : comme le fait de 'typer' les paramètres ne sert à rien, il faut tout de même vérifier le type de chacun d'eux; mais il faut aussi vérifier s'ils ne sont pas vides. Soit :

If Type("m.lsDir_File_VCX")<>"C" OR EMPTY(m.lsDir_File_VCX)
lsDir_File_VCX = "MyClass.vcx"
Else
m.lsDir_File_VCX = Alltrim(m.lsDir_File_VCX)
Endif

Jean à Grenoble

le 21/04/2010, Francis Faure a écrit :
Salut Jean,
j'ai rajouté le test empty() en plus...
- Le test de type sert bien, il sert que dans le cas ou le développeur a "oublié" les paramétres... on peut mettre une erreur et retourner un messagebox donnant l'erreur au programmeur. Normalement il ne doit jamais servir...
Cordialement

le 21/04/2010, eric leissler a écrit :
joli boulot
Bravo !
Eric


Publicité

Les pubs en cours :


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