FoxPro/Visual FoxPro - Insertar imagelist

   
Vista:

Insertar imagelist

Publicado por Ruben (56 intervenciones) el 19/11/2014 00:02:13
Buenas Noches

Como puedo insertar un imagelist en visual foxpro, tengo entendido que es un contenedor de imágenes. Es correcto?

Otra pregunta como puedo insertar por medio de comandos un control image, asi como se crea una grilla desde 0 en programación se podría crear un image

Saludos
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

Insertar imagelist

Publicado por Fidel José (558 intervenciones) el 19/11/2014 23:46:22
A los efectos de estudiar el problema y buscarle la mejor solución, puedes practicar con este código.
La idea es agregar un container al formulario y colocar dentro del container todas las imágenes que se necesita mostrar. Como el container se remueve en cada gestión de imágenes, todos los objetos image colocados en el container desaparecen.
Acá he buscado una alineación automática de izquierda a derecha y de arriba hacia abajo.

Seguramente no será exactamente lo que buscas, pero este código te tiene que dar la pista sobre como conseguir lo que buscas.

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
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
*!*	Se necesita agregar al formulario
*!*	Una propiedad llamada "MyFolder"
*!*			Uso opcional, si es necesario buscar
*!*				manualmente las carpetas
*!*
*!*	Un Método llamado "pickFolder"
*!*	Un Método llamado "InsertImage"
 
*!*	<Form.Init>
*!*	Esto se puede agregar en el cuadro de propiedades
*!*
*!*	ADDPROPERTY(thisform,"MyFolder",FULLPATH(""))
*!*	</Form.Init>
*!* --------------------------------------------------------------------------
 
*<Inicia_el_procedimiento>
* Esta llamada se colocará en el punto donde se conozca la carpeta de imágenes.
LOCAL lcFolder
lcFolder="c:\temp\flia002"
thisform.pickfolder(lcFolder)
 
*</Inicia_el_procedimiento>
 
*!*	<Metodo = "pickFolder" />
LPARAMETERS tcFolder
* tcFolder es una carpeta que contiene imágenes
LOCAL lcFolder,lnFiles,i,;
	loResp as Object
 
* Control de parámetro
* Si no se pasó o es inválido, intenta la búsqueda por
* explorer.
 
lcFolder=IIF(VARTYPE(tcFolder)="C",tcFolder,"")
IF EMPTY(lcFolder) OR !DIRECTORY(lcFolder)
	lcInFolder=EVL(this.myfolder,FULLPATH(""))
	lcFolder = GETDIR(lcInFolder,"Seleccione Carpeta","Imágenes Familia",48)
ENDIF
IF EMPTY(lcFolder)
	RETURN
ENDIF
 
this.myfolder=lcFolder
 
*<LimpiaImagesAnteriores>
IF PEMSTATUS(this,"cntImage",5)
	this.removeObject("CntImage")
ENDIF
*</LimpiaImagesAnteriores>
 
 
* Lectura de archivos de la carpeta lcFolder
* En este caso supongo que las imágenes son bmp.
lnFiles=ADIR(gaFiles,ADDBS(lcFolder)+"*.bmp")
IF lnFiles=0
	MESSAGEBOX("No hay imágenes en "+lcFolder,0,"Mensaje")
	RETURN
ENDIF
 
 
this.NewObject("cntImage","Container")
WITH this.cntImage
	.top=200
	.left=20
	.Width=this.Width- .left * 2
	.Height=this.Height - .top - 20
	.BackStyle=1
	.BackColor=RGB(255,255,255)
	.BorderColor= RGB(114,136,141)
ENDWITH
 
FOR i=1 TO lnfiles
	loResp=this.insertimage(ADDBS(lcFolder)+gaFiles[i,1] , this.cntImage)
NEXT
WITH this.cntImage
	IF !ISNULL(loResp)
		.Height=loResp.Height
		.Width=loREsp.Width
	ENDIF
	.visible=.t.
ENDWITH
 
*!*	</Metodo>
 
 
*!*	<Metodo = "InsertImage" />
LPARAMETERS tcFileImage , toCont
 
IF VARTYPE(toCont)#"O"
	toCont=thisform
ENDIF
 
LOCAL lcNewImage,lnOrd , lnWidth ,lntop ,lnMax,;
	lnLeft,lnTopeWidth,lnMaxRight,;
	loIma as Object , loReturn as Object
 
loReturn=NEWOBJECT("Empty")
lntopeWidth=toCont.Width-	10
lcNewImage="AddImage1"
lnOrd=0
lnMaxRight=0
lntop=1
lnLeft=1
lnWidth=lnLeft
lnMax=0
*<Control_Nombre_posición>
FOR EACH ocontrol IN toCont.Controls
	IF oControl.baseclass="Image" AND LEft(oControl.name,LEN("AddImage"))=="AddImage"
		lcName=oControl.name
		lnOrd=VAL(CHRTRAN(lcName,CHRTRAN(lcName,"1234567890",""),""))+1
		lcNewImage="AddImage"+TRANSFORM(lnOrd)
		lnWidth= lnWidth + oControl.Width
		lnMaxRight = MAX(lnMaxRight , lnWidth )
		lnMax=MAX(lnMax,oControl.Height)
		IF lnWidth > lnTopeWidth
			lnTop=lnTop+lnMax
			lnWidth=lnLeft
			lnMax=0
		ENDIF
 
	ENDIF
NEXT
*</Control_Nombre_posición>
 
toCont.NewObject(lcNewImage,"Image")
IF PEMSTATUS(toCont,lcNewImage,5)
	loIma=toCont.&lcNewImage
	WITH loIma
		.picture=tcFileImage
		.Stretch=2
		IF lnWidth + .Width > lnTopeWidth
			.left = lnLeft
			.top = lnTop + lnMax
		ELSE
			.Left = lnWidth
			.top = lntop
		ENDIF
		.visible=.t.
	ENDWITH
ENDIF
 
IF toCont.baseclass="Container"
	ADDPROPERTY(loReturn,"Height",loIma.top + loIma.Height + 1)
	ADDPROPERTY(loREturn,"Width", MAX(lnMaxRight , loIma.left + loIma.width + 1))
ENDIF
 
RETURN IIF(toCont.BaseClass="Container",loREturn,null)
 
*!*	</Metodo>
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