Seite 1 von 1

DCBROWSE mit Array und Skip [ERLEDIGT]

Verfasst: Fr, 15. Mär 2019 20:42
von Manfred
wie skipped man eigentlich ein Array, bzw. wie springt man einen bestimmten Satz im Array an um ihn dann anzuzeigen?

Re: DCBROWSE mit Array und Skip

Verfasst: Fr, 15. Mär 2019 21:03
von Tom
oBrowse:ArrayElement direkt besetzen.

Re: DCBROWSE mit Array und Skip

Verfasst: Sa, 16. Mär 2019 7:13
von Manfred
Tom,
das klingt für mich jetzt so, als wenn Du auf eine Frage wie man zu Bahnhof kommt antwortest: "Hingehen". :roll:
Ich hatte mir schon gedacht, das es so gemacht wird, aber ich weiß nicht wie das geht. Ein Goto, gibt es ja wohl beim Array nicht?

Re: DCBROWSE mit Array und Skip

Verfasst: Sa, 16. Mär 2019 8:57
von AUGE_OHR
moin,

ich weiss nicht wie es mit Express++ geht aber das \SOURCE\samples\basics\GuiBrow\FBROWSE.prg geht so

Code: Alles auswählen

   oBrowse:cargo[ ARR_NO ] := 7
   EVAL(oBrowse:posBlock,oBrowse)
   oBrowse:refreshAll()
siehe dir den o:PosBlock an was dort von wem (nRecno) zugewiesen wird.
dort setzt du nun die Element Nummer ein und evaluierst den Codeblock.

Re: DCBROWSE mit Array und Skip

Verfasst: Sa, 16. Mär 2019 9:08
von Manfred
Hi Jimmy,
ich habe Deinen Beitrag dazu aus 2008 gefunden und arbeite ihn gerade ab. So richtig hinbekommen habe ich es noch nicht, aber ich bastel noch. :lol:

Re: DCBROWSE mit Array und Skip

Verfasst: Sa, 16. Mär 2019 9:16
von Tom
Du musst oBrowse:ArrayElement mit der Nummer des Elements (=Position im zweidimensionalen Array) besetzen, zu dem Du springen willst, und anschließend ggf. noch ein oBrowse:RefreshAll() auslösen, feddisch. Was ist daran so schwer zu verstehen? Außerdem findet man derlei ziemlich leicht in Rogers Code, etwa in den Beispielen.

Ein Skip gibt es nur in Tabellen, die aber nur indirekt Datenquellen sind - und ggf. synchronisiert werden müssen. In Arrays skippt man nicht.

Re: DCBROWSE mit Array und Skip

Verfasst: Sa, 16. Mär 2019 9:35
von Manfred
Hi Tom,
das hatte ich so nicht verstanden (kapiert) Mittlerweile bin ich ja schon so weit, mir im Objektinspektor alle Vars usw anzuschauen, um zu sehen was wo reingeschrieben werden kann. :ArrayElement hatte ich als pauschal angesehen und nicht erkannt, das es eine membervar ist. Jetzt ist alles klar. Es scheint genau so zu klappen. Das ist wirklich nicht schwer, man muß es nur erkennen. (Die Tomatenzeit scheint wohl wieder angebrochen zu sein hier auf dem Lande) :roll:

Re: DCBROWSE mit Array und Skip

Verfasst: Sa, 16. Mär 2019 10:39
von Tom
Hallo, Manfred.

Der Objektinspektor ist ein gutes Hilfsmittel, aber auch die Beispiele von Roger sind extrem hilfreich. Oder das Stöbern in seinem Quellcode - in diesem Fall in _DCXBROW.PRG.

Schön, dass es jetzt klappt.

Re: DCBROWSE mit Array und Skip

Verfasst: Sa, 16. Mär 2019 11:17
von AUGE_OHR
Tom hat geschrieben: Sa, 16. Mär 2019 9:16 Ein Skip gibt es nur in Tabellen, die aber nur indirekt Datenquellen sind - und ggf. synchronisiert werden müssen. In Arrays skippt man nicht.
em, äh ... aber es gibt einen Skipper bei XbpBrowse() und Array

Code: Alles auswählen

Beispiel XbpBrowse Array

      aData    := { {"Magazine",   133, .T.},; 
                    {"Zeitungen",  15,  .T.},; 
                    {"Bücher",     32,  .T.},; 
                    {"Postkarten", 833, .F.} } 

      nLastRec := Len(aData)
      nRecno   := 1 

      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 } 
es wäre hier die STATIC nRecno die man neu bestücken müsste und dann ein o:RefreshAll()
( hier wäre ein EVAL(oBrowse:PosBlock,oBrowse) nicht notwendig )


ich mag den externen DoSkip() nicht denn es geht auch so

Code: Alles auswählen

   oBrowse:skipBlock     := {|nSkip| -np + (np := MAX(1, MIN(LEN(aArray), np + nSkip))) }
   oBrowse:goTopBlock    := {|| np := 1}
   oBrowse:goBottomBlock := {|| np := LEN(aArray) }
   oBrowse:posBlock      := {|| np }
   oBrowse:phyPosBlock   := {|| np }
   oBrowse:lastPosBlock  := {|| Len( aArray ) }
   oBrowse:firstPosBlock := {|| 1  }

Re: DCBROWSE mit Array und Skip

Verfasst: Sa, 16. Mär 2019 14:25
von Tom
Ich meinte das Skippen im Sinne von DbSkip(), also dem Sprung in einer Tabelle. Das braucht man bei Arraybrowses nicht. Aber - geschenkt. Manfreds Problem ist ja gelöst. :wink: