ALT- .. KEY and VIRTUAL GRID

General Help regarding HMG, Compilation, Linking, Samples

Moderator: Rathinagiri

Post Reply
User avatar
serge_girard
Posts: 3420
Joined: Sun Nov 25, 2012 2:44 pm
DBs Used: 1 MySQL - MariaDB
2 DBF
Location: Belgium
Contact:

ALT- .. KEY and VIRTUAL GRID

Post 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
There's nothing you can do that can't be done...
User avatar
andyglezl
Posts: 1461
Joined: Fri Oct 26, 2012 7:58 pm
Location: Guadalajara Jalisco, MX
Contact:

Re: ALT- .. KEY and VIRTUAL GRID

Post 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
Andrés González López
Desde Guadalajara, Jalisco. México.
User avatar
serge_girard
Posts: 3420
Joined: Sun Nov 25, 2012 2:44 pm
DBs Used: 1 MySQL - MariaDB
2 DBF
Location: Belgium
Contact:

Re: ALT- .. KEY and VIRTUAL GRID

Post by serge_girard »

Andrés, it doesn't ..

Serge
There's nothing you can do that can't be done...
edk
Posts: 999
Joined: Thu Oct 16, 2014 11:35 am
Location: Poland

Re: ALT- .. KEY and VIRTUAL GRID

Post by edk »

Maybe try to use HMG_PressKey instead of Keyboard.
Make sure the grid is focused.
User avatar
AUGE_OHR
Posts: 2117
Joined: Sun Aug 25, 2019 3:12 pm
DBs Used: DBF, PostgreSQL, MySQL, SQLite
Location: Hamburg, Germany

Re: ALT- .. KEY and VIRTUAL GRID

Post 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
have fun
Jimmy
User avatar
serge_girard
Posts: 3420
Joined: Sun Nov 25, 2012 2:44 pm
DBs Used: 1 MySQL - MariaDB
2 DBF
Location: Belgium
Contact:

Re: ALT- .. KEY and VIRTUAL GRID

Post 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
There's nothing you can do that can't be done...
Post Reply