Auswahlbalken beim Start von XbpBrowse() nicht auf ersten Eintrag

Grafische Primitive, XbaseParts und Darstellungsfragen allgemein.

Moderator: Moderatoren

Antworten
RolandG
UDF-Programmierer
UDF-Programmierer
Beiträge: 88
Registriert: Mi, 09. Jan 2019 16:02
Wohnort: Neresheim
Danksagung erhalten: 4 Mal
Kontaktdaten:

Auswahlbalken beim Start von XbpBrowse() nicht auf ersten Eintrag

Beitrag von RolandG »

Hallo

hat es jemand geschafft den Auswahlbalken beim Aufbau der Anzeige von XbpBrowse() nicht auf dem ersten Eintrag darzustellen sondern auf einem anderen, bestimmten Eintrag?
Ich verwende XbpBrowse() an vielen Stellen, auch anstatt AChoice().
Aber mich ärgert immer wieder, dass beim Anzeigen von XbpBrowse() der Balken zuerst auf dem obersten Eintrag angezeigt wird.
Natürlich kann ich den danach anderweitig positionieren, sieht aber gerade bei größeren Browse-Fenstern unschön aus wenn der Balken zuerst oben kurz angezeigt wird und dann gleich auf den gewünschten Eintrag runterspringt.
Den ersten Anzeige-Aufbau von XbpBrowse() schaffe ich nicht ohne dass der Balken oben angezeigt wird. Keine Ahnung was ich falsch mache bzw. übersehe.

Gruß
Roland
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9481
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 112 Mal
Danksagung erhalten: 380 Mal
Kontaktdaten:

Re: Auswahlbalken beim Start von XbpBrowse() nicht auf ersten Eintrag

Beitrag von Tom »

Hallo, Roland.

Das hängt ein bisschen davon ab, 1) was die Datenquelle Deines Browses ist (Tabelle oder Array) und 2) wie die Navigations-Codeblöcke (von Dir) aufgebaut wurden. Die Navi-Codeblöcke eines Tabellenbrowses sollten so gebaut sein, dass Du den Tabellenzeiger bewegen kannst und das Browse bewegt sich automatisch synchron mit, wenn es refreshed wird (möglicherweise ist ein :ForceStable() erforderlich). Bei Arrays ist das ein wenig komplizierter.

Aber Du kannst den Zeiger auch mit :Down() oder :pageDown() usw. bewegen, bevor Du das Browse anzeigst. Du baust es auf, bestückst es, aber Du machst das :Show() erst nach den Navigationsschritten. Auch hier ist ggf. ein :ForceStable() erforderlich.
Herzlich,
Tom
RolandG
UDF-Programmierer
UDF-Programmierer
Beiträge: 88
Registriert: Mi, 09. Jan 2019 16:02
Wohnort: Neresheim
Danksagung erhalten: 4 Mal
Kontaktdaten:

Re: Auswahlbalken beim Start von XbpBrowse() nicht auf ersten Eintrag

Beitrag von RolandG »

Hallo Tom,

das mit dem Show erst am Ende des Aufbaus ist klar.
Ich weiß aber keine andere Positionierungsmöglichkeit als mit

Code: Alles auswählen

PostAppEvent( xbeP_Keyboard, xbeK_DOWN , , ::oBrowse )
auf den gewünschten Eintrag zu positionieren.
Und das geht erst wenn XbpBrowse() aufgebaut, angezeigt und die Input-Schleife auf dem Dialog aktiv ist.
Damit ist die Balken-Bewegung praktisch sichtbar.

Ich habe also keine Ahnung, wie man auf die gewünschte Reihe innerhalb XbpBrowse() "Vor-Positioniert" und dann erst anzeigt.

Gruß
Roland
RolandG
UDF-Programmierer
UDF-Programmierer
Beiträge: 88
Registriert: Mi, 09. Jan 2019 16:02
Wohnort: Neresheim
Danksagung erhalten: 4 Mal
Kontaktdaten:

Re: Auswahlbalken beim Start von XbpBrowse() nicht auf ersten Eintrag

Beitrag von RolandG »

zusätzliche Info:

wenn ich den laufende, aktuellen Eintrag vor dem Anzeigen von XbpBrowse() positioniere wird mir dieser Eintrag bei :Show() immer am oberen Ende der Liste angezeigt. Das will ich aber so nicht haben.

Bsp.:
Array mit 10 Einträgen,
alle 10 sollen dargestellt werden,
der 5.Eintrag soll vorgewählt und als aktiver Balken angezeigt werden.

Setze ich den 5.Eintrag vor :Show() auf aktuell wird der 5. ganz oben angezeigt und nach unten nur noch die restlichen 5. Die oberen 5 sind weg bzw. können nur durch hochfahren mit dem Balken zur Anzeige gebracht werden.

? ? ?
Vielleicht kann man auch "NUR" das Hervorheben des Balkens auf der ersten Zeile beim ersten :Show() verhindern?
Dann würde das nachträgliche Positionieren nicht so auffallen.
RolandG
UDF-Programmierer
UDF-Programmierer
Beiträge: 88
Registriert: Mi, 09. Jan 2019 16:02
Wohnort: Neresheim
Danksagung erhalten: 4 Mal
Kontaktdaten:

Re: Auswahlbalken beim Start von XbpBrowse() nicht auf ersten Eintrag

Beitrag von RolandG »

Habe jetzt einen Weg gefunden die Anzeige auszutricksen:
Die Zeile die für die Anzeige des Highlight-Cursor zuständig ist umgehe ich bis der Balken positioniert ist.
Am Ende der per PostAppEvent geschickten Down-Keys schicke ich ein User-defined-Event.
Wenn ich den Event in der Input-Schleife erhalte schalte ich die Zeile wieder aktiv.

Code: Alles auswählen

/*Editiermodus ist nicht aktiv. Reiche alle Parameter an die Superklasse weiter.*/
If ::oBrowEditor:lShowCursor
   ::XbpColumn:HiliteRow( nRowPos , lHilite , lFrame , lRepaint )
EndIf
Mal sehe wie lange das gut geht...
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12940
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 20 Mal
Danksagung erhalten: 48 Mal

Re: Auswahlbalken beim Start von XbpBrowse() nicht auf ersten Eintrag

Beitrag von AUGE_OHR »

hi,

schon mal mit XbpBrowse():rowPos versucht :?:
gruss by OHR
Jimmy
RolandG
UDF-Programmierer
UDF-Programmierer
Beiträge: 88
Registriert: Mi, 09. Jan 2019 16:02
Wohnort: Neresheim
Danksagung erhalten: 4 Mal
Kontaktdaten:

Re: Auswahlbalken beim Start von XbpBrowse() nicht auf ersten Eintrag

Beitrag von RolandG »

Hallo Jimmy
wenn ich das hier verwende steht der "Blaue" Balken immer noch auf dem obersten EIntrag

Code: Alles auswählen

      ::oBrowse:RowPos += nToMove            // move cell cursor down
      Eval( ::oBrowse:SkipBlock, nToMove )   // move record pointer
      ::oBrowse:ForceStable()
damit wird der Balken nach unten versetzt:

Code: Alles auswählen

      For nCnt1 := 1 To nToMove
         PostAppEvent( xbeP_Keyboard , xbeK_DOWN , , ::oBrowse )
      Next nCnt1
(ohne HiLite abzuschalten sieht man den Balken natürlich nach unten wandern)

Gruß
Roland
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9481
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 112 Mal
Danksagung erhalten: 380 Mal
Kontaktdaten:

Re: Auswahlbalken beim Start von XbpBrowse() nicht auf ersten Eintrag

Beitrag von Tom »

:RowPos ist relativ, bezieht sich also nur auf die sichtbaren Zeilen (oBrowse:RowPos = 3 bedeutet, dass der Cursor in der dritten Zeile von oben steht, aber es sagt nichts darüber aus, welche Zeile das insgesamt ist). :RowPos bewegt die Datenquelle nicht. Nach der Verwendung muss stabilisiert werden.

Die XbpBrowse-Klasse und die XbpColumn-Klasse und ihre Unterklasse XbpCellGroup sind leider nicht besonders elegant ausgedacht.
Herzlich,
Tom
RolandG
UDF-Programmierer
UDF-Programmierer
Beiträge: 88
Registriert: Mi, 09. Jan 2019 16:02
Wohnort: Neresheim
Danksagung erhalten: 4 Mal
Kontaktdaten:

Re: Auswahlbalken beim Start von XbpBrowse() nicht auf ersten Eintrag

Beitrag von RolandG »

Hallo Tom,

das mit der relativen Position und dem sichtbaren Bereich wäre ja OK,
aber der Balken bewegt sich einfach nicht von der obersten Position weg - ohne PostAppEvent(...).

Bei kleinen Tabellen/Arrays ist das mit dem xbeK_DOWN akzeptabel,
bei größeren Tabellen/Arrays hat man schon eine merkliche Wartezeit bis der Balken im unteren Bereich angekommen ist.
Können ja schon mal 50 DOWN sein.

Ein "virtueller" Maus-Klick auf den gewünschten Eintrag wäre auch eine Lösung.
Dazu müsste ich aber herausbekommen (a) welches oObj die Zeile enthält und (b) wie man dort hin einen Mausklick schickt.

Die Tabelle/Array muss auch nicht verschoben oder gescrollt werden, den gewünschten sichtbaren Focus auf die Daten ist immer auf dem Monitor, das wird vorher so berechnet.
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12940
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 20 Mal
Danksagung erhalten: 48 Mal

Re: Auswahlbalken beim Start von XbpBrowse() nicht auf ersten Eintrag

Beitrag von AUGE_OHR »

hi,

wurde nicht in der V2.0 was geändert an der Navigation :?:
gruss by OHR
Jimmy
RolandG
UDF-Programmierer
UDF-Programmierer
Beiträge: 88
Registriert: Mi, 09. Jan 2019 16:02
Wohnort: Neresheim
Danksagung erhalten: 4 Mal
Kontaktdaten:

Re: Auswahlbalken beim Start von XbpBrowse() nicht auf ersten Eintrag

Beitrag von RolandG »

Hallo Jimmy,
das Problem in meinem Programm ist nicht neu. Mit den "Versuchen" die Positionierung des Balkens richtig zu lösen bin ich schon zugange seit ich mit XbpBrowse() angefangen habe.

Vielleicht einfach nur ein Fehler in der Vorgehensweise wie ich das Modul eingesetzt und das Sample angepasst habe.

Gruß
Roland
Antworten