XbpBrowse [ERLEDIGT]
Moderator: Moderatoren
- Manfred
- Foren-Administrator
- Beiträge: 21225
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 70 Mal
XbpBrowse [ERLEDIGT]
Hi,
noch ein kleines Problem.
Ich stricke gerade Anwendungen von TBROWSE Objekten auf XbPBrowse um. Alles schön und gut, aaaaber.
Das Browse Objekt wird über eine Maskendatei erzeugt, in der die Feldnamen, die Überschriften und die Feldbreite steht. Das klappt auch alles recht gut. Jetzt kann es aber sein, dass der Zustand da ist, in dem weniger Felder in dem Browsefenster sind, als es breit ist. Die Breite der Spalten wird ja numerisch angegeben. Auch schön und gut. Wie finde ich aber heraus, wie breit das Fenster mindestens sein muß, innerhalb der zur Verfügung stehenden Breite, um es anzupassen? Ich meine, der breite Rand rechts, sieht ein wenig unschön aus. Die Spaltenbreite wird ja nicht in Pixel angegeben. Gibt es eine Möglichkeit das umzurechnen, oder wird das wieder eine komplizierte Angelegenheit?
noch ein kleines Problem.
Ich stricke gerade Anwendungen von TBROWSE Objekten auf XbPBrowse um. Alles schön und gut, aaaaber.
Das Browse Objekt wird über eine Maskendatei erzeugt, in der die Feldnamen, die Überschriften und die Feldbreite steht. Das klappt auch alles recht gut. Jetzt kann es aber sein, dass der Zustand da ist, in dem weniger Felder in dem Browsefenster sind, als es breit ist. Die Breite der Spalten wird ja numerisch angegeben. Auch schön und gut. Wie finde ich aber heraus, wie breit das Fenster mindestens sein muß, innerhalb der zur Verfügung stehenden Breite, um es anzupassen? Ich meine, der breite Rand rechts, sieht ein wenig unschön aus. Die Spaltenbreite wird ja nicht in Pixel angegeben. Gibt es eine Möglichkeit das umzurechnen, oder wird das wieder eine komplizierte Angelegenheit?
Zuletzt geändert von Manfred am Fr, 20. Aug 2010 11:37, insgesamt 1-mal geändert.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
- Armin
- Rekursionen-Architekt
- Beiträge: 394
- Registriert: Mo, 26. Sep 2005 12:09
- Wohnort: 75331 Engelsbrand
- Danksagung erhalten: 3 Mal
- Kontaktdaten:
Hallo Manfred,
das habe ich bis jetzt erfolglos probiert
aus meinem Code:
**** Breite aller Tabellenspalten berechnen
for i:= 1 to oBrowse:ColCount
aColSize:= oBrowse:getcolumn(i):dataarea:cellrect(1)
next
Jedoch wie schaffe ich jetzt das Dialogfenster auf die Breite des Browsers zu reduzieren?
Gruss, Armin
das habe ich bis jetzt erfolglos probiert
aus meinem Code:
**** Breite aller Tabellenspalten berechnen
for i:= 1 to oBrowse:ColCount
aColSize:= oBrowse:getcolumn(i):dataarea:cellrect(1)
next
Jedoch wie schaffe ich jetzt das Dialogfenster auf die Breite des Browsers zu reduzieren?
Gruss, Armin
- Manfred
- Foren-Administrator
- Beiträge: 21225
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 70 Mal
Hallo Armin,
jou goil, das wäre auch meine nächste Frage gewesen.
Ich könnte mir höchstens vorstellen, dass das Parentobjekt mit new gebildet wird, ohne Maße anzugeben und dann später die Maße über resize, oder so übergeben werden. Das muß ich aber auch mal ausprobieren.
jou goil, das wäre auch meine nächste Frage gewesen.
Ich könnte mir höchstens vorstellen, dass das Parentobjekt mit new gebildet wird, ohne Maße anzugeben und dann später die Maße über resize, oder so übergeben werden. Das muß ich aber auch mal ausprobieren.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
- Manfred
- Foren-Administrator
- Beiträge: 21225
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 70 Mal
Hi Armin,
GUI ist für mich noch recht gewöhnungsbedürftig.
Was bekomme ich denn durch aColSize zurückgeliefert, ich meine welche Werte sind das? Es ist ein Array, aber was sagen mir die Zahlen?
GUI ist für mich noch recht gewöhnungsbedürftig.
Was bekomme ich denn durch aColSize zurückgeliefert, ich meine welche Werte sind das? Es ist ein Array, aber was sagen mir die Zahlen?
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
- Manfred
- Foren-Administrator
- Beiträge: 21225
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 70 Mal
@Armin
Hi,
ich habe mal die Frage an den Support weitergereicht und folgende Antwort bekommen. Vielleicht kannst Du es ja mal ausprobieren? Du bist wohl fitter auf dem GUI Gebiet als ich.
------------------------------------------------------------------------------------
Hallo Manfred,
ich bin nicht 100% sicher, ob ich Dein Problem verstanden
habe, aber das einfachste ist sicherlich, von der Größe auszugehen,
die das XbpBrowse-Objekt von sich aus berechnet. Nach
dem Hinzufügen der Spalten ensteht normalerweise eine Anordnung,
die quasi den Minimalplatzbedarf für den Browser darstellt. Der
Platz, der rechts neben der letzten Spalte bis zum Rand des Fensters
übrig bleibt, ist damit der, der normalerweise als graue/unbenutzte
Fläche übrig bleiben würde, richtig? Dies ist damit die Lücke, die es
zu schließen gilt.
Ein möglicher Ansatz wäre, die rechte Spalte einfach entsprechend
zu vergrößern. Ausgehend vom Beispiel BASICS\GUIBROWSE\
DBBROWSE.EXE, ist damit folgender Versuch entstanden:
---
---
Passt diese Antwort irgendwie zu Deiner Frage ??
Schöne Grüße,
Till Warweg
Alaska Technical Support
Hi,
ich habe mal die Frage an den Support weitergereicht und folgende Antwort bekommen. Vielleicht kannst Du es ja mal ausprobieren? Du bist wohl fitter auf dem GUI Gebiet als ich.
------------------------------------------------------------------------------------
Hallo Manfred,
ich bin nicht 100% sicher, ob ich Dein Problem verstanden
habe, aber das einfachste ist sicherlich, von der Größe auszugehen,
die das XbpBrowse-Objekt von sich aus berechnet. Nach
dem Hinzufügen der Spalten ensteht normalerweise eine Anordnung,
die quasi den Minimalplatzbedarf für den Browser darstellt. Der
Platz, der rechts neben der letzten Spalte bis zum Rand des Fensters
übrig bleibt, ist damit der, der normalerweise als graue/unbenutzte
Fläche übrig bleiben würde, richtig? Dies ist damit die Lücke, die es
zu schließen gilt.
Ein möglicher Ansatz wäre, die rechte Spalte einfach entsprechend
zu vergrößern. Ausgehend vom Beispiel BASICS\GUIBROWSE\
DBBROWSE.EXE, ist damit folgender Versuch entstanden:
---
Code: Alles auswählen
CLASS MyBrowse FROM XbpBrowse
EXPORTED:
INLINE METHOD Setsize( aNew )
LOCAL nWidth := 0
LOCAL aSize
LOCAL oCol
FOR i:=1 TO ::ColCount
oCol := ::GetColumn( i )
aSize := oCol:CurrentSize()
nWidth += aSize[1]
NEXT
nWidth := aNew[1] - ::oVScroll:CurrentSize()[1] - nWidth
IF aSize[1] >= 0
aSize[1] += nWidth
oCol:SetSize( aSize )
ENDIF
::XbpBrowse:SetSize( aNew )
RETURN self
ENDCLASS
Passt diese Antwort irgendwie zu Deiner Frage ??
Schöne Grüße,
Till Warweg
Alaska Technical Support
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
- Armin
- Rekursionen-Architekt
- Beiträge: 394
- Registriert: Mo, 26. Sep 2005 12:09
- Wohnort: 75331 Engelsbrand
- Danksagung erhalten: 3 Mal
- Kontaktdaten:
Hallo Manfred,
aColSize:= oBrowse:getcolumn(1):dataarea:cellrect(1)
gibt die Koordinaten der 1.Browserzelle zurück - somit kannst Du die Breiten addieren
schau mal bei cellrect() im Handbuch
ja, die Alaska-Lösung - macht doch nur die letzte Spalte so breit, dass das graue nicht mehr zu sehen ist - da ist dem Kunde glaub der graue Bereich lieber, dann weiss er auch gleich, wie weit er das Fenster selbst kleiner ziehen kann. Wichtig ist Platz sparen! Es werden auch darunter Fenster angezeigt.
Das kann doch nicht wahr sein, dass es dafür keine Lösung gibt
Hat niemand eine Idee?
Liebe Grüsse, Armin
aColSize:= oBrowse:getcolumn(1):dataarea:cellrect(1)
gibt die Koordinaten der 1.Browserzelle zurück - somit kannst Du die Breiten addieren
schau mal bei cellrect() im Handbuch
ja, die Alaska-Lösung - macht doch nur die letzte Spalte so breit, dass das graue nicht mehr zu sehen ist - da ist dem Kunde glaub der graue Bereich lieber, dann weiss er auch gleich, wie weit er das Fenster selbst kleiner ziehen kann. Wichtig ist Platz sparen! Es werden auch darunter Fenster angezeigt.
Das kann doch nicht wahr sein, dass es dafür keine Lösung gibt
Hat niemand eine Idee?
Liebe Grüsse, Armin
- Manfred
- Foren-Administrator
- Beiträge: 21225
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 70 Mal
Hallo Armin,
danke für das Ausprobieren. Ich hatte bisher noch keine Zeit gehabt mich näher damit zu beschäftigen. Ich werde es Till schreiben, weil er ja schon selbst erwähnt hat, das er sich nicht sicher war, ob er mich richtig verstanden hat.
danke für das Ausprobieren. Ich hatte bisher noch keine Zeit gehabt mich näher damit zu beschäftigen. Ich werde es Till schreiben, weil er ja schon selbst erwähnt hat, das er sich nicht sicher war, ob er mich richtig verstanden hat.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
- Wolfgang Ciriack
- Der Entwickler von "Deep Thought"
- Beiträge: 2945
- Registriert: Sa, 24. Sep 2005 9:37
- Wohnort: Berlin
- Hat sich bedankt: 14 Mal
- Danksagung erhalten: 34 Mal
- Kontaktdaten:
- Manfred
- Foren-Administrator
- Beiträge: 21225
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 70 Mal
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9394
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 104 Mal
- Danksagung erhalten: 364 Mal
- Kontaktdaten:
Hier:
http://xbaseforum.de/posting.php?mode=smilies
Oder einfach links neben dem Nachrichteneditor auf "Weitere Smilies ansehen" klicken.
http://xbaseforum.de/posting.php?mode=smilies
Oder einfach links neben dem Nachrichteneditor auf "Weitere Smilies ansehen" klicken.
Herzlich,
Tom
Tom
- AUGE_OHR
- Marvin
- Beiträge: 12913
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
Re: XbpBrowse
also wenn es nur um "schön" geht, gibt es ein kleines "workaround"Manfred hat geschrieben: Ich meine, der breite Rand rechts, sieht ein wenig unschön aus.
um es "schön" zu machen (sprich grau raus ...)
oBrowse:= XbpBrowse():new()....
...
oBrowse:childList()[ 4 ]:type := XBPSTATIC_TYPE_TEXT
oBrowse:childList()[ 4 ]:configure()
oBrowse:childList()[ 4 ]:setColorBG( GRA_CLR_WHITE )
...
oBrowse:show()
das ganze ist von "J.A. Diego Kerejeta" aus der Alaska NG "public.xbase++.gui"
gruss by OHR
Jimmy
- Manfred
- Foren-Administrator
- Beiträge: 21225
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 70 Mal
@Armin,
kein Problem, das interessiert mich auch..
Was meinst Du mit FIT? Ich schätze mal das ging an Wolfgang?
@Jimmy,
ich werde mal sehen, was das bewirkt.
Aber es soll eigentlich so sein, dass ich es wie bei TBROWSE() machen kann. Ich ermittle die Gesamtspaltenbreiten und daraus errechne ich dann wie groß das anzuzeigende Fenster werden muß. Ist die Gesamtspaltenbreite geringer, als der Bereich, in dem das Fenster geöffnet werden soll, dann wird das Fenster kleiner. Ansonsten wird es halt so groß, wie die Gesamtfläche ist. Nur die rechte Spalte ausgrauen, oder dehnen, das finde ich nicht schick. Das ist aber der Vorschlag von Till gewesen.
kein Problem, das interessiert mich auch..
Was meinst Du mit FIT? Ich schätze mal das ging an Wolfgang?
@Jimmy,
ich werde mal sehen, was das bewirkt.
Aber es soll eigentlich so sein, dass ich es wie bei TBROWSE() machen kann. Ich ermittle die Gesamtspaltenbreiten und daraus errechne ich dann wie groß das anzuzeigende Fenster werden muß. Ist die Gesamtspaltenbreite geringer, als der Bereich, in dem das Fenster geöffnet werden soll, dann wird das Fenster kleiner. Ansonsten wird es halt so groß, wie die Gesamtfläche ist. Nur die rechte Spalte ausgrauen, oder dehnen, das finde ich nicht schick. Das ist aber der Vorschlag von Till gewesen.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
- Manfred
- Foren-Administrator
- Beiträge: 21225
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 70 Mal
@ Armin
hier die Antwort von Alaska. Ich verstehe zwar nicht warum die auf Englisch ist, aber egal. Der Weg ist das Ziel..
Hi,
Please try the code snipped below. This will calculate the width of all
columns and then adjusts the window accordingly. There is no exact
arithmetic because the window is resized but the browser is the child
of the windows drawing area. Furthermore we have to do some correction
because of the scrollbar. However, these numbers are constant depending
on the frame type and surely need some corrections on "XP style" desktops.
________________________ snip _____________________________________
// create browser in window
oBrowse := GuiBrowseDb( oDlg:drawingArea )
// create columns for all fields but exclude FoxPro specific data types
imax := FCount()
aStruct := DbStruct()
FOR i:=1 TO imax
IF .NOT. aStruct[i,2] $ "BOVTXY"
oBrowse:addColumn( FieldBlockTrimmed(aStruct[i,1], aStruct[i,2]), , aStruct[i,1] )
ENDIF
NEXT
// additional code is from here
nWidth := 0
FOR i := 1 TO oBrowse:colCount
oCol := oBrowse:getColumn( i )
aSize := oCol:currentSize()
nWidth += aSize[1]
NEXT
// magic number 25 is the width of the scroll bar.
nWidth += 25
oDlg:setSize( { nWidth, oDlg:currentSize()[2] } )
// up to here
______________________ snap ________________________________________
Be aware of the fact that the professional subscription comes with the browsers
source code. So you might calculate the width more exact since then you now
the difference between drawingarea and dialog and you might figure out the size
of the scrollbar.
Does this mail answer the question?
With best regards,
Andreas Herdt
Alaska Technical Support
hier die Antwort von Alaska. Ich verstehe zwar nicht warum die auf Englisch ist, aber egal. Der Weg ist das Ziel..
Hi,
Please try the code snipped below. This will calculate the width of all
columns and then adjusts the window accordingly. There is no exact
arithmetic because the window is resized but the browser is the child
of the windows drawing area. Furthermore we have to do some correction
because of the scrollbar. However, these numbers are constant depending
on the frame type and surely need some corrections on "XP style" desktops.
________________________ snip _____________________________________
// create browser in window
oBrowse := GuiBrowseDb( oDlg:drawingArea )
// create columns for all fields but exclude FoxPro specific data types
imax := FCount()
aStruct := DbStruct()
FOR i:=1 TO imax
IF .NOT. aStruct[i,2] $ "BOVTXY"
oBrowse:addColumn( FieldBlockTrimmed(aStruct[i,1], aStruct[i,2]), , aStruct[i,1] )
ENDIF
NEXT
// additional code is from here
nWidth := 0
FOR i := 1 TO oBrowse:colCount
oCol := oBrowse:getColumn( i )
aSize := oCol:currentSize()
nWidth += aSize[1]
NEXT
// magic number 25 is the width of the scroll bar.
nWidth += 25
oDlg:setSize( { nWidth, oDlg:currentSize()[2] } )
// up to here
______________________ snap ________________________________________
Be aware of the fact that the professional subscription comes with the browsers
source code. So you might calculate the width more exact since then you now
the difference between drawingarea and dialog and you might figure out the size
of the scrollbar.
Does this mail answer the question?
With best regards,
Andreas Herdt
Alaska Technical Support
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!