Sunteți pe pagina 1din 49

11/12/2019 Comunidad de Visual FoxPro en Español: ActiveX

Más oscarserranoc@gmail.com Escritorio Cerrar sesión

Página principal Indice por temas Indice por fecha Buscar con Google

Foro Comunidad VFP Acerca de ..

Mostrando las entradas con la e queta


Ac veX. Mostrar todas las entradas

10 de junio de 2019

Código genérico corregido para


Ac veX
Ar culo original: Ac veX generic fix
h p://www.foxpert.com/knowlbits_200804_1
.htm
Autor: Christof Wollenhaupt
Traducido por: Ana María Bisbé York

Después de leer mi ar culo Ac veFiX que


trataba sobre la no respuesta de controles
Ac veX, Carlos Alloa llegó a una solución
genérica del problema:

*!* Habilitar ventanas de controles Acti

#Define GW_CHILD 5
#Define GW_HWNDNEXT 2

Declare Integer GetWindow In win32api As


Integer nhWnd, ;
Integer uCmd
Buscar en el Blog
https://comunidadvfp.blogspot.com/search/label/ActiveX 1/49
11/12/2019 Comunidad de Visual FoxPro en Español: ActiveX

Declare Integer RealGetWindowClass In wi Buscar en este Blog


As apiRealGetWindowClass ; Buscar
Integer nhWnd, ;
String @pszType, ;
Integer cchType Ar culos

Declare Integer EnableWindow In win32api ▼ 2019 ( 12 )



Integer nhWnd, ;
▼ diciembre ( 1 )

Integer bEnable
Redimensionar
Local ; imagenes
m.lnChildHWnd As Integer, ;
m.lnCmd As Integer, ; ► noviembre ( 1 )

m.lnEnable As Integer, ;
m.lcClassName As String, ; ► octubre ( 1 )

m.lnBufferLen As Integer ► sep embre ( 1 )

*!* Para probar, cambie m.lnEnable a 0 ► agosto ( 1 )



*!* para inhabilitar las ventanas OleCon
► julio ( 1 )

m.lnEnable = 1
► junio ( 1 )

If Thisform.ShowWindow = 2 Or Thisform.S
m.lnChildHWnd = apiGetWindow(Thisform. ► mayo ( 1 )

Else
► abril ( 1 )

m.lnChildHWnd = Thisform.HWnd
Endif ► marzo ( 1 )

m.lnCmd = GW_CHILD ► febrero ( 1 )


► enero ( 1 )

Do While .T.
m.lnChildHWnd = apiGetWindow(m.lnChild ► 2018 ( 48 )

If m.lnChildHWnd = 0 Then ► 2017 ( 63 )



Exit
Endif ► 2016 ( 69 )

► 2015 ( 80 )

m.lcClassName = Space(254)
m.lnBufferLen = apiRealGetWindowClass( ► 2014 ( 20 )

@m.lcClassName, Len(m.lcClassName))
► 2013 ( 21 )

m.lcClassName = Left(m.lcClassName ,
► 2012 ( 28 )

If m.lcClassName == "CtlFrameWork_Refl
apiEnableWindow(m.lnChildHWnd, m.lnE ► 2011 ( 24 )

Endif
► 2010 ( 11 )

m.lnCmd = GW_HWNDNEXT ► 2009 ( 17 )



Enddo
► 2008 ( 37 )

► 2007 ( 51 )

► 2006 ( 98 )

E quetas: Ac veX , Traducciones
► 2005 ( 54 )

No hay comentarios. : ► 2004 ( 53 )


https://comunidadvfp.blogspot.com/search/label/ActiveX 2/49
11/12/2019 Comunidad de Visual FoxPro en Español: ActiveX

► 2003 ( 51 )

1 de junio de 2015 ► 2002 ( 67 )


► 2001 ( 36 )

Recorrer recursivamente un
► 2000 ( 60 )

control TreeView
Amigos, humildemente, propongo una ru nita Lo mas visto en los úl mos 30
días
recursiva para recorrer un control TreeView, no
es gran cosa, pero por ahí a alguien le puede
Trabajar con fechas y horas
venir bien. en Visual FoxPro

Serán bienvenidas las mejoras del caso. Documentación en Español


de FoxyPreviewer
*---------------------------------------
*- CASO 1 - Le paso como NODO el primer ¿Funciona Visual FoxPro 9
*- En este caso la rutina NO procesa el en Windows 10?
o=thisform.otree
o.selecteditem Mas sobre el envio de
primerhijo=o.selecteditem.child) mensajes de correo
ver_rama(primerhijo) electrónico desde Visual
*--------------------------------------- FoxPro
*- CASO 2 - Le paso como NODO áquel en e
*- En este caso la rutina SI procesa el VFP y mySQL
INCLUYE).
o=thisform.otree
DLLs de .Net en VFP
o.selecteditem
ver_rama2(o.selecteditem)
*--------------------------------------- Lo nuevo del Generador de
PROCEDURE ver_rama(onodo) Informes en VFP 9.0 - Parte
*--- Pasandole el Primer Hijo del Nodo q 2
LOCAL hnodo,next_nodo,t,nhijos
Funciones definidas por el
IF ISNULL(onodo) usuario en las cadenas
RETURN Transact-SQL
ENDIF
MESSAGEBOX(onodo.text) Crear PDF con Visual
nhijos=onodo.children FoxPro
IF nhijos>0
hnodo=onodo.child Domine Visual FoxPro 9.0
ver_rama(hnodo) SP2 / Expert in Visual
endif FoxPro 9.0 SP2
next_nodo=onodo.next
IF ISNULL(next_nodo)
RETURN
Visitas úl mos 30 días
ELSE
ver_rama(next_nodo)
ENDIF 19,785
RETURN
*---------------------------------------
Traductor
PROCEDURE ver_rama2(onodo)
*--- Pasandole el NODO, lo muestra a él
https://comunidadvfp.blogspot.com/search/label/ActiveX 3/49
11/12/2019 Comunidad de Visual FoxPro en Español: ActiveX

LOCAL hnodo,next_nodo,t,nhijos Seleccionar idioma ▼

IF ISNULL(onodo)
RETURN
ENDIF
MESSAGEBOX(onodo.text)
nhijos=onodo.children
IF nhijos>0
hnodo=onodo.child
ver_rama(hnodo)
endif
RETURN
*---------------------------------------

Nelson Rodriguez
Salto - Uruguay

E quetas: Ac veX

1 comentario :

28 de mayo de 2015

Formulario con menú con control


TreeView
El otro día estaba buscando para hacer un
formulario para menú con Treeview, como en
varias aplicaciones de ges ón. Busqué por
varios lados y no lo encontré. Así que hice esto
que lo comparto con Uds.

https://comunidadvfp.blogspot.com/search/label/ActiveX 4/49
11/12/2019 Comunidad de Visual FoxPro en Español: ActiveX

** Creo un Cursor con los datos del Menu


** puede ser una tabla ya predefinida

CREATE CURSOR cMiMenu (Nivel C(20),Nombr

** nivel = ####_ (separo con "_" cada 4


** para identificar a que nivel

** nombre = el nombre que quiero asignar

** dowhath = que comando quiero ejecutar


** es que solo los hijos final

** se pueden agregar mas campos, como po


INSERT INTO cMiMenu (Nivel, Nombre, DoW
VALUES ('0001_', 'Padre 1', ' ')
INSERT INTO cMiMenu (Nivel, Nombre, DoW
VALUES ('0002_', 'Padre 2', ' ')
INSERT INTO cMiMenu (Nivel, Nombre, DoW
VALUES ('0001_0001_', 'Hijo 1', 'DO FO
INSERT INTO cMiMenu (Nivel, Nombre, DoW
VALUES ('0002_0001_','Hijo 2',' ')
INSERT INTO cMiMenu (Nivel, Nombre, DoW
VALUES ('0002_0001_0001_', 'Hijo de Hi

PUBLIC oForm
oForm = NEWOBJECT("Form1")
oForm.SHOW

https://comunidadvfp.blogspot.com/search/label/ActiveX 5/49
11/12/2019 Comunidad de Visual FoxPro en Español: ActiveX

DEFINE CLASS Form1 AS FORM

TOP = 10
LEFT = 100
HEIGHT = 360
WIDTH = 360
DOCREATE = .T.
CAPTION = "Menu con TreeView y DobleCl
NAME = "Form1"
MINWIDTH = 100
MINHEIGHT = 100

ADD OBJECT Olecontrol1 AS OLECONTROL W


TOP = 10, LEFT = 10, HEIGHT = 340, W
NAME = "Olecontrol1", OLECLASS = "MS

PROCEDURE Olecontrol1.DBLCLICK
SELECT cMiMenu
LOCATE FOR cMiMenu.Nivel = THIS.SELE
IF FOUND()
IF LEN(ALLTRIM(cMiMenu.DoWhat)) >
WAIT WINDOW + cMiMenu.DoWhat
ENDIF
ENDIF
ENDPROC

PROCEDURE RESIZE
THIS.Olecontrol1.WIDTH = THIS.WIDTH
THIS.Olecontrol1.HEIGHT = THIS.HEIGH
ENDPROC

PROCEDURE Olecontrol1.INIT
LOCAL lcNivel,lcTexto,lnTipo,lnResta
THISFORM.Olecontrol1.LineStyle = 1
THISFORM.Olecontrol1.LabelEdit = 1
THISFORM.Olecontrol1.FullRowSelect =
THISFORM.Olecontrol1.HotTracking = .
SELECT cMiMenu
GO TOP
DO WHILE !EOF()
lcNivel = ALLTRIM(cMiMenu.Nivel)
lcTexto = ALLTRIM(cMiMenu.Nombre)
IF LEN(ALLTRIM(lcNivel)) = 5
** Cuando el valor del LEN() = 5
lnTipo = 0
THISFORM.Olecontrol1.Nodes.ADD(,
ELSE
** si LEN() > 5 es un hijo, siem
lnTipo=4
lnResta = LEN(ALLTRIM(Nivel)) -
lcKey = SUBSTR(ALLTRIM(lcNivel),
THISFORM.Olecontrol1.Nodes.ADD(l
ENDIF
SKIP
ENDDO
https://comunidadvfp.blogspot.com/search/label/ActiveX 6/49
11/12/2019 Comunidad de Visual FoxPro en Español: ActiveX

ENDPROC

ENDDEFINE

Ramón González
Misiones, Argen na

E quetas: Ac veX , Formularios

2 comentarios :

14 de febrero de 2015

Controlando disposi vos TWAIN


desde VFP
Ar culo original: Controlling TWAIN devices
from within VFP
h p://www.ml-consult.co.uk/foxst-29.htm
Autor: Mike Lewis
Traducido por: Carlos A. Miranda

¿Necesita manejar un escaner o una cámara de


video desde su aplicación?. Aquí le decimos
como hacerlo.

Recientemente escribimos una aplicación


FoxPro que manejaba el registro de delegados
atendiendo a una conferencia internacional. el
Cliente quería que la aplicación fotografiara a
cada delegado que llegara, y también guardar la
imagen digitalizada de las tarjetas de negocios
de los delegados. Debido al gran número de
delegados involucrados, la fotogra a y el
proceso de digitalización tenia que ser los más
libre de problemas y fácil posible. Era
par cularmente importante para el operador
ser capaz de controlar la cámara y el escanner
mientras estaba sentado en su PC.

En este ar culo, nosotros le diremos como


https://comunidadvfp.blogspot.com/search/label/ActiveX 7/49
11/12/2019 Comunidad de Visual FoxPro en Español: ActiveX

desarrollamos este proyecto. La estrategia que


adoptamos es razonablemente genérica y no es
específica de ningún escanner en par cular.
Usted no debería tener dificultades en aplicar
nuestras técnicas en sus propias aplicaciones si
lo desea.

Primer paso: escoger el equipo

Para la fotogra a,
nosotros desacartamos
una cámara digital
estandar, principalmente
porque no
encontrabamos un
método de transferir las
imágenes sin u lizar las
manos hacia nuestra
aplicación. En vez de eso,
nosotros escogimos una
Philips ToUcam web
camera (izquierda). Este
po de disposi vo es
u lizado usualmente para
video conferencias y
como una cámara on-line
web cam, pero también
puede capturar un solo
frame. Este ene la
ventaja de ser un
disposi vo TWAIN-
compliant y puede ser
controlado enteramente
desde la PC.

El escanner que nosotros


escogimos fue un Targus
Mini Business Card
Scanner (izquierda). Como
su nombre sugiere, este
está diseñado
especificmente para
digitalizar tarjetas de
https://comunidadvfp.blogspot.com/search/label/ActiveX 8/49
11/12/2019 Comunidad de Visual FoxPro en Español: ActiveX

negocios. Como la
cámara, esta es TWAIN-
compliant también.

A pesar de que nosotros


estamos contentos de
recomendar ambos
disposi vos, la mayoría de
los modelos de cámara
web o escanner habrían
servido para nuestros
propositos. El código que
nosotros mostraremos en
este ar culo es capaz de
capturar imagenes desde
cualquier disposi vo
compa ble con TWAIN.

... Y el so ware

Hay muchos productos de sofware disponibles


que le permiten a uste controlar un disposi vo
TWAIN de forma programa ca. El que nosotros
optamos fue EZTWAIN, de Dosadi. Nos gustó
este producto por las siguientes razones:
Fácil de programar. Nosotros
teníamos media docena o algo así
de funciones que preocuparnos de
llamar.
Fácil de distribuir. Porque es un DLL
que a diferencia de un control
Ac veX, no tenemos que
preocuparnos de registrarlo en el
sistema del usuario.
Bajo costo. Dependiendo de las
necesidades y del po de
aplicaciones que escribas, el precio
varia de nada a alrededor de
US$200.
https://comunidadvfp.blogspot.com/search/label/ActiveX 9/49
11/12/2019 Comunidad de Visual FoxPro en Español: ActiveX

Excelente soporte del autor del


producto, Spike McLarty.
Declarando sus función

El EZTWAIN DLL ene alrededor de 70


funciones, pero para muchas aplicaciones usted
nunca u lizará más de 7 u ocho de ellas. Aquí
estan las declaraciones de las funciones más
comunes:

DECLARE INTEGER TWAIN_SelectImageSource


IN Eztw32.DLL INTEGER hWnd
DECLARE INTEGER TWAIN_GetSourceList ;
IN Eztw32.dll
DECLARE INTEGER TWAIN_GetNextSourceName
IN Eztw32.dll STRING @cSourceName
DECLARE INTEGER TWAIN_OpenSource ;
IN Eztw32.DLL STRING cSourceName
DECLARE INTEGER TWAIN_AcquireNative ;
IN Eztw32.DLL INTEGER nAppWind, INTEGE
DECLARE INTEGER TWAIN_WriteNativeToFilen
IN Eztw32.DLL INTEGER nDIB, STRING cFi
DECLARE INTEGER TWAIN_FreeNative ;
IN Eztw32.DLL INTEGER nDIB
DECLARE INTEGER TWAIN_SetMultiTransfer ;
IN Eztw32.dll INTEGER nFlag

Capturando una imagen

Si uste solo ene un disposi vo TWAIN device


instalado, simplemente llame a la función
TWAIN_AcquireNa ve() para capturar la
imagen. Esta función inicia el proceso de
captura. Cuando este ha finalizado, la imagen
será presentada en memoria, en formato
"device-independent bitmap (DIB)". La función
u liza dos parámetros de po integer; in la
mayoría de casos estos serán cero. Retorna un
manejador ( handle ) para la imagen.

En el caso de nuestra camara Web ToUcam,


llamando a TWAIN_AcquireNa ve() lanza el
visor de la cámara en pantalla (Figura 1). Esto
despliega una alimentación con nua de la
https://comunidadvfp.blogspot.com/search/label/ActiveX 10/49
11/12/2019 Comunidad de Visual FoxPro en Español: ActiveX

imagen. En cualquier momento, el usuario


puede hacer click en el botón de Captura para
tomar la fotogra a.

Figura 1: Esto es lo que el usuario ve cuando


usted empieza el proceso de captura desde la
cámar web.

Una vez que la imagen DIB esta en memoria,


usted puede llamarl a la función
TWAIN_WriteNa veToFilename() para escribir a
un archivo que uste escoja. Por defecto, este
será un BMP file, pero otros formatos también
son soportados. Usted pasa dos parámetros
para esta función: El primero es el manejador
(handle) DIB retornado por
TWAIN_AcquireNa ve(), y el segundo el nombre
calificado del archivo des no.

Finalmente, llamar al TWAIN_FreeNa ve() para


borrar de memoria la imagen DIB. Si usted no
hace esto, usted rápidamente perdería
memoria.

Aquí esta nuestro código para tomar una


fotogra a con la cámara web:

LOCAL lcFile, lnImageHandle, lnReply


lcFile = "c:testtest_image.bmp"
https://comunidadvfp.blogspot.com/search/label/ActiveX 11/49
11/12/2019 Comunidad de Visual FoxPro en Español: ActiveX

* Captura la imágen
lnImageHandle = TWAIN_AcquireNative(0,0)
* copia la imagen a un archivo
lnReply = ;
TWAIN_WriteNativeToFilename(lnImageHan
* Libera la memoria del manejador de la
TWAIN_FreeNative(lnImageHandle)
* Chequear errores
IF lnReply = 0
* imagen fue exitosamente grabada
ELSE
* algo no estuvo bien
ENDIF

Note que la respuesta de


TWAIN_WriteNa veToFilename() le dice a usted
si el archivo fue escrito de forma exitosa. Sin
embargo, esto no le dice a usted si el trabajo
para obtener la imagen trabajó apropiadamente
- la captura podría haber fallado por alguna
razón, o podría haber sido cancelada por el
usuario. Una manera de probarlo es verificando
el tamaño del archivo resultante; si es cero,
entonces ninguna imagen fue capturada.

Múl ples disposi vos

El código anterior captura una imagen desde


cualquier disposi vo TWAIN que usted tenga
instalado. Si usted ene un escaner o una
camera, el código iniciará el proceso de
digitalización y grabará la imagen.

Pero que pasa si uste necesita manejar dos


disposi vos de captura para la misma PC? Este
fue el caso de nuestra aplicación, en la cual el
usuario necesitaba controlar tanto la cámara
como el escaner de tarjeta de negocios.

Por defecto, TWAIN_AcquireNa ve() capturará


del primer disposi vo TWAIN que encuentre.
Sin embargo, el EZTWAIN DLL ene una función
llamada TWAIN_SelectImageSource(), la cual le
da al usuario la oportunidad de seleccionar un

https://comunidadvfp.blogspot.com/search/label/ActiveX 12/49
11/12/2019 Comunidad de Visual FoxPro en Español: ActiveX

diferente disposi vo de captura. Cuando uste


llama a esta función (usualmente con 0 como
parámetro), el usuario ve el diálogo estñandar
de la Figura 2 de las fuentes de disposivitos
TWAIN que ene disponibles para seleccionar.
La función retorna 0 si el usuario cancela el
dialogo o si no hay disposi vos de captura
instaladps, de otra manera este retorna 1.

Figura 2: Dialogo estándar para seleccionar la


fuente de captura de los disposi vos TWAIN.

En nuestro caso, nosotros no hemos querido


u lizar esto para ver el díalogo. Porque nuestra
aplicación tenía un botón específico para la
cámara y otro para el digitalizador de tarjetas,
nosotros quisimos seleccionar el disposi vo de
forma progrmá ca.

Para hacer eso, nosotros u lizamos las dos


siguientes funciones: TWAIN_GetSourceList(), la
cual lee una lista de nombres de disposi vos
dentro de la memoria del EZTWAIN; y
TWAIN_GetNextSourceName(), la cual trae el
siguiente disposi vo de la lista. Después
llamamos a TWAIN_GetSourceList() una vez, y
llamamos a TWAIN_GetNextSourceName()
repe damente hasta que este retorne 0 para
indicar que no hay más nombre en la lista.

Como un ejemplo, aquí esta algo de código que


usted podría u lizar para llenar un combo box
con los nombres de los disposi vos disponibles:

https://comunidadvfp.blogspot.com/search/label/ActiveX 13/49
11/12/2019 Comunidad de Visual FoxPro en Español: ActiveX

LOCAL lcSource, lnReply


* Obtiene la lista de los dispositivos e
TWAIN_GetSourceList()
lcSource = SPACE(255)
DO WHILE .T.
* Obtiene el siguiente nombre de dispo
lnReply = TWAIN_GetNextSourceName(@lcS
IF lnReply = 0
* No hay más nombres de dispositivos
EXIT
ENDIF

* quitar los nulos, etc


lcSource = ;
LEFT(lcSource,AT(CHR(0),lcSource)-1)

* Agreagar al combo
THISFORM.cboDevices.AddItem(lcSource)
ENDDO

Una vez que usted conozca los nombres de las


fuentes, usted puede pasar estos a la función
TWAIN_OpenSource(). Esta establecerá el
disposi vo para la siguiente llamada a
TWAIN_AcquireNa ve().

Por defecto, TWAIN_AcquireNa ve() cerrará la


fuente de captura despùes de que finalice el
proceso. Así que, si usted ene más de un
disposi vo, usted necesitará llamar a
TWAIN_OpenSource() antes de cada llamada a
TWAIN_AcquireNa ve(). Desafortunadamente,
abrir la fuente de captura consume empo.
Dependiendo del disposi vo, los usuarios
podrían notar un retraso de algunos segundo
antes de que la captura pueda empezar.

Como una alterna va usted puede llamar a la


función TWAIN_SetMul Transfer(1) para decirle
al EZTWAIN que deje la fuente de captura
abierta. De esta manera, usted solo necesita
llamar a TWAIN_OpenSource() cuando usted
quiera cambiar a un dispos vo diferente.
Cuando nosotros tratamos de hacer esto, sin
embargo, encontramos que the el visor para la

https://comunidadvfp.blogspot.com/search/label/ActiveX 14/49
11/12/2019 Comunidad de Visual FoxPro en Español: ActiveX

cámar web ToUcam permanecia en la pantalla,


frente a la ventana de nuestras aplicaciones
todo el empo. Esto obstruía parte de la
ventana de nuestra aplicación. Por esta razón,
nosotros escogimos no mantener el disposi vo
abierto.

Ir más lejos....

En este ar culo, nosotros hemos tratado de


darle a usted un pequeñ bocado del EZTWAIN
DLL. Esta es una herrmienta extremadamente
capaz. Con muchas más funciones que nosotros
no tendriamos espacio para describir aquí. Si
usted necesita contolar uno o más disposi vos
TWAIN devices desde su aplicación Visual
Foxpro, porque no descarga una copia y la
explorae por si mismo.

Para más información acerca de EZTWAIN y


otros productos relacionados con TWAIN, y para
descargar una copia de la DLL, visite
www.dosadi.com.

Si usted quiere conecer más acerca de Philips


ToUcam web camera:
Visite el si o Philips, en
www.pcstuff.philips.com.
U ordene de Amazon.com (precios
empiezan en $30; solo clientes US).
U ordene de Amazon.co.uk (precios
empiezan en £28.99; clientes de UK
e Irlanda solamente).
El escaner "Targus card-scanner" cuesta
alrededor de US$125:
Ordene de Amazon.com (solo
clientes US).
O visite www.targus.com para
detalles de distribuidores locales.
Mike Lewis Consultants Ltd. February 2003

https://comunidadvfp.blogspot.com/search/label/ActiveX 15/49
11/12/2019 Comunidad de Visual FoxPro en Español: ActiveX

E quetas: Ac veX , Traducciones

3 comentarios :

25 de mayo de 2011

U lizando el control TreeView


(4/4)
Cuarta y úl ma parte de una serie de códigos de
ejemplos sobre como u lizar el control
TreeView en VFP, escritos por el turco Ce n
Basoz (Microso Visual FoxPro MVP 1999-
2010).

* Define some constant


#DEFINE tvwFirst 0
#DEFINE tvwLast 1
#DEFINE tvwNext 2
#DEFINE tvwPrevious 3
#DEFINE tvwChild 4
#DEFINE cnLOG_PIXELS_X 88
#DEFINE cnLOG_PIXELS_Y 90
* 1440 twips por pulgadas
#DEFINE cnTWIPS_PER_INCH 1440

oForm = CREATEOBJECT('myForm')
oForm.SHOW
READ EVENTS

DEFINE CLASS myForm AS FORM


HEIGHT = 640
WIDTH = 800
AUTOCENTER = .T.
CAPTION = "TreeView - TestPad"
NAME = "myForm"

*-- Node object reference


nodx = .F.
nxtwips = .F.
nytwips = .F.

ADD OBJECT oletreeview AS OLECONTROL W


TOP = 0, LEFT = 0, HEIGHT = 600, WID
ANCHOR = 15, NAME = "OleTreeView", ;
OLECLASS = 'MSComCtlLib.TreeCtrl'

ADD OBJECT oleimageslist AS OLECONTROL


TOP = 0, LEFT = 0, HEIGHT = 100, WID
https://comunidadvfp.blogspot.com/search/label/ActiveX 16/49
11/12/2019 Comunidad de Visual FoxPro en Español: ActiveX

NAME = "oleImagesList",;
OLECLASS = 'MSComCtlLib.ImageListCtr

*-- Fill the tree values


PROCEDURE filltree
LPARAMETERS tcDirectory, tcImage
THIS.SHOW
CREATE CURSOR crsNodes (NodeKey c(15
LOCAL oNode
WITH THIS.oletreeview.nodes
oNode=.ADD(,tvwFirst,"root"+PADL(.
ENDWITH
INSERT INTO crsNodes (NodeKey, Paren
THIS._SubFolders(oNode)

ENDPROC

PROCEDURE pixeltotwips

*-- Code for PixelToTwips method


LOCAL liHWnd, liHDC, liPixelsPerInch

* Declare some Windows API functions


DECLARE INTEGER GetActiveWindow IN W
DECLARE INTEGER GetDC IN WIN32API IN
DECLARE INTEGER GetDeviceCaps IN WIN

* Get a device context for VFP.


liHWnd = GetActiveWindow()
liHDC = GetDC(liHWnd)

* Get the pixels per inch.


liPixelsPerInchX = GetDeviceCaps(liH
liPixelsPerInchY = GetDeviceCaps(liH

* Get the twips per pixel.


THISFORM.nxtwips = ( cnTWIPS_PER_INC
THISFORM.nytwips = ( cnTWIPS_PER_INC
RETURN

ENDPROC

*-- Collect subfolders


PROCEDURE _SubFolders
LPARAMETERS oNode
LOCAL nChild, oNodex
lcFolder = oNode.FULLPATH
lcFolder = STRTRAN(lcFolder,":\\",":
oFS = CREATEOBJECT('Scripting.FileSy
oFolder = oFS.GetFolder(lcFolder)
WITH THISFORM.oletreeview
lnIndent = 0
lnIndex = oNode.INDEX
DO WHILE lnIndex # oNode.Root.INDE
AND TYPE('.nodes(lnIndex).Pare
https://comunidadvfp.blogspot.com/search/label/ActiveX 17/49
11/12/2019 Comunidad de Visual FoxPro en Español: ActiveX

AND !ISNULL(.nodes(lnIndex).PA
lnIndex = .nodes(lnIndex).PARENT
lnIndent = lnIndent + 1
ENDDO
lcChildKeyPrefix = 'L'+PADL(lnInde
ENDWITH
WITH THISFORM.oletreeview.nodes
IF oNode.Children > 0
IF oNode.CHILD.KEY = oNode.KEY+"
.REMOVE(oNode.CHILD.INDEX)
FOR EACH oSubFolder IN oFolder
INSERT INTO crsNodes ;
(NodeKey, ParentKey, NodeT
VALUES ;
(lcChildKeyPrefix+' '+PADL
oNode.KEY, oSubFolder.PATH
oNodex = .ADD(oNode.KEY, tvw
crsNodes.NodeKey, oSubFold
oNodex.ExpandedImage = "Open
IF oSubFolder.NAME # "System
oNodex = .ADD(crsNodes.Nod
crsNodes.NodeKey+"dummy"
ENDIF
ENDFOR
ENDIF
ELSE
IF oFolder.Subfolders.COUNT > 0
oNodex = .ADD(oNode.KEY, tvwCh
oNode.KEY+"dummy", "dummy",
ENDIF
ENDIF
ENDWITH
ENDPROC

PROCEDURE QUERYUNLOAD
THISFORM.nodx = .NULL.
CLEAR EVENTS
ENDPROC

PROCEDURE INIT
THIS.pixeltotwips()
SET TALK OFF
* Check to see if OCX installed and
IF TYPE("THIS.oleTreeView") # "O" OR
RETURN .F.
ENDIF
IF TYPE("THIS.oleImagesList") # "O"
RETURN .F.
ENDIF
lcIconPath = HOME(0) + "Graphics\Ico
WITH THIS.oleimageslist
.ImageHeight = 32
.ImageWidth = 32
.ListImages.ADD(,"OpenFolder",LOAD
.ListImages.ADD(,"ClosedFolder",LO
https://comunidadvfp.blogspot.com/search/label/ActiveX 18/49
11/12/2019 Comunidad de Visual FoxPro en Español: ActiveX

.ListImages.ADD(,"Drive",LOADPICTU
.ListImages.ADD(,"Floppy",LOADPICT
.ListImages.ADD(,"NetDrive",LOADPI
.ListImages.ADD(,"CDDrive",LOADPIC
.ListImages.ADD(,"RAMDrive",LOADPI
.ListImages.ADD(,"Unknown",LOADPIC
ENDWITH

WITH THIS.oletreeview
.linestyle =1
.labeledit =1
.indentation = 5
.imagelist = THIS.oleimageslist.OB
.PathSeparator = '\'
.OLEDRAGMODE = 1
.OLEDROPMODE = 1
ENDWITH

oFS = CREATEOBJECT('Scripting.FileSy
LOCAL ARRAY aDrvTypes[7]
aDrvTypes[1]="Unknown"
aDrvTypes[2]="Floppy"
aDrvTypes[3]="Drive"
aDrvTypes[4]="NetDrive"
aDrvTypes[5]="CDDrive"
aDrvTypes[6]="RAMDrive"

FOR EACH oDrive IN oFS.Drives


IF oDrive.IsReady
THIS.filltree(oDrive.Rootfolder.
ENDIF
ENDFOR
ENDPROC

PROCEDURE oletreeview.Expand
*** ActiveX Control Event ***
LPARAMETERS NODE
THISFORM._SubFolders(NODE)
NODE.ensurevisible
ENDPROC

PROCEDURE oletreeview.NodeClick
*** ActiveX Control Event ***
LPARAMETERS NODE
NODE.ensurevisible
THIS.DropHighlight = .NULL.
ENDPROC

PROCEDURE oletreeview.MOUSEDOWN
*** ActiveX Control Event ***
LPARAMETERS BUTTON, SHIFT, x, Y
WITH THISFORM
oHitTest = THIS.HitTest( x * .nxtw
IF TYPE("oHitTest")= "O" AND !ISNU
THIS.SELECTEDITEM = oHitTest
https://comunidadvfp.blogspot.com/search/label/ActiveX 19/49
11/12/2019 Comunidad de Visual FoxPro en Español: ActiveX

ENDIF
.nodx = THIS.SELECTEDITEM
ENDWITH
oHitTest = .NULL.
ENDPROC

PROCEDURE oletreeview.OLEDRAGOVER
*** ActiveX Control Event ***
LPARAMETERS DATA, effect, BUTTON, SH
oHitTest = THIS.HitTest( x * THISFOR
IF TYPE("oHitTest")= "O"
THIS.DropHighlight = oHitTest
ENDIF
ENDPROC

PROCEDURE oletreeview.OLEDRAGDROP
*** ActiveX Control Event ***
LPARAMETERS DATA, effect, BUTTON, SH
IF DATA.GETFORMAT(1) &&CF_TEXT
WITH THIS
IF !ISNULL(THISFORM.nodx) AND TY
loSource = THISFORM.nodx
loTarget = .DropHighlight
IF loSource.KEY # loTarget.KEY
lcSourceParentKey = loSource
lcTargetParentKey = loTarget
IF SUBSTR(lcSourceParentKey,
SUBSTR(lcTargetParentKey
lcSourceKey = IIF(lcSource
IIF(SHIFT=1,'mv','cp'))+
lcSourceText = loSource.TE
llRemoveSource = (lcSource

* Check here for children


* llGetChildren should be
llGetChildren = (lcSource

IF llRemoveSource
.nodes.REMOVE(loSource.I
ENDIF
* Check if node exists alr
IF TYPE('.Nodes(lcSourceKe
oNode=.nodes.ADD(loTarge
"ClosedFolder","OpenFo
.SELECTEDITEM = oNode
IF llGetChildren
THISFORM._SubFolders(o
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDWITH
ENDIF
THIS.DropHighlight = .NULL.
https://comunidadvfp.blogspot.com/search/label/ActiveX 20/49
11/12/2019 Comunidad de Visual FoxPro en Español: ActiveX

ENDPROC

ENDDEFINE

Gracias Ce n por compar r y autorizar esta


publicación.

E quetas: Ac veX

No hay comentarios. :

U lizando el control TreeView


(3/4)
Tercera parte de una serie de códigos de
ejemplos sobre como u lizar el control
TreeView en VFP, escritos por el turco Ce n
Basoz (Microso Visual FoxPro MVP 1999-
2010).

#DEFINE tvwFirst 0
#DEFINE tvwLast 1
#DEFINE tvwNext 2
#DEFINE tvwPrevious 3
#DEFINE tvwChild 4

#DEFINE cnLOG_PIXELS_X 88
#DEFINE cnLOG_PIXELS_Y 90
#DEFINE cnTWIPS_PER_INCH 1440

TEXT to myMenu noshow


Lparameters toNode,toForm

DEFINE POPUP shortcut SHORTCUT RELATIVE


DEFINE BAR 1 OF shortcut PROMPT "Key"
DEFINE BAR 2 OF shortcut PROMPT "Text"
DEFINE BAR 3 OF shortcut PROMPT "Fullpat
DEFINE BAR 4 OF shortcut PROMPT "Index"
DEFINE BAR 5 OF shortcut PROMPT "New Ite
ON SELECTION BAR 1 OF shortcut ;
wait window toNode.Key timeout 2
ON SELECTION BAR 2 OF shortcut ;
wait window toNode.Text timeout 2
ON SELECTION BAR 3 OF shortcut ;
wait window toNode.Fullpath timeout
ON SELECTION BAR 4 OF shortcut ;
wait window Transform(toNode.Index)
https://comunidadvfp.blogspot.com/search/label/ActiveX 21/49
11/12/2019 Comunidad de Visual FoxPro en Español: ActiveX

ON SELECTION BAR 5 OF shortcut toForm.Sh


ACTIVATE POPUP shortcut

ENDTEXT

*StrToFile(m.myMenu,'myTVShcut.mpr')

oForm = CREATEOBJECT('myForm')
WITH oForm
.ADDOBJECT('Tree','myTreeView')
.ADDOBJECT('Lister','Lister')
WITH .Tree
.WIDTH = 700
.HEIGHT = 600
.Nodes.ADD(,0,"root0",'Main node 1')
.Nodes.ADD(,0,"root1",'Main node 2')
.Nodes.ADD(,0,"root2",'Main node 3')
.Nodes.ADD('root1',4,"child11",'Chil
.Nodes.ADD('root1',4,"child12",'Chil
.Nodes.ADD('root2',4,"child21",'Chil
.Nodes.ADD('child21',3,"child20",'Ch
oNodx=.Nodes.ADD('child11',4,"child1
oNodx.Bold=.T.
.Nodes.ADD('child111',3,"child112",'
.Nodes.ADD('child112',3,"child113",'

.Nodes.ADD('child12',4,"child121",'c
.Nodes.ADD('child12',4,"child122",'c

.Nodes.ADD('child112',4,"child1121",
.Nodes.ADD('child112',4,"child1122",
.Nodes.ADD('child112',4,"child1123",
.Nodes.ADD('child112',4,"child1124",
.Nodes.ADD('child112',4,"child1125",

.Nodes.ADD('child1121',4,"child11211
.Nodes.ADD('child1121',4,"child11212

.Nodes.ADD('child11211',4,"child1121
.Nodes.ADD('child11212',4,"child1121
.VISIBLE = .T.
.Nodes(.Nodes.COUNT).Ensurevisible
WITH .FONT
.SIZE = 12
.NAME = 'Times New Roman'
.Bold = .F.
.Italic = .T.
ENDWITH
ENDWITH
.Lister.LEFT = .WIDTH - .Lister.WIDTH
.lister.VISIBLE = .T.
.SHOW()
ENDWITH
READ EVENTS

https://comunidadvfp.blogspot.com/search/label/ActiveX 22/49
11/12/2019 Comunidad de Visual FoxPro en Español: ActiveX

FUNCTION TVLister
LPARAMETERS toTV
LOCAL lnIndex,lnLastIndex
WITH toTV
lnIndex = .Nodes(1).Root.FirstSi
lnLastIndex = .Nodes(1).Root.LastSib
_GetSubNodes(lnIndex,toTV,lnIndex)
DO WHILE lnIndex # lnLastIndex
lnIndex = .Nodes(lnIndex).NEXT.IND
_GetSubNodes(lnIndex,toTV,lnIndex)
ENDDO
ENDWITH

FUNCTION _GetSubNodes
LPARAMETERS tnIndex, toTV, tnRootIndex
LOCAL lnIndex, lnLastIndex
WITH toTV
WriteNode(tnIndex,toTV, tnRootIndex)
IF .Nodes(tnIndex).Children > 0
lnIndex = .Nodes(tnIndex).CHILD.I
lnLastIndex = .Nodes(tnIndex).CHIL
_GetSubNodes(lnIndex,toTV,tnRootIn
DO WHILE lnIndex # lnLastIndex
lnIndex = .Nodes(lnIndex).NEXT.I
_GetSubNodes(lnIndex,toTV,tnRoot
ENDDO
ENDIF
ENDWITH

FUNCTION WriteNode
LPARAMETERS tnCurIndex, toTV,tnRootInd
LOCAL lnRootIndex, lnIndex, lcPrefix,
lnIndex = tnCurIndex

WITH toTV
lcPrefix = '+-' + .Nodes(lnIndex).TE
lnLevel = 0
DO WHILE lnIndex # tnRootIndex
lnIndex = .Nodes(lnIndex).PARENT.I
lcPrefix = IIF(.Nodes(lnIndex).Las
lnLevel = lnLevel + 1
ENDDO
? lcPrefix
ENDWITH

FUNCTION WalkTree
LPARAMETERS oNode,lnIndent,tlPlus
? IIF(tlPlus,'+','')+REPLICATE(CHR(9),
IF !ISNULL(oNode.CHILD)
WalkTree(oNode.CHILD,lnIndent+1,.T.)
ENDIF
IF !ISNULL(oNode.NEXT)
WalkTree(oNode.NEXT,lnIndent,.F.)
ENDIF
RETURN
https://comunidadvfp.blogspot.com/search/label/ActiveX 23/49
11/12/2019 Comunidad de Visual FoxPro en Español: ActiveX

ENDFUNC

DEFINE CLASS myForm AS FORM


AUTOCENTER = .T.
HEIGHT = 640
WIDTH = 800

nxtwips = .F.
nytwips = .F.

PROCEDURE QUERYUNLOAD
CLEAR EVENTS
ENDPROC

PROCEDURE ShowIt
LPARAMETERS toNode
MESSAGEBOX("Form method called with
ENDPROC

PROCEDURE INIT
*-- Code for PixelToTwips method
LOCAL liHWnd, liHDC, liPixelsPerInch

* Declare some Windows API functions


DECLARE INTEGER GetActiveWindow IN W
DECLARE INTEGER GetDC IN WIN32API IN
DECLARE INTEGER GetDeviceCaps IN WIN

* Get a device context for VFP.


liHWnd = GetActiveWindow()
liHDC = GetDC(liHWnd)

* Get the pixels per inch.


liPixelsPerInchX = GetDeviceCaps(liH
liPixelsPerInchY = GetDeviceCaps(liH

* Get the twips per pixel.


THIS.nxtwips = ( cnTWIPS_PER_INCH /
THIS.nytwips = ( cnTWIPS_PER_INCH /
RETURN
ENDPROC

PROCEDURE CheckRest
LPARAMETERS tnIndex, tlCheck, toTree
LOCAL lnIndex, lnLastIndex
WITH toTreeView
.Nodes(tnIndex).Checked = tlCheck
IF .Nodes(tnIndex).Children > 0
lnIndex = .Nodes(tnIndex).CHILD
lnLastIndex = .Nodes(tnIndex).CH
THIS.CheckRest(lnIndex, tlCheck,
DO WHILE lnIndex # lnLastIndex
lnIndex = .Nodes(lnIndex).NEXT
THIS.CheckRest(lnIndex, tlChec
https://comunidadvfp.blogspot.com/search/label/ActiveX 24/49
11/12/2019 Comunidad de Visual FoxPro en Español: ActiveX

ENDDO
ENDIF
ENDWITH
ENDPROC

ENDDEFINE

DEFINE CLASS myTreeView AS OLECONTROL


OLEDRAGMODE = 1
OLEDROPMODE = 1
NAME = "OleTreeView"
OLECLASS = 'MSComCtlLib.TreeCtrl'

PROCEDURE INIT
WITH THIS
.OBJECT.CheckBoxes = .T.
.linestyle =1
.labeledit =1
.indentation = 5
.PathSeparator = '\'
ENDWITH
ENDPROC
PROCEDURE NodeClick
*** ActiveX Control Event ***
LPARAMETERS NODE
NODE.ensurevisible
MESSAGEBOX(NODE.FULLPATH + CHR(13) +
ENDPROC

PROCEDURE MOUSEDOWN
LPARAMETERS BUTTON, SHIFT, x, Y
IF BUTTON=2
lcWhere = ''
oNode = THIS.HitTest( x * THISFORM
IF TYPE("oNode")= "O" AND !ISNULL(
* DO myTVShcut.mpr with o
EXECSCRIPT(m.MyMenu, oNode, THIS
ENDIF
ENDIF
ENDPROC

PROCEDURE MOUSEUP
LPARAMETERS BUTTON, SHIFT, x, Y
*!* if button=2
*!* nodefault
*!* Wait window 'Right clic
*!* endif
IF BUTTON=1
oNode = THIS.HitTest( x * THISFORM
IF TYPE("oNode")= "O" AND !ISNULL(
IF oNode.KEY # 'root1'
oNode.Checked = .F.
ELSE
THISFORM.CheckRest(oNode.INDEX
ENDIF
https://comunidadvfp.blogspot.com/search/label/ActiveX 25/49
11/12/2019 Comunidad de Visual FoxPro en Español: ActiveX

ENDIF
ENDIF
ENDPROC

*!* Procedure NodeCheck


*!* *** ActiveX Control Event ***
*!* Lparameters node,dummy
*!* IF node.Key = 'root1'
*!* thisform.CheckRest(node.Index,n
*!* endif
*!* endproc

PROCEDURE _SubNodes
LPARAMETERS tnIndex, tnLevel
LOCAL lnIndex
lcFs = ''
WITH THIS
? IIF(tnLevel=0,'',REPLICATE(CHR(9
IF .Nodes(tnIndex).Children > 0
lnIndex = .Nodes(tnIndex).CHILD
._SubNodes(lnIndex,tnLevel+1)
DO WHILE lnIndex # .Nodes(tnInde
lnIndex = .Nodes(lnIndex).NEXT
._SubNodes(lnIndex,tnLevel+1)
ENDDO
ENDIF
ENDWITH
ENDPROC

PROCEDURE ExpandAll
LPARAMETERS tnIndex
LOCAL lnIndex
WITH THIS
.Nodes(tnIndex).Expanded = .T.
IF .Nodes(tnIndex).Children > 0
lnIndex = .Nodes(tnIndex).CHILD
.ExpandAll(lnIndex)
DO WHILE lnIndex # .Nodes(tnInde
lnIndex = .Nodes(lnIndex).NEXT
.ExpandAll(lnIndex)
ENDDO
ENDIF
ENDWITH
ENDPROC
ENDDEFINE

DEFINE CLASS Lister AS COMMANDBUTTON


CAPTION = 'Listado'
HEIGHT = 32
WIDTH = 100

PROCEDURE CLICK
ACTIVATE SCREEN
TvLister(THISFORM.Tree)
WITH THISFORM.Tree
https://comunidadvfp.blogspot.com/search/label/ActiveX 26/49
11/12/2019 Comunidad de Visual FoxPro en Español: ActiveX

* WalkTree(.Nodes(1),0)
* .ExpandAll(.SelectedItem.Inde
ENDWITH
ENDPROC

PROCEDURE click1
ACTIVATE SCREEN
CLEAR
LOCAL lnIndex
WITH THISFORM.Tree
lnIndex = .Nodes(1).Root.FirstSibl
._SubNodes(lnIndex,0)
DO WHILE lnIndex # .Nodes(1).Root.
lnIndex = .Nodes(lnIndex).NEXT.I
._SubNodes(lnIndex,0)
ENDDO
ENDWITH
ENDPROC
ENDDEFINE

Gracias Ce n por compar r y autorizar esta


publicación.

E quetas: Ac veX

No hay comentarios. :

U lizando el control TreeView


(2/4)
Segunda parte de una serie de códigos de
ejemplos sobre como u lizar el control
TreeView en VFP, escritos por el turco Ce n
Basoz (Microso Visual FoxPro MVP 1999-
2010).

SELECT PADR('Customer_'+cust_id,20) AS N
PADR('',20) AS ParentID, ;
PADR(Company,100) AS NodeText, ;
0 AS LEVEL ;
FROM (HOME(2)+'data\customer') ;
UNION ;
SELECT PADR('Orders_'+order_id,20) AS
PADR('Customer_'+c.cust_id,20) AS Pare
PADR(ALLTRIM(TRANSFORM(order_id))+":"+
1 AS LEVEL ;
FROM (HOME(2)+'data\Orders') o ;

https://comunidadvfp.blogspot.com/search/label/ActiveX 27/49
11/12/2019 Comunidad de Visual FoxPro en Español: ActiveX

INNER JOIN (HOME(2)+'data\customer') c


UNION ;
SELECT 'OrdItems_'+oi.order_id+'_'+PAD
'Orders_'+o.order_id AS ParentID, ;
TRANSFORM(oi.line_no)+':'+p.Prod_Name-
2 AS LEVEL ;
FROM (HOME(2)+'data\OrdItems') oi ;
INNER JOIN (HOME(2)+'data\Orders') o O
INNER JOIN (HOME(2)+'data\customer') c
INNER JOIN (HOME(2)+'data\products') p
ORDER BY LEVEL ;
INTO CURSOR myTree ;
nofilter

#DEFINE tvwFirst 0
#DEFINE tvwLast 1
#DEFINE tvwNext 2
#DEFINE tvwPrevious 3
#DEFINE tvwChild 4

PUBLIC oForm
oForm = CREATEOBJECT('myTreeForm','myTre
oForm.SHOW

DEFINE CLASS myTreeForm AS FORM


HEIGHT = 640
WIDTH = 800
Autocenter = .T.
CAPTION = "TreeView - TestPad"

nxtwips = 0
nytwips = 0
cursorbehind = ''

ADD OBJECT TreeView AS OLECONTROL WITH


HEIGHT = 640, WIDTH = 800, ;
anchor = 15, OLECLASS = 'MSComCtlLib

PROCEDURE INIT
LPARAMETERS tcCursorName
WITH THIS.TreeView
.linestyle =1
.labeledit =1
.indentation = 5
.PathSeparator = '\'
.SCROLL = .T.
.OLEDRAGMODE = 0
.OLEDROPMODE = 0
ENDWITH
THIS.cursorbehind = m.tcCursorName
THIS.PixelToTwips()
THIS.Populate()
ENDPROC

PROCEDURE Populate
https://comunidadvfp.blogspot.com/search/label/ActiveX 28/49
11/12/2019 Comunidad de Visual FoxPro en Español: ActiveX

SELECT (THIS.cursorbehind)
WITH THIS.TreeView.Nodes
SCAN
IF EMPTY(ParentID)
oNode = .ADD(,tvwFirst,TRIM(No
oNode.Bold = .T.
ELSE
oNode = .ADD(TRIM(ParentID),tv
IF OCCURS('\',oNode.FULLPATH)=
oNode.BACKCOLOR = 0x00FFFF
oNode.FORECOLOR = 0xFF0000
ENDIF
IF OCCURS('\',oNode.FULLPATH)=
oNode.FORECOLOR = 0x0000FF
ENDIF
ENDIF
ENDSCAN
ENDWITH
ENDPROC

PROCEDURE PixelToTwips
LOCAL liHDC, liPixelsPerInchX, liPix
#DEFINE cnLOG_PIXELS_X 88
#DEFINE cnLOG_PIXELS_Y 90
#DEFINE cnTWIPS_PER_INCH 1440

DECLARE INTEGER GetActiveWindow IN W


DECLARE INTEGER GetDC IN WIN32API IN
DECLARE INTEGER GetDeviceCaps IN WIN

liHDC = GetDC(GetActiveWindow())

liPixelsPerInchX = GetDeviceCaps(liH
liPixelsPerInchY = GetDeviceCaps(liH

THIS.nxtwips = ( cnTWIPS_PER_INCH /
THIS.nytwips = ( cnTWIPS_PER_INCH /
ENDPROC

PROCEDURE TreeView.MOUSEMOVE
LPARAMETERS BUTTON, SHIFT, x, Y
WITH THISFORM
oHitTest = THIS.HitTest( x * .nxtw
IF TYPE("oHitTest")= "O" AND !ISNU
WAIT WINDOW NOWAIT oHitTest.FULL
ENDIF
ENDWITH
oHitTest = .NULL.
ENDPROC

PROCEDURE TreeView.NodeClick
LPARAMETERS oNode
LOCAL aNodeInfo[1]
IF ALINES(aNodeInfo,oNode.KEY,1,'_')
IF LOWER(aNodeInfo[1]) == 'custome
https://comunidadvfp.blogspot.com/search/label/ActiveX 29/49
11/12/2019 Comunidad de Visual FoxPro en Español: ActiveX

SELECT * FROM customer WHERE cus


ELSE
SELECT * FROM orders WHERE VAL(o
ENDIF
ELSE
SELECT * FROM orditems ;
WHERE VAL(order_id) = VAL(aNodeI
ENDIF
ENDPROC
ENDDEFINE

Gracias Ce n por compar r y autorizar esta


publicación.

E quetas: Ac veX

No hay comentarios. :

U lizando el control TreeView


(1/4)
Primera parte de una serie de códigos de
ejemplos sobre como u lizar el control
TreeView en VFP, escritos por el turco Ce n
Basoz (Microso Visual FoxPro MVP 1999-
2010).

#DEFINE tvwFirst 0
#DEFINE tvwLast 1
#DEFINE tvwNext 2
#DEFINE tvwPrevious 3
#DEFINE tvwChild 4

oForm = CREATEOBJECT('myForm')
WITH oForm
.ADDOBJECT('Tree','myTreeView')
.ADDOBJECT('Lister','Lister')
WITH .Tree
.Nodes.ADD(,0,"root1",'Main node 2')
.Nodes.ADD(,0,"root2",'Main node 3')
.Nodes.ADD('root1',4,"child11",'Chil
.Nodes.ADD('root1',4,"child12",'Chil
.Nodes.ADD('root2',4,"child21",'Chil
.Nodes.ADD('child21',3,"child20",'Ch
.Nodes.ADD('child11',4,"child111",'c
.Nodes.ADD('child111',3,"child112",'
.Nodes.ADD('child112',3,"child113",'

https://comunidadvfp.blogspot.com/search/label/ActiveX 30/49
11/12/2019 Comunidad de Visual FoxPro en Español: ActiveX

.Nodes.ADD('root1',3,"root0",'Main n
.VISIBLE = .T.
ENDWITH
.Lister.LEFT = .WIDTH - .Lister.WIDTH
.Lister.VISIBLE = .T.
.SHOW()
ENDWITH
READ EVENTS

DEFINE CLASS myForm AS FORM


AUTOCENTER = .T.
HEIGHT = 640
WIDTH = 800
PROCEDURE QUERYUNLOAD
CLEAR EVENTS
ENDPROC
ENDDEFINE

DEFINE CLASS myTreeView AS OLECONTROL


OLEDRAGMODE = 1
OLEDROPMODE = 1
NAME = "OleTreeView"
OLECLASS = 'MSComCtlLib.TreeCtrl'
HEIGHT = 600
WIDTH = 700

PROCEDURE INIT
WITH THIS
.linestyle =1
.labeledit =1
.indentation = 5
.PathSeparator = '\'
ENDWITH
ENDPROC

PROCEDURE NodeClick
*** ActiveX Control Event ***
LPARAMETERS NODE
NODE.ensurevisible
MESSAGEBOX(NODE.FULLPATH,TRANS(NODE.
ENDPROC

PROCEDURE _SubNodes
LPARAMETERS tnIndex, tnLevel
LOCAL lnIndex
lcFs = ''
WITH THIS
? IIF(tnLevel=0,'',REPLICATE(CHR(9
IF .Nodes(tnIndex).Children > 0
lnIndex = .Nodes(tnIndex).CHILD
._SubNodes(lnIndex,tnLevel+1)
DO WHILE lnIndex # .Nodes(tnInde
lnIndex = .Nodes(lnIndex).NEXT
._SubNodes(lnIndex,tnLevel+1)
ENDDO
https://comunidadvfp.blogspot.com/search/label/ActiveX 31/49
11/12/2019 Comunidad de Visual FoxPro en Español: ActiveX

ENDIF
ENDWITH
ENDPROC
ENDDEFINE

DEFINE CLASS lister AS COMMANDBUTTON


CAPTION = 'Listado'
HEIGHT = 32
WIDTH = 100

PROCEDURE CLICK
ACTIVATE SCREEN
CLEAR
LOCAL lnIndex
WITH THISFORM.Tree
lnIndex = .Nodes(1).Root.FirstSibl
._SubNodes(lnIndex,0)
DO WHILE lnIndex # .Nodes(1).Root.
lnIndex = .Nodes(lnIndex).NEXT.I
._SubNodes(lnIndex,0)
ENDDO
ENDWITH
ENDPROC
ENDDEFINE

Gracias Ce n por compar r y autorizar esta


publicación.

E quetas: Ac veX

3 comentarios :

28 de marzo de 2008

Ac veFiX
Ar culo original: Ac veFiX
h p://www.foxpert.com/knowlbits_200801_1.h
tm
Autor: Christof Wollenhaupt
Traducido por: Ana María Bisbé York

Los controles Ac veX no trabajan bien con


formas modales de VFP. Bien, esto no es
exactamente una gran sorpresa para nadie que
lo haya intentado. Si contacta con el creador de
un control Ac veX terminará recibiendo una de
https://comunidadvfp.blogspot.com/search/label/ActiveX 32/49
11/12/2019 Comunidad de Visual FoxPro en Español: ActiveX

estas dos respuestas:

"Nuestros controles funcionan en todos los


entornos soportados. ¿Qué es Visual FoxPro?" o
"Váyase por ahí. Nosotros no escribimos código
deficiente" Incluso los controles que funcionan
bien con VFP, como los controles del dbi
muestran este comportamiento.

¿No podemos hacer que los proveedores


solucionen esto? Admitámoslo, no es su error,
es un problema de Visual FoxPro. En realidad no
es un error, es un problema de diseño. Uno de
los problemas que ene que resolver el
FoxTeam con las ventanas modales que
simplemente no existe en Windows API. OK, lo
vemos; pero esto no significa que es real.

Windows crea una ventana modal inhabilitando


la ventana padre. Esto trabaja bien en un único
nivel de ventanas modales como es el caso de
una ventana de diálogo. Sin embargo, con
ventanas (o formularios) que pueden ser
modales, puede ser con formas múl ples en un
conjunto de formulario que mantenga accesible
mientras otras ventanas no, las cosas se tornan
más confusas.
Entonces, lo que ocurre con los controles
Ac veX es que realmente se agregan dos
ventanas al formulario. La más afuera es la
ventana del OLE que guarda la ventana que es
un control de Visual FoxPro. Dentro de esta
ventana anfitriona, el control Ac veX crea su(s)
propia(s) ventana(s) que se man enen bajo el
control del control Ac veX. La ventana interior
(o ventanas) es lo que conocemos como
"control Ac veX".

Cuando usted muestra una ventana modal,


Visual FoxPro inhabilita la ventana anfitriona de
todos los otros formularios. El control Ac veX
de dentro permanece ac vo; pero no recibe
ninguna entrada de usuario, porque la ventana
https://comunidadvfp.blogspot.com/search/label/ActiveX 33/49
11/12/2019 Comunidad de Visual FoxPro en Español: ActiveX

padre está deshabilitada. Como resultado, el


control no responde al ratón ni a eventos de
teclado, ni recibe el foco. Sin embargo, con núa
funcionando. Por ejemplo, se puede actualizar a
sí mismo, responder a otros eventos y cosas así.

Una vez que el usuario cierra la ventana modal,


Visual FoxPro ac va todas las ventanas
anfitrionas que fueron desac vadas. Mi apuesta
(en realidad lo que yo creo) es que Visual
FoxPro guarda el estado anterior cuando
inhabilita la ventana OLE y lo restablece cuando
la habilita. El control recibe el mensaje y
responde las entradas de usuario. Bueno, esto
es lo que ocurre justo en el primer nivel de los
formularios modales.

Sin embargo, parece que hay solamente una


variable para mantener el estado anterior
habilitado para cada ventana OLE anfitriona.
Entonces cuando se lanza el segundo formulario
modal, Visual FoxPro guarda el estado de la
ventana inhabilitada y la inhabilita nuevamente.
Cuando se cierra el formulario, este estado
inhabilitado comienza a ser restaurado. Al final,
la ventana anfitriona permanece inhabilitada,
incluso cuando todas las formas modales fueron
cerradas.

La forma que existe para solucionar esto -


desafortunadamente - no es genérica. Cuando
se dispara el evento Ac vate de un formulario
usted sabe que el formulario va a responder a
las entradas del usuario. En este punto ninguno
de los controles Ac veX del formulario actual
deberían estar inhabilitados. Puede asegurarse
de esto ejecutando el siguiente código para
cada control Ac veX que tenga en su
formulario.

Declare Long GetParent in Win32API Long


Declare Long EnableWindow in Win32API Lo
EnableWindow(GetParent(oleControl.Hwnd),

https://comunidadvfp.blogspot.com/search/label/ActiveX 34/49
11/12/2019 Comunidad de Visual FoxPro en Español: ActiveX

Donde oleControl es una referencia regular al


control Ac veX del formulario ( por ejemplo
Thisform.oleControl1). La propiedad HWND no
es una propiedad estándar que ofrezca VFP. Es
problema del control Ac veX para proveer del
controlador de ventana y toma el nombre de la
propiedad o el método. Necesita referirse a la
documentación del control Ac veX.

Nota del editor: Carlos Alloa nos indica una


corrección realizada para este ar culo en:
Ac veX generic fix.

¡ Gracias Carlos !

E quetas: Ac veX

No hay comentarios. :

19 de diciembre de 2007

Cómo saber si un Ac veX ya fué


registrado
A veces distribuimos Ac veX (archivos OCX), los
cuales es necesario registrar en Windows para
poder u lizarlos, pero cómo averiguar si ya lo
está para evitar su registro cada vez que se
ejecute el sistema o registrarlo si es necesario.

Determinar si un Ac veX esta registrado


llamando la siguiente función:

? OcxRegistrado("mscomctl2.monthview.2")
? OcxRegistrado("mscomctl2.dtpicker.2")
? OcxRegistrado("mscomctllib.treectrl.2"
? OcxRegistrado("mschart20lib.mschart.2"
? OcxRegistrado("mscommlib.mscomm.1") &&

FUNCTION OcxRegistrado(cClase)
Declare Integer RegOpenKey In Win32A
Integer nHKey, String @cSubKey,
Declare Integer RegCloseKey In Win32

https://comunidadvfp.blogspot.com/search/label/ActiveX 35/49
11/12/2019 Comunidad de Visual FoxPro en Español: ActiveX

Integer nHKey
nPos = 0
lEsta = RegOpenKey(-2147483648, cCla

If lEsta
RegCloseKey(nPos)
Endif

Return lEsta
Endfunc

Los archivos OCX enen una referencia o


nombre interno, para averiguar cual es
agregamos este a un formulario de VFP, lo
seleccionamos y revisamos la propiedad
OleClass y ese será el nombre que u lizaremos.

Para registrar el OCX puede ser:

1) Directamente desde la opción Run/Ejecutar


del botón inicio de Windows:

REGSVR32 <ArchivoOCX>

2) Desde Fox con macro de sus tución:

cRun="REGSVR32 <ArchivoOCX>"
!&cRun

3) Con la ru na de Jorge Mota:

DECLARE INTEGER DLLSelfRegister IN "Vb6s


STRING lpDllName
=DLLSelfRegister(<ArchivoOCX>)

-- REGISTRAR Y DESREGISTRAR UN ARCHIVO


OCX O DLL --
h p://comunidadvfp.blogspot.com/2002/08/re
gistrar-y-desregistrar-un-archivo-ocx.html

Saludos.

Jesus Caro V

E quetas: Ac veX

https://comunidadvfp.blogspot.com/search/label/ActiveX 36/49
11/12/2019 Comunidad de Visual FoxPro en Español: ActiveX

No hay comentarios. :

8 de junio de 2007

Registrar OCX / DLL en Windows


Vista
Antes de Windows Vista cada vez que
necesitabamos registrar una libreria Ac veX
(OCX, DLL) o un EXE lo podiamos hacer de
diversas maneras, una de las comunes era
simplemente u lizando el comando REGSVR32
de la suiguiente manera...

regsvr32 [/u] [/s] [/n] [/i[:líneaDeComa

Parámetros:
/u: Elimina el registro del servidor.
/s: Especifica que regsvr32 se
ejecute sin interfaz y que no
presente ningún cuadro de
mensaje.
/n: Especifica que no se invoca
DllRegisterServer. Esta opción se
ene que u lizar con /i.
/i: líneaComandos Invoca DllInstall
y le pasa una [líneaComandos]
opcional. Cuando se u liza con /u,
ac va la desinstalación de .dll.
nombrelibreria.DLL o OCX:
Especifica el nombre del archivo .dll
que se va a registrar.
/?: Muestra Ayuda en el símbolo
del sistema.
Al tratar de instalar librerias OCX y/o DLL's en
Windows Vista (Asi tambien como arhivos .EXE
que necesitan ser registrados) nos damos con la
desagradable sorpresa que no se puede, el SO
reporta un mensaje de error que dice mas o
menos :

https://comunidadvfp.blogspot.com/search/label/ActiveX 37/49
11/12/2019 Comunidad de Visual FoxPro en Español: ActiveX

Se cargo el modulo Libreria.ocx pero se produjo


un error en la llamada a dllRegisterserver
(codigo de error: 0x80004005)

Otro error encontrado es:

"Unexpected error; qui ng"

Al empezar a indagar con ese problema me di


con que los usuarios de VB6 y anteriores enen
el mismo problema asi que e aqui la solucion:

El problema radica fundamentalmente en que


Windows Vista hace mucho mas incapie en la
seguridad del sistema y ya que cualquiera de
estos pos de archivos son potencialmente
peligrosos, a menos que el ususario actual sea
el Admnistrador no permi ra la registración de
estos archivos.

Por lo tanto una solucion es loguearse en el


sistema como administrador (Primero debemos
ac var este usuario ya que por defecto viene
deshabilitado y al mismo empo desac var el
UAC (User Account Control), todo esto se hace
dentro del Panel de control/Control de Usuarios
(Debemos aclarar que no alcanza que el usuario
actual tenga perfil de administrador debemos
logueaes especificamente con la cuenta
Administrador o Administrator en su version
inglesa)

Una vez hecho esto ya podremos instalar las


librerias tal como lo haciamos antes.

Una solucion alterna va y mas rapida es:

1. Clicear en Inicio
2. En "Iniciar busqueda" o "Start Search"
pear cmd
3. Una vez encontrado el icono de cmd en el
menu
https://comunidadvfp.blogspot.com/search/label/ActiveX 38/49
11/12/2019 Comunidad de Visual FoxPro en Español: ActiveX

4. click derecho en el icono del cmd


(command)
5. elegir la opcion "Run as Administrator"
("Ejecutar como Administrador")
6. Ir a la carpeta en donde se encuentran las
librerias
7. Tipear nomlibreria.ext /regserver o
REGSVR32 nomlibreria.ext (En donde .ext
seria OCX/DLL o EXE según el caso)

Esto solucionara el problema y nos permi ra


probar nuestros sistemas/librerias en el nuevo
SO de M$
Para mas información sobre seguridad en
windows Vista:

h p://technet2.microso .com/WindowsVista/e
n/library/0d75f774-8514-4c9e-ac08-
4c21f5c6c2d91033.mspx?mfr=true

Daniel Salazar
www.ZondaSo ware.com.ar
Salta - Argen na

E quetas: Ac veX

No hay comentarios. :

8 de agosto de 2006

Conociendo Zip Component


En este ar culo vamos a conocer un
componente Ac veX freeware que puede
comprimir / descomprimir fácilmente un
archivo o carpeta con una sola línea de código.
Su nombre es "Zip Component" de Belus
Technology Inc.

Introducción

Con esta u lidad se puede comprimir y


https://comunidadvfp.blogspot.com/search/label/ActiveX 39/49
11/12/2019 Comunidad de Visual FoxPro en Español: ActiveX

descomprimir archivos y carpetas muy


facilmente desde Visual FoxPro. A con nuación
vamos a conocer los métodos del componente y
algunos ejemplos de uso con código VFP.

El enlace para descargar este componente es el


siguiente:

h p://xstandard.com/page.asp?p=C9891D8A-
5390-44ED-BC60-2267ED6763A7

Instalación

Para su instalación de debe copiar el archivo


"XZip.dll" descargado en una carpeta (Ej:
"C:\ZipComponent\") y desde la consola de
comandos (DOS), en el directorio creado,
ejecutamos: "regsvr32 XZip.dll".

En el caso de querer desinstalar el componente,


ejecutamos desde la consola de comandos:
"regsvr32 -u XZip.dll"

Métodos

Estos son los métodos y sus sintaxis:

Pack: Agrega un archivo o carpeta a un archivo


ZIP. El nivel de compresión puede ser de 1 a 9. El
valor por omisión es 6.

Pack(cRutaArchivo, cArchivoZip, lAlmacen

UnPack: Extrae el contenido de un archivo ZIP


de una carpeta.

UnPack(cArchivoZip, cRutaCarpeta, cPatro

Delete: Elimina un archivo de un archivo ZIP.

Delete(cArchivo, sArchivoZip)

https://comunidadvfp.blogspot.com/search/label/ActiveX 40/49
11/12/2019 Comunidad de Visual FoxPro en Español: ActiveX

Move: Mueve o renombra un archivo en el


archivo ZIP.

Move(cDeArchivo, cAArchivo, cArzhivoZip)

Contents: Recibe en un objeto la lista de


archivos y carpetas de un archivo ZIP.

Contents(cArchivoZip)

El objeto Items recibido con ene las siguientes


propiedades:
Count: Retorna la can dad de
miembros de la colección
Item: Retorna un miembro
específico de la colección.
La clase Item con ene las siguientes
propiedades:
Name: Nombre del archivo
Date: Fecha úl ma modificaión
Path: Ruta rela va del archivo
Size: Tamaño en bytes del archivo
Type: Tipo del item: 1=Carpeta y
2=Archivo

Propiedades

ErrorCode: Retorna el código de error de la


úl ma operación.
ErrorDescrip on: Retorna la descripción del
código de error de la úl ma operación.
Version: Retorna la versión del producto.

Ejemplos en VFP

Veremos algunos ejemplos en código de Visual


FoxPro, y lo fácil de su uso:

Comprimir archivos:

loZip = CREATEOBJECT("XStandard.Zip")
loZip.Pack("C:\Prgs\Prog1.prg", "C:\Zips
https://comunidadvfp.blogspot.com/search/label/ActiveX 41/49
11/12/2019 Comunidad de Visual FoxPro en Español: ActiveX

loZip.Pack("C:\Prgs\Prog2.prg", "C:\Zips
loZip.Pack("C:\Prgs\Prog3.prg", "C:\Zips
loZip = NULL

Comprimir archivos con la ruta por omisión:

loZip = CREATEOBJECT("XStandard.Zip")
loZip.Pack("C:\Prgs\Prog1.prg", "C:\Zips
loZip = NULL

Comprimir archivos con una ruta específica:

loZip = CREATEOBJECT("XStandard.Zip")
loZip.Pack("C:\Prgs\Prog1.prg", "C:\Zips
loZip.Pack("C:\Prgs\Prog1.prg", "C:\Zips
loZip = NULL

Comprimir mul ples archivos usando


comodines:

loZip = CREATEOBJECT("XStandard.Zip")
loZip.Pack("C:\Prgs\*.prg", "C:\Zips\Pro
loZip = NULL

Con nuar leyendo el ar culo »

E quetas: Ac veX

2 comentarios :

7 de agosto de 2006

Como enviar un email desde VFP


sin MAPI
Este es siempre un tema recurrente en el grupo,
y como he respondido varias consultas privadas
sobre este mismo tema, creo que es hora de
hacerlo un poco mas públicamente.

Una forma de enviar un email desde VFP sin


lidiar con los problemas de MAPI, Outlook, OE,
https://comunidadvfp.blogspot.com/search/label/ActiveX 42/49
11/12/2019 Comunidad de Visual FoxPro en Español: ActiveX

etc, es usar un componente de 3ros. Existe uno


sumamente funcional y gratuito llamado
w3JMail, de la empresa DIMAC
(h p://www.dimac.net/), el cual funciona
perfecto en VFP y no requiere de ningún otro
componente instalado.

El componente puede ser descargado desde


esta dirección:

h p://www.dimac.net/FreeDownloads/v3DlSta
rt.asp?ProductID=5

La ayuda la encontrarán aquí:

h p://www.dimac.net/default2.asp?
M=Products/MenuCOM.asp&P=Products/w3JM
ail/start.htm

Y adicionalmente les anexo un pequeño


ejemplo de como enviar un email con
a achments desde VFP usando el w3JMail.

* Ejemplo de como enviar un email con


* adjuntos usando el componente
* w3JMail de DIMAC
*
* Por: Victor Espina
*
CLOSE ALL
CLEAR ALL
CLEAR
*
*-- Se instancia el componente
*
LOCAL oEmail
oEmail = CREATEOBJECT("JMail.Message")
*
*-- Se activa el logging interno del com
* y se desactiva la notificacion de er
*
oEmail.Logging = .T.
oEmail.Silent = .T.
*
*-- Remitente
*
oEmail.From = "remitente@server.com"

https://comunidadvfp.blogspot.com/search/label/ActiveX 43/49
11/12/2019 Comunidad de Visual FoxPro en Español: ActiveX

oEmail.FromName = "Nombre del Remitente"


*
*-- Destinatario(s). El 2do parametro es
* invocar el metodo AddRecipient las v
*
oEmail.AddRecipient("destinatario@server
*
*-- Asunto
*
oEmail.Subject = "Email de prueba con w3
*
*-- Texto. La propiedad Body es de lectu
* se puede usar el metodo AppendText()
* del mensaje.
*
* Para enviar un mensaje en formato HT
* y/o el metodo AppendHTML()
*
oEmail.Body = "Este es un email de prueb
"usando el componente w3JMail de DIMAC
*
*-- Adjuntos. Se puede invocar el metodo
* como sea necesario. El 2do parámetro
* sera incluido dentro del mensaje (in
*
oEmail.AddAttachment(FULLPATH("mail1.prg
*
*-- Se envia el mensaje. El metodo Send(
* el mensaje correctamente o .F. en ca
* Log contiene el log del problema ocu
*
* El metodo Send() acepta como paramet
* servidores SMTP separados por coma.
* usuario/pwd para cada servidor, usan
*
* user:pwd@server
*
LOCAL lOk
lOk = oEmail.SEND("smtp.server.com")
IF lOk
MESSAGEBOX("Mensaje enviado!")
ELSE
MESSAGEBOX(eMail.Log)
ENDIF
*

Saludos.

Victor Espina

E quetas: Ac veX , Internet

https://comunidadvfp.blogspot.com/search/label/ActiveX 44/49
11/12/2019 Comunidad de Visual FoxPro en Español: ActiveX

4 comentarios :

5 de diciembre de 2005

Solucionar Error: OLE error code


0x80040112: Appropriate license
for this class
Este es un error común al momento de trabajar
con algunos Ac veX, veremos la forma de
solucionar (o por lo menos darle la vuela)...

Cuando se trabaja con los Ac veX que están


incluidos dentro de la distribución de VFP, suele
pasar un error justo cuando se ejecuta una línea
como la siguiente:

Local loWSock, lcIp


loWSock = CreateObject("MSWinsock.Winsoc
lcIp = loWSock.LocalIP
MessageBox(lcIp)

El código anterior funciona correctamente


dentro del IDE de VFP, pero cuando se crea un
.EXE y éste ene algún código donde se crea un
objeto por medio de las funciones
CREATEOBJECT() , NEWOBJECT(), o por medio
del método ADDObject marca el citado error.

Por qué pasa eso?

Este error sucede debido a una restricción de


los mismos, que para que funcionen en VFP es
necesario que los Ac veX estén embebidos ya
sea en un formulario o en una clase heredada
de OLEControl.

Cómo solucionarlo

Como comentaba anteriormente, es buena


https://comunidadvfp.blogspot.com/search/label/ActiveX 45/49
11/12/2019 Comunidad de Visual FoxPro en Español: ActiveX

prác ca crear clases en donde se tenga


embebido dicho control, como un ejemplo aquí
ene un código que hace uso del control
MSCommonDialog:

frmMyForm = CREATEOBJECT("Form")

FrmMyForm.AddObject("oleObject1","oleCom
WITH FrmMyForm.OleObject1
.SetOptions()
.showopen()
?.FileName
ENDWITH

DEFINE CLASS oleComDialObject as OLECont


OleClass ="MSComDlg.CommonDialog.1"
PROCEDURE SetOptions
#define COMMDLOG_DEFAULT_FLAG 0x00
#define COMMDLOG_RO 4
#define COMMDLOG_MULTFILES 512

This.Flags = COMMDLOG_DEFAULT_FLAG
This.FileName = "*.dbf"
This.filter = "DBF Files|*.dbf"
ENDPROC
ENDDEFINE

Si deseas mayor documentacion Doug Hennig


ene un documento que explica a mayor detalle
el manejo de Ac veX con VFP:

--- Using Visual FoxPro Ac veX Controls (118K) -


--
h p://downloads.stonefield.com/pub/axsamp.z
ip

Y también está documentado en el MSDN de


VFP como un Bug:

--- BUG: License Error with Ac veX Control


Added at Run-Time ---
h p://support.microso .com/?scid=192693

Espero les sea de u lidad.

Un agradecimiento a Alex Feldstein por el


https://comunidadvfp.blogspot.com/search/label/ActiveX 46/49
11/12/2019 Comunidad de Visual FoxPro en Español: ActiveX

código de MSCommonDialog

Espartaco Palma Mar nez

E quetas: Ac veX

No hay comentarios. :

27 de febrero de 2004

Soluciones para Comprimir


Archivos (.ZIP) con Visual FoxPro
Una ac vidad casi fundamental de las
aplicaciones de Base de Datos es hacer
respaldos de la información, una de las
opciones más viables es dejarlos en formato
.ZIP, hay varias maneras de poder hacerlo, aquí
te presentamos como...

Para poder crear archivos .ZIP, lo que te


recomendaría es u lizar una DLL o Ac veX, aquí
te comento sobre varias gratuitas, cada una de
ellas ene su propia documentación.

--- EEVA ZIPMASTER---


h p://www.eetaso .ee/zipmaster.htm

--- SAWZipNG ---


h p://users.skynet.be/saw/

Si no te hace falta comprimir con contraseñas,


este te puede valer
h p://www.xstandard.com/download/x-zip.zip

La documentación:
h p://www.xstandard.com/page.asp?
p=C9891D8A-5390-44ED-BC60-2267ED6763A7

--- Zip it ---


h p://www.ketoan-fas.com/download/zipit.zip

https://comunidadvfp.blogspot.com/search/label/ActiveX 47/49
11/12/2019 Comunidad de Visual FoxPro en Español: ActiveX

--- Ar culo "Comprime/Descomprime ZIPs" de


FoxPress ---
h p://www.fpress.com/revista/Num1103/Truco
.htm

--- ZBit zip-unzip component lite --- [Agregado


29/Marzo/2004]
h p://www.zbi nc.com/product.asp?prodid=2

Pero si quieres algo mas profesional puedes


optar por las opciones de pago, con esto, se
incluyen más métodos, mejores interfaces y
claro, el soporte del fabricante:

--- Xceed ZipLibray ---


h p://www.xceedso .com/products/ZipCompL
/

--- DynaZip ---


h p://www.dynazip.com

Tambien existe uno mas, el compañero E.


Paredes lo recomienda:

--- Abale ZIP component ---


h p://www.abale.com

Todas las anteriores opciones han sido probadas


por la comunidad de Visual FoxPro, es decir, si
funcionan con la herramienta, y han sido
recopiladas de los mensajes que se mandan al
newsgroup de microso :
microso .public.es.vfoxpro.* , así como
también un servidor las ha comprobado.

Espero te sirva.

------------------------------------
Espartaco Palma Mar nez

https://comunidadvfp.blogspot.com/search/label/ActiveX 48/49
11/12/2019 Comunidad de Visual FoxPro en Español: ActiveX

E quetas: Ac veX

1 comentario :

Página Principal Entradas an guas

Suscribirse a: Entradas ( Atom )

Temas

Traducciones ( 227 ) API ( 117 ) Ru nas ( 96 ) Formularios ( 85 )


Ar culos ( 75 ) DBF ( 67 ) SGDB ( 60 ) General ( 57 ) Internet ( 46 ) GDI
( 45 ) Fecha y hora ( 43 ) Informes ( 42 ) Clases ( 38 ) U lidades ( 35 )
Automa on ( 26 ) VFPx ( 19 ) Ac veX ( 15 ) Libros ( 15 ) Código de barras ( 12 ) No cias
( 9 ) OOP ( 7 ) WMI ( 1 )

Comunidad de Visual FoxPro en Español (PortalFox) ©. Con tecnología de Blogger.

https://comunidadvfp.blogspot.com/search/label/ActiveX 49/49

S-ar putea să vă placă și