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:
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.
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:
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.
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