XbpBrowse: Zeile direkt positionieren

Grafische Primitive, XbaseParts und Darstellungsfragen allgemein.

Moderator: Moderatoren

DelUser01

XbpBrowse: Zeile direkt positionieren

Beitrag von DelUser01 »

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
Benutzeravatar
brandelh
Foren-Moderator
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

Beitrag von brandelh »

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.
Gruß
Hubert
Benutzeravatar
AUGE_OHR
Marvin
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

Beitrag von AUGE_OHR »

Roland Gentner hat geschrieben:z.Zt. mache ich das mit x-Mal xbeK_DOWN
und was machst du wenn der User die Maus nimmt zum positionieren ?

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
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: Zeile direkt positionieren

Beitrag von UliTs »

Ich kann mich noch dran erinnern, dass es nicht ganz so einfach war ...

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
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
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
Benutzeravatar
brandelh
Foren-Moderator
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

Beitrag von brandelh »

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.)
Gruß
Hubert
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: Zeile direkt positionieren

Beitrag von UliTs »

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
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
DelUser01

Re: XbpBrowse: Zeile direkt positionieren

Beitrag von DelUser01 »

Hallo
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
genau Uli, das meine ich. Nur beim ersten Anzeigen des Browsers soll der Eintrag in der Mitte den Highlight-Balken haben.
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
Gruß
Roland
Benutzeravatar
brandelh
Foren-Moderator
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

Beitrag von brandelh »

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
DelUser01

Re: XbpBrowse: Zeile direkt positionieren

Beitrag von DelUser01 »

Hallo Hubert

da mit dem :down() habe ich auch probiert, das geht scheinbar nicht.

Gruß
Roland
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: Zeile direkt positionieren

Beitrag von UliTs »

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
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
DelUser01

Re: XbpBrowse: Zeile direkt positionieren

Beitrag von DelUser01 »

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
Benutzeravatar
brandelh
Foren-Moderator
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

Beitrag von brandelh »

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 ...

Code: Alles auswählen

XbpBrowse():new( [<oParent>], ; 
                 [<oOwner>], ; 
                 [<aPos>], ; 
                 [<aSize>], ; 
                 [<aPresParam>], ; 
                 [<lVisible>] ) --> oXbpBrowse 
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,
Gruß
Hubert
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: Zeile direkt positionieren

Beitrag von UliTs »

brandelh hat geschrieben:Wieso CRT, oben sprachst du doch von XbpBrowse() das ist GUI - ...
Hubi, kann es sein, dass Du ein bischen übermüdet bist :?: :D 8)

Roland meint, das es im CRT-Modus problemlos funktioniert. Natürlich sucht er trotzdem eine Lösung im GUI-Modus :roll: :razz:

Uli
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
DelUser01

Re: XbpBrowse: Zeile direkt positionieren

Beitrag von DelUser01 »

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
Benutzeravatar
Wolfgang Ciriack
Der Entwickler von "Deep Thought"
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

Beitrag von Wolfgang Ciriack »

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
DelUser01

Re: XbpBrowse: Zeile direkt positionieren

Beitrag von DelUser01 »

Hallo Wolfgang
Wolfgang Ciriack hat geschrieben:Von manchen Sachen muss man sich nach 25 Jahren einfach verabschieden,...
...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.
...ich finde es z.B. ganz normal, dass man bei einem Browse oben anfängt und nicht an einer durch Zufall gewählten Stelle.
Ich nicht und meine Anwender auch nicht.

Es muss ja nicht alles gleich aussehen und/oder gleich funktionieren. Das wäre ja schlimm.

Gruß
Roland
Benutzeravatar
brandelh
Foren-Moderator
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

Beitrag von brandelh »

Die erste Datenzeile ist aber schon in der ersten Zeile oder ? ;-)
BrandelH hat geschrieben:...das mit dem "Übermüdet" war auch nicht schlecht :)
und seit vielen Jahren zutreffend, wenn auch nicht lustig ... :wink:
http://de.wikipedia.org/wiki/Schlafapnoe-Syndrom
Gruß
Hubert
DelUser01

Re: XbpBrowse: Zeile direkt positionieren

Beitrag von DelUser01 »

Hallo Hubert
brandelh hat geschrieben:Die erste Datenzeile ist aber schon in der ersten Zeile oder ?
Ja -> siehe Bild anbei
BrandelH hat geschrieben:und seit vielen Jahren zutreffend, wenn auch nicht lustig
das glaube ich Dir dass das dann kein Spaß mehr ist! Ich fand es nur lustig wie Uli das kommentiert hat.

Güße
Roland
Dateianhänge
Anfangsmarkierung in der Mitte
Anfangsmarkierung in der Mitte
HardCopy0001.JPG (536.13 KiB) 6413 mal betrachtet
Benutzeravatar
AUGE_OHR
Marvin
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

Beitrag von AUGE_OHR »

Roland Gentner hat geschrieben:

Code: Alles auswählen

For nCnt1 := 1 To nMiddleRow
   PostAppEvent( xbeP_Keyboard, xbeK_DOWN , , oBrowse )
Next nCnt1
versuche es mal damit

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
Benutzeravatar
brandelh
Foren-Moderator
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

Beitrag von brandelh »

nur zur Klarstellung, es ist nichts gegen deinen Code einzuwenden, ich wundere mich nur dass :down() nicht das gleiche Ergebnis bringt.

Code: Alles auswählen

 PostAppEvent( xbeP_Keyboard, xbeK_DOWN , , oBrowse )
und wenn du deine Aktion vor dem SHOW() erledigst, sollte der Anwender das gar nicht sehen.
Gruß
Hubert
DelUser01

Re: XbpBrowse: Zeile direkt positionieren

Beitrag von DelUser01 »

Hallo Hubert

Code: Alles auswählen

oBrowse:down()
wenn ich das mit :down mache ist gar kein Feld mehr gekennzeichnet.

Gruß
Roland
DelUser01

Re: XbpBrowse: Zeile direkt positionieren

Beitrag von DelUser01 »

Hallo Auge_Ohr

Code: Alles auswählen

oBrowse:show()
SetAppFocus( oBrowse )
oBrowse:rowPos := INT(oBrowse:rowCount /2)
oBrowse:refreshall()
Wenn ich das so mache stimmen mehrere Dinge nicht mehr. Das hatte ich auch schon probiert.

Gruß
Roland
Benutzeravatar
AUGE_OHR
Marvin
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

Beitrag von AUGE_OHR »

Roland Gentner hat geschrieben:Wenn ich das so mache stimmen mehrere Dinge nicht mehr.
was für Dinge ?
Roland Gentner hat geschrieben:Das hatte ich auch schon probiert.
auch in der Reihenfolge ?
gruss by OHR
Jimmy
DelUser01

Re: XbpBrowse: Zeile direkt positionieren

Beitrag von DelUser01 »

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
Benutzeravatar
AUGE_OHR
Marvin
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

Beitrag von AUGE_OHR »

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.
hm ... beim ersten o:Show() stehst du auf dem gewünschten Record ?
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()
genau das machen diese beiden Zeilen.

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
Antworten