Array in xbpbrowse darstellen

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

Array in xbpbrowse darstellen

Beitrag von saul »

Hallo,
ich versuche seit Wochen verzweifelt Daten aus einer Datenbank in ein Array zu laden und in xbpbrowse() darzustellen. Ich habe fbrowse.prg als Beispiel angeschaut. Leider verstehe ich nicht was die einzelnen Schritte dort bedeuten und kann das Beispiel daher auch nicht auf einen andern Fall übertragen.
Beispiel für das nicht verstandene:

Code: Alles auswählen

FUNCTION DirBlock( aArray, nSubScript )
RETURN {|nElement| nElement := aArray[ ARR_NO ], nElement := aArray[ ARR_SORT, nElement ], aArray[ ARR_SRC, nElement, nSubScript ] }

Das habe ich bisher zusammengeschrieben:

Code: Alles auswählen


  aArray={}
  do while kennzeich=mkennzeich
    aadd(aArray,{gruppe,bezeich,pn,sn})        // gruppe, bezeich, pn, sn sind Felder aus der Datenbank
    skip
  enddo

   oBrowseA := XbpBrowse():new( ,,{60,40}, {200,500})
   oBrowseA:create()

   oColumn := XbpColumn():new( )
   oColumn:dataLink := {|| aArray }
   oBrowseA:addColumn( oColumn )

  // Navigationscodeblöcke fr den Browser
   oBrowseA:skipBlock     := {|n| DbSkipper(n) }
   oBrowseA:goTopBlock    := {| | DbGoTop()    }
   oBrowseA:goBottomBlock := {| | DbGoBottom() }
   oBrowseA:phyPosBlock   := {| | Recno()      }
  // Navigationscodeblöcke für den vertikalen Scrollbar
   oBrowseA:posBlock      := {| | DbPosition()    }
   oBrowseA:goPosBlock    := {|n| DbGoPosition(n) }
   oBrowseA:lastPosBlock  := {| | 100             }
   oBrowseA:firstPosBlock := {| | 0               }

   oBrowseA:show()
   SetAppFocus( oBrowseA )

   // Event loop
   DO WHILE nEvent <> xbeP_Close
      nEvent := AppEvent( @mp1, @mp2, @oXbp )
      oXbp:handleEvent( nEvent, mp1, mp2 )
      IF nEvent == xbeP_Keyboard .AND. oXbp == oBrowseA
         DO CASE
           CASE mp1 == xbeK_ESC
           exit
         ENDCASE
      ENDIF
   ENDDO

Die Fenster habe ich jetzt beim Code weggelassen um diesen nicht aufzublähen. Mit xbpquickbrowse habe ich es hingekriegt, aber die Tabelle kann man nicht umfangreich verändern.
Ich denke bei datalink und bei den Navigationszeilen klemmt es.
Ich hoffe auf Hilfe.

Danke
Wolfgang
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: Array in xbpbrowse darstellen

Beitrag von AUGE_OHR »

saul hat geschrieben:ich versuche seit Wochen
warum fragst du nicht früher ?
saul hat geschrieben:verzweifelt Daten aus einer Datenbank in ein Array zu laden und in xbpbrowse() darzustellen. Ich habe fbrowse.prg als Beispiel angeschaut. Leider verstehe ich nicht was die einzelnen Schritte dort bedeuten und kann das Beispiel daher auch nicht auf einen andern Fall übertragen.
das FBrowse Beispiel ist leider sehr "aufgebläht" weil Array im Array ...
wenn man es jedoch mal geschnallt hat ist besonders der "Index" von Vorteil.
saul hat geschrieben:

Code: Alles auswählen

  // Navigationscodeblöcke fr den Browser
   oBrowseA:skipBlock     := {|n| DbSkipper(n) }
   oBrowseA:goTopBlock    := {| | DbGoTop()    }
   oBrowseA:goBottomBlock := {| | DbGoBottom() }
   oBrowseA:phyPosBlock   := {| | Recno()      }
  // Navigationscodeblöcke für den vertikalen Scrollbar
   oBrowseA:posBlock      := {| | DbPosition()    }
   oBrowseA:goPosBlock    := {|n| DbGoPosition(n) }
   oBrowseA:lastPosBlock  := {| | 100             }
   oBrowseA:firstPosBlock := {| | 0               }
Tja und da liegt dein "Problem" : du willst mit einem Array arbeiten und benutzt "DBF - Befehle" ... wie willst du denn z.b. "skippen" oder bei "DbGoTop()" hin "navigieren" ?

siehe dir doch bitte nochmal das XbpBrowse() Help Demo zu Array an

Code: Alles auswählen

      oBrowse:SkipBlock     := {|nSkip,oBrowse| DoSkip(nSkip,oBrowse) } 
      oBrowse:GoBottomBlock := {|| nRecno := Len(aData) } 
      oBrowse:GoTopBlock    := {|| nRecno := 1 } 
      oBrowse:PosBlock      := {|| nRecno } 
      oBrowse:PhyPosBlock   := {|| nRecno } 
      oBrowse:LastPosBlock  := {|| Len(aData) } 
      oBrowse:FirstPosBlock := {|| 1 } 
so sollten die Navigations Codeblöcke für ein "normales" Array aussehen.
gruss by OHR
Jimmy
saul
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 284
Registriert: So, 26. Mär 2006 12:23

Re: Array in xbpbrowse darstellen

Beitrag von saul »

Danke,
wo finde ich den das XbpBrowse() Help Demo zu Array?

mfg
Wolfgang
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: Array in xbpbrowse darstellen

Beitrag von georg »

Hallo, Wolfgang -


in der Xbase Dokumentation ist es das zweite Beispiel unter XbpBrowse.


Gruss,

Georg
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
saul
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 284
Registriert: So, 26. Mär 2006 12:23

Re: Array in xbpbrowse darstellen

Beitrag von saul »

Bei mir steht in der Hilfe unter xbpbrowse() nur ein Beispiel.

'W'olfgang
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: Array in xbpbrowse darstellen

Beitrag von AUGE_OHR »

saul hat geschrieben:Bei mir steht in der Hilfe unter xbpbrowse() nur ein Beispiel
welche Version verwendest du ?
v1.9.355 Hilfe

Code: Alles auswählen

Beispiel - 2 
// Grafischer Browser für ein Array 
// Das Beispiel zeigt die Verwendung von XbpBrowse zum Anzeigen 
// eines Arrays. Ausserdem wird gezeigt, wie der Browser für  
// die Anzeige mit visuellen Stilen angepasst werden kann. Dies 
// ist zum Beispiel bei Windows XP oder Windows Vista wichtig. 

   ****************************************************************** 
   * WICHTIG: Dem Beispiel muß eine Manifest-Datei oder Resource 
   * hinzugefügt werden! Weitere Information zu Manifests finden 
   * Sie in der Dokumentation der Funktion "IsThemeActive()". 
   ****************************************************************** 
   #include "xbp.ch" 
   #include "appevent.ch" 

   #PRAGMA LIBRARY( "XPPUI2.LIB" ) 

   // Globale Variablen zur Verwaltung  
   // der Datenquelle (Array) 
   STATIC aData 
   STATIC nLastRec  
   STATIC nRecno    

PROCEDURE Main() 
    LOCAL oBrowse 
    LOCAL nEvent 
    LOCAL oXbp := NIL 
    LOCAL mp1  := NIL 
    LOCAL mp2  := NIL 
    LOCAL oCol 
    LOCAL nWidth 
    LOCAL oGroup 

      // Anwendungsfenster konfigurieren (XbpCrt-Fenster) 
      SetMouse( .T. ) 
      SetColor( "N/W+" ) 
      CLS 

      SetAppWindow():UseShortCuts := .T. 

      // Gruppenrahmen als Hintergrund für den  
      // Browser erzeugen 
      oGroup := XbpStatic():New() 
      oGroup:Type    := XBPSTATIC_TYPE_GROUPBOX 
      oGroup:Caption := "Inventory" 
      oGroup:Create( ,,, {440,250} ) 

      CenterControl( oGroup ) 

      // Array als Datenquelle für den Browser 
      // und zugehörige Statusvariablen vorbereiten 
      aData    := { {"Magazine",   133, .T.},; 
                    {"Zeitungen",  15,  .T.},; 
                    {"Bücher",     32,  .T.},; 
                    {"Postkarten", 833, .F.} } 

      nLastRec := Len(aData) 
      nRecno   := 1 
 
      // Browser erzeugen und mit der Datenquelle 
      // verknüpfen. Visuelle Stile werden ausgeschaltet, 
      // damit die eingestellten Zellrahmen unabhängig 
      // von der Visualisierung des Betriebssystems 
      // angezeigt werden. 
      oBrowse := XbpBrowse():New( oGroup )  
      oBrowse:SkipBlock     := {|nSkip,oBrowse| DoSkip(nSkip,oBrowse) } 
      oBrowse:GoBottomBlock := {|| nRecno := Len(aData) } 
      oBrowse:GoTopBlock    := {|| nRecno := 1 } 
      oBrowse:PosBlock      := {|| nRecno } 
      oBrowse:PhyPosBlock   := {|| nRecno } 
      oBrowse:LastPosBlock  := {|| Len(aData) } 
      oBrowse:FirstPosBlock := {|| 1 } 
      oBrowse:CursorMode    := XBPBRW_CURSOR_ROW 
      oBrowse:UseVisualStyle := .F. 
      oBrowse:Create( ,, {20,20}, {400,200},, .F. ) 

      // Spalten zum Browser hinzufügen 
      oBrowse:AddColumn( {|| aData[nRecno,1]}, 15, "Publikation" ) 
      oBrowse:AddColumn( {|| aData[nRecno,2]}, 5,  "Auf Lager" ) 
      oBrowse:AddColumn( {|| aData[nRecno,3]}, 1,  "Web-Shop" ) 

      // Visuelle Stile für die Scrollbars wieder  
      // einschalten. Dadurch bleibt der Datenbereich  
      // konfigurierbar, während die Scrollbars  
      // plattformkonform dargestellt werden 
      oBrowse:HScrollObject:UseVisualStyle  := .T. 
      oBrowse:VScrollObject:UseVisualStyle  := .T. 

      oBrowse:Show() 
      SetAppFocus( oBrowse ) 

      nEvent := xbeP_None 
      DO WHILE nEvent != xbeP_Close 
         nEvent := AppEvent( @mp1, @mp2, @oXbp ) 
         oXbp:HandleEvent( nEvent, mp1, mp2 ) 
      ENDDO 
      oBrowse:Destroy() 
   RETURN 

   ******************************************************************  
   * Funktion zum Bewegen des Satzzeigers durch die Datenquelle 
   ******************************************************************  
FUNCTION DoSkip( nSkip ) 
    LOCAL nCanSkip 

      IF nRecno + nSkip < 1             // "BoF" 
         nCanSkip := 1 - nRecno 
      ELSEIF nRecno + nSkip > nLastRec  // "EoF" 
         nCanSkip := nLastRec - nRecno 
      ELSE 
         nCanSkip := nSkip 
      ENDIF 
      nRecno += nCanSkip 
   RETURN nCanSkip 
gruss by OHR
Jimmy
Antworten