TBrowse vs XbpBrowse [ERLEDIGT]

Sonstiges (nicht kategorisierbar)

Moderator: Moderatoren

Antworten
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

TBrowse vs XbpBrowse [ERLEDIGT]

Beitrag von Manfred »

Wie schon erwähnt muß ich eine GUI Anwendung auf VIO umbauen. Die GUI Anwendung wurde mit express++ erstellt. Weiterhin war dort ein DCBROWSE also ein XbpBrowse eingebaut, das immer aktuell angezeigt hat, was gerade in der DBF ist. Das müßte ich jetzt auf VIO umbauen und denke mir, dass ich das mit einem TBrowse Objekt bauen kann/sollte. Aber irgendwie will die Aktualisierung und direkte Anzeige nicht klappen. Wobei sich mir immer mehr die Frage die stellt, ob man das im VIO Modus überhaupt so realisieren kann, wie im GUI Modus? IM GUI Modus kann ja zwischen Eingabefeldern und browse hin- und hergeklickt werden und dann im Browse gescrollt.
Zumindest bekomme ich es jetzt im Moment nicht hin und bevor ich jetzt weiter herumwerkel und das evtl. noch auf dem falschen Pfad......
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: TBrowse vs XbpBrowse

Beitrag von brandelh »

ich habe eine Funktion Tabelle, die vieles macht, vielleicht kann die dir helfen.

Code: Alles auswählen

*------------------------------------------------------- tabelle ------
procedure tabelle ( o,l,u,r,dat_alias,afelder,afeld_name,fest,auswahl,;
                    bildretten,hilfe,SatzNr, FarbString )
    // o , l , u , r   Positionen des Fensters
    // dat_alias       Alias in dem die Datei ge”ffnet ist     z.B. "DRUCK"
    // afelder         Array mit den Feldnamen, bzw. Codeblocks !
    //                 z.B. recno() -> {|| recno() }
    //                 normale Funktionen mssen als CODEBLOCK definiert sein !
    // afeld_name      Array mit den šberschriftennamen fr die Feldnamen
    // fest            Ab welcher Spalte links eingefroren wird
    // auswahl         wenn .t., kann Anzeige mit Enter beendet werden.
    // bildretten      wenn .t., dann Bildschirm sichern und zurcksetzen
    // hilfe           Text, welcher an Hilfeprozedur bergeben werden soll
    // SatzNr          Falls anzuzeigende Datei mit Seek bewegt wurde, und
    //                 somit nicht auf dem 1. Satz steht, muá fr Laufbalken-
    //                 die logische Satznummer (Dateiposition) angegeben
    //                 werden. Ungef„hrer Wert reicht aus. NIL -> 1
    // Farbstring      Farbdefinition fr Anzeige
    // Anzeige einer Datenbank mit Laufbalken

    local otab,altselect,altcolor,altscreen,altcursor,x,t,datpos,zeipos
    local zeimax,zeiprosatz,log_recn

    if farbstring=NIL
       farbstring=if(farbe,"w+/g,w+/n,n/w","w/n,u,n/w")
    endif
    if auswahl=NIL                      // Standard ist mit Enter kein Ende
       auswahl=.f.
    endif
    if bildretten=NIL                   // Standard ist Bild sichern und
       bildretten=.t.                   // zurcksetzen
    endif
    if hilfe=NIL
       hilfe=""
    endif
    if fest=NIL
       fest=0
    endif

    if bildretten
       altscreen =savescreen( o, l, u, r )
    endif

    altselect =select()
    altcolor  =setcolor()
    altcursor =setcursor(0)

    if SatzNr=NIL
       log_recn = 1                            // wegen Indexdatei wird
                                               // Satznummer selbst hochge-
                                               // z„hlt, und nicht mit
                                               // recno() ermittelt.
    else
       log_recn = max( SatzNr , 1 )            // mindestens 1
    endif

    zeimax= u - o + 1                         // Anzahl der Anzeigepositionen
                                              // des Rollbalkens
    select (dat_alias)

    otab:=tbrowseDB( o, l, u, r-1 )           // Tabellenobject
    otab:headSep := "ÄÅÄ"                     // Kopf- und Spalten
    otab:colSep  := " ³ "                     // trennzeichen setzen
    otab:colorspec := farbstring

    * Die SKIP, GO TOP und GO BOTTOM mssen wegen Laufbalken bei Index
    * ge„ndert werden !
    * ACHTUNG log_recn muá per Referenz bergeben werden ( @ ) !!!!
    * SKIP Funktion setzt logische Satznummer.
    * Wichtig fr Index !

    otab:skipBlock := { |x| tab_skipper(x, @log_recn ) }
    otab:GoTopBlock := { || tab_gotop( @log_recn ) }
    otab:GoBottomBlock := { || tab_gobottom( @log_recn )  }

    // TB Spalten erzeugen, je nach Parameter
    do case
       case valtype(afelder)="A" .and. valtype(afeld_name)="A"
            * Felderliste und Feldnamensliste wurden bergeben, verwenden !
         for x = 1 to len(afelder)
           if valtype( afelder[x] ) = "B"
             otab:addColumn( TBColumnNew( afeld_name[x] , afelder[x]  ))
           else
             otab:addColumn( TBColumnNew( afeld_name[x] , ;
                                  fieldwblock( afelder[x], select() ) ))
           endif
         next
       case valtype(afelder)="A"
            * NUR Felderliste wurde bergeben, richtige Feldnamen anzeigen
         for x = 1 to len(afelder)
           if valtype( afelder[x] ) = "B"
             otab:addColumn( TBColumnNew( afelder[x] , afelder[x]  ))
           else
             otab:addColumn( TBColumnNew( afelder[x] , ;
                                  fieldwblock( afelder[x], select() ) ))
           endif
         next
       otherwise       // sonst alle Felder mit richtigem Namen
         for x = 1 TO fcount()
            otab:addColumn( TBColumnNew( fieldname(x)  , ;
                                  fieldwblock( fieldname(x), select() ) ))
         next
    endcase

    otab:freeze:= fest                      // Feste Spalten

    do while .t.
       do while ! otab:stable
          otab:stabilize()          // Alle Daten korrekt anzeigen
       enddo

       // Rollbalken anzeigen
       datpos = log_recn / recc()               // Datenpositon des aktuellen
                                                // Datensatzes im Verh„ltnis
                                                // zur Anzahl der S„tze
       zeiprosatz=int(zeimax / recc()+.99)
       zeipos = int(zeimax-1)*datpos      // Position des Zeigers

       for x=o to u                             // Anzeigebereich zurcksetzen
          devpos( x,r )
          do case
             case x=o
               devout( "A",if(farbe,"w/b","w"))
             case x=u
               devout( "E",if(farbe,"w/b","w"))
             otherwise
               devout( "º",if(farbe,"w/b","w"))
          end case
       next

       if zeiprosatz < 1
          devpos( o + zeipos ,r )                  // Position anzeigen
          devout( "*" ,if(farbe,"w+/n","w+"))
       else
          for x=o+zeipos-zeiprosatz+1 to o+zeipos
            devpos( x ,r )                  // Position anzeigen
            devout( "*" ,if(farbe,"w+/n","w+"))
          next
       endif

       otab:colorRect( {otab:rowpos,1,otab:rowpos,otab:colcount} ,;
                    {2,3} )                 // Cursorzeile hervorheben
       t=inkey(0)

       otab:colorRect( {otab:rowpos,1,otab:rowpos,otab:colcount} ,;
                    {1,2} )                 // Cursorzeile auf Standard !

       do case                              // Auf Taste reagieren !
          case t=K_UP                          // Pfeil auf 1 Satz aufw„rts
            otab:up()
          case t=K_DOWN                        // Pfeil ab  1 Satz abw„rts
            otab:down()
          case t=K_RIGHT                       // Pfeil rechts 1 Feld rechts
            otab:panright()                       // als Bildschirm rollen
          case t=K_LEFT                        // Pfeil links  1 Feld links
            otab:panleft()                        // als Bildschirm rollen
          case t=K_HOME                        // POS1    1. Feld  der Zeile
            otab:panhome()
          case t=K_END                         // ENDE letztes Feld in Zeile
            otab:panend()
          case t=K_PGUP                        // Bild auf -> Seite auf
            otab:pageup()
          case t=K_PGDN                        // Bild ab  -> Seite ab
            otab:pagedown()
          case t=K_CTRL_PGUP                   // STRG+Bild auf -> 1. Zeile
            otab:gotop()
          case t=K_CTRL_PGDN                   // STRG+Bild ab  -> letzte Z.
            otab:gobottom()
          case t=K_CTRL_HOME
            otab:gotop()
            otab:panhome()
          case t=K_CTRL_END
            otab:gobottom()
            otab:panhome()

          // Funktionstasten                    // abarbeiten

          case t=K_F1  .and. f[1]=.t.           // Hilfetext
            help( "ANZEIGEN",0,HILFE )
          case t=K_CTRL_F1  .and. f[1]=.t.      // Hilfetext „ndern
            helpedit("ANZEIGEN",0,HILFE )

          case t=K_F3  .or. t=K_ESC             // Ende der Anzeige
            exit
          case t=K_F12 .and. f[12]=.t.          // Ende des Programmes
            do prog_ende
          case t=K_ENTER .and. auswahl=.t.      // In Auswahllisten ist
            exit                                // Enter eine Endetaste.

       endcase

    enddo

    if bildretten
       restscreen( o, l, u, r ,altscreen )
    endif
    select (altselect)
    setcolor(altcolor)
    setcursor(altcursor)
return

*---------------------------------------------------------- TAB_SKIPPER --

static function tab_skipper ( anzahl,log_recn )
   * die log_recn (logische Satznummer) wird von der SKIP Funktion jeweils
   * angepaát. Dies ist die einzig sichere Methode fr Dateien mit und ohne
   * Index. Fr Filter jedoch noch nicht ganz ausreichend.
   * ACHTUNG log_recn muá per Referenz bergeben werden ( @ ) !!!!
   local x
   x := 0

   if anzahl == 0 .OR. recc()== 0
      go recno()                        // Puffer neu lesen, rest ok !
   elseif anzahl > 0 .and. recno() != recc() + 1
        // vorw„rts
        do while x < anzahl
            skip 1
            if ( eof() )
               skip  -1
               log_recn=recc()
               exit
            endif
            log_recn=MIN(log_recn+1,recc()) //erfolgreich, logische Satznummer
                                            // erh”hen. H”chstwert = recc()
            x++                        // Z„hler der durchzufhrenden SKIP
                                       // erh”hen
        enddo
   elseif anzahl < 0
        // rckw„rts
        do while x > anzahl
            skip -1
            if ( bof() )
                log_recn=1             // Dateianfang = 1. log. Satz
                exit
            endif
            log_recn=MAX(log_recn-1,1) // erfolgreich, logische Satznummer
                                       // senken, kleinster Wert = 1
            x--                        // Z„hler der durchzufhrenden SKIP
                                       // senken
        enddo

    endif

    RETURN x

*---------------------------------------------------------- TAB_GOTOP --

static function tab_GOTOP ( log_recn )
   * die log_recn (logische Satznummer) wird von der Funktion jeweils
   * angepaát. Dies ist die einzig sichere Methode fr Dateien mit und ohne
   * Index. Fr Filter jedoch noch nicht ganz ausreichend.
   * ACHTUNG log_recn muá per Referenz bergeben werden ( @ ) !!!!

   go top
   log_recn=1
return( NIL )

*---------------------------------------------------------- TAB_GOBOTTOM --

static function tab_GOBOTTOM ( log_recn )
   * die log_recn (logische Satznummer) wird von der Funktion jeweils
   * angepaát. Dies ist die einzig sichere Methode fr Dateien mit und ohne
   * Index. Fr Filter jedoch noch nicht ganz ausreichend.
   * ACHTUNG log_recn muá per Referenz bergeben werden ( @ ) !!!!

   go bottom
   log_recn=recc()
return( NIL )
Gruß
Hubert
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: TBrowse vs XbpBrowse

Beitrag von brandelh »

Die Funktion blättert und wählt auch aus, wenn du NUR ANZEIGEN willst, musst du halt bei jeder Satzbewegung oder im Zeitinterval
Refresh-Aufrufe starten. Dann würde ich @ say verwenden.
Gruß
Hubert
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: TBrowse vs XbpBrowse

Beitrag von Manfred »

Danke, der kurze Schlag auf den Hinterkopf hat mir erstmal weiter geholfen. Aber leider kann man nicht hin und herspringen. Einmal den Browse verlassen muß man den neu aufrufen.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: TBrowse vs XbpBrowse

Beitrag von Manfred »

Ich habe gerade einen Tipp erhalten. Ich muß das Pferd von hinten aufzäumen. Ich aktiviere derzeit zuerst die GEt Felder und das ist falsch. Ich muß den Browse aktivieren und dann daraus mittels Taten in die Eingabefelder wechseln. So wie ich das früher auch gemacht habe. Manmanman, alles wieder verlernt. :banghead:
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
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: TBrowse vs XbpBrowse

Beitrag von AUGE_OHR »

Manfred hat geschrieben:Wie schon erwähnt muß ich eine GUI Anwendung auf VIO umbauen.
so rum ist ungewöhnlich ...

Frage : mit oder ohne SetMouse() ?
Manfred hat geschrieben:Das müßte ich jetzt auf VIO umbauen und denke mir, dass ich das mit einem TBrowse Objekt bauen kann/sollte.
dann siehe dir das Browse() in c:\ALASKA\XPPW32\SOURCE\SYS\BrowSys.prg an.
gruss by OHR
Jimmy
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: TBrowse vs XbpBrowse

Beitrag von Manfred »

ja, ich habe schon gesehen, das Dbedit() auch reines TBrowse() ist. habe aber wie schon weiter oben die Sache umgedreht und es klappt jetzt so, wie ich es brauche.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Antworten