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, 16 de febrero de 2020

VFP Evitar Programa se Ejecute dos Veces


VFP Evitar Programa se ejecute dos Veces, este tema nos da la oportunidad de evitar que este tipo de situaciones ocurran y causen errores en el sistema. Esta función nos permitirá evitar este tipo de situaciones en el futuro. Con esta sencilla instrucción EJECUTAR /N nombre de programa.EXE, estaremos evitando que el programa se cargue más de una vez.



IF NOT F_ActivaWin("Calculadora")
    * Verifica que la calculadora no este cargada:
    RUN /N NOMBREDELPROGRAMA.EXE   
ENDIF

* Esta función se encarga de evitar la duplicidad del programa
*-----------------------------
FUNCTION F_ActivaWin(cCaption)
*-----------------------------
LOCAL nHWD
DECLARE INTEGER FindWindow IN WIN32API ;
STRING cNULL, ;
STRING cWinName

DECLARE SetForegroundWindow IN WIN32API ;
INTEGER nHandle

DECLARE SetActiveWindow IN WIN32API ;
INTEGER nHandle

DECLARE ShowWindow IN WIN32API ;
INTEGER nHandle, ;
INTEGER nState

nHWD = FindWindow(0, cCaption)


Otra alternativa para evitar este problema sería crear un archivo y crear una variable el cual nos indique si esta activa o no. En la ventana del Command de VFP Creamos el nombredelarchivo con la variable ACTIVA de tipo logic y guardamos los valores. Luego en la misma ventana del command utilizamos el replace ACTIVA with .t., ahora crearemos un prg en donde ejecutaremos el siguiente código:

Ejemplo

use nombredelarchivo alias nombredelarchivo
go top
xavtiva=activa
if xactiva=.t.
   messagebox("El programa ya fué cargado.",0+64,"Aviso")
  return .f.
else
  RUN /N CALC.EXE
endif

Cuando salgas del sistema deberás colocar la variable ACTIVA en falso nuevamente para que el programa se pueda ejecutar, utilizando la instruccion replace ACTIVA with .f.

lunes, 10 de febrero de 2020

Como saber el tiempo de encendido de mi computadora con Vfp

Como saber el tiempo de encendido de mi computadora con Vfp, esta es una rutina que nos permitirá saber cuánto tiempo lleva nuestro computador encendido de manera automática. Esta pequeña rutina hecha en VFP nos permitirá saber el tiempo que nuestro computador lleva encendido. También hemos agregado el control timer para poder hacerlo un poco mas elegante y poder ver cuando cambian los minutos en sus intervalos de 60 segundos.
Mientras usamos Windows, el sistema operativo mantiene un gran número de registros, de actividad, algunos simplemente con fines de monitoreo y otros para ayudarnos a corregir posibles problemas que puedan ocurrir mientras utilizamos la PC. Gracias a estos registros, es posible obtener todo tipo de datos sobre nuestro ordenador, como el tiempo que ha estado encendido continuamente sin apagarse o reiniciarse, lo que resulta muy útil, por ejemplo, para medir la estabilidad de un PC y saber con seguridad que no se reinicia de forma inesperada.

Deberás colocar en el evento init de tu formulario las siguientes instrucciones:


PUBLIC lngHours,lngMinutes,lngCount
CLEAR
STORE 0 TO lngHours,lngMinutes,lngCount
Declare integer GetTickCount in "KERNEL32" () As Long
local lngCount, lngHours, lngMinutes As Long
lngCount = GetTickCount()
lngHours = ((lngCount / 1000) / 60) / 60
lngMinutes =((lngCount / 1000) / 60) % 60
thisform.text1.value=PADL(ALLTRIM(STR(lngHours,2)),2,"0")
thisform.text2.value=PADL(ALLTRIM(STR(lngMinutes,2)),2,"0")


En el control del Timer1 en el evento Timer enmarcado con el circulo rojo, debes colocar las siguientes instrucciones:

lngCount = GetTickCount()
lngHours = ((lngCount / 1000) / 60) / 60
lngMinutes = ((lngCount / 1000) / 60) % 60
thisform.text1.value=PADL(ALLTRIM(STR(lngHours,2)),2,"0")
thisform.text2.value=PADL(ALLTRIM(STR(lngMinutes,2)),2,"0")
Thisform.Refresh

Esto permitirá que cada ves que el minuto cambie podrás observar el cambio de los minutos en la pantalla  mediante un ciclo repetitivo , de esa forma podrás ver como cambian los minutos y las horas en la pantalla.

En la parte inferior tendrás te dejaré el link en donde podrás descargar el programa totalmente gratis.













sábado, 8 de febrero de 2020

Como Usar Continue en VFP

Como Usar Continue en VFP, se utiliza después de que LOCATE logra encontrar un registro, para continuar la operación de LOCATE. CONTINUE mueve el puntero del registro al siguiente registro para el cual la expresión lógica especificada en el LOCATE anterior se evalúa a Verdadero (.T.).

CONTINUE hace que se vuelva a evaluar el último comando LOCATE. El programa comprueba si el nuevo valor contenido en cIniciales ya existe en el campo id_persona de otro registro. Si es así, FOUND( ) seguirá devolviendo el valor .T. y se volverá a ejecutar el código contenido en el bucle DO WHILE. Si el nuevo valor contenido en cIniciales es efectivamente único, FOUND( ) devolverá el valor .F. y la ejecución del programa continuará con la línea de código que figura a continuación de ENDDO.

CONTINUE puede repetirse hasta que se encuentre el final del archivo, o hasta que se alcance el final del ámbito especificado con LOCATE.

Si CONTINUE logra encontrar un registro, RECNO( ) devuelve el número de registro del mismo, FOUND( ) devuelve un valor de Verdadero (.T.), y EOF( ) devuelve un valor de Falso (.F.).

Si CONTINUE no logra encontrar un registro, RECNO( ) devuelve el número de registros de la tabla más uno, FOUND( ) devuelve Falso (.F.), y EOF( ) devuelve Verdadero (.T.).


SET TALK OFF SET CONFIRM OFF SET SAFETY off SET DELETED on Create Table vispre Free (i1 c(20),i2 c(20), i3 c(20),i4 c(20),i5 c(20), i6 c(20), i7 c(20) ) Set Devi To File "temp.txt" x=1 @ x,3 Say "Pais Continente" x=x+1 @ x,1 say REPLICATE("-",30) Select paises Go Top Do While !Eof() @ x,3 Say pais+" "+continente Skip Enddo Set Devi To Screen Select "vispre" Append From "temp.txt" Sdf Thisform.grid1.RecordSource="vispre" Go Top Thisform.Refresh Thisform.grid1.column1.text1.SetFocus






sábado, 20 de julio de 2019

Como Crear reporte en PDF desde Visual Foxpro


Reporte  PDF desde Visual Foxpro archivo Texto


Como Crear reporte en PDF desde Visual Foxpro, convierte tus reportes en algo distinto, destaca la manera de poder convertir tus reportes en PDF con esta magnifica herramienta Foxypreviewer , podrás enviarlos por correo electrónico y Mejorar el aspecto de tus reportes. Utilizaremos la herramienta Foxypreviewer para crear estos tipos de informes el cual nos brindan una mejor forma de poder presentar nuestros informes. Con Foxypreviewer son muchas las ventajas las cuales tenemos

En el init del Formulario
PUBLIC xhasta
xhasta=DATE()
Set Safety Off
sw=0
xdir_pdf = "c:/pdf"
IF DIRECTORY(xdir_pdf)
      thisform.Refresh 
ELSE
     MKDIR &xdir_pdf
     MESSAGEBOX("Creada Carpeta")

ENDIF
Create Table vispre Free (i1 c(20),i2 c(20), i3 c(20),i4 c(20),i5 c(20), i6 c(20), i7 c(20), i8 c(20), i9 c(20))
Set Devi To File "temp.txt"
SELECT poliza,tip_poli,as_cedula,as_nombre,as_fecexp FROM poliza INTO table "porvencer2" WHERE as_fecexp <=xhasta
unlock
x=0
xempresa="Tu Empresa"
xrif="J-000000000-0"
xdir="Direccion de la Empresa"
@ x,1 Say "EMPRESA  : "+xempresa
X=X+1
@ x,1 Say "Rif      : "+xrif
X=X+1
@ x,1 Say "Direccion: "+xdir
X=X+1

@ x,1 Say "REPORTE DE POLIZAS X VENCER : "+"    HASTA EL DIA : "+DTOC(XHASTA)
x=x+1
@ x,1 Say "Fecha    : " +Dtoc(Date())
x=x+1
@ x,1 say REPLICATE("-",115)
x=x+1
@ x,1 Say "Poliza Tipo de Poliza            Cédula          Nombre del Cliente         Fecha de Vencimiento"
x=x+1
@ x,1 say REPLICATE("-",115)
x=x+1
Select "porvencer2.DBF"
Go Top
Do While !Eof()
      @ x,1 Say poliza+" "+tip_poli+" "+as_cedula+" "+SUBSTR(as_nombre,1,32)+DTOC(as_fecexp)
      x=x+1
      If x>1000
            Set Devi To Screen
            Select "vispre"
            Append From "temp.txt" Sdf
            Set Devi To File "temp.txt"
            x=0
      Endif
      Skip
Enddo
@ x,1 say REPLICATE("-",115)
x=x+1
@ x,1 say ""
X=X+1
Set Devi To Screen
Select "vispre"
Append From "temp.txt" Sdf
Thisform.grid1.RecordSource="vispre"
Thisform.Refresh
Thisform.grid1.column1.text1.SetFocus








También te puede interesar : Menu estilo CSS

Como borrar y restaurar registros (Delete, Recall)


(Delete, Recall)



Retorna un valor lógico cuando el registro está marcado para ser borrado.
Sintaxis
DELETED ([cTableAlias | nWorkArea])

Si el registro está marcado para su eliminación, DELETED () devuelve true (.T.); de lo contrario, DELETED () devuelve false (.F.).

Los registros se pueden marcar para eliminar con DELETE y DELETE - SQL, y se pueden desmarcar con RECALL.

El siguiente ejemplo abre la tabla de clientes en la base de datos testdata. BORRAR: SQL se usa para marcar todos los registros para eliminación donde el campo de país contiene EE. UU. DELETED () se utiliza para mostrar todos los registros marcados para su eliminación.

Si se necesitara borrar o restaurar muchos registros una vez según su contenido, estos métodos no son prácticos. Se podrían borrar registros en un grupo para llevar a cabo operaciones de verificación como quitar registros obsoletos o eliminar  registros de una base de datos que se haya copiado a un archivo separado.

Desde los menús

Se pueden marcar registros para borrado o se puede eliminar la marca de borrado utilizando la consulta de actualización. Los criterios de selección de registros se especifica de la misma forma que en otras consultas, es decir, introduciendo condiciones en el esqueleto del archivo o en la caja de condiciones.

Desde este modo, se pueden borrar y restaurar registros en grupos según sus contenidos con las mismas órdenes DELETE y RECALL que se utilizaban para borrar registros individualmente. Se pueden identificar los registros que se requieren borrar y restaurar utilizando un filtro para especificar criterios de selección o añadiendo un ámbito  o una clausula FOR, o si la base de datos está ordenada o indexada una clausula WHILE en las órdenes.

Por ejemplo, se podrían marcar para su borrado todos los  clientes que no hayan realizado ningún pedido en dos(2) años con la siguiente orden:

Use cliente

Delete for date() – ultpedido > 750

Recall Desmarca los registros marcados para su eliminación en la tabla seleccionada.

Sintaxis

RECALL [Scope] [FOR lExpression1] [WHILE lExpression2] [NOOPTIMIZE]
   [IN nWorkArea | cTableAlias]

Especifica un rango de registros para recuperar. El ámbito predeterminado para RECUPERAR es el registro actual (SIGUIENTE 1). Solo se recuperan los registros que caen dentro del rango especificado. Las cláusulas de alcance son: ALL, NEXT nRecords, RECORD nRecordNumber y REST.

Para obtener más información sobre las cláusulas de alcance, consulte Cláusulas de alcance.

PARA lexpresion1

Especifica que solo se recuperan los registros para los cuales lExpression1 se evalúa como verdadero (.T.). Esta opción le permite filtrar registros no deseados. Rushmore Query Optimization optimiza RECALL FOR si lExpression1 es una expresión optimizable.

Para obtener el mejor rendimiento, use una expresión optimizable en la cláusula FOR. Para obtener más
Información, consulte CONFIGURAR OPTIMIZAR y Usar la optimización de consultas de Rushmore para acelerar el acceso a los datos.

Mientras lexpresion2

Especifica una condición por la cual los registros se recuperan mientras lExpression2 se evalúe como verdadero (.T.).

NOOPTIMIZAR

Impide que Rushmore optimice la RECUPERACIÓN Para obtener más información, consulte CONFIGURAR OPTIMIZAR y Usar la optimización de consultas de Rushmore para acelerar el acceso a los datos.

En nWorkArea | cTableAlias

Especifica el área de trabajo o el alias de la tabla afectados por el comando RECALL.

Utilice esta cláusula para especificar un área de trabajo o una tabla fuera del área de trabajo actual.

Puede usar REALL para recuperar registros, siempre y cuando que no haya emitido PACK o ZAP.

El siguiente ejemplo abre la tabla de clientes en la base de datos testdata. BORRAR: SQL se usa para marcar todos los registros para eliminación donde el campo de país contiene EE. UU.

Se muestran todos los registros marcados para su eliminación. RECALL ALL se utiliza para marcar todos los registros marcados para su eliminación.

CLOSE DATABASES
OPEN DATABASE (HOME(2) + 'data\testdata')
USE customer  && Opens Customer table

DELETE FROM customer WHERE country = 'USA'  && Mark for deletion
CLEAR
LIST FIELDS company, country FOR DELETED( ) && List marked records
RECALL ALL  && Unmark all records marked for deletion

viernes, 19 de julio de 2019

Copy File en Visual Foxpro


COPY FILE



Sintaxis
COPY FILE FileName1 TO FileName2

El comando COPY FILE copia un archivo de cualquier tipo <filename1> a <filename2>. 

Se utiliza esta orden para copiar un archivo de base de datos que contenga campos memo.

Las extensiones de archivo para ambos archivos deben ser especificadas. Los nombres de archivo se pueden sustituir con cualquier expresión de carácter, entre corchetes o variable de memoria precedida por un signo (&), que devuelve un nombre de archivo válido. Si <nombre de archivo2> ya existe, se sobrescribirá.

El comando COPY FILE copia solo el archivo especificado, no copia los archivos asociados. 

Por ejemplo, si COPY FILE se utiliza para copiar una tabla de base de datos (DBF), DBF entonces sólo los archivos se copian, no el archivo múltiple asociado índice (DBX), archivo de nota (.dbt) archivo de diccionario (. dbd), archivo de clave de cifrado DES3 (.dbf).

Al usar COPY FILE para copiar una tabla de base de datos cifrada, el archivo .dbf también debe copiarse o la tabla de destino no será accesible.

Las especificaciones <filename1> y <filename2> pueden contener caracteres comodín como * y? Por ejemplo, para copiar la tabla de remitentes de southwind (shippers.dbf) y el archivo de índice (shippers.dbx): copie el archivo "C: \ Lianja \ data \ southwind \ shippers. . * ".

Si usa COPY FILE para crear una copia de seguridad de una tabla que tiene un campo memo, un índice estructural o ambos, asegúrese de copiar los archivos .fpt y .cdx también.

Ejemplos de uso de Copy file

SET TALK OFF
SET STATUS OFF
SET CONFIRM ON
PUBLIC xorigen,xdestino,xruta
IF !DIRECTORY("C:\TEMP")
   mkdir("C:\TEMP")
endif
xruta="C:\TEMP\"
xorigen="copyfile.png"
xdestino=xruta+"copyfile.png"

DO Form copia WITH xorigen,xdestino

El programa te permite crear el directorio si no existe, si el directorio "TEMP" existe el guardará la información en esa carpeta y si es todo lo contrario entonces crea la carpeta "TEMP" en la unidad C: utilizando la instrucción mkdir("C:\TEMP").

Una vez creado el directorio asignamos los nombres de los archivos, los cuales deseamos copiar a las variables xorigen y xdestino y luego procedemos a llamar el formulario con los respectivo parámetros para que realice la copia que deseamos realizar.

Si el archivo existiera en la unidad especificada el programa preguntará si deseas reemplazar el archivo.


También te puede interesar como leer una bascula en visual foxpro

Te dejo a continuación el link de descarga en la parte inferior.







miércoles, 17 de julio de 2019

Como hacer Busquedas Coincidental

Búsqueda coincidental
Como hacer Busquedas Coincidental, este programa te permite realizar búsquedas en los tres campos de la tabla customer
mediante los campos Company, Contact, Title, en ellos te irán apareciendo todas aquellas palabras que coincidan durante la búsqueda.

A medida que vayamos escribiendo un texto para buscar, se filtra y se colorea el texto coincidente en cada registro de la grilla. Este efecto se logra con las propiedades DynamicForeColor y DynamicFontBold de cada columna.

Este código aparece en los ejemplos de visual foxpro que tienes en la ayuda y me tomé la libertad de realizar ciertos ajustes al programa y cambiarle un poco la apariencia. Funciona muy bien y es excelente para incluir en nuestros proyectos.

De igual forma también te puede interesar búsquedas múltiples .

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










Como leer una Bascula en Visual foxpro

Bascula en VFP
Programa que te permite leer el peso de la balanza la cual estés utilizando, este programa te permite comunicar con cualquier tipo de balanza la cual desees utilizar.

Por lo general casi siempre utilizan los mismos valores para comunicarse con la báscula o romana.

Esta pequeña aplicación la he implementado en supermercados, romanas para camiones, mataderos y siempre me ha funcionado. En algunos casos he tenido que cambiar los valores pero en donde lo vayas a implementar deberán tener el manual de instalación de la báscula en sí.

Para que el programa se ejecute deberás tener conectado la bascula al computador que vayas a utilizar por el Puerto COM.

Una vez que llames el programa desde tu formulario mediante la instrucción do form pesoromana , automáticamente el realiza la lectura del peso y te envía el valor obtenido a la variable el_peso y este valor será el cual deberás guardar en tu table.

En la carpeta existen dos(2) programas para que te permita configurar si deseas realizar el peso de manera automática o si lo deseas de manera manual como se muestra en la imagen a continuación.



A continuación te dejo el link de descarga, recuerda no olvides realizar la acción para completar la descrga.