Array in xbpBrowse

Alle Fragen um die Programmierung, die sich sonst nicht kategorisieren lassen. Von Makro bis Codeblock, von IF bis ENDIF

Moderator: Moderatoren

Antworten
Rolf
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 258
Registriert: Do, 27. Apr 2006 12:28
Wohnort: Görlitz

Array in xbpBrowse

Beitrag von Rolf »

Hi

ich möchte so einen kleine Abgleichdialog erstellen auf dem oben ein Browser mit drei Spalten ist und unten zwei Button. Jeweils rechts übernehmen oder links übernehmen.

Ich hatte auch schon mit dsBrowse (Komponente Dieter Stelzner) und DacPageDataStore meine Erfolge, doch für die kleinen Anwendung dachte ich reicht xbpBrowse.

Code: Alles auswählen

//--> Oben in init()

    ::nBrIndex := 1
    ::aBrowse  := {}
    aadd(::aBrowse,{"Vorname:","Heinz" ,"Harald"})
    aadd(::aBrowse,{"Name:"   ,"Müller","Meier" })

    ::oBrowse := XbpBrowse():new( oOwn,, aPos, aSize )
    ::oBrowse:itemSelected  := {|aRowCol,x,oXbp|  ::handleItemMarked(aRowCol) }

//--> weiter unten in create
    LOCAL aHeader       := { "Bezeichnung"  ,"Hauptstelle"  ,"Nebenstelle"  }
    LOCAL aColWidth     := {  200           , 200           , 200           }
    LOCAL nColHeight    := 20                                                    
    LOCAL aPresParam

    //-- Design festlegen
    aPresParam := { { XBP_PP_COL_HA_CAPTION             , " "                               },;
                    { XBP_PP_COL_DA_ROWHEIGHT           , 20                                },;
                    { XBP_PP_COL_DA_ROWWIDTH            , nColHeight                        },;
                    { XBP_PP_COL_DA_CELLALIGNMENT       , XBPALIGN_LEFT+XBPALIGN_BOTTOM     },; //VCENTER },;
                    { XBP_PP_COL_DA_FGCLR               , GRA_CLR_BLACK                     },;
                    { XBP_PP_COL_DA_BGCLR               , GraMakeRGBColor({250,250,250})    },;
                    { XBP_PP_COL_DA_CELLFRAMELAYOUT     , XBPFRAME_BOX                      },;
                    { XBP_PP_COL_DA_COLSEPARATOR        , XBPCOL_SEP_NONE                   },;
                    { XBP_PP_COL_DA_FRAMELAYOUT         , XBPFRAME_NONE                     },;
                    { XBP_PP_COL_DA_HILITE_FGCLR        , GRA_CLR_BLACK                     },;
                    { XBP_PP_COL_DA_HILITE_BGCLR        , GraMakeRGBColor({230,230,230})    }}


    // Navigationscodeblöcke für den Browser
    ::oBrowse:skipBlock     := {| nMove | ::SkipArray( nMove, ::aBrowse, ::nBrIndex )}
    ::oBrowse:goTopBlock    := {| | ::nBrIndex := 1   }
    ::oBrowse:goBottomBlock := {| | ::nBrIndex := LEN(::aBrowse) }
    ::oBrowse:phyPosBlock   := {| | ::nBrIndex        }
 
    // Navigationscodeblöcke für den vertikalen Scrollbar
    ::oBrowse:posBlock      := {| | ::nBrIndex      }
    ::oBrowse:lastPosBlock  := {| | LEN(::aBrowse)  }
    ::oBrowse:firstPosBlock := {| | 1               }

    ::oBrowse:cursormode    := XBPBRW_CURSOR_ROW

    //::oBrowse:dataLink := DacPagedDataStore():new( ::aBrowse )

    ::oBrowse:setSize(::oDialog:currentSize())
    ::oBrowse:setPos( {0,0})

    //** BROWSER erzeugen
    ::oBrowse:create()

    //** 1 - Bezeichnung
    aPresParam[1][2] := aHeader[1]
    aPresParam[3][2] := aColWidth[1]
    oColumn := XbpColumn():new( ::oBrowse,,,,aPresParam )
    oColumn:dataLink    := { || ::aBrowse[ ::nBrIndex, 1 ] }
    ::oBrowse:addColumn( oColumn )    

    //** 2 - Hauptstelle
    aPresParam[1][2] := aHeader[2]
    aPresParam[3][2] := aColWidth[2]
    oColumn := XbpColumn():new( ::oBrowse,,,,aPresParam )
    oColumn:dataLink := { || ::aBrowse[ ::nBrIndex, 2 ] }
    ::oBrowse:addColumn( oColumn )   

    //** 3 - Nebenstelle
    aPresParam[1][2] := aHeader[3]
    aPresParam[3][2] := aColWidth[3]
    oColumn := XbpColumn():new( ::oBrowse,,,,aPresParam )
    oColumn:dataLink    := { || ::aBrowse[ ::nBrIndex, 3 ] }
    ::oBrowse:addColumn( oColumn )

    //-- Browser anzeigen
    ::oBrowse:show()
    ::oBrowse:goTop()
    SetAppFocus(::oBrowse)
Die Anzeige funktioniert, wenn ich aber auf den Browser Klick bekomme ich eine Fehlermeldung die mir zu hoch ist.

Code: Alles auswählen

Xbase++ Version     : Xbase++ (R) Version 1.71.267
Betriebssystem      : Windows 2000 05.00 Build 02195 Service Pack 4
------------------------------------------------------------------------------oError:args         :
          -> VALTYPE: A VALUE: {}
          -> VALTYPE: N VALUE: 0
oError:canDefault   : .F.
oError:canRetry     : .F.
oError:canSubstitute: .T.
oError:cargo        : NIL
oError:description  : Fehler bei der Arrayindizierung
oError:filename     : 
oError:genCode      :          4
oError:operation    : <A of 0>[<0>]
oError:osCode       :          0
oError:severity     :          2
oError:subCode      :       1012
oError:subSystem    : BASE
oError:thread       :          1
oError:tries        :          0
------------------------------------------------------------------------------
CALLSTACK:
------------------------------------------------------------------------------
Aufgerufen von (B)DLGABGLEICH:INITBROWSE(380)
Aufgerufen von XBPCOLUMN:DRAWROW(544)
Aufgerufen von (B)XBPBROWSE:DRAWROW(2018)
Aufgerufen von XBPBROWSE:DRAWROW(2018)
Aufgerufen von XBPBROWSE:FORCESTABLE(1101)
Aufgerufen von XBPBROWSE:HANDLEEVENT(1453)
Aufgerufen von DLGABGLEICH:CREATE(282)
Aufgerufen von SHOWDLGABGLEICH(996)
Aufgerufen von MNUIMPORTCLICKED(202)
Aufgerufen von (B)CREATEMDIMENU(39)
Aufgerufen von MAIN(265)
Ich versteh das er auf ein Array mit der Länge 0 zugreift. Aber wie und wo kann ich das Array noch übergeben??
:?:

Danke schonmal

Rolf
Rolf
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 258
Registriert: Do, 27. Apr 2006 12:28
Wohnort: Görlitz

Beitrag von Rolf »

Hi
Entschuldigung für die Störung

Der Quellcode Funktioiert schon so wie angegeben. Man sollte nur vermeiden irgendwo dazwischen

Code: Alles auswählen

::aBrowse:={}
aufzurufen.

:D :!:

Euch noch ein schönes Wochenende

Rolf
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16514
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

Hallo Rolf,
wenn Du XClass++ nutzt, dann kannst Du Dir doch mal den dlgPicklist anschauen!
Abgesehen davon nimm doch statt eines Browses einfach eine Listbox und nimm die Methode :SetTabStops() dazu - schon hast Du eine mehrspaltige Listbox.

Viele Grüße,
Martin

edit: Ich sehe gerade, Du hast Dein Problem ja bereits gelöst :D
:grommit:
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.
Rolf
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 258
Registriert: Do, 27. Apr 2006 12:28
Wohnort: Görlitz

Beitrag von Rolf »

Hi Martin

An Listbox hab ich auch schon gedacht, aber da hab ich wieder das Problem mit den Farben. Ich würde gern Datensätze die sich unterscheiden rot anzeigen. Dazu bietet sich der XbpColumn:colorblock() wiederum an.

bis bald

Rolf
Antworten