Was macht XbpBrowse:ForceStable() eigentlich?

Grafische Primitive, XbaseParts und Darstellungsfragen allgemein.

Moderator: Moderatoren

Antworten
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9356
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 101 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Was macht XbpBrowse:ForceStable() eigentlich?

Beitrag von Tom »

Siehe Threadüberschrift. Was macht diese Methode genau? Weiß das jemand? Mir ist bewußt, daß man sie nach dem Hinzufügen, Löschen und Verschieben von Spalten aufrufen sollte - aber wann noch?
Herzlich,
Tom
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:

Beitrag von brandelh »

Hallo Tom,

laut Handbuch macht die Methode 'stabilisiert die Anzeige ... indem ein kompletter Stabilisierungszyklus durchführt'.

also wird die Anzeige komplett neu aufgebaut, intern etwa:

1. DBF - dbSkip(0) // zuerst alle DBF Felder neu einlesen
2. oBrowse:dbrefreshall() // alle Änderungen einlesen (erzwingen)
3. warten, bis alle Daten in allen Zellen erneut angezeigt wurden
...

Nachdem forcestable() = .t. ist, stimmt die Anzeige mit der DBF überein.

Auf jeden Fall aufrufen, wenn
- ein Filter/Scope oder die Indexreihenfolge geändert wird, das bekommt der Browser nicht immer mit !
- bei Änderungen in der DBF direkt. (Änderungen im Browser müsste dieser mitbekommen ...)
- nach einiger Zeit wenn man Daten einer gesharten DBF anzeigt, da ja andere PCs ändern könnten ...
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

Beitrag von AUGE_OHR »

hi,
Siehe Threadüberschrift. Was macht diese Methode genau? Weiß das jemand? Mir ist bewußt, daß man sie nach dem Hinzufügen, Löschen und Verschieben von Spalten aufrufen sollte - aber wann noch?
Immer wenn sich was in der "Anzeige" ändert muss man "warten" bis
die "Anzeige" :stable ist. Dies kann man durch Forcestable()
erreichen

Code: Alles auswählen

//
// Beipiel TBrowse
//
PROCEDURE ForceStable( oBrowse )
   DISPBEGIN()
   DO WHILE .NOT. oBrowse:stabilize()
   ENDDO
   DISPEND()
RETURN
gruss by OHR
Jimmy
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9356
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 101 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Beitrag von Tom »

Hallo, Hubert.

Deine Antwort kannst Du Dir selbst falsifizieren. 8) Bau einfach mal ein DB-Browse und ändere die Datenbank von einer anderen Applikation aus, :ForceStable() wird die Daten nicht aktualisieren. Das nämlich macht :RefreshAll(), in allen drei von Dir genannten Fällen!
Herzlich,
Tom
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:

Beitrag von brandelh »

Tom hat geschrieben:Deine Antwort kannst Du Dir selbst falsifizieren. 8) Bau einfach mal ein DB-Browse und ändere die Datenbank von einer anderen Applikation aus,
he, was fragst du erst, wenn du nachher auch noch probieren gehst :wink: offensichtlich überwacht in diesem Falle forcestable() nur die Vollständigkeit der Anzeige der Daten aus dem PUFFER, nicht aber das Einlesen des Puffers von der Festplatte.

Irre ich mich oder führt aber ein refreshall nicht automatisch auch einen forcestable aus ?

Wenn ja braucht man forcestable nur um sicher zu gehen, dass die Anzeige aktuell ist bevor man etwas anderes machen will (frag nicht was, ich nehm immer refreshall wenn ich nicht sicher bin).

PS: ich habe den Quellcode von Xbase++ forcestable zur Zeit grad nicht vorliegen :?
Gruß
Hubert
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9356
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 101 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Beitrag von Tom »

Hallo, Hubert.
PS: ich habe den Quellcode von Xbase++ forcestable zur Zeit grad nicht vorliegen
Das bringt mich auf eine Idee - ich müßte ihn nämlich haben, denn der XbpBrowse-Quellcode ist ja in der ProfSub enthalten! :idea:

Tatsächlich aber gehe ich davon aus, daß :ForceStable nichts mit der Datenquelle zu tun hat, sondern lediglich für eine grafische Stabilisierung der Browser-Anzeige sorgt. Alles andere machen :RefreshCurrent und :RefreshAll.
Herzlich,
Tom
Benutzeravatar
andreas
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1902
Registriert: Mi, 28. Sep 2005 10:53
Wohnort: Osnabrück
Hat sich bedankt: 4 Mal
Kontaktdaten:

Beitrag von andreas »

Tom hat geschrieben:Hallo, Hubert.
PS: ich habe den Quellcode von Xbase++ forcestable zur Zeit grad nicht vorliegen
Das bringt mich auf eine Idee - ich müßte ihn nämlich haben, denn der XbpBrowse-Quellcode ist ja in der ProfSub enthalten! :idea:

Tatsächlich aber gehe ich davon aus, daß :ForceStable nichts mit der Datenquelle zu tun hat, sondern lediglich für eine grafische Stabilisierung der Browser-Anzeige sorgt. Alles andere machen :RefreshCurrent und :RefreshAll.
Hallo Tom,

ich benutze nur die beiden Methode :RefreshCurrent und :RefreshAll.
ForceStable-Methode habe ich noch nie gebraucht und irgendwie glaube ich nicht, dass man diese überhaupt anfassen muss. Vielleicht in irgenwelchen besonderen Fällen!?
Gruß,

Andreas
VIP der XUG Osnabrück
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

Beitrag von AUGE_OHR »

hi,
andreas hat geschrieben: ForceStable-Methode habe ich noch nie gebraucht und irgendwie glaube ich nicht, dass man diese überhaupt anfassen muss. Vielleicht in irgenwelchen besonderen Fällen!?
vielleicht muss man zwischen TBrowse und XbpBrowse unterscheiden.
Im TBrowse muss ich ein :stable haben bevor eine weitere
Aktion erfolgen kann.

Code: Alles auswählen

 DISPBEGIN()
 DO WHILE (nKey := INKEY()) == 0 //.AND. !oBrowse:stabilize()
       IF oBrowse:stabilize()
          EXIT
       ENDIF
  ENDDO
  DISPEND()
  IF oBrowse:stable
dieses kann man auch in C:\ALASKA\XPPW32\SOURCE\SYS\BrowSys.prg
sehen. Unter GUI hab ich es bisher nur bei "Bewegungen" im oBrowse
gesehen :

Code: Alles auswählen

   oBrowse:right()
   oBrowse:forceStable()
...
   oBrowse:left()
   oBrowse:forceStable()
...
   INLINE METHOD GoTop()
      ::EvenRow := .T.
      ::XbpQuickbrowse:GoTop()
   RETURN ::ForceStable()
...
   INLINE METHOD GoBottom()
      ::EvenRow := .T.
      ::XbpQuickbrowse:GoBottom()
   RETURN ::ForceStable()
...
      Eval( bBlock, ::browser )
      ::browser:forceStable()
gruss by OHR
Jimmy
Benutzeravatar
andreas
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1902
Registriert: Mi, 28. Sep 2005 10:53
Wohnort: Osnabrück
Hat sich bedankt: 4 Mal
Kontaktdaten:

Beitrag von andreas »

Hallo Jimmy,

du schreibst von TBrowse und XBPBrowse. In deinem Beispiel geht es aber um XbpQuickbrowse. Vielleicht gibt es da uinterschiede.
Gruß,

Andreas
VIP der XUG Osnabrück
Antworten