DCBROWSE und Schnellsuche [Gelöst]

Moderator: Moderatoren

Antworten
Peter Schweizer
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 153
Registriert: Do, 06. Apr 2006 10:51
Danksagung erhalten: 3 Mal

DCBROWSE und Schnellsuche [Gelöst]

Beitrag von Peter Schweizer »

Hallo Gemeinde,
in meinem alten Clipper-Prg hatte ich eine Funktion die in einem TBrowse ein Seek suche auslöste, sobald im Browser ein Taste gedrückt wurden.
Also z.B. Taste: B gedrückt und Seek 'B' ausgeführt.

Nun würde ich sowas auch in DCBROWSE einbauen, und habe im DCBROWSE einen Handler BrowSuch_Handler angegeben, aber die Handler Fkt wird nicht aufgerufen.
Gehe ich prinzipiell richtig vor oder habt ihr eine andere Idee umsowas zu machen ?

Gruß Peter

Code: Alles auswählen

  
 @ 0.5,02 DCBROWSE oBrowse;
		ALIAS cAlias;
		SIZE 83,19;
		FIT;
		PRESENTATION DC_BrowPres();
		CURSORMODE XBPBRW_CURSOR_ROW;
		HANDLER BrowSuch_Handler ;
		DATALINK {|| bearb_txt(oDlg), DC_GetRefresh(Getlist), SetAppFocus(oBrowse)}
Zuletzt geändert von Peter Schweizer am Mo, 20. Feb 2017 17:43, insgesamt 1-mal geändert.
Gruss Peter
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: DCBROWSE und Schnellsuche

Beitrag von Tom »

Es gibt ein fertiges Dc_BrowseAutoSeek (oder ähnlich, schau mal in die Docs und Beispiele), davon abgesehen gehört der Handlerblock m.E. ins DCREAD (sonst ist er nur wirksam, wenndas Browse den Fokus hat).
Herzlich,
Tom
Benutzeravatar
Wolfgang Ciriack
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2932
Registriert: Sa, 24. Sep 2005 9:37
Wohnort: Berlin
Hat sich bedankt: 13 Mal
Danksagung erhalten: 34 Mal
Kontaktdaten:

Re: DCBROWSE und Schnellsuche

Beitrag von Wolfgang Ciriack »

Ich benutze das in einem eigenen Suchfeld z.B. so (je nach Sortierung des Browse ist der Index anders):

Code: Alles auswählen

local bSeekBlock:={|a| iif( thi->(indexord())=1, thi->(dc_dbseek(padleft(alltrim(a),7),.T.)), ;
                        iif( thi->(indexord())=2, thi->(dc_dbseek(val(padright(alltrim(a),7,"0")),.T.)), ;
                         iif( thi->(indexord())=3, thi->(dc_dbseek(padleft(alltrim(a),3),.T.)), ;
                          iif( thi->(indexord())=4, thi->(dc_dbseek(a,.T.)), ;
                           iif( thi->(indexord())=5, thi->(dc_dbseek(tstr2dtos(a),.T.)), ;
                            iif( thi->(indexord())=7 .or. thi->(indexord())=8, thi->(dc_dbseek(upper(a),.T.)), .T.)))))),.T.}

@...DCGET Suchstr ....... KEYBLOCK {|a,b,o|  dc_browseAutoSeek(a,o,oBrowse,,,,,,bSeekBlock,,.T.),NIL) } ;
Viele Grüße
Wolfgang
Peter Schweizer
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 153
Registriert: Do, 06. Apr 2006 10:51
Danksagung erhalten: 3 Mal

Re: DCBROWSE und Schnellsuche

Beitrag von Peter Schweizer »

Hallo Tom,
ich wollte den Handler extra im DCBROWSE ansiedeln , da ich noch andere DCGETS im Dialog habe.

Warum dem Handler aber gar nicht erst aufgerufen wird ( altd() gleich am anfang der Handlerfkt) ist mir schleierhaft. Oder gibt es da im
Debug-Modus Einschränkungen ?

Gruß Peter

Meine Handlerfkt prinzipiell:

Code: Alles auswählen

STATIC FUNCTION BrowSuch_Handler ( nEvent, mp1, mp2, oXbp, oDialog, GetList, aApp )
	STATIC cSuch := ''
altd()
	IF nEvent = xbeP_Keyboard
		cChar := Chr(mp1)
         	SEEK cSuch+cChar
		IF Found()
			cSuch +=cChar
		ENDIF
		......           
	ENDIF
RETURN DCGUI_NONE

Gruss Peter
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: DCBROWSE und Schnellsuche

Beitrag von AUGE_OHR »

Peter Schweizer hat geschrieben:

Code: Alles auswählen

STATIC FUNCTION BrowSuch_Handler ( nEvent, mp1, mp2, oXbp, oDialog, GetList, aApp )
	STATIC cSuch := ''
	IF nEvent = xbeP_Keyboard
ich bin kein Express++ Experte aber gewöhnlich hängt man sich in den o:Keyboard Slot d.h. nKey ist ein INKEY Wert und kein Event

Code: Alles auswählen

FUNCTION DC_BrowseAutoSeek( nKey, oGet, oBrowse, xData, nColumn, ;
                            bcPrefix, bFormat, nDelay, bSeek, nPointer, ;
                            lClearGet )
gruss by OHR
Jimmy
Peter Schweizer
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 153
Registriert: Do, 06. Apr 2006 10:51
Danksagung erhalten: 3 Mal

Re: DCBROWSE und Schnellsuche

Beitrag von Peter Schweizer »

Mir ist schon klar das ich über ein seperate GET und DC_BrowseAutoSeek() das machen könnte,
aber der Hintergrund ist der, das sobald der DCBROWSE den Focus hat, ich diese Schnellsuchfkt realisieren möchte (ohne das der Benutzer den Fokus in ein seperates GET setzen muß).

Sobald ich also ein Zeichen über die Tastatur eingebe soll die Suchfkt starten.
War die Suchaktion erfolgreich, will ich dieses Zeichen zusätzlich in einer STATIC Variablen cStatic speichern, so daß bei einem erneuten Tastendruck
im DCBROWSE die Suchfkt auf seek cStatic + <aktueller Tastendruck> abläuft.
Auf diese Art und Weise konnte ich mich, in meinem alten Clipper-Prg, sehr schnell zu einem gewünschen Datensatz bewegen.

Gruß Peter
Gruss Peter
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: DCBROWSE und Schnellsuche

Beitrag von Tom »

Hallo, Peter.

In der Funktion vermisse ich oBrowse:RefreshAll() und ggf. oBrowse:ForceStable(), da sich ansonsten die Anzeige nicht aktualisiert - nur das Suchen allein bewirkt ja optisch nichts.

Ich verwende grundsätzlich Handlerblöcke im DCREAD und prüfe da bei ganz ähnlichen Funktionen, ob das Browse im Fokus ist. Wenn das dann der Fall ist, verfahre ich entsprechend. Einen Handler direkt am Browse habe ich noch nie verwendet. Müsste ich mal ausprobieren.
Herzlich,
Tom
Peter Schweizer
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 153
Registriert: Do, 06. Apr 2006 10:51
Danksagung erhalten: 3 Mal

Re: DCBROWSE und Schnellsuche [Gelöst]

Beitrag von Peter Schweizer »

Hallo Tom,

habe wie vorgeschlagen den Handler in den DCREAD Befehl mit eingebaut, und tatsächlich es geht !

Vielen Dank.

Gruß Peter
Gruss Peter
Antworten