Visual Foxprogram

Encuentra una gran variedad de ejemplos prácticos que pueden ser útiles para el desarrollo de tu trabajo.

Visual Foxprogram

Podrás encontrar la herramienta necesaria para solucionar tu problema.

Visual Foxprogram

No olvides suscribirte a la página.

Visual Foxprogram

Podrás en contrar ejemplos de clases, creaciones de Menu estilo CSS,crear reportes PDF.

Visual Foxprogram

Todas las Herramientas en un solo sitio VISUAL FOXPROGRAM.

domingo, 20 de agosto de 2023

Como utilizar una matriz 3D en vfp

Matriz en 3D




Este código implementa una forma creativa de emular una matriz tridimensional usando solamente un array unidimensional y una matriz bidimensional en VFP. La clave está en mapear cuidadosamente las posiciones de la matriz 3D deseada a elementos individuales del array 1D.


Primero se declara un array1d con el tamaño total de elementos que contendría la matriz 3D, en este caso 10 x 20 x 30 = 6000. Luego se declara una matriz2d de 10 x 20 que se usará para acceder a las posiciones de la matriz 3D emulada.


Se inicializa un contador pos que se usará para indexar incrementalmente el array1d. También se inicializa valor para ir asignando valores secuenciales a cada elemento del array.


Mediante dos ciclos anidados se recorren las filas y columnas de la matriz2d. En cada iteración se asigna el valor actual a la posición pos en el array1d. Luego se incrementa valor y pos para seguir asignando a las siguientes posiciones.


Además se asigna pos como el valor actual en la matriz2d. Esto sirve para mapear cada elemento de la matriz 3D a una posición en el array 1D.


Luego para acceder a un elemento en particular de la matriz 3D, se utilizan sus coordenadas (fila, columna, profundidad) para obtener la posición mapeada en la matriz2d. Ese valor se usa entonces para indexar directamente el array1d.


Al final se valida imprimiendo todos los valores asignados en el array1d, donde deberíamos ver los números de 1 a 6000. Esto confirma que cada posición se mapeó correctamente.

En resumen, este algoritmo permite emular matrices 3D de forma eficiente en VFP utilizando tan solo un array y una matriz. Aprovecha la indexación directa de arrays unidimensionales para simular el acceso a una estructura tridimensional. ¡Una gran muestra de creatividad e innovación! 

Local array1d[6000]

Local matriz2d[10, 20]

Local pos, valor

valor = 1

pos = 1

For i=1 To 10

For j=1 To 20

array1d[pos] = valor

valor = valor + 1

matriz2d(i,j) = pos

pos = pos + 1

Endfor

Endfor

* Acceder elemento (6,10,15)

elem = matriz2d(6,10)

pos = elem

? array1d[pos]

For i=1 To 6000

If !Empty(array1d[i] )

? array1d[i]

Endif

Endfor

sábado, 19 de agosto de 2023

Como utilizar el ADIR en VFP

 Utilizando las funciones ADIR y ERASE en Visual FoxPro se puede implementar rutinas powerful para administrar archivos y directorios.

Por ejemplo, el código muestra cómo obtener una lista de los archivos PDF en un directorio y luego borrar selectivamente algunos archivos según cierta condición. Primero se limpia la variable aFiles con CLEAR y se define la ruta del directorio a escanear en cDir.

Luego la función ADIR se encarga de llenar la variable aFiles con la lista completa de archivos y subdirectorios en ese path. El tercer parámetro "D" indica que sólo nos interesan archivos y no subcarpetas. aFiles queda como una matriz bidimensional con el nombre de cada archivo PDF.

Después se itera sobre cada elemento de aFiles con un bucle FOR de 1 a nTotF, siendo éste el número total de archivos encontrados. Dentro del loop se construye la ruta completa de cada archivo combinando cDir + nombre y se almacena en cFullPath.

Aquí es donde entra en acción ERASE, borrando el archivo si su nombre es distinto a "BARRAS2.PDF". La ventana WAIT sirve para ir mostrando cada borrado.

De esta manera, en muy pocas líneas de código se logra escanear un directorio, identificar archivos según un patrón y luego ejecutar acciones sobre ellos como borrar. Esto sería mucho más laborioso sin funciones como ADIR y ERASE.

VFP incluye muchas otras funciones para trabajar con archivos y carpetas, como FILETOSTR(), STRTOFILE(), FCREATE(), DIRECTORY(), ANAME(), ASIZE(), ADATE(), etc. Que combinadas creativamente permiten automatizar tareas de gestión de archivos en Windows de manera rápida y potente.

CLEAR

cDir = "c:\SIGEM\pdf\"

nTotF = ADIR(aFiles, cDir + "\*.pdf", "D")

For i = 1 To nTotF

  cFullPath = cDir + aFiles[i,1]

  IF aFiles[i,1] <> "BARRAS2.PDF" 

    ERASE (cFullPath)

    WAIT WINDOW "BORRANDO "+aFiles[i,1] AT 14,55  TIMEOUT 0.1

  ENDIF

Next


martes, 8 de marzo de 2022

Como Validar DatePicker Parte 2

 Siguiendo en la onda de Datepicker, he aquí un pequeño ejemplo creado por 

Baldo Martorell Pérez en el año 2014.

Partiendo del diseño de Baldo, decidí agregarle un campo adicional el cual me permita seleccionar la opción de Acumulado o diario y dependiendo de la opción el sistema seleccionará el archivo el cual desee seleccionar.


Este tipo de selección las hago cuando comparo los archivo de ventas, de esta forma podré saber las ventas realizadas sen fechas anteriores.

Una vez que el usuario introduzca la opción deseada se mostrará la imagen que aparece a continuación permitiendo seleccionar la fecha inicial a consultar, posteriormente deberás indicar la fecha final la cual quieres consultar y se desplegará nuevamente la figura anterior.

De igual manera podremos validar la fecha la cual introduzca el operador, si la fecha final  es menor que la fecha inicial el sistema generará un mensaje de error indicando por que fué el error. Una vez que hayas indicado las fechas a consultar presionan el Botón Aceptar.





martes, 1 de marzo de 2022

Como Validar DatePicker en VFP

 Este artículo describe cómo utilizar el control DateTimePicker en Visual FoxPro.

He usado el control ActiveX Microsoft Date and Time Picker (DTPicker). Ayer me encontré con un tema interesante. En primer lugar, algunos antecedentes. Soy un gran admirador de Visual Foxpro y lo uso en muchos proyectos con gran éxito, pero recientemente, para un nuevo proyecto, asi que tuve que hacer un uso intensivo de secuencias de comandos en VFP 9 para lograr el objetivo, así que tuve que sumergirme en él para hacer las cosas y crear una clase que me permitiera validar los 2 campos al introducir la fecha a consultar. El objetivo de la clase es que el usuario no introduzca fechas erróneas en el sistema para realizar una consulta específica al introducir los datos.Así que este es el resultado de todo ese trabajo... El problema era que no había buenos selectores de fechas disponibles para VFP.

Puedes usar un DateTimePicker en VFP para este propósito; permite configurar la apariencia del objeto DatePicker utilizado internamente por los controles de Visual foxpro 9, así como la de un cuadro de texto (y otros controles). 

Afortunadamente, VFP tiene varias funciones que retornan los formatos de fechas. SET("DATE") retorna valores como MDY o American para el formato MM/DD/AAAA, DMY o BRITISH para el formato DD/MM/AAAA, y así sucesivamente. SET("MARK") retorna el carácter que separa las partes de la fecha (como por ejemplo "/" o "-"). La función devuelve una cadena como "12/01/2022". El primer paso para hacer esto es leer el archivo en un búfer en la memoria y convertirlo a un valor de fecha: /* * Para obtener la fecha en el formato especificado, use la siguiente sintaxis: * - Este ejemplo mostrará la fecha actual en el formato MM/DD/AAAA.Este ejemplo mostrará la fecha formateada DD/MM/AAAA.Ahora,si por alguna razón el usuario coloca una fecha errónea el programa te enviará un mensaje de error especificando que se introdujo una fecha errónea permitiéndole al usuario poder modificar la fecha la cual desea consultar.

Adicionalmente podrás disfrutar de una clase de botón totalmente diferente a los ya existente.


El control DateTimePicker le permite proporcionar un campo de fecha y con formato que permite una fácil selección de fecha. Además, los usuarios pueden seleccionar una fecha desde una interfaz de calendario desplegable similar al control MonthView. También puede configurar la fecha y/o la hora actual utilizando las flechas hacia arriba y hacia abajo a ambos lados del campo, así como ingresar su propio valor de fecha personalizado directamente en el campo escribiéndolo en el cuadro de texto junto al control (como mostrado a continuación). Control Selector de fecha y hora Estos son algunos ejemplos de cómo se puede utilizar este control: Muestre la información actual de fecha,en una aplicación VFP. Agregue un nuevo registro y permita que el usuario ingrese una fecha especificando el año, mes, día y año usando las flechas hacia arriba y hacia abajo en el lado derecho del control: Incluir un selector de fecha en un formulario.










El siguiente archivo está disponible para su descarga desde el Centro de descarga de MediaFire.




jueves, 8 de abril de 2021

Como crear un Efecto CSS con VFP


Como crear un Efecto CSS con VFP




En este pequeño ejemplo se muestra la manera de cómo podemos crear unos Pequeños trucos para poder emular esos efectos CSS que tanto nos llama la atención y muchas veces queremos implementarlos en nuestros sistemas. 
Lo bueno es que hoy día no necesitas recurrir a complejos sistemas para conseguir menús vistosos en VFP, sino que unos simples trucos podremos crear grandes animaciones para nuestros sistemas.
Cuando el ratón se mueve a los elementos especificados, se desplegará una barra de manera horizontal en el menú.
Existen muchas formas de crear estos efectos CSS para VFP, yo decidí hacerlo de esta forma y espero les sirva.

El el Procedimiento INIT colocaremos las siguientes instrucciones:

thisform.container1.shape3.Visible =.f.
thisform.container1.shape4.Visible =.f.
thisform.container1.image1.Visible =.f.
thisform.container2.edit1.Value ="El ejemplo de este programa es para mostrar otra forma de poder crear Menu al estilo de CSS con VFP."+CHR(13)+"El programa lo podràs modificar y ajustar a tus necesidades."+;
""+CHR(13)+"Desplaza el mouse sobre las etiquetas y podràs notar el efecto que hace."

Creamos un método llamado movimiento y colocamos lo siguiente:
FOR xleft=0 TO 237 step 0.03
   thisform.container1.shape3.Width  =xleft 
next










jueves, 8 de octubre de 2020

Como Colorear la Fila de ListBox Segun su Condicion

 

En el siguiente artículo nos hemos centrado en explicar cómo mostrar  los campos de una Lista en  colores combinados. Muchos de nosotros  hemos tenido la intención de querer nuestras listas con colores combinados, la cual nos permitan el poder visualizar los registros de una manera distinta a la cual nos tiene acostumbrado  VFP .

Conseguir esos efectos es muy sencillo, tal  como se muestra en la siguiente imagen.



En el Evento Init

PUBLIC P_list

thisform.list1.RowSource =P_list

thisform.list1.RowSourceType = 9

thisform.list1.Requery

En el Evento Load

Create Table prueba Free (codigo c(5),nombre c(25))

Select prueba

Append Blank

Replace codigo With "00001"

Replace nombre With "Producto 1"

Append Blank

Replace codigo With "00002"

Replace nombre With "Producto 2"

Append Blank

Replace codigo With "00003"

Replace nombre With "Producto 3"

Append Blank

Replace codigo With "00004"

Replace nombre With "Producto 4"

Append Blank

Replace codigo With "00005"

Replace nombre With "Producto 5"

Append Blank

Replace codigo With "00006"

Replace nombre With "Producto 6"

Append Blank

Replace codigo With "00007"

Replace nombre With "Producto 7"

Append Blank

Replace codigo With "00008"

Replace nombre With "Producto 8"

x=1

Define Popup P_list

Go Top

Do While !Eof()

            If Mod(x,2)=1

                        Define Bar x Of P_list ;

                        Prompt codigo+"  "+nombre;

                                   FONT "Arial",14 Style "BI";

                                   COLOR , Rgb(216,216,216,0,0,160)

            else

                Define Bar x Of P_list ;

                        Prompt codigo+"  "+nombre;

                                   FONT "Arial",14 Style "BI";

                                   COLOR , Rgb(216,216,216,110,124,154)

            ENDIF          

            Skip

            x=x+1

ENDDO

Espero que este artículo ayude en gran medida a todos aquellos Foxeros que siempre han tenido esta inquietud de poder colorear una Lista.

 


domingo, 3 de mayo de 2020

Ejemplos Treeview en VFP

El siguiente programa muestra cómo mostrar una tabla en un Treeview en un formulario en Visual Foxpro. En esta ocasión puedes ver cómo puedes mejorar el diseño del Treeview a través de la visualización de la tabla que se muestra en la pantalla mediante este pequeño ejemplo Treeview en VFP.

El programa utiliza dos archivos al respecto, el primero llamado tipos en donde crearemos los diferentes tipos de exámenes existentes en un laboratorio clínico, y el segundo archivo se denomina cla_exa en donde se incluyen los diferentes grupos a los que pertenecen los tipos de exámenes.


Observa como los títulos de cada uno de los diferentes grupos resaltan los nombres, dándole otro aspecto totalmente distinto a muchos ejemplos. El siguiente ejemplo podrás adaptarlo a tu programa y hacerles las correcciones necesarias.

En la parte inferior te estaré dejando el link de Descarga.






domingo, 16 de febrero de 2020

Cómo conocer los Datos de mi PC en VFP


Cómo conocer los Datos de mi PC en VFP .En ocasiones quisiéramos poder conocer los datos de mi PC y nos resulta un poco engorroso ya que tenemos que recurrir a ciertas aplicaciones en Windows para poder conocer esos detalles que en ocasiones requerimos para nuestros sistemas en cual estemos desarrollando. Mediante estos sencillos olecontrol podremos conseguir toda la información necesaria que necesitamos para poder obtener los datos de mi pc.

Con la utilización de estos controles podemos obtener los requerimientos necesarios de nuestro equipo, tal es el caso como se muestra en la imagen inferior. Acá puedes ver como obtenemos el nombre del Dominio, usuario y el nombre nombre del equipo respectivamente, del mismo modo nos indica el tiempo de vida de la batería de nuestro equipo , el porcentaje, la dirección IP local y el puerto remoto.

Por otra parte también nos indica los puertos existentes en nuestro equipo, las impresoras instaladas, las unidades existentes y los recursos. Todo esto y mucho más podrás conseguirlo mediante el uso de estos controles.

En el evento load de tu formulario deberás crear el objeto 'Wscript.Network' en donde podrás extraer las informaciones sobre el Dominio, el usuario y el nombre del equipo.
Del mismo modo podremos conseguir la información requerida de nuestro PC sobre los distintos puertos existentes en nuestro equipo, así como, los nombres de las impresoras instaladas en nuestra computadora.

Además de estas informaciones, este programa te permite saber el tiempo de vida y porcentaje  de la batería de tu equipo, la IP local y el puerto remoto.

En la figura podrás notar como de manera automática aparecen los datos de tu PC.



En el Evento del init de tu formulario deberás colocar el siguiente código :


PUBLIC xdominio,xusuario,xnombrepc,op,od
CLEAR
thisform.Load 
thisform.text1.value =xdominio
thisform.text2.value =xusuario
thisform.text3.value =xnombrepc
thisform.list1.RowSource ="tempo.puerto,impre"
thisform.list1.RowSourceType =6
thisform.list1.Requery 
thisform.list2.RowSource ="tempo2.unidad,recurso"
thisform.list2.RowSourceType =6
thisform.list2.Requery 
thisform.text4.Value =thisform.olecontrol1.BatteryStatus
thisform.text5.Value =thisform.olecontrol1.BatteryLifePercent
thisform.text6.Value =thisform.olecontrol2.LocalIP
thisform.text7.Value =thisform.olecontrol2.RemotePort
thisform.Refresh 

En el evento Load debes indicar las siguientes instrucciones :

Set Mouse On
Set Sticky Off
Set Bell On
Set Talk Off
Set Scor Off
Set Escape Off
Set Date To british
Set Safety Off
Set Confirm On
Set Sysmenu Off
Set Mouse On
Set Sticky Off
o = CREATEOBJECT('Wscript.Network')
xdominio=o.UserDomain
xusuario=o.UserName
xnombrepc=o.ComputerName
oP = o.EnumPrinterConnections
CREATE TABLE tempo  free(puerto c(25),impre c(25))
FOR i = 0 TO oP.COUNT-1 STEP 2
  p1=oP.ITEM(i)
  imp=oP.ITEM(i+1)
  INSERT INTO tempo(puerto,impre) values(p1,imp)
ENDFOR
CREATE TABLE tempo2 free(unidad c(25),recurso c(25))
*Unidades de Red
oD = o.EnumNetworkDrives
FOR i = 0 TO oD.COUNT-1 STEP 2
  uni=oP.ITEM(i)
  rec=oP.ITEM(i+1)
  INSERT INTO tempo2(unidad,recurso) values(uni,rec)
ENDFOR
thisform.refresh

En la parte inferior de la imagen estará el Link de Descarga del programa