A PROPOS DES FENETRES "DEFINE WINDOW"
# 0000000616
ajouté le 12/06/2008 00:49:36 et modifié le 12/06/2008
consulté 8232 fois
Niveau
initié
Version(s) Foxpro : VFP 6.0
Description
Je me suis toujours posé la question de savoir à quoi peut servir une fenêtre (définie par define window) si ce n'est pour afficher un browse,...je vous livre ci après ma réflexion à ce sujet elle vaut ce qu'elle vaut:...en tous les cas elle m'a permis d(éclairer mes zônes d'ombres...
L'aide vfp6.0 n'en parle que très peu et ne donne aucun exemple de manipulation de cette fenêtre( si ce n'est "define window" en lui même).
Une fenêtre définie par [define window] est une entité gardée en mémoire et dessinée sur l'écran avec certaines données paramétrables,mais qui ne dispose ni de propriétés, ni de méthodes,et ne réagit quà très peu d'évènements (show,hide,activate,resize manuel...),proprement dit.
Elle ne devient un véritable objet que si on lui attribue un 'name' et à ce titre elle est manipulable comme tous les objets de la programmation orientée objet (le form en est un).
Il faut alors lui définir des propriétés et des méthodes avec "define class".....cela a dû donner,je suppose , la création du form de vfp.
Ce form dispose de propriétés ,de méthodes,de parent,de child... et réagit aux évènements.
Par la richesse de ces bagages,le form a supplanté la fenêtre 'define window' à priori qui ne sert pas à grand chose !
Ce que généralement on ne sait pas , c'est qu'à cette fenêtre "obligatoirement nommée",on peut ajouter des objets et les manipuler mais en utilisant les définitions de classes (define class).
J'ai monté ci après un exemple illustrant cela.
-Définir une fenêtre avec "define window"
-Récupérer le contenu d'un fichier texte ,créer un editbox et le remplir
-Récupérer une image et en créer une sur la fenêtre.
-Ajouter un bouton cliquable
-Ajouter un label qui change de couleur
-Ajouter une image qui inter-réagit avec le label créé.
-Ajouter un olecontrol (médiaplayer WMPayer.OCX.7 en full mode)+bouton (open média)
-Changer la couleur ,l'alignement de l'éditbox
Bien entendu les propriètés,méthodes,évènements du form ne sont pas applicables à cette fenêtre car non définies.
mais pourquoi donc n'a t on pas défini une classe fenêtres directement au lieu de s'embarquer dans les "define window" ?
Code source :
*YOUSFI BENAMEUR El Bayadh le 11 juin 2008 benameuryousfi1@gmail.com
clea all
publi ywin
clString=filetostr(getfile('txt')) &&un fichier txt qqe
xpict=getpict() &&une image qqe ********************************************************* CLEAR DEFINEWINDOW yWindow FROM 1,1 TO 40,120 TITLE 'Test de manipulation fenêtre <define window> benameuryousfi1@gmail.com'; font"Courrier ",10 ; SYSTEMCLOSEFLOATGROWZOOMinDesktopname ywin ACTIVATEWINDOW yWindow
aa="fenêtre créée: top="+allt(str(ywin.top))+" left="+allt(str(ywin.left))+" width="+allt(str(ywin.width))+" height="+allt(str(ywin.height) )
ywin.print(aa)
with ywin.ymediaplayer1
.settings.autoStart = .f.
.settings.volume=50
.settings.mute=.f.
.Uimode="full"&&"none"
.enableContextMenu=.f.
.settings.setMode("loop",.t.) &&boucle endwith *******************
ywin.addobject("command2","zcommandbutton") with ywin.command2
.left=ywin.ymediaplayer1.left+ywin.ymediaplayer1.width+5
.top=ywin.ymediaplayer1.top
.width=80
.height=20
.fontsize=8 endwith *********************** inkey(3) WAITWINDOW'Appuyez sur une touche pour masquer la fenêtre ywindow' HIDEWINDOW ywindow WAITWINDOW'Appuyez sur une touche pour afficher la fenêtre ywindow' SHOWWINDOW ywindow inkey(2) ifmessagebox("Voulez vous supprimer la fenêtre ywindow?",4+64,"Suppression")=6 RELEASEWINDOW ywindow
endi ********************************************** defineclass ycommandbutton ascommandbutton left=10 top=15 width=80 height=24 caption="click me" visible=.t. name="command1"
procedureclick
al=ywin.edit1.alignment
al=al+1 if al>2
al=0
endi waitwindow ("l'alignement editbox sera :"+str(al) ) timeout 0.5
ywin.edit1.alignment=al if ywin.edit1.forecolor<=1670000-150000
ywin.edit1.forecolor=ywin.edit1.forecolor+150000 else
ywin.edit1.forecolor=0
endi endproc enddefine ********************************************** defineclass yimage asimage left=20 top=ywin.edit1.top+ywin.edit1.height+5 width =200 height=150 stretch=2 visible=.t. picture=xpict name="image1"
proceduremousemove lparameters nbutton,nshift,xcoord,ycoord if nbutton=0 waitwindow ("Mousemove me!") nowait if ywin.label1.backcolor<=16700000-150000
ywin.label1.backcolor=ywin.label1.backcolor+150000 else
ywin.label1.backcolor=0
endi
endi endproc enddefine *********************************************
DEFINE WINDOW existe depuis la version DOS de Fox : à l'époque c'était extraordinaire : non seulement on pouvait faire des applications multifenétrées, mais la gestion de la souris était parfaite (avec même le clic droit ...), listbox, combobox, boutons radio, cases à cocher, ..... ... Combien d'appli DOS fonctionnent encore parce que Windows ne leur apporte rien ? (2 chez moi !) . Et même sous UNIX avec FPU 2.6 !!!!!!!
Alors si cette commande existe encore c'est surtout pour la compatibilité ascendante et .. pour les vieux développeurs qui n'ont pas encore acquis l'orienté objet !
Jean
le 12/06/2008, ybenam a écrit : Merci Jean pour cet éclairage . Je me suis douté de la compatibilité ascendante qui est un principe de tous les langages pour préserver la clientèle,mais il arrive un moment où il faut délester (langage d'électricien)...car la nomenclature du langage devient trop lourde .On le remarque dans le foxHelp VFP6.0 où un pourcentage très significatif du langage est pour la compatibilité ascendante... Porte toi bien !
C'est historique !
DEFINE WINDOW existe depuis la version DOS de Fox : à l'époque c'était extraordinaire : non seulement on pouvait faire des applications multifenétrées, mais la gestion de la souris était parfaite (avec même le clic droit ...), listbox, combobox, boutons radio, cases à cocher, ..... ... Combien d'appli DOS fonctionnent encore parce que Windows ne leur apporte rien ? (2 chez moi !) . Et même sous UNIX avec FPU 2.6 !!!!!!!
Alors si cette commande existe encore c'est surtout pour la compatibilité ascendante et .. pour les vieux développeurs qui n'ont pas encore acquis l'orienté objet !
Jean