Tastendrücke beim browse()

Zugriff, Engines, Konvertierung. Von ADS über DBF bis zu SQL.

Moderator: Moderatoren

Antworten
saul
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 284
Registriert: So, 26. Mär 2006 12:23

Tastendrücke beim browse()

Beitrag von saul »

Hallo,

Code: Alles auswählen

FUNCTION DbfSkipper( nWantSkip ) 
replace Tastendruck with ?????
  LOCAL nDidSkip := 0 
  DO CASE 
    CASE LastRec() == 0              // Keine Datensätze, 
replace Tastendruck with ?????
    CASE nWantSkip == 0 
         GOTO RecNo()                  // Datenpuffer auffrischen 
    CASE nWantSkip > 0               // Nach unten skippen 
replace Tastendruck with ?????
        DO WHILE nWantSkip > nDidSkip .AND. .NOT. Eof() 
          SKIP 
          IF Eof()                   // Dateiende überschritten 
            SKIP -1 
            EXIT 
          ENDIF 
          nDidSkip ++ 
        ENDDO 
      CASE nWantSkip < 0               // Nach oben skippen 
        DO WHILE nWantSkip < nDidSkip .AND. .NOT. Bof() 
replace Tastendruck with ?????
           SKIP -1 
           IF Bof()                   // Dateianfang erreicht 
              EXIT 
           ENDIF 
           nDidSkip -- 
         ENDDO 
      ENDCASE 
RETURN nDidSkip                     // So viel wurde geskipt 
zur Fehlersuche möchte ich gern jeweils abspeichern welcher Tastendruck zu welchem Ergebnissen führt. Leider führen Funktionen wie lastkeys() hier in der Skipfunktion vom Browse() nicht weiter. Wer hätte dazu eine Idee?

mfg
Wolfgang
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14651
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

Re: Tastendrücke beim browse()

Beitrag von Jan »

Hallo,

versuch doch mal, das in die Eventschleife einzubauen. Mach da einfach eine If-Abfrage, ob der aktuelle XBPart :isDerivedFrom("XbpBrowse") ist. Und wenn ja, wertest Du die Events aus.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
saul
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 284
Registriert: So, 26. Mär 2006 12:23

Re: Tastendrücke beim browse()

Beitrag von saul »

Hi,
in der Eventschleife ist kein Problem. Das wäre dann meine nächste Tat wenn hier keiner eine Idee hat.
Aber in der skip Funktion wäre es für die Fehlerauswertung einfacher.

mfg
Wolfgang
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9357
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 101 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Re: Tastendrücke beim browse()

Beitrag von Tom »

Schau Dir mal LastAppEvent() an.
Herzlich,
Tom
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2824
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

Re: Tastendrücke beim browse()

Beitrag von georg »

Hallo, Wolfgang -


ist es ein reines GUI oder ein Hybrid-Programm?

Bei einem reinen GUI-Programm liefert LastAppEvent() als Ergebnis nur xbeK_Keyboard zurück, Du musst also @mp1 angeben, in diesem Parameter wird dann die entsprechende Taste zurückgemeldet.

Die Platzierung der Abfrage würde ich zu Beginn der skipper-Funktion setzen, da die :isDerivedFrom() Abfrage den Eventloop schon leicht ausbremsen kann.
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Re: Tastendrücke beim browse()

Beitrag von AUGE_OHR »

hi,
saul hat geschrieben:zur Fehlersuche möchte ich gern jeweils abspeichern welcher Tastendruck zu welchem Ergebnissen führt. Leider führen Funktionen wie lastkeys() hier in der Skipfunktion vom Browse() nicht weiter. Wer hätte dazu eine Idee?
siehst du auch im Kühlschrank nach ob das Licht brennt ... :badgrin:
wenn der "Skipper" nicht die Ergebnisse produziert die du haben möchtest liegt es NICHT am "Skipper" sondern an deinen Bedingungen ( Filter ).

den DbfSkipper() den du hier zeigst ist ein normaler "Skipper" welcher maximal "n" Sätze ( Anzahl ROWs ) anzeigt. da es keine Bedingungen gibt

Code: Alles auswählen

 oBrowse:skipBlock     := {|n| DbSkipper(n) }
ist "n" == ROWs

wenn du nun mit dem "Skipper" eine DBF mit Bedingungen (Filter) in DBU öffnest wirst du sehen wie er dir ( langsam) einen Treffer nach dem anderen anzeigt bis alle ROWs gefüllt sind. das "langsam", obwohl nur 1 * SKIP, kommt durch die Bedingung, tatsächlich muss er evtl. paar tausend Datensätze durchgehen bis der Filter einen Treffer meldet.

wenn du dir meinen bedingten "Skipper", mit bWhileCond ansiehst

Code: Alles auswählen

oBrowse:skipBlock     := {|x| GoNext(x, {|| (bBlock) } )
muss er "echt" weiter skippen also X * SKIP.

Es ist aber eine WHILE Condition und keine FOR Condition denn wenn du dir den Code ansiehst

Code: Alles auswählen

   IF EOF()
      SKIP -1
      nSkipped--
   ELSEIF BOF()
      GOTO RECNO()
      nSkipped++
   ELSEIF !EVAL(bWhileCond)
      SKIP -nDirection
      nSkipped += -nDirection
   ENDIF
   RETURN nSkipped
müsstet du merken das es sich bei EOF(), BOF() und !EVAL(bBlock) um "End-Bedingungen" handelt.
Es gilt also für einen WHILE "Skipper" die selbe Bedingung wie für eine Relation um (schnelle) richtige Ergebnisse zu bekommen.

wenn du einen "Voll-Text-Such-Browser" haben willst würde ich , per OrdWildSeek(), die Daten in ein Array sammeln und anzeigen.
gruss by OHR
Jimmy
Antworten