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

A PROPOS DES FENETRES "DEFINE WINDOW"   



L'auteur

ybenam
Algérie Algérie
Membre Simple
# 0000002080
enregistré le 21/04/2008


Fiche personnelle


Note des membres
pas de note

Contributions > 02 - SCX : Formulaires

A PROPOS DES FENETRES "DEFINE WINDOW"
# 0000000616
ajouté le 12/06/2008 00:49:36 et modifié le 12/06/2008
consulté 7948 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
DEFINE WINDOW yWindow FROM 1,1 TO 40,120 TITLE 'Test de manipulation fenêtre <define window> benameuryousfi1@gmail.com';
   font "Courrier ",10 ;
   SYSTEM CLOSE FLOAT GROW ZOOM in Desktop name ywin
ACTIVATE WINDOW 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)

ywin.addobject("command1","ycommandbutton")
ywin.addobject("label1","label")

with ywin.label1
.left=ywin.command1.left+ywin.command1.width+10
.top=ywin.command1.top
.width=300
.height=24
.fontbold=.t.
.fontname="Monotype corsiva"
.fontsize=16
.forecolor=255
.backcolor=rgb(0,255,255)
.caption="Test de manipulation Fenêtre créée avec <define window>"
.autosize=.t.
.visible=.t.
endwith

ywin.addobject("edit1","editbox")
with ywin.edit1
.ALIGNMENT=2
.left=.parent.left+10
.top=.parent.top+28
.width=.parent.width-20
.height=.parent.height-.parent.command1.height-200
.value=clString
.visible=.t.
endwith

ywin.addobject("image1","yimage")
*****************
ywin.addobject("ymediaplayer1","ymediaplayer")

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)
WAIT WINDOW 'Appuyez sur une touche pour masquer la fenêtre ywindow'
HIDE WINDOW ywindow
WAIT WINDOW 'Appuyez sur une touche pour afficher la fenêtre ywindow'
SHOW WINDOW ywindow
inkey(2)
if messagebox("Voulez vous supprimer la fenêtre ywindow?",4+64,"Suppression")=6
RELEASE WINDOW  ywindow
endi
**********************************************
define class ycommandbutton as commandbutton
left=10
top=15
width=80
height=24
caption="click me"
visible=.t.
name="command1"

procedure click
al=ywin.edit1.alignment
al=al+1
if al>2
al=0
endi
wait window ("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
**********************************************
define class yimage as image
left=20
top=ywin.edit1.top+ywin.edit1.height+5
width =200
height=150
stretch=2
visible=.t.
picture=xpict
name="image1"

procedure mousemove
lparameters nbutton,nshift,xcoord,ycoord
if nbutton=0
wait window ("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 class ymediaplayer as olecontrol
oleclass="WMPlayer.OCX.7"
width=200
height=150
left=ywin.image1.left+ywin.image1.width+50
top=   ywin.image1.top
visible=.t.
name="ymediaplayer1"

enddefine


define class zcommandbutton as commandbutton
left=10
top=15
width=80
height=24
caption="Open média"
visible=.t.
name="command2"

procedure click
ywin.ymediaplayer1.url=getfile('mp3|wav|mpg|wmv|avi')
ywin.ymediaplayer1.controls.play()
endproc
enddefine
***********************************************
Commentaires
le 12/06/2008, Jean à Grenoble a écrit :
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

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 !


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