oBrowse:show() ?

Grafische Primitive, XbaseParts und Darstellungsfragen allgemein.

Moderator: Moderatoren

Antworten
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14659
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

oBrowse:show() ?

Beitrag von Jan »

2 Fragen zum gleichen Thema:

Nach meinem Verständnis ist es doch so das jedes Objekt mit Parent oDlg:drawingarea() automatisch bei oDlg:show() sichtbar gemacht, und bei oDlg:destroy() wieder aus dem Speicher entfernt. Oder vertue ich mich da?

Mein Problem ist, daß oBrowse nicht angezeigt wird (egal in welchem Projekt, immer das gleiche). Außer ich mache ein oBrowse:show(), zusätzlich zum oDlg:show(). Alle anderen XBParts werden korrekt auch ohne oXBP:show() angezeigt. Halt nur der Browse niemals.

Außerdem habe ich ein Projekt, wo ich 2 Browses auf die gleiche dbf habe. In dieser dbf werden sehr ausführliche Datensätze gespeichert. In den 2 Browses habe ich das Aufgeteilt: In dem einen werden die Datensätze nach einem bestimmten Kriterium zusammengefasst (mit Index Unique auf ein Feld), in dem anderen Browse werden dann für genau das im führenden Browse aktuelle Index-Kriterium die ganzen vorhandenen Datensätze angezeigt (Index auf das gleiche Feld, aber ohne Unique). Problem ist: Wenn ich nicht so einen Sonderkonstrukt einbaue

Code: Alles auswählen

oBrowseDetails:refershAll()
oBrowseDetails:forceStable()
obrowseUebersicht:goBottom()
oBrowseUebersicht:goTop()
oBrowseUebersicht:refreshAll()
oBrowseuebersicht:forceStable()
, dann ist die Anzeige komplett falsch (der 1. Datensatz aus oBrowseUebersicht wird so oft angezeigt, wie Zeilen im Browse sind). Es würde reichen, in dem führenden Browse manuell 2x BildAb zu fahren und dann wieder hoch auf Datensatz 1. Aber das ist ja nun einmal nicht der Sinn der Sache. Diesen ganzen Code zum Erzwingen einer korrekten Anzeige kann ich ruhig drin lassen, es gibt da kein Performance-Problem. Aber alleine die Tatsache, DAS es sein muß, irritiert mich.

Jan
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16524
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

Hallo Jan,
schau' Dir mal die Beschreibung zur :Init()-Methode an - dort steht, dass der sechste Parameter angibt, ob der Part nach dem :create() angezeigt wird, oder ein :show() nötig ist.

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14659
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

Beitrag von Jan »

Hallo Martin,

das hatte ich auch schon mal probiert, ändert aber nichts.

Jan
Benutzeravatar
Rolf Ramacher
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1931
Registriert: Do, 09. Nov 2006 10:33
Wohnort: Bergheim
Danksagung erhalten: 3 Mal
Kontaktdaten:

Beitrag von Rolf Ramacher »

Hallo Jan,

ich setze dies bei mir so.
oDlg:show()
oBrowse:show()
SetAppFocus(oBrowse)

oder kann es sein das die Position und breite des browse größer ist als
das Fenster oDlg()??
Gruß Rolf

Mitglied der Gruppe XUG-Cologne
www.xug-cologne.de
stevie
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 417
Registriert: Mo, 17. Sep 2007 18:20
Wohnort: Senftenberg
Kontaktdaten:

Beitrag von stevie »

Rolf Ramacher hat geschrieben:Hallo Jan,

ich setze dies bei mir so.
oDlg:show()
oBrowse:show()
SetAppFocus(oBrowse)

oder kann es sein das die Position und breite des browse größer ist als
das Fenster oDlg()??
Genauso ist es bei mir.
Genau deswegen hole ich mir mit currentsize() die Größe des oDlg, subtrahiere die entsprechenden Pixel und passe es damit genau ein.
aSize := oDlg:currentsize()
oBrowse := DsXBrowse():new( oDlg, ,{0,40},{aSize[1]-8,aSize[2]-65} , ,,.T. )

dsxbrowse ist das äquivalent in xclass.
Sören
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 205
Registriert: Mo, 07. Aug 2006 10:18
Wohnort: Leipzig
Danksagung erhalten: 11 Mal

Beitrag von Sören »

Hallo Stevie,
oBrowse := DsXBrowse():new( oDlg, ,{0,40},{aSize[1]-8,aSize[2]-65} , ,,.T. )
Also, das verstehe ich nicht so ganz.

1. Der Parent Deines Browse ist oDlg, sollte doch wohl aber oDlg:drawingArea sein!

2. Das .T. für lVisible steht bei Dir an 7. Stelle, nicht an 6. wie üblich!

3. Das Einpassen eines Xbp (z.B. eines Browses) in einen anderen Xbp ist immer mit
Rechnen verbunden. Da Du ja i.d.R. nicht direkt auf dem Dialog, sondern auf die
DrawingArea (siehe 1.) des Dialoges positionierst, musst Du aber auch diese zur Berechnung
der Xbp-Größe heranziehen:

Code: Alles auswählen

aSize := oDlg:drawingArea:currentsize() 
oBrowse := DsXBrowse():new( oDlg:drawingArea, , {20,20}, {aSize[1]-40,aSize[2]-40}, , .T. ) 
Allerdings das was Jan oben ansprach, dass man bei einem XbpBrowse jedesmal ein
explizites ::Show() machen muss, damit es angezeigt wird (auch wenn in ::New()
lVisible = .T. steht), habe ich auch festgestellt.
Beste Grüße,
Sören
stevie
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 417
Registriert: Mo, 17. Sep 2007 18:20
Wohnort: Senftenberg
Kontaktdaten:

Beitrag von stevie »

Sören hat geschrieben:Hallo Stevie,
oBrowse := DsXBrowse():new( oDlg, ,{0,40},{aSize[1]-8,aSize[2]-65} , ,,.T. )
Also, das verstehe ich nicht so ganz.

1. Der Parent Deines Browse ist oDlg, sollte doch wohl aber oDlg:drawingArea sein!

2. Das .T. für lVisible steht bei Dir an 7. Stelle, nicht an 6. wie üblich!

3. Das Einpassen eines Xbp (z.B. eines Browses) in einen anderen Xbp ist immer mit
Rechnen verbunden. Da Du ja i.d.R. nicht direkt auf dem Dialog, sondern auf die
DrawingArea (siehe 1.) des Dialoges positionierst, musst Du aber auch diese zur Berechnung
der Xbp-Größe heranziehen:

Code: Alles auswählen

aSize := oDlg:drawingArea:currentsize() 
oBrowse := DsXBrowse():new( oDlg:drawingArea, , {20,20}, {aSize[1]-40,aSize[2]-40}, , .T. ) 
Allerdings das was Jan oben ansprach, dass man bei einem XbpBrowse jedesmal ein
explizites ::Show() machen muss, damit es angezeigt wird (auch wenn in ::New()
lVisible = .T. steht), habe ich auch festgestellt.
2. Kann ein Kommafehler sein. Weiß ich jetz nich.
3. drawingarea funktioniert bei mir komischerweise nur beim Hauptfenster. Der Browse wird bei mir in einem Extrafenster also odlg angezeigt.
1. Als ich das ganze auf drawingarea umgestellt hatte gings nicht, also hab ichs halt ohne drawingarea gemacht.
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12911
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 46 Mal

Beitrag von AUGE_OHR »

hi,
stevie hat geschrieben: Genau deswegen hole ich mir mit currentsize() die Größe des oDlg, subtrahiere die entsprechenden Pixel und passe es damit genau ein.
aSize := oDlg:currentsize()
du passt das Browse schon beim create() an. Wenn du jedoch auch
den oDlg:resize Codeblock benutzt geht das mit

Code: Alles auswählen

oXbp:drawingArea:resize := ;
         {|mp1,mp2,obj| obj:childList()[1]:setSize(mp2) } 
gruss by OHR
Jimmy
stevie
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 417
Registriert: Mo, 17. Sep 2007 18:20
Wohnort: Senftenberg
Kontaktdaten:

Beitrag von stevie »

AUGE_OHR hat geschrieben:hi,
stevie hat geschrieben: Genau deswegen hole ich mir mit currentsize() die Größe des oDlg, subtrahiere die entsprechenden Pixel und passe es damit genau ein.
aSize := oDlg:currentsize()
du passt das Browse schon beim create() an. Wenn du jedoch auch
den oDlg:resize Codeblock benutzt geht das mit

Code: Alles auswählen

oXbp:drawingArea:resize := ;
         {|mp1,mp2,obj| obj:childList()[1]:setSize(mp2) } 
geht das in xclass++ auch so?
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16524
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

Hallo Stevie,
ich habe mal Dein Posting korrigiert und den Abschluß-Tag für den Quote rangehangen...
Zu Deiner Frage:
XClass++ ist ein aufgebohrtes Xbase++ - es ist komplett in Xbase++ geschrieben!
Alles, was Dir Xbase++ bietet, steht auch unter XClass++ zur Verfügung.
Alle Methoden, die bei XbpDialog vorhanden sind, gibt es auch unter dsDialog - selbst, wenn sie dort nicht in der Hilfe erwähnt sind!
Das gilt natürlich auch für alle anderen Parts, die sich einfach durch Ersetzen von "xbp" in "ds" umstellen lassen.
Natürlich gibt es auch unter XClass++ völlige Neuentwicklungen, die kein Pendant in Xbase++ haben - aber die setzen sich meist aus einzelnen Xbase++-Objekten zusammen, so dass Du dort deren Methoden nutzen kannst...

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Antworten