ich versuche gerade über ein dcbrowse und einen dcread handler eine schnellsuche innerhalb eines Arrays zu realisieren.
Der Browser hat Focus. Betätige ich nun eine Taste, so soll der Handler das Array durchsuchen und wenn gefunden den Cursor auf den
entsprechenden Eintrag setzen.
Der Handler wird aufgerufen und er findet auch das gesuchte Arrayelement, jedoch gelingt es mir nicht den Browse-Cursor auf die entsprechende zeile zu setzen.
Code: Alles auswählen
...
*aData[1] enthält das Browse Objekt
aData[2] := 1 // enthält Pointer des dcbrowse
aData[3] := '' // Suchstr
aData[4] := aDrWahl // Array das durchsucht wird
* -------------------------------------------------------------------------
@ 01,01 DCBROWSE aData[1]; // = Object
DATA aData[4] ; //aDrWahl ;
SIZE 47.3,nBrowLen;
TABSTOP;
POINTER aData[2]; // nPointer;
DATALINK {|| setAppFocus(oStart), PostAppEvent(xbeK_ENTER) }
DCBROWSECOL ELEMENT 1 HEADER 'Auswahl' PARENT aData[1] WIDTH 28
......
DCREAD GUI TITLE cKopf;
PARENT @oDlg;
APPWINDOW oRoot;
OPTIONS GetOptions;
FIT ;
CLEAREVENTS ;
HANDLER BrowSuch_Handler REFERENCE aData ;
SETFOCUS @aData[1]
.....
STATIC FUNCTION BrowSuch_Handler ( nEvent, mp1, mp2, oXbp, oDialog, GetList, aData )
LOCAL oBrowse := aData[1]
LOCAL lRet := FALSE
LOCAL cKey
LOCAL nAryPos
*-------------------------------------
IF nEvent = xbeP_Keyboard .AND. oXbp:isDerivedFrom('XbpBrowse') .AND. (oBrowse == SetAppFocus() )
*--------------------------------
cKey := UPPER( chr(mp1)) // Suchzeichen in Gross wandeln
aData[3] := cKey
*--------------------------------
nAryPos:= ASCAN(aData[4],{|a| LEFT( alltrim( a[1]),1)=cKey })
IF nAryPos > 0
* info('Key: '+cKey+' gefunden auf Pos'+ STR(nAryPos))
aData[2] := nAryPos // neue Browse-Cursor Position setzten
oBrowse:refreshAll()
oBrowse:ForceStable()
* DC_GetRefresh(Getlist)
SetAppFocus( aData[1] )
ENDIF
ENDIF
RETURN DCGUI_NONE
Gruß Peter