Auswahlbalken beim Start von XbpBrowse() nicht auf ersten Eintrag
Moderator: Moderatoren
-
- 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
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
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
- Tom
- 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
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.
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
Tom
-
- 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
Hallo Tom,
das mit dem Show erst am Ende des Aufbaus ist klar.
Ich weiß aber keine andere Positionierungsmöglichkeit als mit
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
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 )
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
-
- 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
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.
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.
-
- 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
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.
Mal sehe wie lange das gut geht...
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
-
- 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
Hallo Jimmy
wenn ich das hier verwende steht der "Blaue" Balken immer noch auf dem obersten EIntrag
damit wird der Balken nach unten versetzt:
(ohne HiLite abzuschalten sieht man den Balken natürlich nach unten wandern)
Gruß
Roland
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()
Code: Alles auswählen
For nCnt1 := 1 To nToMove
PostAppEvent( xbeP_Keyboard , xbeK_DOWN , , ::oBrowse )
Next nCnt1
Gruß
Roland
- Tom
- 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
: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.
Die XbpBrowse-Klasse und die XbpColumn-Klasse und ihre Unterklasse XbpCellGroup sind leider nicht besonders elegant ausgedacht.
Herzlich,
Tom
Tom
-
- 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
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.
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.
-
- 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
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
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