Array-Browsen
Moderator: Moderatoren
Array-Browsen
Hallo,
habe schon wieder das nächste Problem, welches ich nicht lösen kann
Habe mir ein Formular gebastelt auf dem ein XbpBrowse angezeigt werden soll. Dem Formular werden von außen zwei Arrays übergeben. Eins für die Feldnamen und eins mit den Werten.
Habe das Ganze erstmal für ein Feld am Testen. Das Problem beim Refresh bekomme ich den Fehler: "Fehler bei der Array-Indizierung"
Ich poste mal den Code, der meiner Meinung nach nen Fehler hat, den ich aber nicht finde. Habe mich dazu an das Beispiel EBROWSE gehalten.
in Init:
::oBrowser := XbpBrowse():new( ::_FormVorlage:drawingArea,, {1,1},
{aSize[1]-1,aSize[2]-1})
::oBrowser:SkipBlock := {|nSkip,oBrowse| ::Skip(nSkip,oBrowse)}
::oBrowser:GoBottomBlock := {|| ::nRecNo := len(::aValues)}
::oBrowser:GoTopBlock := {|| ::nRecNo := 1 }
::oBrowser:PosBlock := {|| ::nRecNo }
::oBrowser:PhyPosBlock := {|| ::nRecNo }
::oBrowser:LastPosBlock := {|| LEN(::aValues) }
::oBrowser:FirstPosBlock := {|| ::nRecNo := 1 }
::oBrowser:HScroll := .t.
::oBrowser:VScroll := .t.
::oBrowser:CursorMode := XBPBRW_CURSOR_ROW
...
(wird vom aufrufenden Programm vor BrowseSingle:create() aufgerufen)
METHOD BrowseSingle:setArrays(aField,aVal)
::aFields := aField
::aValues := aVal
::nRecCnt := len(::aValues)
RETURN
dies wird nach oBrowse:create() aufgerufen für das Erstellen der Spalten
METHOD BrowseSingle:createColumns()
Local z
Local sFieldBlock
if len(::aFields) == 1
::oBrowser:addColumn( {|| ::aValues[::nRecNo] }, , ::aFields[1])
endif
::oBrowser:refreshAll() *
RETURN
Der Fehler tritt bei der Zeile mit * auf.
Ein Auszug aus der XPPERRORLOG:
[...]
oError:args :
-> VALTYPE: B VALUE: {|| ::nRecNo }
-> VALTYPE: O CLASS: XbpBrowse
oError:canDefault : N
oError:canRetry : J
oError:canSubstitute: N
oError:cargo : NIL
oError:description : Fehler bei der Arrayindizierung
oError:filename :
oError:genCode : 4
oError:operation : eval
oError:osCode : 0
oError:severity : 2
oError:subCode : 1012
oError:subSystem : BASE
oError:thread : 1
oError:tries : 1
------------------------------------------------------------------------------
CALLSTACK:
------------------------------------------------------------------------------
Aufgerufen von XBPBROWSE:FORCESTABLE(1097)
Aufgerufen von XBPBROWSE:HANDLEEVENT(1453)
Aufgerufen von XBPBROWSE:REFRESHROWS(2219)
Aufgerufen von XBPBROWSE:REFRESHALL(2143)
Aufgerufen von BROWSESINGLE:CREATECOLUMNS(95)
Aufgerufen von BROWSESINGLE:CREATE(57)
Aufgerufen von SHOWARRAY(407)
Aufgerufen von (B)MENUCREATE(387)
Aufgerufen von MAIN(368)
Ich hoffe mal jemand kann damit etwas anfangen, weil ich bin mit meinem Latein am Ende!
Vielen Dank schon mal, Ralf...
habe schon wieder das nächste Problem, welches ich nicht lösen kann
Habe mir ein Formular gebastelt auf dem ein XbpBrowse angezeigt werden soll. Dem Formular werden von außen zwei Arrays übergeben. Eins für die Feldnamen und eins mit den Werten.
Habe das Ganze erstmal für ein Feld am Testen. Das Problem beim Refresh bekomme ich den Fehler: "Fehler bei der Array-Indizierung"
Ich poste mal den Code, der meiner Meinung nach nen Fehler hat, den ich aber nicht finde. Habe mich dazu an das Beispiel EBROWSE gehalten.
in Init:
::oBrowser := XbpBrowse():new( ::_FormVorlage:drawingArea,, {1,1},
{aSize[1]-1,aSize[2]-1})
::oBrowser:SkipBlock := {|nSkip,oBrowse| ::Skip(nSkip,oBrowse)}
::oBrowser:GoBottomBlock := {|| ::nRecNo := len(::aValues)}
::oBrowser:GoTopBlock := {|| ::nRecNo := 1 }
::oBrowser:PosBlock := {|| ::nRecNo }
::oBrowser:PhyPosBlock := {|| ::nRecNo }
::oBrowser:LastPosBlock := {|| LEN(::aValues) }
::oBrowser:FirstPosBlock := {|| ::nRecNo := 1 }
::oBrowser:HScroll := .t.
::oBrowser:VScroll := .t.
::oBrowser:CursorMode := XBPBRW_CURSOR_ROW
...
(wird vom aufrufenden Programm vor BrowseSingle:create() aufgerufen)
METHOD BrowseSingle:setArrays(aField,aVal)
::aFields := aField
::aValues := aVal
::nRecCnt := len(::aValues)
RETURN
dies wird nach oBrowse:create() aufgerufen für das Erstellen der Spalten
METHOD BrowseSingle:createColumns()
Local z
Local sFieldBlock
if len(::aFields) == 1
::oBrowser:addColumn( {|| ::aValues[::nRecNo] }, , ::aFields[1])
endif
::oBrowser:refreshAll() *
RETURN
Der Fehler tritt bei der Zeile mit * auf.
Ein Auszug aus der XPPERRORLOG:
[...]
oError:args :
-> VALTYPE: B VALUE: {|| ::nRecNo }
-> VALTYPE: O CLASS: XbpBrowse
oError:canDefault : N
oError:canRetry : J
oError:canSubstitute: N
oError:cargo : NIL
oError:description : Fehler bei der Arrayindizierung
oError:filename :
oError:genCode : 4
oError:operation : eval
oError:osCode : 0
oError:severity : 2
oError:subCode : 1012
oError:subSystem : BASE
oError:thread : 1
oError:tries : 1
------------------------------------------------------------------------------
CALLSTACK:
------------------------------------------------------------------------------
Aufgerufen von XBPBROWSE:FORCESTABLE(1097)
Aufgerufen von XBPBROWSE:HANDLEEVENT(1453)
Aufgerufen von XBPBROWSE:REFRESHROWS(2219)
Aufgerufen von XBPBROWSE:REFRESHALL(2143)
Aufgerufen von BROWSESINGLE:CREATECOLUMNS(95)
Aufgerufen von BROWSESINGLE:CREATE(57)
Aufgerufen von SHOWARRAY(407)
Aufgerufen von (B)MENUCREATE(387)
Aufgerufen von MAIN(368)
Ich hoffe mal jemand kann damit etwas anfangen, weil ich bin mit meinem Latein am Ende!
Vielen Dank schon mal, Ralf...
- Martin Altmann
- Foren-Administrator
- Beiträge: 16517
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 111 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Hallo Ralf,
ich sehe nirgendwo, dass Du ::nRecNo mit einem Wert initial vorbelegst!? Das ist die Ursache, da so der Wert NIL ist - und NIL als Parameter für ein Arrayelement geht nicht!
Viele Grüße,
Martin
ich sehe nirgendwo, dass Du ::nRecNo mit einem Wert initial vorbelegst!? Das ist die Ursache, da so der Wert NIL ist - und NIL als Parameter für ein Arrayelement geht nicht!
Viele Grüße,
Martin
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/
Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
- Martin Altmann
- Foren-Administrator
- Beiträge: 16517
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 111 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Hallo Ralf,
ich hoffe mal, dass das jetzt auch nur ein Tippfehler ist, oder?
Du meintest sicherlich:
::nRecNo := 1
Viele Grüße,
Martin
ich hoffe mal, dass das jetzt auch nur ein Tippfehler ist, oder?
Du meintest sicherlich:
::nRecNo := 1
Viele Grüße,
Martin
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/
Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
- Martin Altmann
- Foren-Administrator
- Beiträge: 16517
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 111 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Hallo Ralf,
ich habe - da Du meintest, Du hast Dich am EBROWSE.PRG orientiert - mal Dein Codesnippet und das EBROWSE.PRG verglichen. Folgendes ist mir aufgefallen:
Du verwendest ::oBrowser:FirstPosBlock := {|| ::nRecNo := 1 }
in EBORWSE.PRG steht jedoch ::oBrowser:FirstPosBlock := {|| 1 }
Ausserdem wird in der EBROWSE.PRG nicht nur die ::nRecno mit 1 initialisiert, sondern auch ::nLastRec mit len( ::aData ) - machst Du das auch in der INIT?
Des weiteren sehe ich ein Problem in Deiner createColumns()-Methode:
Wenn Du mehr (oder weniger) als 1 Feld in Deiner Array-Definition hast, wird dem Browser gar keine Spalte hinzugefügt und danach trotz allem ein refreshAll() auf ein nicht gültiges (da keine Spalten) Bowse-Objekt durchgeführt!
Viele Grüße,
Martin
ich habe - da Du meintest, Du hast Dich am EBROWSE.PRG orientiert - mal Dein Codesnippet und das EBROWSE.PRG verglichen. Folgendes ist mir aufgefallen:
Du verwendest ::oBrowser:FirstPosBlock := {|| ::nRecNo := 1 }
in EBORWSE.PRG steht jedoch ::oBrowser:FirstPosBlock := {|| 1 }
Ausserdem wird in der EBROWSE.PRG nicht nur die ::nRecno mit 1 initialisiert, sondern auch ::nLastRec mit len( ::aData ) - machst Du das auch in der INIT?
Des weiteren sehe ich ein Problem in Deiner createColumns()-Methode:
Wenn Du mehr (oder weniger) als 1 Feld in Deiner Array-Definition hast, wird dem Browser gar keine Spalte hinzugefügt und danach trotz allem ein refreshAll() auf ein nicht gültiges (da keine Spalten) Bowse-Objekt durchgeführt!
Viele Grüße,
Martin
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/
Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
- andreas
- Der Entwickler von "Deep Thought"
- Beiträge: 1902
- Registriert: Mi, 28. Sep 2005 10:53
- Wohnort: Osnabrück
- Hat sich bedankt: 4 Mal
- Kontaktdaten:
Hallo Ralf,
versuche erstmal mit festen Spaltendefinitionen, damit du die Fehler aus dem Bereich ausschliessen kannst.
Und wenn es funktioniert, dann kannst du mit den Namen weiter machen.
Hier ist mein Programmausschnitt. Vielleicht hilft es dir weiter. Die Skip-Methode habe ich angepasst gehabt. Deswegen solltest du die aus dem Alaska-Beispiel nehmen.
versuche erstmal mit festen Spaltendefinitionen, damit du die Fehler aus dem Bereich ausschliessen kannst.
Und wenn es funktioniert, dann kannst du mit den Namen weiter machen.
Hier ist mein Programmausschnitt. Vielleicht hilft es dir weiter. Die Skip-Methode habe ich angepasst gehabt. Deswegen solltest du die aus dem Alaska-Beispiel nehmen.
Code: Alles auswählen
::oBrowse := GUIBrowseDB( ::DrawingArea, {4,96}, {580,272}, .t. )
FOR i := 1 TO LEN(::aKopf)
IF LEN(::aKopf)<i
exit
ENDIF
do case
case i=1
::oBrowse:addColumn( {|| ::aData[::nRecno, 1] } , 10, IIF( ::aData[1][i]!=NIL, ::aData[1][i], "" ) )
case i=2
::oBrowse:addColumn( {|| ::aData[::nRecno, 2] } , 10, IIF( ::aData[1][i]!=NIL, ::aData[1][i], "" ) )
case i=3
::oBrowse:addColumn( {|| ::aData[::nRecno, 3] } , 10, IIF( ::aData[1][i]!=NIL, ::aData[1][i], "" ) )
case i=4
::oBrowse:addColumn( {|| ::aData[::nRecno, 4] } , 10, IIF( ::aData[1][i]!=NIL, ::aData[1][i], "" ) )
case i=5
::oBrowse:addColumn( {|| ::aData[::nRecno, 5] } , 10, IIF( ::aData[1][i]!=NIL, ::aData[1][i], "" ) )
case i=6
::oBrowse:addColumn( {|| ::aData[::nRecno, 6] } , 10, IIF( ::aData[1][i]!=NIL, ::aData[1][i], "" ) )
case i=7
::oBrowse:addColumn( {|| ::aData[::nRecno, 7] } , 10, IIF( ::aData[1][i]!=NIL, ::aData[1][i], "" ) )
case i=8
::oBrowse:addColumn( {|| ::aData[::nRecno, 8] } , 10, IIF( ::aData[1][i]!=NIL, ::aData[1][i], "" ) )
case i=9
::oBrowse:addColumn( {|| ::aData[::nRecno, 9] } , 10, IIF( ::aData[1][i]!=NIL, ::aData[1][i], "" ) )
case i=10
::oBrowse:addColumn( {|| ::aData[::nRecno, 10] } , 10, IIF( ::aData[1][i]!=NIL, ::aData[1][i], "" ) )
case i=11
::oBrowse:addColumn( {|| ::aData[::nRecno, 11] } , 10, IIF( ::aData[1][i]!=NIL, ::aData[1][i], "" ) )
case i=12
::oBrowse:addColumn( {|| ::aData[::nRecno, 12] } , 10, IIF( ::aData[1][i]!=NIL, ::aData[1][i], "" ) )
case i=13
::oBrowse:addColumn( {|| ::aData[::nRecno, 13] } , 10, IIF( ::aData[1][i]!=NIL, ::aData[1][i], "" ) )
endcase
NEXT
::oBrowse:Create()
::oBrowse:SkipBlock := {|nSkip, oBrowse| ::Skip(nSkip, oBrowse)}
::oBrowse:GoBottomBlock := {|| ::nRecno := LEN(::aData)}
::oBrowse:GoTopBlock := {|| ::nRecno := 1}
::oBrowse:PosBlock := {|| ::nRecno}
::oBrowse:PhyPosBlock := {|| ::nRecno}
::oBrowse:FirstPosBlock := {|| 1}
::oBrowse:LastPosBlock := {|| LEN(::aData)}
::oBrowse:goPosBlock := {|n| nil }
::oBrowse:setLeftFrozen( {1} )
::oBrowse:itemMarked := {| aRowCol, uNIL2, self | oFenster1:oBrowse:refreshAll() }
::oBrowse:itemSelected := {| uNIL1, uNIL2, self | oFenster1:Bearbeiten() }
ResizePreiseMatrixEdit( ::oBrowse, ::currentSize() )
::oBrowse:RefreshAll()
::oBrowse:show()
METHOD Skip(nSkip)
LOCAL nCanSkip
IF ::nRecno + nSkip < 1
nCanSkip := 1 - ::nRecno
ELSEIF ::nRecno + nSkip > ::nLastRec
nCanSkip := ::nLastRec - ::nRecno
ELSE
nCanSkip := nSkip
ENDIF
::nRecno += nCanSkip
/*
IF ::nRecno < 1
::nRecno := 1
elseIF ::nRecno > ::nLastRec
::nRecno := ::nLastRec
ENDIF
*/
RETURN nCanSkip
Erst einmal Danke für die Antworten. Es war dann doch nur ein simpler Fehler in der Skip-Methode. Diese hatte ich nicht aus EBROWSE übernommen sondern selbst geschrieben. Dabei habe ich zuerst den neuen nRecNo Wert gesetzt und dann auf Gültigkeit in den Array-Grenzen überprüft und wieder zurückgesetzt. Die Änderung an nRecNo wirken sich jedoch scheinbar unmittelbar auf das Browse-Objekt aus, so dass der besagte Fehler auftrat. Habe jetzt die Skip-Methode aus EBROWSE übernommen...
@andreas
Habe heute versucht einen variablen Code für das Hinzufügen von Spalten zu schreiben. Ähnlich wie du es mit der CASE-Anweisung machst.
Ich habe in der CreateColumns() folgendes stehen.
[...]
if len(::aFields) == 1
::oBrowser:addColumn( {|| ::aValues[::nRecNo] }, , ::aFields[1])
::nRecCnt := len(::aValues)
else
if len(::aFields) == len(::aValues)
for z := 1 to len(::aFields)
sFieldBlock := "{|| ::aValues["+str(z)+",::nRecNo] }"
::oBrowser:AddColumn( &(sFieldBlock), , ::aFields[z])
next
endif
::nRecCnt := len(::aValues[1])
endif
[...]
Ich bastele mir so den Codeblock zusammen. Das funktioniert aber nicht. Ich bekomme die Fehlermeldung: "unbekannte Variable". (?)
@Martin
Die Änderung habe ich vorgenommen, danke. So funktioniert jetzt auch das scrollen im Fenster.
@Rolf
Okay, ich suche gleich mal...
@andreas
Habe heute versucht einen variablen Code für das Hinzufügen von Spalten zu schreiben. Ähnlich wie du es mit der CASE-Anweisung machst.
Ich habe in der CreateColumns() folgendes stehen.
[...]
if len(::aFields) == 1
::oBrowser:addColumn( {|| ::aValues[::nRecNo] }, , ::aFields[1])
::nRecCnt := len(::aValues)
else
if len(::aFields) == len(::aValues)
for z := 1 to len(::aFields)
sFieldBlock := "{|| ::aValues["+str(z)+",::nRecNo] }"
::oBrowser:AddColumn( &(sFieldBlock), , ::aFields[z])
next
endif
::nRecCnt := len(::aValues[1])
endif
[...]
Ich bastele mir so den Codeblock zusammen. Das funktioniert aber nicht. Ich bekomme die Fehlermeldung: "unbekannte Variable". (?)
@Martin
Die Änderung habe ich vorgenommen, danke. So funktioniert jetzt auch das scrollen im Fenster.
@Rolf
Okay, ich suche gleich mal...
@AUGE_OHR
Nun wollte ich mir den Codeblock zusammensetzen in einer Zeichenkette. Das Problem dabei ist die Übergabe an "addColumn". Dort darf keine Zeichenkette übergeben werden sondern nur ein Codeblock. Daher habe ich gedacht mit dem "&" kann ich den String in einen Codeblock umwandeln, aber das scheint so nicht zu funktionieren. Habe die Funktionsweise des Makro-Operators scheinbar noch nicht ganz verstanden. Muss ich mir noch einmal anschauen.
@Andreas
Okay, dann ist die Funktion begrenzt auf eine bestimmte Anzahl Felder.
MfG, Ralf...
Ja, das aFields-Array enthält die Feldnamen. Wenn mehrere Felder übergeben werden sollen muss das aValues-Array mehrdimensional sein. Wobei die erste Dimension des aValues == len(aFields) sein muss.AUGE_OHR hat geschrieben:hi,
also hier ist aValues 1-Dim (aValue[1])
während hier aValue doch 2-Dim ist (aValue[1,1]) ?Wonderer hat geschrieben: ::oBrowser:addColumn( {|| ::aValues[::nRecNo] }, , ::aFields[1])
Wonderer hat geschrieben: sFieldBlock := "{|| ::aValues["+str(z)+",::nRecNo] }"
Nun wollte ich mir den Codeblock zusammensetzen in einer Zeichenkette. Das Problem dabei ist die Übergabe an "addColumn". Dort darf keine Zeichenkette übergeben werden sondern nur ein Codeblock. Daher habe ich gedacht mit dem "&" kann ich den String in einen Codeblock umwandeln, aber das scheint so nicht zu funktionieren. Habe die Funktionsweise des Makro-Operators scheinbar noch nicht ganz verstanden. Muss ich mir noch einmal anschauen.
@Andreas
Okay, dann ist die Funktion begrenzt auf eine bestimmte Anzahl Felder.
MfG, Ralf...
- Manfred
- Foren-Administrator
- Beiträge: 21199
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Hi,
ich habe oben in einem Ausschnitt von Andreas ein
oBrowse:setLeftFrozen({1})
gesehen.
Hm, ich versuche es auch gerade, dass die linke Spalte fest stehen bleibt.
Aaaaber, wie immer, mal wieder zu ungeschickt. Es klappt nicht. Was muß denn da alles rein?
ich habe oben in einem Ausschnitt von Andreas ein
oBrowse:setLeftFrozen({1})
gesehen.
Hm, ich versuche es auch gerade, dass die linke Spalte fest stehen bleibt.
Aaaaber, wie immer, mal wieder zu ungeschickt. Es klappt nicht. Was muß denn da alles rein?
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!!
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!!
- brandelh
- Foren-Moderator
- Beiträge: 15697
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 66 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Hi Manfred,
1. es handelt sich um einen XbpBrowse ? (nicht Quickbrowse)
2. Du zählst im Array alle linken fixierten Spalten auf ?
1 bis 4 -> {1,2,3,4} ?
Warum das so gelöst wurde ist mir allerdings ein Rätsel,
oder sollte {1,4} die 1. und die 4. einfrieren und 2 und 3 wegrollen ?
wenn es das nicht ist, wäre deine kopierte Befehlszeile (nicht aus dem Gedächtnis nachgeschrieben) wünschenswert, sowie eine Beschreibung
was genau nicht geht.
1. es handelt sich um einen XbpBrowse ? (nicht Quickbrowse)
2. Du zählst im Array alle linken fixierten Spalten auf ?
1 bis 4 -> {1,2,3,4} ?
Warum das so gelöst wurde ist mir allerdings ein Rätsel,
oder sollte {1,4} die 1. und die 4. einfrieren und 2 und 3 wegrollen ?
wenn es das nicht ist, wäre deine kopierte Befehlszeile (nicht aus dem Gedächtnis nachgeschrieben) wünschenswert, sowie eine Beschreibung
was genau nicht geht.
Gruß
Hubert
Hubert
- Manfred
- Foren-Administrator
- Beiträge: 21199
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Hi Hubert,
puh, Klasse, dass Du doch noch weiter antwortest...
Es klappt alles an dem XBPBrowse.
Nur eben die weitere Zeile oBrowse:setLeftFrozen({1}) will nicht. Ich denke mal, die Zahl ist die Spalte, die einfrieren soll?
PS: Wobei sich mir jetzt die Frage stellt, wann muß es wohin? Nach jedem AddColumn, oder wie oder was?
puh, Klasse, dass Du doch noch weiter antwortest...
Es klappt alles an dem XBPBrowse.
Nur eben die weitere Zeile oBrowse:setLeftFrozen({1}) will nicht. Ich denke mal, die Zahl ist die Spalte, die einfrieren soll?
PS: Wobei sich mir jetzt die Frage stellt, wann muß es wohin? Nach jedem AddColumn, oder wie oder was?
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!!
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!!
- brandelh
- Foren-Moderator
- Beiträge: 15697
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 66 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Bei diesem Beispiel wird die 1. Spate links fixiert, der Rest rollt.Manfred hat geschrieben: Nur eben die weitere Zeile oBrowse:setLeftFrozen({1}) will nicht. Ich denke mal, die Zahl ist die Spalte, die einfrieren soll?
Jetzt weiß ich auch warum ein Array , denn
{4,2,5} würde von links zuerst die 4. Spalte, dann die 2. dann die 5. fixiert anzeigen, also umsortieren und den Rest scrollen.
Rufst du die methode auch nach dem Create() auf ?
Ich habe das Beispiel aus der Onlinehilfe genommen und vor dem Show das setLeftFrozen() eingebaut. Es funktioniert.
Hast du überhaupt genug Spalten, dass man nach rechts rollen kann ???
Gruß
Hubert
Hubert
- Manfred
- Foren-Administrator
- Beiträge: 21199
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Hi Hubert,
genau, das hatte ich mir auch so gedachtBei diesem Beispiel wird die 1. Spate links fixiert, der Rest rollt.
?? Wird intern sortiert, oder was meinst Du?Jetzt weiß ich auch warum ein Array , denn
{4,2,5} würde von links zuerst die 4. Spalte, dann die 2. dann die 5. fixiert anzeigen, also umsortieren und den Rest scrollen.
jaha. Ich mache bisher immer ein :addcolumn und dann dahinter ein :setleftfrozen({1}). Irgendwas mache ich wohl wieder falsch. Ich glaube ich werde es einmal in einem kurzen test ohne alles ausprobieren.Rufst du die methode auch nach dem Create() auf ?
Ich habe das Beispiel aus der Onlinehilfe genommen und vor dem Show das setLeftFrozen() eingebaut. Es funktioniert.
Hm, ich glaube ich habe hier schon sehr viel doofe Fragen gestellt und Mist erzählt??Hast du überhaupt genug Spalten, dass man nach rechts rollen kann ???
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!!
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!!
- brandelh
- Foren-Moderator
- Beiträge: 15697
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 66 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
da liegt der Haase begraben ... nicht nach jedem addcolum, sondern danach ...Manfred hat geschrieben:Ich mache bisher immer ein :addcolumn und dann dahinter ein :setleftfrozen({1}).
oBrowse := XbpBrowse():new():create()
....
for x := 1 to nCol
oBrowse:addcolumn(..)
next
...
oBrowse:setleftfrozen({1})
oBrowse:show()
Gruß
Hubert
Hubert
- Manfred
- Foren-Administrator
- Beiträge: 21199
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Hier mal ein kleiner Aussschnitt, wie ich es mache.
Ich hoffe es hilft.
wie gesagt, bis auf das Frieren klappt der Rest
Ich hoffe es hilft.
Code: Alles auswählen
nLen := LEN(aMaskenArray)
FOR nI := 1 TO nLen // einmal das Array durchlaufen und die Felder abfragen
cField := aMaskenArray[nI,1] // Feldbezeichnungen
cHead := aMaskenArray[nI,2] // Überschriften
nBreite := aMaskenArray[nI,4] // Feldbreiten
lAusblenden := aMaskenArray[nI,5] // Ausblenden der Spalte
IF lAusblenden
LOOP
ENDIF
lLeftFrozen := aMaskenArray[nI,6] // links Fixieren der Spalte
IF nBreite = 0
nBreite := 2
ENDIF
oBrowse:addColumn(&("{||"+cField+"}"),nBreite, cHead) // jetzt werden die Spalten erzeugt
NEXT
IF lLeftFrozen
oBrowse:setLeftFrozen({1})
ENDIF
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!!
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!!
- Manfred
- Foren-Administrator
- Beiträge: 21199
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Hi Hubert,
ich habe an einer gaaanz anderen Stelle einen riiiiieeesen Denkfehler begangen.
Jetzt klappt es.
PS: Ah, ist aber interessant. Wenn man Spalte 1,3 friert, dann werden die an den Anfang gesetzt.
ich habe an einer gaaanz anderen Stelle einen riiiiieeesen Denkfehler begangen.
Jetzt klappt es.
PS: Ah, ist aber interessant. Wenn man Spalte 1,3 friert, dann werden die an den Anfang gesetzt.
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!!
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!!
- Martin Altmann
- Foren-Administrator
- Beiträge: 16517
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 111 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Hallo Manfred,
Nicht bei jeder Spalte entscheiden, ob die Spalte eingeforen dargestellt werden soll, sondern einmalig, welche einzufrieren sind!
Du hast in Deinem Beispiel in dem Array die Spalten ja untereinander angeordnet. Und wenn Deine letzte Spalte halt nicht eingefroren werden sollte, war Deine Boolesche Variable lLeftFrozen false und somit ging es nicht
Viele Grüße,
Martin
das glaube ich Dir aufs Wort!Manfred hat geschrieben:ich habe an einer gaaanz anderen Stelle einen riiiiieeesen Denkfehler begangen.
Nicht bei jeder Spalte entscheiden, ob die Spalte eingeforen dargestellt werden soll, sondern einmalig, welche einzufrieren sind!
Du hast in Deinem Beispiel in dem Array die Spalten ja untereinander angeordnet. Und wenn Deine letzte Spalte halt nicht eingefroren werden sollte, war Deine Boolesche Variable lLeftFrozen false und somit ging es nicht
Viele Grüße,
Martin
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/
Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
- Manfred
- Foren-Administrator
- Beiträge: 21199
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Hi Martin,
(Du kannst immer so schön aufmuntern )
mein Beispiel oben ist irgendwie verrutscht. Die setLeftFrozen muß noch in die For Schleife. Warum die darunter gefallen ist, ist mir schleierhaft. Allerdings wär das oben dann trotzdem falsch.
Jetzt habe ich aber verstanden, wie das klappt. Ich schreibe bei einem .T. einfach die Spalte in ein Array und übergebe das dann an die Methode. Das klappt auf jeden Fall.
Allerdings grübel ich jetzt darüber nach, wieso ich die Spaltenbreite nicht "beliebig" klein machen kann.
(Du kannst immer so schön aufmuntern )
mein Beispiel oben ist irgendwie verrutscht. Die setLeftFrozen muß noch in die For Schleife. Warum die darunter gefallen ist, ist mir schleierhaft. Allerdings wär das oben dann trotzdem falsch.
Jetzt habe ich aber verstanden, wie das klappt. Ich schreibe bei einem .T. einfach die Spalte in ein Array und übergebe das dann an die Methode. Das klappt auf jeden Fall.
Allerdings grübel ich jetzt darüber nach, wieso ich die Spaltenbreite nicht "beliebig" klein machen kann.
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!!
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!!
- Martin Altmann
- Foren-Administrator
- Beiträge: 16517
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 111 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Nein, nein, nein!!!
Das geht so nicht!
Das SetLeftFrozen muß am Ende der Schleife kommen - in der Schleife mußt Du Dir das Array mit den einzufrierenden Spalten zusammenbauen
Beispiel:
Viele Grüße,
Martin
Das geht so nicht!
Das SetLeftFrozen muß am Ende der Schleife kommen - in der Schleife mußt Du Dir das Array mit den einzufrierenden Spalten zusammenbauen
Beispiel:
Code: Alles auswählen
LeftFrozen := {}
FOR.....
....
if aMaskenArray[nI,6]
AAdd( LeftFrozen, nI )
endif
....
NEXT
IF len( LeftFrozen ) > 0
oBrowse:setLeftFrozen( LeftFrozen )
ENDIF
Martin
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/
Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
- Manfred
- Foren-Administrator
- Beiträge: 21199
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Höhöhö,
egal....
das habe ich doch so gemacht, aber sicherlich bei meinem letzten Thread nicht vernünftig darauf hingewiesen.
egal....
das habe ich doch so gemacht, aber sicherlich bei meinem letzten Thread nicht vernünftig darauf hingewiesen.
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!!
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!!