XbpBrowse [ERLEDIGT]

Alle Fragen um die Programmierung, die sich sonst nicht kategorisieren lassen. Von Makro bis Codeblock, von IF bis ENDIF

Moderator: Moderatoren

Antworten
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21186
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

XbpBrowse [ERLEDIGT]

Beitrag von Manfred »

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?
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!!
Benutzeravatar
Armin
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 393
Registriert: Mo, 26. Sep 2005 12:09
Wohnort: 75331 Engelsbrand
Danksagung erhalten: 3 Mal
Kontaktdaten:

Beitrag von Armin »

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
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21186
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Beitrag von Manfred »

Hallo Armin,

jou goil, das wäre auch meine nächste Frage gewesen. :lol:

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!!
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21186
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Beitrag von Manfred »

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?
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!!
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21186
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Beitrag von Manfred »

@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:

---

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!!
Benutzeravatar
Armin
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 393
Registriert: Mo, 26. Sep 2005 12:09
Wohnort: 75331 Engelsbrand
Danksagung erhalten: 3 Mal
Kontaktdaten:

Beitrag von Armin »

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 - :roll: 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 :o

Hat niemand eine Idee?

Liebe Grüsse, Armin
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21186
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Beitrag von Manfred »

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

Beitrag von Wolfgang Ciriack »

Was bin ich froh, das ich eXPress++ nutze, da reicht die Option FIT , um das zu erreichen. :D
Viele Grüße
Wolfgang
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21186
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Beitrag von Manfred »

:wav:
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!!
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 Manfred,

wo hast du denn die Tanzgruppe her :D
Gruß
Hubert
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9357
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 101 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Beitrag von Tom »

Hier:

http://xbaseforum.de/posting.php?mode=smilies

Oder einfach links neben dem Nachrichteneditor auf "Weitere Smilies ansehen" klicken. :toothy7:
Herzlich,
Tom
Benutzeravatar
Armin
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 393
Registriert: Mo, 26. Sep 2005 12:09
Wohnort: 75331 Engelsbrand
Danksagung erhalten: 3 Mal
Kontaktdaten:

Beitrag von Armin »

Hallo Manfred,

das freut mich, dass du dich darum kümmerst. Ich hatte es schon aufgegeben. Sieht halt unschön aus - müsste nicht sein.
Gibt´s hinter dem FIT auch was zu Abspicken? Oder sollte das eher so ein Kaufanreiz sein?

Besten Gruss, Armin
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

Beitrag von AUGE_OHR »

Manfred hat geschrieben: Ich meine, der breite Rand rechts, sieht ein wenig unschön aus.
also wenn es nur um "schön" geht, gibt es ein kleines "workaround"
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
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21186
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Beitrag von Manfred »

@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.
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!!
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21186
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Beitrag von Manfred »

@ 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
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!!
Antworten