XbpBrowse / Append Blank / letzte Position / :refreshall

Grafische Primitive, XbaseParts und Darstellungsfragen allgemein.

Moderator: Moderatoren

Antworten
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12909
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 46 Mal

XbpBrowse / Append Blank / letzte Position / :refreshall

Beitrag von AUGE_OHR »

hi,

ich komme einfach nicht auf die Lösung ...

In einem XbpBrowse hänge ich einen neuen Satz mit APPEND BLANK.
Wenn ich nun ein :RefreshAll() mache zeigt er mir nur die letzte Position
am Anfang des Browse an ... ich will die letzte Position aber auf der
letzten Möglichen Zeile haben aber

Code: Alles auswählen

oBrowse:rowPos := oBrowse:rowCount
oBrowse:Refreshall()
bringt es nicht :(
gruss by OHR
Jimmy
Benutzeravatar
Lewi
1000 working lines a day
1000 working lines a day
Beiträge: 830
Registriert: Di, 07. Feb 2006 14:10
Wohnort: Hamburg
Danksagung erhalten: 2 Mal

Beitrag von Lewi »

Liegt es vielleicht an der Index-Reihenfolge?
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12909
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 46 Mal

Beitrag von AUGE_OHR »

hi,
Lewi hat geschrieben: Liegt es vielleicht an der Index-Reihenfolge?
auf der DBF ist kein Index.

Ich weiss das es geht ... ich habe die Lösung auch "irgendwo" schon
verbaut aber ich finde es z.Z. nicht.

Allgemein kann man fragen : wie bekomme ich den letzten Datensatz
in einem Browse so angezeigt das es in der letzte (mögliche) Zeile steht
und die Datensätze "davor" auch noch zu sehen sind ... ?
gruss by OHR
Jimmy
UliTs
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2828
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen
Hat sich bedankt: 259 Mal
Danksagung erhalten: 12 Mal
Kontaktdaten:

Beitrag von UliTs »

Ich habe das gleiche Problem.
Im Browse-Fenster wird je ein Ausschnitt der Datensätze angezeigt.
Man benötigt die Information, der wievielte Datensatz in der ersten
Zeile dargestellt wird, und dies muß einstellbar sein!

Es geht bestimmt. Gibt es nicht irgendwo den Quellcode zu XbpBrowse?

Uli
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21200
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Beitrag von Manfred »

wenn ich richtig gelesen habe, in der Prof Subscription.
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!!
UliTs
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2828
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen
Hat sich bedankt: 259 Mal
Danksagung erhalten: 12 Mal
Kontaktdaten:

Beitrag von UliTs »

Danke für den Tip.
Habe mir den Quellcode runtergeladen. Ich habe es bisher aber leider nicht rausbekommen.

Uli
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15697
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 66 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Beitrag von brandelh »

Hi,

oB:goBottom()

geht in die letzte sichtbare Zeile, das muss zwar leider nicht immer die unterste mögliche sein, aber besser geht es nicht mit Betriebsmitteln.

Ansonsten bliebe nur übrig mit vielen UP() die Zeilen wieder nach unten zu bringen ... irgendwo habe ich es mal so ähnlich gemacht, nicht das schnellste ...

Code: Alles auswählen

LOCAL nIsHitBottomBlock
LOCAL bOldHitBottomBlock

...
oB:goBottom()
if oB:rowPos < oB:rowCount
   oB:pageUp()
   nIsHitBottomBlock := .f.
   bOldHitBottomBlock := oB:hitBottomBlock
   oB:hitBottomBlock := {|| nIsHitBottomBlock := .t. }
   do while ! nIsHitBottomBlock
      oB:down()
   enddo
   nIsHitBottomBlock := .f.
   oB:hitBottomBlock := bOldHitBottomBlock
   do while ! oB:forceStable()
   enddo
endif
Das könnte flimmern ... ;-)

Es wäre natürlich schöner, wenn mit oB:goBottom() sofort die letzte Zeile auch ganz unten angezeigt werden würde ...
Gruß
Hubert
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12909
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 46 Mal

Beitrag von AUGE_OHR »

hi,
brandelh hat geschrieben:

Code: Alles auswählen

oB:goBottom()
if oB:rowPos < oB:rowCount
   oB:pageUp()
jaja im Grunde ist es das was ich möchte, aber ich weiss das es viel
kürzer ging ... ich findes es bloss mal wieder nicht ...
gruss by OHR
Jimmy
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12909
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 46 Mal

Beitrag von AUGE_OHR »

hi,

Code: Alles auswählen

GO BOTTOM
Postappevent(xbeP_Keyboard,;
                    xbeK_CTRL_PGDN,;
                    ,;
                    oBrowse)
oBrowse:Show()
gruss by OHR
Jimmy
Alfred
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 476
Registriert: Do, 03. Mai 2007 12:37
Wohnort: München

Beitrag von Alfred »

Wie könnte man denn den Vorgang in express++ realisieren?

Gruß
Alfred
Benutzeravatar
Bertram Hansen
Foren-Moderator
Foren-Moderator
Beiträge: 1015
Registriert: Di, 27. Sep 2005 8:55
Wohnort: 51379 Leverkusen
Hat sich bedankt: 28 Mal
Danksagung erhalten: 20 Mal
Kontaktdaten:

Beitrag von Bertram Hansen »

Hallo Alfred,

wenn Du mit

Code: Alles auswählen

DCBROWSE oBrowse
das Objekt oBrowse erzeugt hast, dann kannst Du doch z.B. im ACTION Codeblock eines DCPUSHBUTTON auch den Code von Jimmy verwenden.
:wave:
Gruß Bertram
http://www.tobax.de
Mitglied der XUG Cologne
Mitglied der XUG Osnabrück
Beisitzer des Deutschsprachige Xbase-Entwickler e.V.

Solange Kakaobohnen an Bäumen wachsen ist Schokolade Obst!
Alfred
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 476
Registriert: Do, 03. Mai 2007 12:37
Wohnort: München

Beitrag von Alfred »

Hallo Bertram,

vielen Dank für den Hinweis.

dbgobottom() und das ganze funktioniert mit einem dcpushbutton perfekt.

Wie könnte man denn den selben Effekt beim Start des Programmes
erzielen?

Gruß
Alfred
Benutzeravatar
Wolfgang Ciriack
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2936
Registriert: Sa, 24. Sep 2005 9:37
Wohnort: Berlin
Hat sich bedankt: 13 Mal
Danksagung erhalten: 34 Mal
Kontaktdaten:

Beitrag von Wolfgang Ciriack »

Hallo Alfred,
wenn du es mit eXPress++ machst, einfach in der EVAL clause vom DCREAD.
Viele Grüße
Wolfgang
Alfred
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 476
Registriert: Do, 03. Mai 2007 12:37
Wohnort: München

Beitrag von Alfred »

Hallo Wolfgang,

funktioniert perfekt. :)

Gruß
Alfred
Statler
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 108
Registriert: Di, 22. Jan 2008 9:49
Wohnort: Aachen

Beitrag von Statler »

Hallo zusammen,

ich habe mich vor einer Weile mal mit den Browsern beschaeftigt und mir eine eigene Klasse dafuer gebastelt. Auf das Problem mit der Zeilenposition bin ich dabei auch gestossen. Die nachfolgend aufgefuehrte RefreshView Methode baut den Browser so auf, das das Teil immer maximal gefuellt ist. Sofern sich der Satzt in der Mitte der Datei befindet erfolgt eine zentrierte Darstellung. Die Methode ist "Flimmeroptimiert". Einfach den Satz in der Datenbank positionieren und RefreshView aufrufen.


=============================================
=============================================
=============================================

METHOD AKaBrowse:refreshView ()
*
*******************************************************************
* Lokale Variablen *
*******************************************************************
*
LOCAL nSatz, nRowPos, nRowPosDefault, nMaxRowBefore, nMaxRowBehind, nMaxRow
*
*******************************************************************
* Zeilenanzahl im Browser ermitteln *
*******************************************************************
*
nMaxRow:= ::rowcount - 1
*
* // nichts tun //
*
IF nMaxRow < 3
::dehilite ()
::rowPos:= 1
::refreshAll ()
*
RETURN (NIL)
ENDIF
*
*******************************************************************
* Maximal moegliche Zeilen vor dem Cursor ermitteln *
*******************************************************************
*
nSatz:= EVAL (::phyPosBlock)
*
nMaxRowBefore:= 0
*
DO WHILE EVAL (::skipBlock, -1) != 0
nMaxRowBefore ++
*
IF nMaxRowBefore > nMaxRow - 2
EXIT
ENDIF
ENDDO
*
nMaxRowBefore:= MIN (nMaxRowBefore, nMaxRow - 1)
*
* // Satzzeiger restaurieren //
*
EVAL (::goToBlock, nSatz)
*
*******************************************************************
* Maximal moegliche Zeilen nach dem Cursor ermitteln *
*******************************************************************
*
nMaxRowBehind:= 0
*
DO WHILE EVAL (::skipBlock, 1) != 0
nMaxRowBehind ++
*
IF nMaxRowBehind > nMaxRow - 2
EXIT
ENDIF
ENDDO
*
nMaxRowBehind:= MIN (nMaxRowBehind, nMaxRow - 1)
*
* // Satzzeiger restaurieren //
*
EVAL (::goToBlock, nSatz)
*
*******************************************************************
* Zeilenanzahl im Browser korrigieren *
*******************************************************************
*
nMaxRow:= MIN (nMaxRow, nMaxRowBefore + 1 + nMaxRowBehind)
*
*******************************************************************
* Optimierte Cursorposition setzen *
*******************************************************************
*
nRowPosDefault:= MAX (1, INT (::rowcount / 2))
*
* // Mitte Browser ist standard //
*
nRowPos:= nRowPosDefault
*
* // Vorne fehlt was //
*
IF nRowPosDefault > 1 + nMaxRowBefore
nRowPos:= 1 + nMaxRowBefore
ENDIF
*
* // Hinten fehlt was //
*
IF nRowPosDefault < nMaxRow - nMaxRowBehind
nRowPos:= nMaxRow - nMaxRowBehind
ENDIF
*
* // Sicher ist sicher //
*
nRowPos:= MAX (nRowPos, 1)
nRowPos:= MIN (nRowPos, nMaxRow)
*
*******************************************************************
* Browser konfigurieren *
*******************************************************************
*
::dehilite ()
::rowPos:= nRowPos
::refreshAll ()
*
*******************************************************************
* Das war`s *
*******************************************************************
*
RETURN (self)

=============================================
=============================================
=============================================


Achim
UliTs
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2828
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen
Hat sich bedankt: 259 Mal
Danksagung erhalten: 12 Mal
Kontaktdaten:

Re: XbpBrowse / Append Blank / letzte Position / :refreshall

Beitrag von UliTs »

Hallo Achim,

ich bin gerade erst auf Deine Antwort gestoßen und habe sie sofort in die Tat umgesetzt.
Ich bin beeindruckt! eine tolle Lösung!
Noch ein Hinweis für andere: Du hast vergessen zu erwähnen, daß Du einen weiteren Navigations-Codeblock implementiert hast:

Code: Alles auswählen

Browse:goToBlock  // == {|nAbsPos|..} -> NIL, z.B. {|nAbsPos|DbGoto(nAbsPos)}
Ich habe allerdings noch ein Problem:
Je nach INI-Datei-Einstellung maximiere ich meine Dialoge mittels

Code: Alles auswählen

::setFrameState( XBPDLG_FRAMESTAT_MAXIMIZED )
Wenn ich danach

Code: Alles auswählen

oBrowse:refreshView()
aufrufe, wird leider die Darstellung nicht wunschgemäß aktualisiert. Warum? :?

Uli
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
J.Renseler
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 151
Registriert: Do, 15. Nov 2007 11:40
Wohnort: Krefeld
Kontaktdaten:

Re: XbpBrowse / Append Blank / letzte Position / :refreshall

Beitrag von J.Renseler »

Hallo,

nachdem ich mich jetzt auch lange mit diesem Problem rumgeärgert habe und keine zufriedenstellende Lösung dafür gefunden habe. Bin ich auf Achims Lösung gestoßen die wirklich sehr gut und schnell funktioniert.

Wäre schön das ganze in der Wissensbasis zu haben, oder?

Gruß und Danke,
Jannik
Kassensysteme für den Einzelhande http://ab-software.de
Mitglied der XUG-Cologne http://www.xug-cologne.de
Antworten