GRID - HEADER / CABECERA

HMG en Español

Moderator: Rathinagiri

User avatar
SALINETAS24
Posts: 667
Joined: Tue Feb 27, 2018 3:06 am
DBs Used: DBF
Contact:

GRID - HEADER / CABECERA

Post 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!!!
Como dijo el gran pensador Hommer Simpson..., - En este mundo solo hay 3 tipos de personas, los que saben contar y los que no. :shock:
ASESORMIX
Posts: 216
Joined: Thu Oct 25, 2012 8:08 pm
Location: Bqto, Venezuela

Re: GRID - HEADER / CABECERA

Post by ASESORMIX »

Hola.
Puedes usar esto

ON HEADCLICK { {||MsgInfo('Click 1')} , {||MsgInfo('Click 2')} , {||MsgInfo('Click 3')} }
User avatar
SALINETAS24
Posts: 667
Joined: Tue Feb 27, 2018 3:06 am
DBs Used: DBF
Contact:

Re: GRID - HEADER / CABECERA

Post 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
Como dijo el gran pensador Hommer Simpson..., - En este mundo solo hay 3 tipos de personas, los que saben contar y los que no. :shock:
Red2
Posts: 281
Joined: Sat May 18, 2019 2:11 pm
DBs Used: Visual FoxPro, FoxPro
Location: United States of America

Re: GRID - HEADER / CABECERA

Post 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
User avatar
SALINETAS24
Posts: 667
Joined: Tue Feb 27, 2018 3:06 am
DBs Used: DBF
Contact:

Re: GRID - HEADER / CABECERA

Post 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.
Como dijo el gran pensador Hommer Simpson..., - En este mundo solo hay 3 tipos de personas, los que saben contar y los que no. :shock:
franco
Posts: 882
Joined: Sat Nov 02, 2013 5:42 am
DBs Used: DBF
Location: Canada

Re: GRID - HEADER / CABECERA

Post 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
All The Best,
Franco
Canada
Red2
Posts: 281
Joined: Sat May 18, 2019 2:11 pm
DBs Used: Visual FoxPro, FoxPro
Location: United States of America

Re: GRID - HEADER / CABECERA

Post 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
User avatar
SALINETAS24
Posts: 667
Joined: Tue Feb 27, 2018 3:06 am
DBs Used: DBF
Contact:

Re: GRID - HEADER / CABECERA

Post by SALINETAS24 »

Muchas gracias a todos por contestar. :D
Ya lo tengo resuelto!!! 8-)

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!!!! :lol:
Como dijo el gran pensador Hommer Simpson..., - En este mundo solo hay 3 tipos de personas, los que saben contar y los que no. :shock:
User avatar
tonton2
Posts: 465
Joined: Sat Jun 29, 2013 1:26 pm
Location: Algerie
Contact:

Re: GRID - HEADER / CABECERA

Post 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
Attachments
stock.rar
(21.63 KiB) Downloaded 42 times
Last edited by tonton2 on Mon Jan 27, 2025 11:06 am, edited 1 time in total.
L'Algerie vous salut
Y.TABET
franco
Posts: 882
Joined: Sat Nov 02, 2013 5:42 am
DBs Used: DBF
Location: Canada

Re: GRID - HEADER / CABECERA

Post 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 }}
All The Best,
Franco
Canada
Post Reply