XbpBrowse: Zeile direkt positionieren
Moderator: Moderatoren
XbpBrowse: Zeile direkt positionieren
Hallo
ich such einen Weg um den markierten Eintrag anzugeben.
Jetzt ist standardmäßig das erste Feld links oben markiert.
Ich möchte aber dass nach dem Anzeigen der Tabelle der mittlere Eintrag markiert ist.
Der Benutzer soll also Daten über und unter dem aktuellen Record sehen.
Der Bereich/Focus ist berechnet, der erste und letzte anzuzeigende Record ist bekannt. Auch die Zeile in der der aktuelle Record steht ist bekannt (z.B. die 9. Zeile).
Ich habe nur keine Möglichkeit gefunden die Darstellung so zu steuern.
Kann mir da jemand bitte auf die Sprünge helfen.
Gruß
Roland
P.S. Vergessen:
z.Zt. mache ich das mit x-Mal xbeK_DOWN
ich such einen Weg um den markierten Eintrag anzugeben.
Jetzt ist standardmäßig das erste Feld links oben markiert.
Ich möchte aber dass nach dem Anzeigen der Tabelle der mittlere Eintrag markiert ist.
Der Benutzer soll also Daten über und unter dem aktuellen Record sehen.
Der Bereich/Focus ist berechnet, der erste und letzte anzuzeigende Record ist bekannt. Auch die Zeile in der der aktuelle Record steht ist bekannt (z.B. die 9. Zeile).
Ich habe nur keine Möglichkeit gefunden die Darstellung so zu steuern.
Kann mir da jemand bitte auf die Sprünge helfen.
Gruß
Roland
P.S. Vergessen:
z.Zt. mache ich das mit x-Mal xbeK_DOWN
- brandelh
- Foren-Moderator
- Beiträge: 15695
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 65 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Re: XbpBrowse: Zeile direkt positionieren
ich denke der sauberste Weg ist 9x die Methode oXbpBrowse:down()- Browse-Cursor um eine Zeile nach unten bewegen. aufzurufen.
vermutlich muss man danach ein do while ! oXbpBrowse:forceStable(); enddo nachziehen, bin mir aber nicht sicher.
vermutlich muss man danach ein do while ! oXbpBrowse:forceStable(); enddo nachziehen, bin mir aber nicht sicher.
Gruß
Hubert
Hubert
- AUGE_OHR
- Marvin
- Beiträge: 12906
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 45 Mal
Re: XbpBrowse: Zeile direkt positionieren
und was machst du wenn der User die Maus nimmt zum positionieren ?Roland Gentner hat geschrieben:z.Zt. mache ich das mit x-Mal xbeK_DOWN
wie Hubert ja sagte solltest du mit dem Browse Object Methoden o:Down() / o:Up() arbeiten ( wie beim TBrowse )
aber auch wenn du den Cursor Balken (XBPBRW_CURSOR_ROW) am Anfang in der Mitte platzierst wird er bei o:Down() / o:Up() ja nicht die Position "halten"
du gehst im Prinzip von einem "fixen" X / Y Grid aus also einer XbpMultiCellGroup().
bei o:Down() / o:Up() wir der gesamte Inhalt verschoben und der Cursor Balken zeigt in der Mitte ( Höhe) immer den aktuellen Record.
dafür kann man übrigens ein ("native") Listview benutzen wie es der Rest der Windows Welt tut.
gruss by OHR
Jimmy
Jimmy
-
- 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: Zeile direkt positionieren
Ich kann mich noch dran erinnern, dass es nicht ganz so einfach war ...
Ich habe XbpBrowse um die Methode
erweitert. Bei 50 steht z.B. anschließend die aktuelle Zeile in der Mitte des Browsers. Das geht natürlich nur, wenn es genügend Zeilen darüber gibt.
Wenn z.B. die erste Zeile die aktuelle Zeile ist, muss dies auch die erste Zeile im Browser sein .
Uli
Ich habe XbpBrowse um die Methode
Code: Alles auswählen
METHOD UTsBrowseDB:refreshView( nRelPos )
DEFAULT nRelPos TO 50 // Realtive Position der aktuellen Zeile in Prozent
Wenn z.B. die erste Zeile die aktuelle Zeile ist, muss dies auch die erste Zeile im Browser sein .
Uli
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
Mitglied XuG Cologne
Mitglied XuG Osnabrück
- brandelh
- Foren-Moderator
- Beiträge: 15695
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 65 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Re: XbpBrowse: Zeile direkt positionieren
Ich habe bei mir das genutzt um im XbpBrowse() nach dem Speichern der Eingabe in die nächste Browser-Zeile zu springen (dort lese ich nach stabilize die Werte in unten befindliche SLE und setze den Fokus auf das erste SLE. Bei mir geht das so schnell, dass der USER zwischen letzter SLE Eingabe und Sprung zum nächsten Satz keine Zeit hat die Maus zu erreichen, danach wird nichts mehr gemacht und er könnte eine andere Zeile auswählen.
Die Methode verschiebt im Browser übrigens NICHTS (außer dem Cursor), solange genug Zeilen nach unten zur Verfügung stehen.
Ich selbst mache aber SO WENIG automatische Aktionen wie nur irgend möglich, da man den Anwender sonst schnell verärgern kann (wenn das Programm "seltsam" bzw. nicht "Windows like" reagiert.)
Die Methode verschiebt im Browser übrigens NICHTS (außer dem Cursor), solange genug Zeilen nach unten zur Verfügung stehen.
Ich selbst mache aber SO WENIG automatische Aktionen wie nur irgend möglich, da man den Anwender sonst schnell verärgern kann (wenn das Programm "seltsam" bzw. nicht "Windows like" reagiert.)
Gruß
Hubert
Hubert
-
- 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: Zeile direkt positionieren
Hubert,
ich glaube, dass Roland nur die Initialisierung des Browsers meint.
Also, dass zu Beginn NICHT die Zelle oben links bzw. die oberste sichtbare Zeile markiert ist sondern eine vorwählbare .
Uli
ich glaube, dass Roland nur die Initialisierung des Browsers meint.
Also, dass zu Beginn NICHT die Zelle oben links bzw. die oberste sichtbare Zeile markiert ist sondern eine vorwählbare .
Uli
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
Mitglied XuG Cologne
Mitglied XuG Osnabrück
Re: XbpBrowse: Zeile direkt positionieren
Hallo
Das mache ich wie gesagt schon seit Jahrzehnten so. Und bei den heutigen "riesigen" TFT-Formaten immer nur links oben zu positionieren find ich blöd
Gruß
Roland
genau Uli, das meine ich. Nur beim ersten Anzeigen des Browsers soll der Eintrag in der Mitte den Highlight-Balken haben.UliTs hat geschrieben:ich glaube, dass Roland nur die Initialisierung des Browsers meint.
Also, dass zu Beginn NICHT die Zelle oben links bzw. die oberste sichtbare Zeile markiert ist sondern eine vorwählbare
Das mache ich wie gesagt schon seit Jahrzehnten so. Und bei den heutigen "riesigen" TFT-Formaten immer nur links oben zu positionieren find ich blöd
Code: Alles auswählen
For nCnt1 := 1 To nMiddleRow
PostAppEvent( xbeP_Keyboard, xbeK_DOWN , , oBrowse )
Next nCnt1
Roland
- brandelh
- Foren-Moderator
- Beiträge: 15695
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 65 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Re: XbpBrowse: Zeile direkt positionieren
das müsste von der Wirkung mit dem von mir vorgeschlagenen :down() identisch sein ...
Code: Alles auswählen
For nCnt1 := 1 To nMiddleRow
oBrowse:down()
Next nCnt1
Gruß
Hubert
Hubert
Re: XbpBrowse: Zeile direkt positionieren
Hallo Hubert
da mit dem :down() habe ich auch probiert, das geht scheinbar nicht.
Gruß
Roland
da mit dem :down() habe ich auch probiert, das geht scheinbar nicht.
Gruß
Roland
-
- 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: Zeile direkt positionieren
Ich habe mir gerade noch mal meine ::refreshView angeschaut.
Es war doch recht aufwendig. Wenn es bis nächste Woche keine Lösung gibt, kann ich mich auch noch mal drum kümmern.
Uli
Es war doch recht aufwendig. Wenn es bis nächste Woche keine Lösung gibt, kann ich mich auch noch mal drum kümmern.
Uli
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
Mitglied XuG Cologne
Mitglied XuG Osnabrück
Re: XbpBrowse: Zeile direkt positionieren
Hallo
Die Lösung, dass der Balken mit der aktuellen Zeile (Record) immer in der Mitte ist habe ich auch im CRT. Brauch aber mehr CPU. Ob das in GUI auch klappt? Wird sicher aufwendiger.
Es würde erst mal reichen wenn der Balken bei der Initialisierung bereits in der Mitte ist.
Sieht halt komisch aus wenn der Browser angezeigt wird und die erste Reihe markiert ist und im nächsten Augenblick auf die Mitte springt.
Gruß Roland
Die Lösung, dass der Balken mit der aktuellen Zeile (Record) immer in der Mitte ist habe ich auch im CRT. Brauch aber mehr CPU. Ob das in GUI auch klappt? Wird sicher aufwendiger.
Es würde erst mal reichen wenn der Balken bei der Initialisierung bereits in der Mitte ist.
Sieht halt komisch aus wenn der Browser angezeigt wird und die erste Reihe markiert ist und im nächsten Augenblick auf die Mitte springt.
Gruß Roland
- brandelh
- Foren-Moderator
- Beiträge: 15695
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 65 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Re: XbpBrowse: Zeile direkt positionieren
Wieso CRT, oben sprachst du doch von XbpBrowse() das ist GUI - oder habe ich das falsch verstanden und du meintest
Browse() - Datensätze einer Workarea in einem Fenster anzeigen
das hat natürlich andere Methoden ...
Was die Anzeige und dann das Blättern angeht, das läßt sich regeln.
Alle XbpParts Anzeigeelemente haben einen Parameter lVisilble ...
setzt man diesen auf .f., werden die Controls selbst unsichtbar aufgebaut, man kann aber schon aktionen damit durchführen.
Bei CLASS - CODE kann man in der Methode CREATE() bereits den Browser Createn(), aktionen durchführen und solange man ::SHOW() danach ausführt sieht man nichts.
Erst nach :SHOW() wird dann sofort der aktuelle Stand angezeigt.
Bei einem GUI Fenster reicht es,
Browse() - Datensätze einer Workarea in einem Fenster anzeigen
das hat natürlich andere Methoden ...
Was die Anzeige und dann das Blättern angeht, das läßt sich regeln.
Alle XbpParts Anzeigeelemente haben einen Parameter lVisilble ...
Code: Alles auswählen
XbpBrowse():new( [<oParent>], ;
[<oOwner>], ;
[<aPos>], ;
[<aSize>], ;
[<aPresParam>], ;
[<lVisible>] ) --> oXbpBrowse
Bei CLASS - CODE kann man in der Methode CREATE() bereits den Browser Createn(), aktionen durchführen und solange man ::SHOW() danach ausführt sieht man nichts.
Erst nach :SHOW() wird dann sofort der aktuelle Stand angezeigt.
Bei einem GUI Fenster reicht es,
Gruß
Hubert
Hubert
-
- 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: Zeile direkt positionieren
Hubi, kann es sein, dass Du ein bischen übermüdet bistbrandelh hat geschrieben:Wieso CRT, oben sprachst du doch von XbpBrowse() das ist GUI - ...
Roland meint, das es im CRT-Modus problemlos funktioniert. Natürlich sucht er trotzdem eine Lösung im GUI-Modus
Uli
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
Mitglied XuG Cologne
Mitglied XuG Osnabrück
Re: XbpBrowse: Zeile direkt positionieren
Hallo
ich will Euch natürlich nicht verwirren.
Ich möchte nur, dass meine Anwender in GUI die selben Funktionen und Darstellungen wiederfinden die diese schon seit über 25 Jahren gewohnt sind. und das ist eben die Anzeige des aktuellen Eintrags in der Mitte einer Übersichts-Liste.
...das mit dem "Übermüdet" war auch nicht schlecht
Gruß
Roland
ich will Euch natürlich nicht verwirren.
Ich möchte nur, dass meine Anwender in GUI die selben Funktionen und Darstellungen wiederfinden die diese schon seit über 25 Jahren gewohnt sind. und das ist eben die Anzeige des aktuellen Eintrags in der Mitte einer Übersichts-Liste.
...das mit dem "Übermüdet" war auch nicht schlecht
Gruß
Roland
- Wolfgang Ciriack
- Der Entwickler von "Deep Thought"
- Beiträge: 2934
- Registriert: Sa, 24. Sep 2005 9:37
- Wohnort: Berlin
- Hat sich bedankt: 13 Mal
- Danksagung erhalten: 34 Mal
- Kontaktdaten:
Re: XbpBrowse: Zeile direkt positionieren
Von manchen Sachen muss man sich nach 25 Jahren einfach verabschieden, ich finde es z.B. ganz normal, dass man bei einem Browse oben anfängt und nicht an einer durch Zufall gewählten Stelle.
Viele Grüße
Wolfgang
Wolfgang
Re: XbpBrowse: Zeile direkt positionieren
Hallo Wolfgang
Es muss ja nicht alles gleich aussehen und/oder gleich funktionieren. Das wäre ja schlimm.
Gruß
Roland
...schön für Dich wenn Du Kunden hast die das akzeptieren und Dir glauben dass das die Software heute das nicht mehr hergibt was vorher schon ging.Wolfgang Ciriack hat geschrieben:Von manchen Sachen muss man sich nach 25 Jahren einfach verabschieden,...
Ich nicht und meine Anwender auch nicht....ich finde es z.B. ganz normal, dass man bei einem Browse oben anfängt und nicht an einer durch Zufall gewählten Stelle.
Es muss ja nicht alles gleich aussehen und/oder gleich funktionieren. Das wäre ja schlimm.
Gruß
Roland
- brandelh
- Foren-Moderator
- Beiträge: 15695
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 65 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Re: XbpBrowse: Zeile direkt positionieren
Die erste Datenzeile ist aber schon in der ersten Zeile oder ?
http://de.wikipedia.org/wiki/Schlafapnoe-Syndrom
und seit vielen Jahren zutreffend, wenn auch nicht lustig ...BrandelH hat geschrieben:...das mit dem "Übermüdet" war auch nicht schlecht
http://de.wikipedia.org/wiki/Schlafapnoe-Syndrom
Gruß
Hubert
Hubert
Re: XbpBrowse: Zeile direkt positionieren
Hallo Hubert
Güße
Roland
Ja -> siehe Bild anbeibrandelh hat geschrieben:Die erste Datenzeile ist aber schon in der ersten Zeile oder ?
das glaube ich Dir dass das dann kein Spaß mehr ist! Ich fand es nur lustig wie Uli das kommentiert hat.BrandelH hat geschrieben:und seit vielen Jahren zutreffend, wenn auch nicht lustig
Güße
Roland
- Dateianhänge
-
- Anfangsmarkierung in der Mitte
- HardCopy0001.JPG (536.13 KiB) 6413 mal betrachtet
- AUGE_OHR
- Marvin
- Beiträge: 12906
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 45 Mal
Re: XbpBrowse: Zeile direkt positionieren
versuche es mal damitRoland Gentner hat geschrieben:Code: Alles auswählen
For nCnt1 := 1 To nMiddleRow PostAppEvent( xbeP_Keyboard, xbeK_DOWN , , oBrowse ) Next nCnt1
Code: Alles auswählen
oBrowse:show()
SetAppFocus( oBrowse )
//
// set Row to 1/2 height Position
//
oBrowse:rowPos := INT(oBrowse:rowCount /2)
oBrowse:refreshall()
gruss by OHR
Jimmy
Jimmy
- brandelh
- Foren-Moderator
- Beiträge: 15695
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 65 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Re: XbpBrowse: Zeile direkt positionieren
nur zur Klarstellung, es ist nichts gegen deinen Code einzuwenden, ich wundere mich nur dass :down() nicht das gleiche Ergebnis bringt.
und wenn du deine Aktion vor dem SHOW() erledigst, sollte der Anwender das gar nicht sehen.
Code: Alles auswählen
PostAppEvent( xbeP_Keyboard, xbeK_DOWN , , oBrowse )
Gruß
Hubert
Hubert
Re: XbpBrowse: Zeile direkt positionieren
Hallo Hubert
wenn ich das mit :down mache ist gar kein Feld mehr gekennzeichnet.
Gruß
Roland
Code: Alles auswählen
oBrowse:down()
Gruß
Roland
Re: XbpBrowse: Zeile direkt positionieren
Hallo Auge_Ohr
Wenn ich das so mache stimmen mehrere Dinge nicht mehr. Das hatte ich auch schon probiert.
Gruß
Roland
Code: Alles auswählen
oBrowse:show()
SetAppFocus( oBrowse )
oBrowse:rowPos := INT(oBrowse:rowCount /2)
oBrowse:refreshall()
Gruß
Roland
- AUGE_OHR
- Marvin
- Beiträge: 12906
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 45 Mal
Re: XbpBrowse: Zeile direkt positionieren
was für Dinge ?Roland Gentner hat geschrieben:Wenn ich das so mache stimmen mehrere Dinge nicht mehr.
auch in der Reihenfolge ?Roland Gentner hat geschrieben:Das hatte ich auch schon probiert.
gruss by OHR
Jimmy
Jimmy
Re: XbpBrowse: Zeile direkt positionieren
Hallo Auge_Ohr
beim Anzeigen wird die obere Zeile oder das Feld links oben Markiert (je nach Einstellung). Dann springt die Markierung auf die gewünschte Zeile. Aber in der ersten Zeile bleiben zig Felder markiert. Die Markierung stimmt mit dem tatsächlichen Record nicht mehr überein.
Gruß
Roland
beim Anzeigen wird die obere Zeile oder das Feld links oben Markiert (je nach Einstellung). Dann springt die Markierung auf die gewünschte Zeile. Aber in der ersten Zeile bleiben zig Felder markiert. Die Markierung stimmt mit dem tatsächlichen Record nicht mehr überein.
Gruß
Roland
- AUGE_OHR
- Marvin
- Beiträge: 12906
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 45 Mal
Re: XbpBrowse: Zeile direkt positionieren
hm ... beim ersten o:Show() stehst du auf dem gewünschten Record ?Roland Gentner hat geschrieben:Dann springt die Markierung auf die gewünschte Zeile. Aber in der ersten Zeile bleiben zig Felder markiert. Die Markierung stimmt mit dem tatsächlichen Record nicht mehr überein.
dein Cursor ( XBPBRW_CURSOR_CELL ) steht nun oben links ... auf dem Record ?
der Record soll nun in die Mitte / Höhe "wandern" und dort angezeigt werden ?
Code: Alles auswählen
oBrowse:rowPos := INT(oBrowse:rowCount /2)
oBrowse:refreshall()
ich setzte also zunächst "im" Browse die gewünschte Position des Cursor was aber NICHT etwas "bewegt"
nun lese ich mit o:refreshall() alle Daten neu ein ... da sollten keine Artefakte sein da jede sichtbare Cell neu "gemalt" wird.
wenn nun der Cursor auf der gewünschten Position angezeigt wird muss er wieder auf dem ursprünglichen Record stehen.
ein xbeK_UP / xbeK_DOWN oder o:up() / o:down() zum positionieren ist umständlich.
gruss by OHR
Jimmy
Jimmy