FoxPro/Visual FoxPro - Doble textro en HEADER de grid

   
Vista:

Doble textro en HEADER de grid

Publicado por Juan Miguel Solis solis.juanmiguel@gmail.com (79 intervenciones) el 24/09/2013 21:41:37
Hola a todos

Tengo una duda/pregunta pro si alguien sabe si se peude hacer, os comento.

Tengo un grid en el que el HeaderHeight tiene30 de altura, y quiero poner en el caption de header de una columna algo asi como :

COMPRA
Nº Ofertas

Asi una encima de otro.

Esto se pedue hacer ?? como ??

Estoy en VFP 6.0

Gracias de antemano y un saludo.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Doble textro en HEADER de grid

Publicado por Fidel (558 intervenciones) el 25/09/2013 00:14:38
Juan Miguel:
No recuerdo si el header de VFP 6.0 tiene wrap. Probá un código como el siguiente (lo uso en VFP9)
with thisform.grid1
.HeaderHeight=30
.Setall("WordWrap",.t.,"Header")
.Setall("Fontsize",8,"Header")
.Columns[1].Header1.Caption="Fecha de Emisión"
.Columns[2].Header1.Caption="Número de Cheque"
.Columns[3].Header1.Caption="Banco Girado Cheque"
endwith
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Doble textro en HEADER de grid

Publicado por Juan Miguel solis.juanmiguel@gmail.com (79 intervenciones) el 25/09/2013 12:55:00
Hola Fidel

Gracias, en VFP 6.0, no veo esa propiedad :(:(, no hay otra manera de hacerlo ??, he probado poniendo algo asi como grid1.column1header.caption = 'COMPRA' + &CRLF + 'Nº Ofertas' , el campo CRLF era igual a CHR(13) + chr(10), pero nada no funciona :) :).

Bueno muchas gracias de todas maneras :) :)

Un saluo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Doble textro en HEADER de grid

Publicado por Fidel (558 intervenciones) el 25/09/2013 17:15:37
No le veo solución fácil en VFP 6. El header de por sí es bastante limitado.
Creo que el único objecto que tiene WordWrap es el Label, por lo que podés hacer una clase container que sustituya de alguna manera el Header del grid.

Lo que sigue funciona, aunque no es totalmente prolijo.
La estrategia es crear una clase Container que contiene otros Container, cada uno con un label. Estos tomarán su apariencia del header del control grid que se indique como propiedad.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
* Agregar una clase container en una Biblioteca Vcx
* Nombre de Clase: "CntHeader"
* BaseClass="Container"
* ------------------------------------------
* Agregar a la clase Container CntHeader creada:
*    una propiedad nombre: "ObjGrid"
*    un Método - Nombre: "gControl"
* ------------------------------------------
 
* Evento Init de la Clase Container CntHeader
* -------------------------------------------
this.objgrid=null
this.BackStyle= 0
this.BorderWidth=0
 
* Método gControl de la Clase Container CntHeader
* -----------------------------------------------
LOCAL nleft,ncol,nwidth,objNew,;
	lnAlig,lnLabel,lcName
 
IF ISNULL(this.objgrid)
	RETURN
ENDIF
 
nCol=this.objgrid.columncount
this.Height=This.objGRid.Headerheight
nLeft=1
FOR i=1 TO nCol
	lcName="Cnt"+TRANSFORM(i)
	this.NewObject(lcName,"Container")
	objNew=this.&lcName
	nWidth=this.objgrid.columns[i].width
	lnAlig=this.objgrid.Columns[i].Header1.alignment
	lnLabel=2
	DO case
		CASE INLIST(LnAlig,0,4,7)
			lnLabel=0
		CASE INLIST(lnAlig,1,5,8)
			lnLabel=1
		CASE INLIST(lnAlig,2,3,6,9)
			lnLabel=2
	ENDCASE
 
 
	WITH objNew
		.Height=this.Height-1
		.Top=1
		.left=nLeft
		.Width=nWidth
		.SpecialEffect=0
		.BackColor=this.objgrid.columns[i].Header1.backcolor
 
		.visible=.t.
	ENDWITH
	nLeft=nLeft+nWidth+1
	objNew.Newobject("Label1","Label")
	WITH objNew.Label1
		.top=1
		.left=1
		.Height=objNew.Height
		.Width=objNew.Width
		.BAckstyle=0
		.ForeColor=this.objgrid.Columns[i].Header1.foreColor
		.FontBold=this.objgrid.Columns[i].Header1.FontBold
		.FontName=this.objgrid.Columns[i].Header1.FontName
		.FontSize=this.objgrid.Columns[i].Header1.FontSize
		.Alignment=lnLabel
		.WordWrap=.t.
		.Caption=this.objgrid.Columns[i].Header1.Caption
		.visible=.t.
	ENDWITH
NEXT
WITH this
	.Width=nleft+1
	.top=.objgrid.top-.Height-1
	.objgrid.Headerheight=0
	.left=IIF(.objgrid.deleteMark,15,10)+.objgrid.left
ENDWITH
*------------------------------------------------------
* Guardar la clase Container CntHeader
* -----------------------------------------------------
 
* En el formulario de que se trate, crear el control grid normalmente
* Agregar al formulario el objeto container CntHeader (que se llamará CntHeader1)
* Luego, suponiendo que el control grid se llama "Grid1"
 
thisform.cntheader1.objgrid=thisform.grid1
thisform.cntheader1.gcontrol()

PD:
Los containers incluidos en la clase Cntheader, se pueden crear como clase con su label y pueden tener una propiedad que referencie a qué columna pertenecen. Con eso se puede llegar a darle la funcionalidad del header (reacción al click y resolver el problema del redimensionamiento de las columnas, para lo cual habría que crear un método apropiado).
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Doble textro en HEADER de grid

Publicado por Juan Miguel Solis solis.juanmiguel@gmail.com (79 intervenciones) el 25/09/2013 21:59:07
Hoal Fidel

Gracias por tu contestacion, es interesente :) :) le echare un vistazo y ver si lo veo claro.

Muchas gracias por la ayuda.

Un saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar