* source/rtl/menuto.prg

! Fix recursive executions and exit without pressing key.
       Now use local pointer and save static pointer.
     ! Fix call to HitTest
This commit is contained in:
Walter Negro
2002-04-02 04:41:53 +00:00
parent ba6106d31d
commit 44925cd65a

View File

@@ -60,6 +60,8 @@ function __MenuTo( bBlock, cVariable )
local bAction
local nMouseClik
local nPointer
// Detect if a memvar was passed
if __mvSCOPE( cVariable ) <= HB_MV_ERROR
@@ -79,8 +81,9 @@ function __MenuTo( bBlock, cVariable )
else
s_nPointer ++
nPointer := s_nPointer
nArrLen := len( s_aLevel[ s_nPointer - 1 ] )
nArrLen := len( s_aLevel[ nPointer - 1 ] )
// put choice in a valid range
@@ -112,7 +115,7 @@ function __MenuTo( bBlock, cVariable )
DispOutAt( nMsgRow, nMsgCol, Space( Len( xMsg ) ) )
endif
xMsg := s_aLevel[ s_nPointer - 1, n, 4 ]
xMsg := s_aLevel[ nPointer - 1, n, 4 ]
// Code Block messages ( yes, they are documented! )
if ISBLOCK( xMsg )
@@ -139,9 +142,9 @@ function __MenuTo( bBlock, cVariable )
endif
// highlight the prompt
DispOutAt( s_aLevel[ s_nPointer - 1, n, 1 ],;
s_aLevel[ s_nPointer - 1, n, 2 ],;
s_aLevel[ s_nPointer - 1, n, 3 ] )
DispOutAt( s_aLevel[ nPointer - 1, n, 1 ],;
s_aLevel[ nPointer - 1, n, 2 ],;
s_aLevel[ nPointer - 1, n, 3 ] )
if Set( _SET_INTENSITY )
ColorSelect( CLR_STANDARD )
@@ -178,7 +181,7 @@ function __MenuTo( bBlock, cVariable )
do case
case nKey == 1001
case nKey == 1002 .OR. nKey == 1006
if ( ( nMouseClik := hittest(s_aLevel, mrow(), mcol()) ) > 0 )
if ( ( nMouseClik := hittest(s_aLevel[ nPointer-1 ], mrow(), mcol()) ) > 0 )
n := nMouseClik
endif
if ( nKey == 1006 )
@@ -204,7 +207,7 @@ function __MenuTo( bBlock, cVariable )
otherwise
// did user hit a hot key?
for y := 1 to nArrLen
if upper( left( ltrim( s_aLevel[ s_nPointer - 1, y, 3 ] ), 1 ) ) == upper( chr( nKey ) )
if upper( left( ltrim( s_aLevel[ nPointer - 1, y, 3 ] ), 1 ) ) == upper( chr( nKey ) )
n := y
lExit := .T.
exit
@@ -213,9 +216,9 @@ function __MenuTo( bBlock, cVariable )
endcase
if n <> 0
DispOutAt( s_aLevel[ s_nPointer - 1, q, 1 ],;
s_aLevel[ s_nPointer - 1, q, 2 ],;
s_aLevel[ s_nPointer - 1, q, 3 ] )
DispOutAt( s_aLevel[ nPointer - 1, q, 1 ],;
s_aLevel[ nPointer - 1, q, 2 ],;
s_aLevel[ nPointer - 1, q, 3 ] )
endif
enddo
@@ -223,6 +226,7 @@ function __MenuTo( bBlock, cVariable )
ReadVar( cSaveReadVar )
SetCursor( nSaveCursor )
s_nPointer := nPointer
s_nPointer --
asize( s_aLevel, s_nPointer - 1 )