MSFLEXGRID en VFP

846 views
Skip to first unread message

Wagner Cevallos

unread,
Jun 1, 2024, 5:44:34 PM6/1/24
to Comunidad de Visual Foxpro en Español
Estimados compañeros buenas tardes, puede algun compañero ayudarme para el uso de MSFLEXGRID en Visual FoxPrro, no tengo ninguna imformación . Les agradezco de antemano

integral

unread,
Jun 3, 2024, 8:04:44 AM6/3/24
to Comunidad de Visual Foxpro en Español

Buenos Días

Amigo  wagjavcevmac

Referente al  control  MSFLEXGRID he encontrado información pero en Visual Basic. 

Te comento que dicho control viene incluido en los Activex de VFP. 

Saludos,

Integral

Zarlu

unread,
Jun 3, 2024, 11:50:40 AM6/3/24
to Comunidad de Visual Foxpro en Español
formflexgrid.2SCT
formflexgrid.2scx

integral

unread,
Jun 3, 2024, 12:45:58 PM6/3/24
to Comunidad de Visual Foxpro en Español
Buenos Días

Respondiendo en parte a los colegas que me escribieron pidiéndome compartir ejemplos en VFP.

En verdad siempre quise utilizar dicha OCX en VFP y no tengo nada desarrollado del OCX en VFP 

Pero estamos para ayudar y colaborar en la medida de nuestras posibilidades en este gran foro de VFP.

Buscando información encontré el fin de semana el siguiente link

http://www.atoutfox.com/articles.asp?ACTION=FCONSULTER&ID=0000000230


Aqui otro link de ejemplo que utiliza conexion en ADO. 

Si Algun experto pudiera convertirlo a conexion ODBC seria excelente para aquellos que deseamos implementar en nuestros proyectos este OCX que viene incluido en nuestro VFP 9.0

https://www.foxite.com/archives/axctive-x-flex-grid-0000169530.htm


LOCAL oCon as AdoDb.Connection, oRS as ADODb.Recordset

oCon = CREATEOBJECT('AdoDb.Connection')

oCon.ConnectionString = ;

  "Provider=VFPOLEDB;Data Source="+_samples+'data\testdata.dbc'

oCon.Open()

 

TEXT to m.lcSQL NOSHOW PRETEXT 8

Select c.cust_id, c.company,

  o.order_id, o.order_date,

  e.First_Name-(' '+e.Last_Name) As Employee,

  oi.line_no, p.prod_name,

  oi.unit_price, oi.quantity

  FROM  testdata!customer c

  INNER Join testdata!orders o

  ON  c.cust_id = o.cust_id

  INNER Join testdata!Employee e

  ON  o.emp_id = e.emp_id

  INNER Join testdata!orditems oi

  ON  o.order_id = oi.order_id

  INNER Join testdata!products p

  ON  oi.product_id = p.product_id

  order By p.prod_name

ENDTEXT

 

oRS = oCon.Execute(m.lcSQL)

PUBLIC oForm

oForm = CREATEOBJECT('myForm',oRS)

oForm.Show()

 

 

DEFINE CLASS myForm as Form

  Height = 450

  Width = 750

  Add OBJECT hflex AS olecontrol WITH ;

    Height = 420, ;

    Width = 750, ;

    DragIcon = "c:\program files\microsoft visual foxpro 9\graphics\cursors\h_point.cur",;

    OleClass = 'MSHierarchicalFlexGridLib.MSHFlexGrid'

 

  PROCEDURE init(toRS)

    with This.HFlex

      .Datasource = toRS

      for ix = 1 to .Cols - 1

        .MergeCol(ix) = .t.

      endfor

      .MergeCells = 3

    endwith

    this.DoSort(This.HFlex)

  ENDPROC

 

  PROCEDURE doSort(toObject)

    with toObject

      .Col = 0

      .ColSel = .Cols - 1

      .Sort = 1 && Generic Ascending

    endwith

  ENDPROC

 

  PROCEDURE hFlex.MouseDown

    LPARAMETERS button, shift, x, y

    with this

      .Tag = ""

      If .MouseRow = 0

        .Tag = Str(.MouseCol)

        .Drag( 1 )

      endif

    endwith

  ENDPROC

 

  PROCEDURE HFlex.DragDrop

    LPARAMETERS oSource, nXCoord, nYCoord

    If !empty(this.Tag)

      with this

        .Redraw = .F.

        .ColPosition(Val(.Tag)) = .MouseCol

        thisform.DoSort(this)

        .Redraw = .t.

      endwith

    endif

  endproc

Enddefine 


Saludos,

Integral

(Lima-Perú)

Message has been deleted

integral

unread,
Jun 3, 2024, 4:11:31 PM6/3/24
to Comunidad de Visual Foxpro en Español
Que tal Amigos :

Buenas Tardes

Aquí les dejo otro link y otro ejemplo.
 

LOCAL loConn AS ADODB.Connection

LOCAL loCmd AS ADODB.Command

LOCAL loRs AS ADODB.Recordset

LOCAL lcConnString AS STRING

LOCAL li, ji, i, columnas, filas

LOCAL querysql AS STRING

 

TEXT TO querysql NOSHOW TEXTMERGE PRETEXT 8

SELECT * FROM usuarios;

ENDTEXT

 

*** Creamos la conexión ADO con la cadena de conexión del OLEDB Provider de MYSQL.

* conexion por usuario / password de MYSQL Server

loConn = CREATEOBJECT('ADODB.Connection')

loConn.ConnectionString = [Provider=MySqlProv.3.9;Data Source=datosmysql;Password=12345;] + ;

   [User ID=root;Location=localhost;]

loConn.Open()

 

 

loRS = CREATEOBJECT('ADODB.Recordset')

loRS.ActiveConnection = loConn

loRS.LockType = 3  && adLockOptimistic

loRS.CursorLocation = 3  && adUseClient

loRS.CursorType = 3  && adOpenStatic

loRS.OPEN([SELECT * FROM usuarios;])

columnas = loRS.Fields.Count

filas = loRS.RecordCount

Thisform.Text1.Value= columnas

thisform.Text2.Value = filas

Thisform.Olecontrol1.Cols = columnas

Thisform.Olecontrol1.Rows = filas

 

    Thisform.Olecontrol1.DataSource = loRS

   

loRS.CLOSE()

loConn.CLOSE()

 

-----------------------------------------------------------------------------------------------------------------------

 

LOCAL loConn AS ADODB.Connection

LOCAL loCmd AS ADODB.Command

LOCAL loRs AS ADODB.Recordset

LOCAL lcConnString AS STRING

LOCAL li, ji, i, columnas, filas

 

 

*** Creamos la conexión ADO con la cadena de conexión del OLEDB Provider de MYSQL.

* conexion por usuario / password de MYSQL Server

loConn = CREATEOBJECT('ADODB.Connection')

loConn.ConnectionString = [Provider=MySqlProv.3.9;Data Source=datosmysql;Password=12345;] + ;

   [User ID=root;Location=localhost;]

loConn.Open()

 

loRS = CREATEOBJECT('ADODB.Recordset')

loRS.ActiveConnection = loConn

loRS.LockType = 3  && adLockOptimistic

loRS.CursorLocation = 3  && adUseClient

loRS.CursorType = 3  && adOpenStatic

loRS.OPEN([SELECT * FROM usuarios;])

columnas = loRS.Fields.Count + 1

filas = loRS.RecordCount + 1

Thisform.Text1.Value= columnas

thisform.Text2.Value = filas

Thisform.Olecontrol1.Cols = columnas

Thisform.Olecontrol1.Rows = filas

 

FOR li=0 TO MIN(loRs.FIELDS.COUNT, 4) && primeros 5 campos como máximo

      Thisform.olecontrol1.TextMatrix(0, li) = loRS.Fields(li).Name

    NEXT

 

FOR ji=1 TO loRS.RecordCount && primeros 5 campos como máximo

    FOR i=0 TO MIN(loRs.FIELDS.COUNT, 4) && primeros 5 campos como máximo

      Thisform.olecontrol1.TextMatrix(ji, i) = loRS.Fields(i).Value

    NEXT

     loRs.MoveNext

    NEXT

 

loRS.CLOSE()

loConn.CLOSE()

 

 Saludos,

Integral



Wagner Cevallos

unread,
Jun 3, 2024, 5:23:12 PM6/3/24
to publice...@googlegroups.com
Integral muy amable, voy a proceder a revisar cada código. Te agradezco 

--
Blog de la Comunidad Visual FoxPro en Español http://comunidadvfp.blogspot.com
---
Has recibido este mensaje porque estás suscrito al grupo "Comunidad de Visual Foxpro en Español" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a publicesvfoxp...@googlegroups.com.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/publicesvfoxpro/3ce6afb7-dadd-4aa0-8524-45db0c3c10abn%40googlegroups.com.


--
Ing. Wagner Javier Cevallos  Macías
0985303564-0996496512
Portoviejo-Manabí-Ecuador

integral

unread,
Jun 4, 2024, 12:44:57 AM6/4/24
to Comunidad de Visual Foxpro en Español
Buenas Noches Colegas :

Me escriben indicándome que les resulta un poco complicado entender el uso del MsFlexGrid.

Aquí les adjunto un ejercicio practico del uso de dicho control pero esta escrito en Visual Basic.


Algún colega que domine Visual Basic y lo pueda convertir a VFP seria genial...

Atte.,

Integral

integral

unread,
Jun 7, 2024, 12:42:15 AM6/7/24
to Comunidad de Visual Foxpro en Español

Que tal Amigos :

Buenas Noches 

Aquí les pongo otro ejemplo :

1. Crear un formulario.
2. En el evento Load  del formulario poner lo siguiente :  USE HOME(2)+"\Tastrade\Data\customer.dbf" AGAIN IN 0 SHARED
3. Insertar el Control Ocx Flexgrid en el formulario
4. En el Init del Control poner el siguiente código:

Local lngWidth, i, x
lngWidth  = 3000       
Select customer
Count To x
With This
       .Cols = 2                                                                  .
       .Rows = 0
       .AddItem(Chr(9)+"Nombre")                                                  
       .Rows = x                                                                  )
       .FixedRows = 1
       .WordWrap = .T.
       .RowHeight(0) = .RowHeight(0) * 2                                          
       .ColWidth(0) = lngWidth / 2                                                
       .ColWidth(1) = lngWidth*1.5
       For intLoopCount = 1 To (.Rows-1)
             .TextMatrix(intLoopCount, 0) = "Company #" +Transform(intLoopCount)  && Row title  
       Next intLoopCount
       Select customer
       i = 1
       Scan
             .TextMatrix(i, 1) = customer.company_name
             i = i + 1
             If i = x
                   Exit
             Endif
       Endscan
Endwith

Saludos,

Integral

Wagner Cevallos

unread,
Jun 7, 2024, 6:45:15 AM6/7/24
to publice...@googlegroups.com
Gracias Integral, buen ejemplo ya agrego a mi código unas líneas de esta , que le van como anillo al dedo . Te agradezco 

integral

unread,
Jun 7, 2024, 10:54:34 PM6/7/24
to Comunidad de Visual Foxpro en Español

Que tal Amigos :

Aquí les muestro una imagen del ejemplo que les pase en VFP. 

EJEMPLO_FLEXGRID_VFP.jpg
Saludos,

Integral

integral

unread,
Jun 10, 2024, 12:46:44 AM6/10/24
to Comunidad de Visual Foxpro en Español
Que tal Amigos :

Aquí una imagen de muestra de lo avanzado. teniendo como referencia los ejemplos mostrados anteriormente.

BUSQUEDA_FLEXGRID_VFP.jpg

Saludos,

Integral

Dsan

unread,
Jun 10, 2024, 4:40:58 PM6/10/24
to publice...@googlegroups.com
Hola, grupo y cual seria la ventaja de la grid de MsFlexGrid sobre esta nativa del vfp?
porque yo la veo igual... o tiene algo mas?  lo otro si funciona este control sobre 64 vfp advanced add on, no oficial.?

saludos
DSanchez
PD.:
image.png









Wagner Cevallos

unread,
Jun 10, 2024, 4:59:09 PM6/10/24
to publice...@googlegroups.com
image.png
Este MERGE es el único cambio , por el requerimiento de los usuarios, reitero mis agradecimientos INTEGRAL

Trento

unread,
Jun 10, 2024, 5:36:32 PM6/10/24
to Comunidad de Visual Foxpro en Español
Mi estimado Douglas, llevo haciéndome esa pregunta desde hace varios días.

Creo que tendrá qué ver simplemente con aparentar un "look" (horrible a mi parecer, pues eso de mostrar "zonas fantasma" dentro el objeto contenedor... muy feíto para mi gusto).
Quizá sea por "esnobismo"; quizá por no dominar bien el Grid de VFP con el que se puede hacer prácticamente todo... y cito a uno de los libros sagrados de VFP:

1001 Things You Wanted To Know About Visual FoxPro

Marcia Akins
Andy Kramek
Rick Schummer

Hentzenwerke Publishing

Chapter 6

Grids: The Misunderstood Controls

"To be great is to be misunderstood." (Essays, "Self-Reliance" by Ralph Waldo Emerson)

The grid is the most maligned control in Visual FoxPro. Many experts have publicly
expressed the opinion that they never, under any circumstances use a grid for data
entry. Although it's difficult to tame, the grid can be used very effectively for this
purpose in the right situation. A grid is also the best choice when it comes to displaying
large amounts of data very quickly. In this chapter we will present you with some tried
and tested techniques that you can use to get more from your grids.

Quizá nos den una razón tan sencilla como "pues porque me gusta más y punto".

Y como veo ya la respuesta de wagjavcevmac @gmail.com y no era más que un "merge" o agrupamiento, pues lo mismo se puede hacer en VFP.
¿Un grid que agrupe las ventas por cliente, por marca y su detalle? ¿Que además permita diferentes criterios de filtro -Tipo de Venta, Cliente, Marca, Vendedor?

¡Ok!


VFPGrid.png

A fin de cuentas, como dicen: "En gusto se rompen géneros".

Y si a wagjavcevmac @gmail.com el cliente le exigió que quería un MSFlexGrid y con ese tipo de "merge" o agrupamiento y ha resuelto su problema y le ha cobrado al cliente... ¡pues todo mundo feliz!



Saludos.

Wagner Cevallos

unread,
Jun 10, 2024, 5:50:44 PM6/10/24
to publice...@googlegroups.com
la verdad no estoy para discrepar , repito muchas gracias INTEGRAL

Dsan

unread,
Jun 10, 2024, 6:51:09 PM6/10/24
to publice...@googlegroups.com
Hola Saludos colegas, 

A mi hace años Victor Hugo me envió un ejemplo, cómo interactuar recuerdo que mi intención era meter registros de cabecera. 

Luego me salió otro caso y ahí fui jugando con el grid: o un editbox y al final lo logre si no cumplia con cierta condición el tamaño lo pasaba a columna.text1 sino lanzaba el editbox es jugar con el grid con: 

 DynamicBackColor 
 DynamicFontBold 
DynamicFontSize 
DynamicCurrentControl 


Saludos

Trento

unread,
Jun 11, 2024, 12:25:02 AM6/11/24
to Comunidad de Visual Foxpro en Español
Y yo repito:


"Y si a wagjavcevmac @gmail.com el cliente le exigió que quería un MSFlexGrid y con ese tipo de "merge" o agrupamiento y ha resuelto su problema y le ha cobrado al cliente... ¡pues todo mundo feliz!"

Y aclaro lo siguiente: Si por esto se aprendió a utilizar una nueva herramienta que ahora formará parte del arsenal... ¡genial!

En lo personal, jamás he tenido que recurrir a un OCX. Todo es VFP puro.

Obvio, utilizo otras herramientas como chilkat y... ¡chilkat! ¿Qué más? Hasta ahora todo lo he podido resolver con VFP y desde luego, librerías de colegas que están hechas en... ¡Oh, Dios mió! ¡Visual FoxPro!

Sin discrepancias, me despido cordialmente.

Saludos.

integral

unread,
Jun 12, 2024, 12:32:40 AM6/12/24
to Comunidad de Visual Foxpro en Español
Que tal amigo Wagner

Que bueno saber que te sirvió los ejemplos que expuse y así lograste utilizar el control  MSflexGrid.

Pensé que dicho control era solo exclusivo del Visual Basic pero buscando y leyendo sobre el tema si era posible utilizarlo en VFP. Aunque mi persistencia hizo que pueda encontrar información sobre el tema ya que existe mayor información y explicación con ejemplos para Visual Basic 

En gustos y colores los autores no se ponen de acuerdo .

Aquí te muestro una imagen con lo avanzado.

COLOR FILA Y COLUMNA.jpg

De esta forma doy por terminado mi colaboración sobre este tema.

Hasta la próxima

Saludos,

Integral
(Lima-Perú)

Wagner Cevallos

unread,
Jun 12, 2024, 6:56:32 AM6/12/24
to publice...@googlegroups.com
Gracias Integral nuevamente, yo solo lo había trabajado en vb , y estaba enfrascado en los trigger de la base, con tus ideas y ejemplos pude concretar la interfaz que el cliente necesitaba. 

Reply all
Reply to author
Forward
0 new messages