ON KEY ACTION problem

Moderator: Rathinagiri

Post Reply
User avatar
mol
Posts: 3728
Joined: Thu Sep 11, 2008 5:31 am
Location: Myszków, Poland
Contact:

ON KEY ACTION problem

Post by mol »

Hi!
My app uses F2 hotkey for saving data.
Everything work OK when operator works slow. But, I have one of clients who has very speedy worker.
She enters data so quickly that program crashes.

In my prepared sample, it happens when I want to release form_3 with error Window: Form_3 is not active. Program terminated(at the last lines of sample).
It's strange, because I'm testing if form_3 is defined...

On quick computer, you need to press and keep F2 key, on slower one it's easier to observe this error

Please, try this sample, I've tried all my ideas with semaphores, etc. without success.

Code: Select all

#include "hmg.ch"

Function Main

	local i

	private aHeaders, aWidths, aJust
	private aSalaries := {}
	private aValid := {}
	private aWhen := {}
	private aControls := {}

	SET NAVIGATION EXTENDED
	
	aHeaders := {"Name","Salary"}
	aWidths := {200, 100}
	aJust := { 0,1}
	
	aValid	:= { {|| DataValidation()},  {|| DataValidation()} }
	aWhen	:= { {|| .t.}, {||.t.} }
	aControls := { {"TEXTBOX","CHARACTER"}, {"TEXTBOX","NUMERIC","9999.99"} }
	
	
	aADD(aSalaries, {"Simpson", 65 } )
	aADD(aSalaries, {"Mulder",41 } )
	aADD(aSalaries, {"Smart Max", 25} )
	
	
	DEFINE WINDOW Form_1 ;
		AT 100,100 ;
		WIDTH 500 ;
		HEIGHT 550 ;
		TITLE 'Editable Virtual Grid Test' ;
		MAIN 
	

		@ 10,10 GRID Grid_1 ;
			WIDTH 320 ;
			HEIGHT 340 ;
			HEADERS aHeaders ;
			WIDTHS aWidths;
			VALUE {1,1} ;
			TOOLTIP 'Editable Grid Control' ;
			EDIT ;
			COLUMNCONTROLS aControls;
			COLUMNVALID aValid;
			COLUMNWHEN aWhen;
			VIRTUAL ;
            ITEMCOUNT len(aSalaries) ;
            ON QUERYDATA OnQuery(aSalaries) ;        
	        JUSTIFY aJust;
			CELLNAVIGATION 
		
		@ 400, 10 BUTTON B_1 ;
			CAPTION "F6 - Add records from list";
			ACTION AddRecordsFromList() ;
			WIDTH 200 ;
			HEIGHT 30
			
	END WINDOW
	
	ON KEY F6 OF FORM_1 ACTION AddRecordsFromList()
	
	ACTIVATE WINDOW Form_1

Return
*----------------
function OnQuery
	param aSource
	local nRow, nCol

	nRow := This.QueryRowIndex
	nCol := This.QueryColIndex
	if nRow>0 .and. nCol >0
		This.QueryData := aSource[nRow,nCol]
	endif
return .t.	
*-----------------------
function DataValidation
	nRow := this.Value[1]
	nCol := this.Value[2]
	
	if empty(This.CellValue)
		return .f.
	endif
	aSalaries[nRow,nCol] := This.CellValue
return .t.
*------------------------
function AddRecordsFromList

	private aHeaders := {"Name","Preferred salary"}
	private aWidths  := {300,200}
	private aJust := {0,1}
	
	private aRows := {}
	
	aAdd(aRows, {"Marek",100.20})
	aAdd(aRows, {"Iza",123.22})
	aAdd(aRows, {"Szymon",321.23})
	aAdd(aRows, {"Javier",143.24})
	aAdd(aRows, {"Nico",154.25})
	aAdd(aRows, {"Maxim",132.26})
	aAdd(aRows, {"Reno",199.77})
	
	DEFINE WINDOW Form_2 ;
		AT 300,300 ;
		WIDTH 580 ;
		HEIGHT 400 ;
		TITLE 'Salariers' ;
		MODAL
	

		@ 10,10 GRID Grid_2 ;
			WIDTH 520 ;
			HEIGHT 240 ;
			HEADERS aHeaders ;
			WIDTHS aWidths;
			VALUE {1,1} ;
			TOOLTIP 'Press F2 or double click to select name' ;
			COLUMNCONTROLS aControls;
			COLUMNVALID aValid;
			COLUMNWHEN aWhen;
			VIRTUAL ;
            ITEMCOUNT len(aRows) ;
            ON QUERYDATA OnQuery(aRows) ;        
	        JUSTIFY aJust;
			CELLNAVIGATION 
		
		@ 270, 10 BUTTON B_2 ;
			CAPTION "F2 -select";
			ACTION SelectRecordFromList() ;
			WIDTH 200 ;
			HEIGHT 30
			
	END WINDOW
	
	ON KEY F2 OF FORM_2 ACTION SelectRecordFromList()
	
	activate window Form_2
 return
 *---------------------
 
function SelectRecordFromList

	local i
	
	i := Form_2.Grid_2.Value[1]
	
	if i == 0
		return
	endif
	
	DEFINE WINDOW Form_3 ;
		AT 350,200 ;
		WIDTH 220 ;
		HEIGHT 160 ;
		TITLE 'Change salary' ;
		MODAL
		
		@ 10,10 LABEL L_1 ;
			WIDTH 60 ;
			HEIGHT 18;
			VALUE "Name";
			RIGHTALIGN
		
		@ 10,80 TEXTBOX T_1 ;
			HEIGHT 24;
			WIDTH 120 ;
			VALUE aRows[i,1];
			READONLY;
			NOTABSTOP

		@ 40,10 LABEL L_2 ;
			WIDTH 60 ;
			HEIGHT 18;
			VALUE "Salary";
			RIGHTALIGN
		
		@ 40,80 TEXTBOX T_2 ;
			HEIGHT 24;
			WIDTH 120 ;
			VALUE aRows[i,2];
			NUMERIC ;
			INPUTMASK "9999.99";
			RIGHTALIGN

		@ 80, 10 BUTTON B_Save ;
			CAPTION "F2 -Save";
			ACTION SaveRecord() ;
			WIDTH 120 ;
			HEIGHT 30
		
	END WINDOW
	
	ON KEY F2 OF FORM_3 ACTION SaveRecord()
	
	activate window Form_3
	
*-----------
function SaveRecord
	
	Release Key F2 of Form_3
	
	if .not. IsWindowDefined("Form_3") 
		MsgStop("You are too speedy!")
		return
	endif
	
	aAdd(aSalaries, {Form_3.T_1.Value, Form_3.T_2.Value})

	// THIS IS THE LINE WHICH CAUSES CRASH SYSTEM
	
	Form_3.Release
	
	// refresh grid in main windows
	Form_1.Grid_1.ItemCount := 0
	Form_1.Grid_1.ItemCount := len(aSalaries)
	
return
*------------
Here is error message
Date:11/22/16 Time: 19:35:57
Error: HMG 3.4.3 Stable (32 bits)
Window: Form_3 is not active. Program terminated
Called from _RELEASEWINDOW(3841)
Called from DOMETHOD(9007)
Called from SAVERECORD(211)
Called from (b)SELECTRECORDFROMLIST(195)
Called from _DOCONTROLEVENTPROCEDURE(6006)
Called from EVENTS(823)
Called from DOEVENTS(0)
Called from _SHOWWINDOW(3964)
Called from _ACTIVATEWINDOW(5640)
Called from SELECTRECORDFROMLIST(197)
Called from (b)ADDRECORDSFROMLIST(137)
Called from _DOCONTROLEVENTPROCEDURE(6006)
Called from EVENTS(823)
Called from DOMESSAGELOOP(0)
Called from _ACTIVATEWINDOW(5669)
Called from ADDRECORDSFROMLIST(139)
Called from (b)MAIN(62)
Called from _DOCONTROLEVENTPROCEDURE(6006)
Called from EVENTS(823)
Called from DOMESSAGELOOP(0)
Called from _ACTIVATEWINDOW(5669)
Called from MAIN(64)
User avatar
srvet_claudio
Posts: 2193
Joined: Thu Feb 25, 2010 8:43 pm
Location: Uruguay
Contact:

Re: ON KEY ACTION problem

Post by srvet_claudio »

Test with IsWindowActive (<WindowName>)
PD: in IsWindowActive and IsWindowDefined the WindowName it is without quote.
Best regards.
Dr. Claudio Soto
(from Uruguay)
http://srvet.blogspot.com
User avatar
Pablo César
Posts: 4059
Joined: Wed Sep 08, 2010 1:18 pm
Location: Curitiba - Brasil

ON KEY ACTION problem

Post by Pablo César »

srvet_claudio wrote:Test with IsWindowActive (<WindowName>)
PD: in IsWindowActive and IsWindowDefined the WindowName it is without quote.
Remember Claudio, this was enhanced putting or not quotes are accepting.

See this: viewtopic.php?p=42098#p42098

This problem was corrected for:
_IsControlDefined()
_IsWindowDefined()
_IsWindowActive()

Just for keeping informed.
HMGing a better world
"Matter tells space how to curve, space tells matter how to move."
Albert Einstein
User avatar
mol
Posts: 3728
Joined: Thu Sep 11, 2008 5:31 am
Location: Myszków, Poland
Contact:

Re: ON KEY ACTION problem

Post by mol »

Thanks for help!
I've tried IsWindowActive function, but with quoted form name...
Now, it looks it works OK, but, my client must approve this :-D to announce full victory :D

Thanks again!
Post Reply