Używam BROWSE do obsługi DBF ponieważ według mnie jest szybszy niż GRID zwłaszcza do baz o dużej ilości rekordów (100000 i więcej). Jednak obsługa CREATE EVENT.. lub SET CONTROL... do przyrostowego wyszukiwania była problematyczna ponieważ po naciśnięciu klawisza K_UP, K_DOWN, K_PGUP .. a następnie dowolnego klawisza np. S nie powodowała jego obsługi. Prawdopodobnie znalazłem rozwiązanie tego problemu. Należy w pliku h_windows.prg od lini 2520 zablokować polecenie return 1
Code: Select all
Case GetGridvKey(lParam) == 36 // HOME
_BrowseHome('','',i)
//Return 1
Case GetGridvKey(lParam) == 35 // END
_BrowseEnd('','',i)
//Return 1
Case GetGridvKey(lParam) == 33 // PGUP
_BrowsePrior('','',i)
//Return 1
Case GetGridvKey(lParam) == 34 // PGDN
_BrowseNext('','',i)
//Return 1
Case GetGridvKey(lParam) == 38 // UP
_BrowseUp('','',i)
//Return 1
Case GetGridvKey(lParam) == 40 // DOWN
_BrowseDown('','',i)
// Return 1
EndCase
Return 0
Code: Select all
Procedure _BrowseUp ( ControlName , ParentForm , z )
*-----------------------------------------------------------------------------*
Local i , s , _Alias , _RecNo , _BrowseArea , _BrowseRecMap , _DeltaScroll := { Nil , Nil , Nil , Nil }
If pcount() == 2
i := GetControlIndex ( ControlName , ParentForm )
Else
i := z
EndIf
_DeltaScroll := ListView_GetSubItemRect ( _HMG_SYSDATA [3][i] , 0 , 0 )
_BrowseRecMap := _HMG_SYSDATA [ 32 ] [i]
s := LISTVIEW_GETFIRSTITEM ( _HMG_SYSDATA [3] [i] )
If s == 1
_Alias := Alias()
_BrowseArea := _HMG_SYSDATA [ 22 ] [i]
If Select (_BrowseArea) == 0
Return
EndIf
Select &_BrowseArea
_RecNo := RecNo()
Go _BrowseRecMap [1]
Skip - 1
_BrowseVscrollUpdate( i )
_BrowseUpdate(ControlName , ParentForm , i )
ListView_Scroll( _HMG_SYSDATA [3][i] , _DeltaScroll[2] * (-1) , 0 )
Go _RecNo
if Select( _Alias ) != 0
Select &_Alias
Else
Select 0
Endif
ListView_SetCursel ( _HMG_SYSDATA [3] [i] , 1 )
Else
// ListView_SetCursel ( _HMG_SYSDATA [3] [i] , s - 1 ) //chyba obsługa przez events bo nie ma return 1 tylko return 0
_BrowseVscrollFastUpdate ( i , -1 )
EndIf
_BrowseOnChange (i)
Return
*-----------------------------------------------------------------------------*
Procedure _BrowseDown ( ControlName , ParentForm , z )
*-----------------------------------------------------------------------------*
Local i , PageLength , s , _Alias , _RecNo , _BrowseArea , _BrowseRecMap , _DeltaScroll := { Nil , Nil , Nil , Nil }
If pcount() == 2
i := GetControlIndex ( ControlName , ParentForm )
Else
i := z
EndIf
_DeltaScroll := ListView_GetSubItemRect ( _HMG_SYSDATA [3][i] , 0 , 0 )
_BrowseRecMap := _HMG_SYSDATA [ 32 ] [i]
s := LISTVIEW_GETFIRSTITEM ( _HMG_SYSDATA [3] [i] )
PageLength := LISTVIEWGETCOUNTPERPAGE ( _HMG_SYSDATA [3][i] )
If s == PageLength
if _HMG_SYSDATA [ 26 ] [i] != 0
Return
EndIf
_Alias := Alias()
_BrowseArea := _HMG_SYSDATA [ 22 ] [i]
If Select (_BrowseArea) == 0
Return
EndIf
Select &_BrowseArea
_RecNo := RecNo()
Go _BrowseRecMap [1]
Skip
_BrowseUpdate( ControlName , ParentForm , i )
_BrowseVscrollUpdate( i )
ListView_Scroll( _HMG_SYSDATA [3][i] , _DeltaScroll[2] * (-1) , 0 )
Go _RecNo
if Select( _Alias ) != 0
Select &_Alias
Else
Select 0
Endif
ListView_SetCursel ( _HMG_SYSDATA [3] [i] , HMG_LEN(_HMG_SYSDATA [ 32 ] [i]) )
Else
// ListView_SetCursel ( _HMG_SYSDATA [3] [i] , s+1 ) //chyba obsługa przez events bo nie ma return 1 tylko return 0
_BrowseVscrollFastUpdate ( i , 1 )
EndIf
_BrowseOnChange (i)
Return
i to wszystko
Google translator
Hello
I use BROWSE to use DBF because according to me is faster than GRID especially for databases with a large number of records (100,000 or more). However, support for the CREATE EVENT .. or SET CONTROL ... for incremental search was problematic because when you press K_UP, K_DOWN, K_PGUP .. and then any key eg. S did not cause his service. Probably found a solution to this problem. You should file h_windows.prg on line 2520 block command return 1
Code: Select all
Case GetGridvKey(lParam) == 36 // HOME
_BrowseHome('','',i)
// Return 1
Case GetGridvKey(lParam) == 35 // END
_BrowseEnd('','',i)
// Return 1
Case GetGridvKey(lParam) == 33 // PGUP
_BrowsePrior('','',i)
// Return 1
Case GetGridvKey(lParam) == 34 // PGDN
_BrowseNext('','',i)
// Return 1
Case GetGridvKey(lParam) == 38 // UP
_BrowseUp('','',i)
// Return 1
Case GetGridvKey(lParam) == 40 // DOWN
_BrowseDown('','',i)
// Return 1
EndCase
Return 0
Code: Select all
Procedure _BrowseUp ( ControlName , ParentForm , z )
*-----------------------------------------------------------------------------*
Local i , s , _Alias , _RecNo , _BrowseArea , _BrowseRecMap , _DeltaScroll := { Nil , Nil , Nil , Nil }
If pcount() == 2
i := GetControlIndex ( ControlName , ParentForm )
Else
i := z
EndIf
_DeltaScroll := ListView_GetSubItemRect ( _HMG_SYSDATA [3][i] , 0 , 0 )
_BrowseRecMap := _HMG_SYSDATA [ 32 ] [i]
s := LISTVIEW_GETFIRSTITEM ( _HMG_SYSDATA [3] [i] )
If s == 1
_Alias := Alias()
_BrowseArea := _HMG_SYSDATA [ 22 ] [i]
If Select (_BrowseArea) == 0
Return
EndIf
Select &_BrowseArea
_RecNo := RecNo()
Go _BrowseRecMap [1]
Skip - 1
_BrowseVscrollUpdate( i )
_BrowseUpdate(ControlName , ParentForm , i )
ListView_Scroll( _HMG_SYSDATA [3][i] , _DeltaScroll[2] * (-1) , 0 )
Go _RecNo
if Select( _Alias ) != 0
Select &_Alias
Else
Select 0
Endif
ListView_SetCursel ( _HMG_SYSDATA [3] [i] , 1 )
Else
// ListView_SetCursel ( _HMG_SYSDATA [3] [i] , s - 1 ) // Unless service by events because there is only return 1 return 0
_BrowseVscrollFastUpdate ( i , -1 )
EndIf
_BrowseOnChange (i)
Return
*-----------------------------------------------------------------------------*
Procedure _BrowseDown ( ControlName , ParentForm , z )
*-----------------------------------------------------------------------------*
Local i , PageLength , s , _Alias , _RecNo , _BrowseArea , _BrowseRecMap , _DeltaScroll := { Nil , Nil , Nil , Nil }
If pcount() == 2
i := GetControlIndex ( ControlName , ParentForm )
Else
i := z
EndIf
_DeltaScroll := ListView_GetSubItemRect ( _HMG_SYSDATA [3][i] , 0 , 0 )
_BrowseRecMap := _HMG_SYSDATA [ 32 ] [i]
s := LISTVIEW_GETFIRSTITEM ( _HMG_SYSDATA [3] [i] )
PageLength := LISTVIEWGETCOUNTPERPAGE ( _HMG_SYSDATA [3][i] )
If s == PageLength
if _HMG_SYSDATA [ 26 ] [i] != 0
Return
EndIf
_Alias := Alias()
_BrowseArea := _HMG_SYSDATA [ 22 ] [i]
If Select (_BrowseArea) == 0
Return
EndIf
Select &_BrowseArea
_RecNo := RecNo()
Go _BrowseRecMap [1]
Skip
_BrowseUpdate( ControlName , ParentForm , i )
_BrowseVscrollUpdate( i )
ListView_Scroll( _HMG_SYSDATA [3][i] , _DeltaScroll[2] * (-1) , 0 )
Go _RecNo
if Select( _Alias ) != 0
Select &_Alias
Else
Select 0
Endif
ListView_SetCursel ( _HMG_SYSDATA [3] [i] , HMG_LEN(_HMG_SYSDATA [ 32 ] [i]) )
Else
// ListView_SetCursel ( _HMG_SYSDATA [3] [i] , s+1 ) // Unless service by events because there is only return 1 return 0
_BrowseVscrollFastUpdate ( i , 1 )
EndIf
_BrowseOnChange (i)
Return
Greetings to all