Page 1 of 2
GRID - HEADER / CABECERA
Posted: Mon Dec 19, 2022 1:49 pm
by SALINETAS24
Hola a todos.
El la definición del GRID puedo usar [ ON HEADCLICK <abBlock> ] para cuando pulso la cabecera del GRID.
Cuando tengo varias columnas, (por ejemplo 6), creo aBlock de esta forma y me funciona sin problemas
FOR nFor=1 to 6
B:=STR(nFor)
A:={ { || ordena(&B)} }
aadd(aBlock,a[1] )
NEXT
El parametro "&B" me indica la cabecera que ha pulsado el usuario.
Mi pregunta, ¿hay alguna función que me devuelva el nº cabecera/columna que he pulsado en la cabecera del GRID..? Algo como ( This.CellColIndex ) pero para la cabecera y evitar asi pasar el parametro &B
Gracias a todos por vuestra colaboración y vamos con una cervecita fresquita!!!
Re: GRID - HEADER / CABECERA
Posted: Mon Dec 19, 2022 4:48 pm
by ASESORMIX
Hola.
Puedes usar esto
ON HEADCLICK { {||MsgInfo('Click 1')} , {||MsgInfo('Click 2')} , {||MsgInfo('Click 3')} }
Re: GRID - HEADER / CABECERA
Posted: Mon Dec 19, 2022 7:07 pm
by SALINETAS24
ASESORMIX wrote: ↑Mon Dec 19, 2022 4:48 pm
Hola.
Puedes usar esto
ON HEADCLICK { {||MsgInfo('Click 1')} , {||MsgInfo('Click 2')} , {||MsgInfo('Click 3')} }
Hola ASESORMIX, gracias por contestar.
Eso lo conozco, es parecido a usar el bucle FOR que yo he puesto en el primer comentario.
Pero no me sirve, Lo que busco (que no se si existe), si hay alguna forma de conocer que columna de la Cabecera del Grid ha pulsado el usuario..
Gracias
Re: GRID - HEADER / CABECERA
Posted: Mon Dec 19, 2022 8:03 pm
by Red2
Thank you for your question SALINETAS24.
I also want to know how to determine the column number when a Grid Header is pressed.
Red2
Re: GRID - HEADER / CABECERA
Posted: Mon Dec 19, 2022 9:08 pm
by SALINETAS24
Hola a todos.
El los fuentes, en el programa h_windows.prg y en partir de línea 2680 he encontrado el siguiente código
Code: Select all
* Browse Header Click .........................
If GetNotifyCode ( lParam ) = LVN_COLUMNCLICK
if ValType ( _HMG_SYSDATA [ 17 ] [i] ) == 'A'
lvc := GetGridColumn(lParam) + 1
if HMG_LEN (_HMG_SYSDATA [ 17 ] [i]) >= lvc
_DoControlEventProcedure ( _HMG_SYSDATA [ 17 ] [i] [lvc] , i )
EndIf
EndIf
Return 0
EndIf
Por lo que yo creo entender la variable LVC que genera la función GetGridColumn(lParam) contiene el numero de columna de cabecera que ha sido pulsado ya que posteriormente envia a _DoControlEventProcedure() la funcion correspondiente, que se encuentra archivada en _HMG_SYSDATA[17]
He intentado ejecutar este trozo de programa, copiandolo en el mio pero me da error.
Si alguien conoce mejor los fuentes y me puede orientar, agradecido.
Cerveza fresca para todos el mundo.
Re: GRID - HEADER / CABECERA
Posted: Tue Dec 20, 2022 9:25 pm
by franco
Could you not send a parameter to your own function.
Private myheadclick := 0
ON HEADCLICK { {|| mycheckclick(1))} , {|| mycheckclick(2)} , {||mycheckclick(3)} }
Function mycheckclick
parameter H
myheadckick := H
return
Franco
Re: GRID - HEADER / CABECERA
Posted: Tue Dec 20, 2022 10:27 pm
by Red2
Hi SALINETAS24,
En parte de mi código, tengo un comentario de que GetGridColumn() es una función solo de MiniGUI.
Me pregunto si esto es parte del error que tuviste.
In some of my code I have a comment that GetGridColumn() is an MiniGUI only function.
I wonder if this is part of the error you had.
Red2
Re: GRID - HEADER / CABECERA
Posted: Wed Dec 21, 2022 7:59 am
by SALINETAS24
Muchas gracias a todos por contestar.
Ya lo tengo resuelto!!!
Lo que persigo es hacer una "FUNCION" generica que se pueda llamar usando solo variables definidas como locales. Si pasamos una variable usando "&" tienen que ser definidas como privadas y eso no lo quiero.
Aquí os paso la solución.
Se define el grid
Code: Select all
LOCAL cWinSplitGrid:="WINMAIN"
LOCAL cGridNombre:="GRID"
FOR nFor=1 TO LEN(_aGridLongitud)
aCadena:={}
aCadena:={ { || _ORDENARGRID(cWinSplitGrid,cGridNombre)} }
nAnchoGrid+=_aGridLongitud[nFor]
AADD(_aBlock,aCadena[1])
NEXT
DEFINE GRID &cGridNombre
PARENT &cWinSplitGrid
ROW 110
COL 5
...../...
ON HEADCLICK _aBlock
END GRID
Y esta sería la funcion
Code: Select all
PROC _ORDENARGRID(cWinSplitGrid,cGridNombre)
LOCAL nPos := ASCAN ( _HMG_SYSDATA [3] , EventHWND() )
LOCAL nFor, nColIni, nColFin,nColum, nPulsa1
LOCAL aCell:={}
// Obtengo posicion donde hice CLICK
aCell:=_GetGridCellData(nPos)
nColIni:= GETPROPERTY (cWinSplitGrid,cGridNombre,"COL")
nColum:= GETPROPERTY (cWinSplitGrid,cGridNombre,"ColumnCOUNT")
nPos:=0
FOR nFor:=1 TO nColum-1
IF nPos=0
nPulsa1:= GETPROPERTY (cWinSplitGrid,cGridNombre,"ColumnWIDTH",nFor)
nColFin:=nColIni+nPulsa1
IF aCell[1]>=nColIni .AND. aCell[1]<=nColFin
nPos:=nFor
ENDIF
nColIni+=nPulsa1
ENDIF
NEXT
IF nPos=0
nPos:=nColum
ENDIF
MSGBOX("COLUMNA "+STR(nPos))
RETURN
Espero que os guste y que lo podáis aprovechar.
Vamos con una cervecita fresquita para todos, que esta ronda la pago yo!!!!

Re: GRID - HEADER / CABECERA
Posted: Sun Jan 26, 2025 2:19 pm
by tonton2
Bonjour a toute l'équipe .
"voilla un programme d'entrée de produits dans une base de donnée ENSTOCKDBF.DBF en choisissant le produit dans une base CONSTART.DBF .je voudrais remplacer la recherche effectuée par COMBOBX dans la grille GRDSTOCK par une recherche dynamique par lettre"
translation google :
Hi!
"Here is a program for entering products into a database ENSTOCKDBF.DBF by selecting the product from a CONSTART.DBF database. I would like to replace the search done by COMBOBOX in the GRDSTOCK grid with a dynamic letter-based search."
Thank's
Re: GRID - HEADER / CABECERA
Posted: Sun Jan 26, 2025 6:25 pm
by franco
SALINETAS24, I like simple. This is how I would handle this. Not sure if it would work for you.
Code: Select all
program
private g2h := 0
Define win
Define Grid Grid_2
ONHEADCLICK { {|| g2h:=1,msgbox(g2h),g2h:=0 }, {|| g2h:=2,something(),g2h:=0 }}