Plateforme Level Extreme
Abonnement
Profil corporatif
Produits & Services
Support
Légal
English
Panel redimensionable
Message
 
À
18/01/2005 18:17:14
Humberto Ramirez
H. Ayuntamiento de Colima
Colima, Mexique
Information générale
Forum:
Visual FoxPro
Catégorie:
Autre
Versions des environnements
Visual FoxPro:
VFP 7 SP1
OS:
Windows XP SP2
Database:
Visual FoxPro
Divers
Thread ID:
00978359
Message ID:
00978364
Vues:
33
>Hola a todos. Tengo un formulario con un control Treeview y un Grid, a la izquierda y derecha respectivamente, pero deseo que el tamaño de cada uno sea adaptable por el centro, es decir, como el aspecto y funcionalidad que ofrece el explorador de Windows, que nos permite adaptar el tamaño del panel izquierdo de unidades y carpetas al colocar el mouse entre los dos páneles.
>
>No tengo idea qué control utilizar para ello y sería muy práctico y de gran ayuda si incorporo esa funcionalidad a mi formulario.
>
>Gracias de antemano.

Ha pasado un tiempo desde que lo hicimos, así que no recuerdo todos los detalles, pero creo pusimos un shape (simulando una linea gruesa vertical) entre ambos controles, ahora bien, no recuerdo (y como no recuerdo en que aplicación lo usamos no se por donde buscar) decía no recuerdo si usamos drag and drop o los eventos del mouse, pero ambos metodos te deberían resolver el problema.

Un ejemplo muy sencillo, usando un EditBox en lugar de treeview, pero la idea es la misma, sería
PUBLIC oform1

oform1=NEWOBJECT("form1")
oform1.Show
RETURN


	**************************************************
*-- Form:         form1 (c:\testsep.scx)
*-- ParentClass:  form
*-- BaseClass:    form
*-- Time Stamp:   01/18/05 04:13:02 PM
*
DEFINE CLASS form1 AS form


	Top = 0
	Left = 0
	Height = 184
	Width = 375
	DoCreate = .T.
	Caption = "Form1"
	mousedownatx = .NULL.
	Name = "Form1"


	ADD OBJECT grid1 AS grid WITH ;
		Height = 137, ;
		Left = 159, ;
		Top = 11, ;
		Width = 211, ;
		Name = "Grid1"


	ADD OBJECT edit1 AS editbox WITH ;
		Height = 137, ;
		Left = 5, ;
		Top = 11, ;
		Width = 148, ;
		Name = "Edit1"


	ADD OBJECT command1 AS commandbutton WITH ;
		Top = 151, ;
		Left = 285, ;
		Height = 27, ;
		Width = 84, ;
		Caption = "Exit", ;
		Name = "Command1"


	ADD OBJECT shape1 AS shape WITH ;
		Top = 11, ;
		Left = 153, ;
		Height = 137, ;
		Width = 7, ;
		MousePointer = 3, ;
		SpecialEffect = 0, ;
		Name = "Shape1"


	PROCEDURE command1.Click
		thisform.Release()
	ENDPROC


	PROCEDURE shape1.MouseUp
		LPARAMETERS nButton, nShift, nXCoord, nYCoord

		thisform.MouseDownAtX		= null
	ENDPROC


	PROCEDURE shape1.MouseMove
		LPARAMETERS nButton, nShift, nXCoord, nYCoord
		local lnX, lnY
		if nButton = 1 and not Isnull(thisform.MouseDownAtX)
			lnX						= thisform.MouseDownAtX - nXCoord
			if (thisform.Edit1.Width - lnX > 20) and (thisform.Grid1.Width + lnX > 20)
				this.Left		= this.Left - lnX
				thisform.Edit1.Width	= thisform.Edit1.Width - lnX
				thisform.Grid1.Width	= thisform.Grid1.Width + lnX
				thisform.Grid1.Left	= thisform.Grid1.Left - lnX
				thisform.MouseDownAtX	= nXCoord
			endif
		endif
	ENDPROC


	PROCEDURE shape1.MouseDown
		LPARAMETERS nButton, nShift, nXCoord, nYCoord

		if nButton = 1
			thisform.MouseDownAtX		= nXCoord
		endif
	ENDPROC


ENDDEFINE
*
*-- EndDefine: form1
**************************************************
Por supuesto hay muchas mejoras que se le pueden hacer, como por ejemplo en la linea
(thisform.Edit1.Width - lnX > 20) and (thisform.Grid1.Width + lnX > 20)
los valores para el Width Minimo de cada objeto esta "hardcoded" to 20, pero eso podría ser una propiedad de los objetos, el cursor para separar debería ser otro, yo use uno pre-definido por simplicidad, etc, esto es solo para que te des una idea
"The five senses obstruct or deform the apprehension of reality."
Jorge L. Borges?

"Premature optimization is the root of all evil in programming."
Donald Knuth, repeating C. A. R. Hoare

"To die for a religion is easier than to live it absolutely"
Jorge L. Borges
Précédent
Suivant
Répondre
Fil
Voir

Click here to load this message in the networking platform