Page 1 of 1

Algo del evento ON DBLCLICK del control GRID

Posted: Fri Apr 11, 2014 2:49 pm
by citro
Estaba viendo que cuando uno hace doble click en el evento ON DBLCLICK de un control GRID, aparecen las propiedades

this.cellrow, this.cellcol, this.cellwidth,this.cellheigth

Supongamos que en un formulario tengo un control GRID y un BUTTON, y que me posiciono en una fila y columna determinada del control GRID, ¿Como hago para obtener esas propiedades al pulsar el BUTTON ?, o por ahi es más fácil, como hago para llamar desde el BUTTON al evento ON DBLCLICK del GRID. La idea es poder hacer algo que alguna vez vi en VB6 con un control MSFlexgrid.

Re: Algo del evento ON DBLCLICK del control GRID

Posted: Fri Apr 11, 2014 3:02 pm
by Javier Tovar
Hola Citro,

Haces lo mismo que doble Click, nada más que ahora pones tu función en el Boton. Solo tiene una condición que este seleccionado un Item de la Grid.

Saludos

Re: Algo del evento ON DBLCLICK del control GRID

Posted: Fri Apr 11, 2014 3:27 pm
by citro
Hay algo que estoy haciendo mal entonces, porque si quiero compilar el ejemplo de abajo me arroja error

/*
* HMG Grid Demo
* (c) 2005 Roberto Lopez
*/

#include "hmg.ch"

Function Main

Local aRows [20] [3]


DEFINE WINDOW Form_1 ;
AT 0,0 ;
WIDTH 640 ;
HEIGHT 400 ;
TITLE 'Mixed Data Type Grid Test' ;
MAIN

aRows [1] := {113.12,date(),1,1 , .t. }
aRows [2] := {123.12,date(),2,2 , .f. }
aRows [3] := {133.12,date(),3,3, .t. }
aRows [4] := {143.12,date(),1,4, .f. }
aRows [5] := {153.12,date(),2,5, .t. }
aRows [6] := {163.12,date(),3,6, .f. }
aRows [7] := {173.12,date(),1,7, .t. }
aRows [8] := {183.12,date(),2,8, .f. }
aRows [9] := {193.12,date(),3,9, .t. }
aRows [10] := {113.12,date(),1,10, .f. }
aRows [11] := {123.12,date(),2,11, .t. }
aRows [12] := {133.12,date(),3,12, .f. }
aRows [13] := {143.12,date(),1,13, .t. }
aRows [14] := {153.12,date(),2,14, .f. }
aRows [15] := {163.12,date(),3,15, .t. }
aRows [16] := {173.12,date(),1,16, .f. }
aRows [17] := {183.12,date(),2,17, .t. }
aRows [18] := {193.12,date(),3,18, .f. }
aRows [19] := {113.12,date(),1,19, .t. }
aRows [20] := {123.12,date(),2,20, .f. }

@ 10,10 GRID Grid_1 ;
WIDTH 620 ;
HEIGHT 330 ;
HEADERS {'Column 1','Column 2','Column 3','Column 4','Column 5'} ;
WIDTHS {140,140,140,140,140} ;
ITEMS aRows ;
COLUMNCONTROLS { {'TEXTBOX','NUMERIC','$ 999,999.99'} , {'DATEPICKER','DROPDOWN'} , {'COMBOBOX',{'One','Two','Three'}} , { 'SPINNER' , 1 , 20 } , { 'CHECKBOX' , 'Yes' , 'No' } } ;
ON DBLCLICK Verprop()

END WINDOW

DEFINE BUTTON BUTTON1
ROW 550
COL 230
CAPTION 'Alto/Ancho celda'
ACTION Form_1.Grid_1.ondblclick
WIDTH 100
END BUTTON

CENTER WINDOW Form_1

ACTIVATE WINDOW Form_1

Return

/***/
static Function Verprop()

msgbox( str( this.cellwidth ) )
msgbox( str( this.cellheigth ) )

retu Nil

y el error me lo arroja en Form_1.Grid_1.ondblclick

Re: Algo del evento ON DBLCLICK del control GRID

Posted: Fri Apr 11, 2014 3:53 pm
by srvet_claudio
citro wrote: DEFINE BUTTON BUTTON1
ROW 550
COL 230
CAPTION 'Alto/Ancho celda'
ACTION Form_1.Grid_1.ondblclick
WIDTH 100
END BUTTON
Citro cambia en la definición del botón por esto:

Code: Select all

ACTION Verprop()

Re: Algo del evento ON DBLCLICK del control GRID

Posted: Fri Apr 11, 2014 4:21 pm
by Javier Tovar
Hola Citro,

Tienes varios errores,

1.- El boton esta fuera de DEFINE WINDOW Y END WINDOW.
2.- En el boton tienes que poner ONCLICK VerProp()

el programa debe de estar + o - así.

Code: Select all

/*
* HMG Virtual Grid Demo
* (c) 2009 Roberto Lopez
*/

#include "hmg.ch"

Function Main

Local aValue := { Nil , Nil }
LOCAL aAnchosCell := {140,140,140,100,100,100}

	* Grid Column Controls Definitions

	aCtrl_1 := {'TEXTBOX','NUMERIC','9999999999'}
	aCtrl_2 := {'TEXTBOX','CHARACTER'}
	aCtrl_3 := {'TEXTBOX','CHARACTER'}
	aCtrl_4 := {'DATEPICKER','UPDOWN'}
	aCtrl_5 := { 'CHECKBOX' , 'Yes' , 'No' }
	aCtrl_6 := { 'EDITBOX' }

	DEFINE WINDOW Form_1 ;
		AT 0,0 ;
		WIDTH 800 ;
		HEIGHT 600 ;
		TITLE 'Hello World!' ;
		MAIN 

		DEFINE MAIN MENU 
			POPUP 'File'
				ITEM 'Append (Alt+A)'				ACTION Form_1.Grid_1.Append
				ITEM 'Set RecNo'				ACTION Form_1.Grid_1.RecNo := val(InputBox('','')) 
				ITEM 'Get RecNo'				ACTION MsgInfo( Str(Form_1.Grid_1.RecNo) )
				ITEM 'Delete (Alt+D)'				ACTION Form_1.Grid_1.Delete
				ITEM 'Recall (Alt+R)'				ACTION Form_1.Grid_1.Recall
				ITEM 'Get Value'				ACTION ( aValue := Form_1.Grid_1.Value , MsgInfo( Str( aValue [1] ) + ' , ' + Str( aValue [2] ) ) )
				ITEM 'Set Value'				ACTION ( aValue [ 1 ] :=  val(InputBox('New Row','Selected Cell (Value)')) , aValue [ 2 ] :=  val(InputBox('New Col','Selected Cell (Value)')) , Form_1.Grid_1.Value := { aValue [ 1 ] , aValue [ 2 ] } )
				ITEM 'Save Pending Changes (Alt+S)'		ACTION Form_1.Grid_1.Save
				ITEM 'Clear Changes Buffer (Undo) (ALt+U)'	ACTION Form_1.Grid_1.ClearBuffer
			END POPUP
		END MENU

		USE TEST // SHARED

		INDEX ON CODE TO CODE

		GO TOP

		@ 10,10 GRID Grid_1 ;
			WIDTH 770 ;
			HEIGHT 440 ;
			HEADERS {'Column 1','Column 2','Column 3','Column 4','Column 5','Column 6'} ;
			WIDTHS aAnchosCell;
			EDIT ;
			VALUE { 1 , 1 } ;
			COLUMNCONTROLS { aCtrl_1 , aCtrl_2 , aCtrl_3 , aCtrl_4 , aCtrl_5 , aCtrl_6 } ;
			ROWSOURCE "Test" ;
			COLUMNFIELDS { 'Code' ,  'First' , 'Last' ,  'Birth' , 'Married' , 'Bio' } ;
			ALLOWAPPEND ;
			ALLOWDELETE  

      DEFINE BUTTON Boton_1
            ROW 470
            COL 10
            CAPTION "Pulsa Aqui" 
            PICTALIGNMENT Top 
            ONCLICK Propios()
            WIDTH 150
            HEIGHT 20
      END BUTTON


			
	END WINDOW

	CENTER WINDOW Form_1

	ACTIVATE WINDOW Form_1

Return

PROCEDURE Propios()
LOCAL nRow := Form_1.Grid_1.Row
LOCAL nCol := Form_1.Grid_1.Col
LOCAL aCell := Form_1.Grid_1.VALUE


	MsgBox("Row: " + ALLTRIM(STR(nRow)) + "  Col: " + ALLTRIM(STR(nCol)) + "  Fila: " + ALLTRIM(STR(aCell[1])) + "  Columna: " + ALLTRIM(STR(aCell[2])) )   
RETURN NIL
Espero que te ayude. :D

Saludos

Re: Algo del evento ON DBLCLICK del control GRID

Posted: Fri Apr 11, 2014 5:37 pm
by citro
srvet_claudio wrote:
citro wrote: DEFINE BUTTON BUTTON1
ROW 550
COL 230
CAPTION 'Alto/Ancho celda'
ACTION Form_1.Grid_1.ondblclick
WIDTH 100
END BUTTON
Citro cambia en la definición del botón por esto:

Code: Select all

ACTION Verprop()
Haciendolo de esa manera me aparecen cellwidth y cellheigth con valor 0, pero si hago doble click en el GRID aparecen los valores que corresponden a la posición de la celda en la pantalla

Re: Algo del evento ON DBLCLICK del control GRID

Posted: Fri Apr 11, 2014 5:51 pm
by citro
Javier Tovar wrote:Hola Citro,

Tienes varios errores,

1.- El boton esta fuera de DEFINE WINDOW Y END WINDOW.
2.- En el boton tienes que poner ONCLICK VerProp()

el programa debe de estar + o - así.

Code: Select all

/*
* HMG Virtual Grid Demo
* (c) 2009 Roberto Lopez
*/

#include "hmg.ch"

Function Main

Local aValue := { Nil , Nil }
LOCAL aAnchosCell := {140,140,140,100,100,100}

	* Grid Column Controls Definitions

	aCtrl_1 := {'TEXTBOX','NUMERIC','9999999999'}
	aCtrl_2 := {'TEXTBOX','CHARACTER'}
	aCtrl_3 := {'TEXTBOX','CHARACTER'}
	aCtrl_4 := {'DATEPICKER','UPDOWN'}
	aCtrl_5 := { 'CHECKBOX' , 'Yes' , 'No' }
	aCtrl_6 := { 'EDITBOX' }

	DEFINE WINDOW Form_1 ;
		AT 0,0 ;
		WIDTH 800 ;
		HEIGHT 600 ;
		TITLE 'Hello World!' ;
		MAIN 

		DEFINE MAIN MENU 
			POPUP 'File'
				ITEM 'Append (Alt+A)'				ACTION Form_1.Grid_1.Append
				ITEM 'Set RecNo'				ACTION Form_1.Grid_1.RecNo := val(InputBox('','')) 
				ITEM 'Get RecNo'				ACTION MsgInfo( Str(Form_1.Grid_1.RecNo) )
				ITEM 'Delete (Alt+D)'				ACTION Form_1.Grid_1.Delete
				ITEM 'Recall (Alt+R)'				ACTION Form_1.Grid_1.Recall
				ITEM 'Get Value'				ACTION ( aValue := Form_1.Grid_1.Value , MsgInfo( Str( aValue [1] ) + ' , ' + Str( aValue [2] ) ) )
				ITEM 'Set Value'				ACTION ( aValue [ 1 ] :=  val(InputBox('New Row','Selected Cell (Value)')) , aValue [ 2 ] :=  val(InputBox('New Col','Selected Cell (Value)')) , Form_1.Grid_1.Value := { aValue [ 1 ] , aValue [ 2 ] } )
				ITEM 'Save Pending Changes (Alt+S)'		ACTION Form_1.Grid_1.Save
				ITEM 'Clear Changes Buffer (Undo) (ALt+U)'	ACTION Form_1.Grid_1.ClearBuffer
			END POPUP
		END MENU

		USE TEST // SHARED

		INDEX ON CODE TO CODE

		GO TOP

		@ 10,10 GRID Grid_1 ;
			WIDTH 770 ;
			HEIGHT 440 ;
			HEADERS {'Column 1','Column 2','Column 3','Column 4','Column 5','Column 6'} ;
			WIDTHS aAnchosCell;
			EDIT ;
			VALUE { 1 , 1 } ;
			COLUMNCONTROLS { aCtrl_1 , aCtrl_2 , aCtrl_3 , aCtrl_4 , aCtrl_5 , aCtrl_6 } ;
			ROWSOURCE "Test" ;
			COLUMNFIELDS { 'Code' ,  'First' , 'Last' ,  'Birth' , 'Married' , 'Bio' } ;
			ALLOWAPPEND ;
			ALLOWDELETE  

      DEFINE BUTTON Boton_1
            ROW 470
            COL 10
            CAPTION "Pulsa Aqui" 
            PICTALIGNMENT Top 
            ONCLICK Propios()
            WIDTH 150
            HEIGHT 20
      END BUTTON


			
	END WINDOW

	CENTER WINDOW Form_1

	ACTIVATE WINDOW Form_1

Return

PROCEDURE Propios()
LOCAL nRow := Form_1.Grid_1.Row
LOCAL nCol := Form_1.Grid_1.Col
LOCAL aCell := Form_1.Grid_1.VALUE


	MsgBox("Row: " + ALLTRIM(STR(nRow)) + "  Col: " + ALLTRIM(STR(nCol)) + "  Fila: " + ALLTRIM(STR(aCell[1])) + "  Columna: " + ALLTRIM(STR(aCell[2])) )   
RETURN NIL
Espero que te ayude. :D

Saludos
Bueno ahi corregí el error del botón que está afuera del DEFINE WINDOW END WINDOW. Si uso el procedimiento Propios() me muestra las posiciones de cada celda dentro de la grilla, o sea, la celda tal está en la fila 5 columna 6, por ej., pero lo que necesito saber es que posición tiene dicha celda en la pantalla, por eso es que en lugar de Grid_1.col uso this.CellCol, por ej. para saber la columna en la que se encuentra en la pantalla dicha celda. La idea es tener esas posiciones para que en el lugar seleccionado aparezca un control TEXTBOX que si bien no lo puse en el ejemplo, serviria para poder editar la celda cuando un usuario pulse una tecla alfanumérica, como cuando se usa Excel, salvo que me falte ver algún ej. de la carpeta SAMPLES\GRID del HMG 3.2, no veo ningún ejemplo que haga eso automáticamente.
Lo del ONCLICK en el botón no entendí bien como es que va, porque probé poniendo
ACTION ONCLICK Verprop() y me arroja error, lo mismo que si hago Form_1.Grid_1.onclick Verprop(). Bueno por ahi ahora que expuse cual es la idea para que esto funcione se entiende un poco mejor la cosa.

Re: Algo del evento ON DBLCLICK del control GRID

Posted: Fri Apr 11, 2014 6:01 pm
by Javier Tovar
Hola Citro,

Creo que debes de tomarte un tiempo para ver los ejemplos y analizarlos un poco, el ejemplo que te mande si le das Doble Click entra a edición automáticamente sin necesidad de hacer otra cosa, hay 42 ejemplos y muchos de ellos tratar sobre esto.

Saludos