Hi,
Ich möchte mit XbpBrowse (in einem CRT-Fenster) ein Array bearbeiten lassen. In der Hilfe steht etwas von "databases or arrays", aber ich habe noch kein Beispiel gefunden, das mit einem Array arbeitet.
Gibt es solche Beispiele (mit Funktionalität zum Bearbeiten von Zellen sowie zum Einfügen und Löschen von Zeilen)?
Vielen Dank für jeden Tipp!
Gruss, Roger
PS: Das Aussehen von EDITBROW (aus ..\samples\solution\xbpget) kommt meinen Anforderungen schon recht nahe. Was müsste da geändert werden, um mit einem Array statt mit einer DBF zu arbeiten?
XbpBrowse mit Array
Moderator: Moderatoren
- AUGE_OHR
- Marvin
- Beiträge: 12909
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
Re: XbpBrowse mit Array
hi,
ADEL() gibt es doch.
das XbpGET und um den "Controller" XbpGETC, deshalb der falsche
Ausgangspunkt.
Der grundlegende Unterschiede zwischen DBF und Array sind die
"Navigations" codeblöcke und der o:datalink.
nicht verwirren lassen das beim Array Class Code benutzt wurde und
bei der DBF nicht (typisch Alaska ...), aber man sieht wohl deutlich die
unterschiede.
Nun die :datalink
bei der DBF wird also ein :datalink zum FELD der DBF hergestellt und
beim Array ist der .datalink mit dem Element eines Array verbunden.
tja das war es den auch schon, viel Erfolg mit deinem Browser.
gruss by OHR
Jimmy
C:\ALASKA\XPPW32\SOURCE\samples\basics\GuiBrow\EBROWSE.prgRoger hat geschrieben: Ich möchte mit XbpBrowse (in einem CRT-Fenster) ein Array bearbeiten lassen. In der Hilfe steht etwas von "databases or arrays", aber ich habe noch kein Beispiel gefunden, das mit einem Array arbeitet.
das bearbeiten von Zellen sollte ja kein Problem sein und AINS() undRoger hat geschrieben: Gibt es solche Beispiele (mit Funktionalität zum Bearbeiten von Zellen sowie zum Einfügen und Löschen von Zeilen)?
ADEL() gibt es doch.
bei dem Beispiel geht es weniger um das Browse sondern vielmehr umRoger hat geschrieben: PS: Das Aussehen von EDITBROW (aus ..\samples\solution\xbpget) kommt meinen Anforderungen schon recht nahe. Was müsste da geändert werden, um mit einem Array statt mit einer DBF zu arbeiten?
das XbpGET und um den "Controller" XbpGETC, deshalb der falsche
Ausgangspunkt.
Der grundlegende Unterschiede zwischen DBF und Array sind die
"Navigations" codeblöcke und der o:datalink.
Code: Alles auswählen
DBF :
oBrowse := XbpBrowse():new( oParent,, aPos, aSize,, .F. ):create()
// Navigations Codebloecke fuer den Browser
oBrowse:skipBlock := {|n| DbSkipper(n) }
oBrowse:goTopBlock := {| | DbGoTop() }
oBrowse:goBottomBlock := {| | DbGoBottom() }
oBrowse:phyPosBlock := {| | Recno() }
// Codebloecke fuer den vertikalen Scrollbar.
// Hinweis: DbPosition() liefert Werte zwischen 0 und 100.
// Wir multiplizieren das mit 10 um eine feinere Granularitaet
// fuer den Scrollbar zu erreichen.
oBrowse:posBlock := {| | DbPosition()*10 }
oBrowse:goPosBlock := {|n| DbGoPosition(n/10) }
oBrowse:lastPosBlock := {| | 1000 }
oBrowse:firstPosBlock := {| | 0 }
********************************************************
ARRAY:
::oValues := XbpBrowse():new( ::oValueGroup )
::oValues:SkipBlock := {|nSkip,oBrowse| ::Skip(nSkip,oBrowse) }
::oValues:GoBottomBlock := {|| ::nRecno := LEN(::aData) }
::oValues:GoTopBlock := {|| ::nRecno := 1 }
::oValues:PosBlock := {|| ::nRecno }
::oValues:PhyPosBlock := {|| ::nRecno }
::oValues:LastPosBlock := {|| LEN(::aData) }
::oValues:FirstPosBlock := {|| 1 }
::oValues:HScroll := .F.
::oValues:VScroll := .F.
::oValues:SizeCols := .F.
::oValues:CursorMode := XBPBRW_CURSOR_ROW
bei der DBF nicht (typisch Alaska ...), aber man sieht wohl deutlich die
unterschiede.
Nun die :datalink
Code: Alles auswählen
DBF
imax := FCount()
aStruct := DbStruct()
FOR i:=1 TO imax
IF .NOT. aStruct[i,2] $ "BOVTXY"
oBrowse:addColumn( FieldBlockTrimmed(aStruct[i,1], aStruct[i,2]), , aStruct[i,1] )
ENDIF
NEXT
FUNCTION FieldBlockTrimmed( cFieldName, cType )
LOCAL bBlock
IF FieldPos( cFieldName ) <> 0
IF ! "->" $ cFieldName
cFieldName := "FIELD->"+cFieldName
ENDIF
IF cType = "C"
bBlock := &( "{|x| IIf(x==NIL,RTrim("+cFieldName+"),"+cFieldName+":=x) }" )
ELSE
bBlock := &( "{|x| IIf(x==NIL,"+cFieldName+","+cFieldName+":=x) }" )
ENDIF
ENDIF
RETURN bBlock
********************************************************
ARRAY:
::aData := { { "Januar", 1200 }, ;
...
::oValues:AddColumn ( {|| ::aData[::nRecno,1] }, , "Monat" )
::oValues:AddColumn ( {|| ::aData[::nRecno,2] }, , "Einkommen" )
...
:DataLink := { | cValue | IIF ( cValue != NIL, ;
::aData[::nRecno][2] := VAL ( cValue ),;
ALLTRIM ( STR ( ::aData[::nRecno][2] ) ) ) }
beim Array ist der .datalink mit dem Element eines Array verbunden.
tja das war es den auch schon, viel Erfolg mit deinem Browser.
gruss by OHR
Jimmy