Page 1 of 1

ALT- .. KEY and VIRTUAL GRID

Posted: Sat Nov 20, 2021 3:56 pm
by serge_girard
Hello,

I use this grid and want to get rid of the ALT-S, ALT-D keys so I made this:
But my replacement for ALT-S refuses to work. And sometimes OnSaveTest() also ignores ALT-S


Code: Select all

DEFINE WINDOW Form_1 ...
	etc...
	
         @ 10,10 GRID      Grid_1 ;
            WIDTH          nWIDTH ;
            HEIGHT         nGRID_H ;
            HEADERS        aHEADERS;
            WIDTHS         aWIDTHS;
            VALUE          { 1 , 1 } ;
            ROWSOURCE      'F1' ;
            COLUMNFIELDS   aFIELDS ;
            EDIT           ;
            ALLOWAPPEND    ;
            ALLOWDELETE    ;
            COLUMNCONTROLS aCtrls ;
            ON SAVE        OnSaveTest()

/*
ALT + A --> Append
ALT + D --> Delete
ALT + R --> ReCall
ALT + S --> Save (On Save)
ALT + U --> ClearBuffer
*/

         DEFINE BUTTON  BT_7
            ROW         nGRID_H + 20
            COL         10 
            WIDTH       70
            HEIGHT      35
            ACTION      STUFF_KB('K_ALT_S')
            CAPTION     "Save"
            TRANSPARENT TRUE
            TOOLTIP     "Save"
            PICTURE     ""
            PICTALIGNMENT TOP
         END BUTTON
         
END WINDOW
ACTIVATE WINDOW Form_1



         
FUNCTION STUFF_KB(X)
/*******************/
Form_1.Grid_1.SetFocus

DO CASE 
CASE X == 'K_ALT_S'
   KEYBOARD CHR(K_ALT_S)  

CASE X == 'K_ALT_A'
   KEYBOARD CHR(K_ALT_A)  

CASE X == 'K_ALT_D'
   KEYBOARD CHR(K_ALT_D)  

CASE X == 'K_ALT_R'
   KEYBOARD CHR(K_ALT_R)  

CASE X == 'K_ALT_U'
   KEYBOARD CHR(K_ALT_U)  

OTHERWISE
ENDCASE
   
RETURN


FUNCTION OnSaveTest()
/********************/
LOCAL i
LOCAL s
LOCAL cMark
LOCAL j

//* Show Edited Cells  
/********************/

FOR i := 1 To len( This.EditBuffer )

   s := ''
   nLogicalRow	   := This.EditBuffer [ i ] [ 1 ] 
   nLogicalCol	   := This.EditBuffer [ i ] [ 2 ] 
   xValue		   := This.EditBuffer [ i ] [ 3 ] 
   nPhysicalRow	:= This.EditBuffer [ i ] [ 4 ] 
...etc....

from the old GRID.34\DEMO.PRG by HMG Virtual Grid Demo   (c) 2009 Roberto Lopez
Somebody has a solution??

Serge

Re: ALT- .. KEY and VIRTUAL GRID

Posted: Sat Nov 20, 2021 4:24 pm
by andyglezl
No se si esto funcione...
*-----------------------------------
I don't know if this works ...

Code: Select all

SET KEY ALT + A TO
SET KEY ALT + D TO
SET KEY ALT + R TO
***SET KEY ALT + S TO
SET KEY ALT + U TO

.
.
.

         DEFINE BUTTON  BT_7
            ROW         nGRID_H + 20
            COL         10 
            WIDTH       70
            HEIGHT      35
            ACTION      Keybd_Event( VK_MENU, VK_S, NIL, NIL )		// <===================
            CAPTION     "Save"
            TRANSPARENT TRUE
            TOOLTIP     "Save"
            PICTURE     ""
            PICTALIGNMENT TOP
         END BUTTON

Re: ALT- .. KEY and VIRTUAL GRID

Posted: Sat Nov 20, 2021 4:46 pm
by serge_girard
Andrés, it doesn't ..

Serge

Re: ALT- .. KEY and VIRTUAL GRID

Posted: Sat Nov 20, 2021 5:28 pm
by edk
Maybe try to use HMG_PressKey instead of Keyboard.
Make sure the grid is focused.

Re: ALT- .. KEY and VIRTUAL GRID

Posted: Sat Nov 20, 2021 9:23 pm
by AUGE_OHR
hi

GRID have "ON KEY" itself

Code: Select all

   ON KEY DoGridKey1( ThisWindow.Name, This.Name )

Code: Select all

PROCEDURE DoGridKey1( cForm, cObj )
LOCAL xKey   := HMG_GetLastVirtualKeyDown()

   DO CASE
      CASE xKey == VK_S .AND. HMG_VirtualKeyIsPressed( VK_ALT )
         SaveRecord()
      ...  
   ENDCASE

   HMG_CleanLastVirtualKeyDown()
RETURN

Re: ALT- .. KEY and VIRTUAL GRID

Posted: Sun Nov 21, 2021 10:18 am
by serge_girard
Thanks for all suggestions.

Unfortunately none works but it gave me an idea for another way of a solution:

The program h_grid.prg indicates that all ALT+ functions leads directly to a function:

ALT + A --> Append -- > DataGridAppend(ix)
ALT + D --> Delete --> DataGridDelete(ix)
ALT + R --> ReCall --> DataGridRecall(ix)
ALT + S --> Save (On Save) -->DataGridSave(ix)
ALT + U --> ClearBuffer -->DataGridClearBuffer(ix)

where
ix := GetControlIndex ( 'Grid_1', 'Form_1' )

So for every ALT + there is a button:

Code: Select all

 
DEFINE BUTTON  BT_7
    ROW        10
    COL         10 
    WIDTH       70
    HEIGHT      35
    ACTION      Grid_1_Save()
    CAPTION     "Save"
    TRANSPARENT TRUE
    TOOLTIP     "Save"
    PICTURE     ""
    PICTALIGNMENT TOP
END BUTTON
 
Then

Code: Select all

FUNCTION Grid_1_Save()
/*******************/
Form_1.SetFocus
ix := GetControlIndex ( 'Grid_1', 'Form_1' )
DataGridSave(ix)
OnSaveTest()
RETURN

DataGridSave will fill up arrays with changes and OnSaveTest will execute these changes on the DBF.

No more keyboard stuffing ...

Thanks again for all suggestions!


Serge