xbpstatic Formatieren

Grafische Primitive, XbaseParts und Darstellungsfragen allgemein.

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

xbpstatic Formatieren

Beitrag von Manfred »

Hi,

ja, mich gibt es auch noch. Hatte mich in letzter Zeit etwas mehr in Linux und Sambaserver vertieft.

Ich weiß eigentlich nicht, wonach ich suchen soll, deshalb

kommen wir zu meiner Frage:

Code: Alles auswählen

 oDialog  := XbpDialog():new(oAppWindow,,{200,20},{oSysPara:aWSize[1]-400,160})
       oStatic1 := XBPSTATIC():NEW(oDialog,,{10,110},{300,20})
       oStatic2 := XBPSTATIC():NEW(oDialog,,{10,90},{300,20})
       oStatic3 := XBPSTATIC():NEW(oDialog,,{10,70},{300,20})
       oStatic4 := XBPSTATIC():NEW(oDialog,,{10,50},{300,20})
       oStatic5 := XBPSTATIC():NEW(oDialog,,{10,30},{300,20})
       oStatic6 := XBPSTATIC():NEW(oDialog,,{10,10},{300,20})
       oStatic7 := XBPSTATIC():NEW(oDialog,,{140,10},{100,20})

       oDialog:title := "INDEX-Aufbau der " + UPPER(::cDbank) + "-Datenbank."
       oDialog:create()
       oStatic1:caption  := "Diese Arbeit kann mehrere Minuten dauern."
       oStatic1:setColorBG(GRA_CLR_PALEGRAY)
       oStatic1:create()
       oStatic2:caption  := "Der Neuaufbau darf auf KEINEN Fall während"
       oStatic2:setColorBG(GRA_CLR_PALEGRAY)
       oStatic2:create()
       oStatic3:caption  := "des Vorganges abgebrochen werden,"
       oStatic3:setColorBG(GRA_CLR_PALEGRAY)
       oStatic3:create()
       oStatic4:caption  := "da sonst Datenverlust besteht!!!"
       oStatic4:setColorBG(GRA_CLR_PALEGRAY)
       oStatic4:create()
       oStatic5:caption  := "Menge der Datensätze:" + STR((ALIAS())->(LASTREC()))
       oStatic5:setColorBG(GRA_CLR_PALEGRAY)
       oStatic5:create()
       oStatic6:caption  := "In Verarbeitung     :"
       oStatic6:setColorBG(GRA_CLR_PALEGRAY)
       oStatic6:create()
       oStatic7:setColorBG(GRA_CLR_PALEGRAY)
       oStatic7:create()
       FOR nI := 1 TO LEN(::aIndex)
           oStatic7:SetCaption(::aIndex[nI,1])
           cTagName   := ::aIndex[nI,1]
           cIndexKey  := ::aIndex[nI,2]
           OrdCreate(::cpfad + ::cDbank,cTagName,cIndexKey,,::lUnique)          
       NEXT
       oDialog:destroy()
Wie bekomme ich es hin, dass die Anzeige

Menge der Datensätze
In Verarbeitung

untereinander formatiert angezeigt wird, sprich das die Zahlen genau passend stehen? Jetzt ist es so, das trotz der scheinbaren Formtierung (Doppelpunkte untereinander) wohl durch die Leerzeichen alles verschoben wird nach links. Geht das überhaupt so, oder wie wird das gelöst?

hach, der Umstieg von Text auf GUI.....
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
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16507
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

Hallo Manfred,
Du mußt Deine beiden Statics (oStatic5 und oStatic6) rechtsbündig (am Doppelpunkt) ausrichten.
Anschließend mußt Du den oStatic5a (mußt Du erst noch erzeugen: Dein STR((ALIAS())->(LASTREC())) muß in einen eigenen Static) und den oStatic7 ebenfalls rechtsbündig zueinander ausrichten.
Schau Dir mal die Presentation-Space-Parameter an (z.B. XBPSTATIC_TEXT_RIGHT)

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
Lewi
1000 working lines a day
1000 working lines a day
Beiträge: 830
Registriert: Di, 07. Feb 2006 14:10
Wohnort: Hamburg
Danksagung erhalten: 2 Mal

Beitrag von Lewi »

Linksbündig ausrichten geht auch, indem Du eine nicht-proportinale Schriftart den Static-Objeketen zuordnest. Dann sind die die Zeichen und die Abstände zwischen den Zeichen gleich. Die Anzeigestrings sind dann entsprechend zu formatieren.
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 Martin,

hm, ich verstehe im Moment mal wieder nur Bahnhof.

OK, fange ich mal anders an:

Im Textmodus kann ich direkt hinter einer Ausgabe am Bildschirm, oder am Drucker, die nächste Ausgabe anfügen:

@ row(), col() Say "Hallo"
@ row(), col()+ 7 SAY "Leute"

geht das auch irgendwie unter der GUI?

Ich meine ich kann ja nicht immer wissen, wo gerade die vorherige Anzeige geendet hat, zumal wenn sie noch variable wäre.
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
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16507
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

Hallo Manfred,
jein! Um unter GUI zu ermitteln, wie breit ein String ist, hilft (bzw. geht nur) folgendes (wobei die wichtigen Zeilen rot dargestellt sind):

Code: Alles auswählen

text1 += "    Wurfdatum: " + left( cDat, 2 ) + dattrenner + substr( cDat, 3, 2 ) + dattrenner + right( cDat, 4 )
GraStringAt( oPS, { 100, nY }, text1 )
[color=red]aTextBox    := GraQueryTextBox( oPS, text1 )
nFontWidth  := aTextBox[ 3, 1 ] - aTextBox[ 2, 1 ]
[/color]nY -= 4
GraLine( oPS, {100, nY}, {100 + nFontWidth, nY} )
Der obige Schnippsel stammt aus einer Druckroutine.
Mit GraQueryTextBox wird ermittelt, von wo bis wo der String "läuft" - in der nächsten Zeile wird die Breite ermittelt, indem ich End- und Startpunkt subtrahiere. Damit habe ich die Länge und weiß, wie lang der Strich unter dem Text gezogen werden muß.
Wenn ich Dich richtig verstanden habe, soll Deine Ausgabe ja in etwa so aussehen:

Code: Alles auswählen

Menge der Datensätze:      1746
In Verarbeitung     :         8
Das könntest Du halt erreichen, indem Du Deine Statics anders auf dem Bildschirm ausgibst. In dem oberen Beispiel wären es dann nicht drei, sondern vier Statics! Eines enthält den Text "Menge...", eines den Text "In...", eines die 1746 und eines die 8. Alle vier wären rechtsbündig ausgerichtet.
Also in Deinem Beispiel:

Code: Alles auswählen

oStatic5 := XBPSTATIC():NEW(oDialog,,{10,30},{130,20})
[color=red]oStatic5a := XBPSTATIC():NEW(oDialog,,{140,30},{100,20}) // ist neu!!
[/color]oStatic6 := XBPSTATIC():NEW(oDialog,,{10,10},{130,20})
oStatic7 := XBPSTATIC():NEW(oDialog,,{140,10},{100,20})
....
oStatic5:caption  := "Menge der Datensätze:"
oStatic5:setColorBG(GRA_CLR_PALEGRAY)
oStatic5:options := XBPSTATIC_TEXT_RIGHT+XBPSTATIC_TEXT_VCENTER
oStatic5:create()
[color=red]oStatic5a:caption  := alltrim(STR((ALIAS())->(LASTREC())))
oStatic5a:setColorBG(GRA_CLR_PALEGRAY)
oStatic5a:options := XBPSTATIC_TEXT_RIGHT+XBPSTATIC_TEXT_VCENTER
oStatic5a:create()[/color]
oStatic6:caption  := "In Verarbeitung:"
oStatic6:setColorBG(GRA_CLR_PALEGRAY)
oStatic6:options := XBPSTATIC_TEXT_RIGHT+XBPSTATIC_TEXT_VCENTER
oStatic6:create()
oStatic7:setColorBG(GRA_CLR_PALEGRAY)
oStatic7:options := XBPSTATIC_TEXT_RIGHT+XBPSTATIC_TEXT_VCENTER
oStatic7:create()
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
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 Martin

ich werde es mal so ausprobieren.

Genau die Formatierung möchte ich haben, wie von Dir gezeigt.

Bis jetzt ist es so, das der Zähler (wenn er aktiv ist) für den index fröhlich innerhalb der 6stelligen Zahl hin und herhopst.

Danke erstmal, jetzt habe ich wieder was zu tun ;-)
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: 15694
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Beitrag von brandelh »

Hallo Manfred,

> @ row(), col() Say "Hallo"
> @ row(), col()+ 7 SAY "Leute"
> geht das auch irgendwie unter der GUI?

laut Handbuch geht das bei GraStringAt() auch:

hier ein Auszug:

Wird <aPoint> nicht angegeben, wird die Zeichenkette an der aktuellen Pen-Position gezeichnet.

Die aktuelle PEN-Position müsste das Ende der letzten Ausgabe sein (also eventuell ein Blank davor setzten. Dies könnte man für Fett gedruckte Wörter nutzen. Ich habe es zwar - soweit ich mich erinnern kann - nie genutzt, aber es müßte funktionieren. Natürlich kann man es auch genau ausrechnen mit der erwähnten Funktion GraQueryTextBox(), hier muß man aber beachten, dass ein Font unten schmäler sein kann als oben (Kursiv etc.). In meiner Druckerklasse HBPrinterX in der Methode PrintMemo() / PrintText() habe ich diese Berechnungsmethode benutzt um die Ausrichtung (Blocksatz) oder unterstreichen oder umranden auszugeben. Links und Rechtsbündig sind schon im Style verfügbar. Auf meiner Homepage oder bei Alaskas ACSN ist der Quellcode verfügbar.

Wenn du den mehrzeiligen Text linksbündig ausgeben willst, kannst du auch einfach ein größeres Static mit dem Stile WordBreak (oder so ähnlich) verwenden.
Gruß
Hubert
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16507
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

Hallo Hubert,
brandelh hat geschrieben:laut Handbuch geht das bei GraStringAt() auch:

hier ein Auszug:

Wird <aPoint> nicht angegeben, wird die Zeichenkette an der aktuellen Pen-Position gezeichnet.
genau das habe ich extra nicht gesagt, da es damit (zumindest bei mir) immer wieder Probleme gab! Ich habe die XbpPreview-Klasse (das von Alaska mitgelieferte Druckvorschaubeispiel) ein wenig aufgebohrt. Dort hat das mit der Penposition nie funktioniert, wenn die Ausgabe in der Vorschauanzeige auf dem Bildschirm angezeigt wurde, sondern nur beim Drucken auf dem Papier. Keine Ahnung, warum - aber mit der von mir genannten Methode gab es nie Probleme!
brandelh hat geschrieben:Wenn du den mehrzeiligen Text linksbündig ausgeben willst, kannst du auch einfach ein größeres Static mit dem Stile WordBreak (oder so ähnlich) verwenden.
Nur zur Ergänzung - das gilt natürlich auch bei zentriert oder rechtsbündig.

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
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15694
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Beitrag von brandelh »

>> Wenn du den mehrzeiligen Text linksbündig ausgeben willst,
>> kannst du auch einfach ein größeres Static mit dem Stile
>> WordBreak (oder so ähnlich) verwenden.

> Nur zur Ergänzung - das gilt natürlich auch bei zentriert oder
> rechtsbündig.

Das war mir neu, ich dachte wordbread ignoriert die anderen Ausrichtungen. Eventuell war es ja auch nur früher so - die SLEs kann man ja heute auch rechtsbündig bekommen ;-)

Danke für den Hinweis.

*** Ergänzung ***

Ich habe es gerade angesehen. Im XppFD gibt es keine Auswahl dafür, vielleicht daher meine Irritation. Ansonsten left, center und right funktionieren wie bereits ausgeführt, einfach addieren.

Ignoriert wird VCENTER bei wordbreak, also beginnt der Text immer am oberen Rand.

Somit könnte man das Beispiel auch dahingehend abwandeln,
dass man 2 mehrzeilige FT mit gleicher Höhe macht, die Ausrichtung anpasst und die Strings jeweils mit chr(13) fest umbrechen läßt.
Wichtig ist dabei aber immer, dass keine überflüssigen Blanks im Text sind, zumindest nicht auf der Seite auf die ausgerichtet wird (nur links oder rechts).
Zuletzt geändert von brandelh am Di, 14. Mär 2006 9:06, insgesamt 1-mal geändert.
Gruß
Hubert
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16507
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

Hallo Hubert,
vielleicht war das auch ein Schnellschuß von mir, sorry!
Ich muß gestehen, ich habe es nicht probiert - aber es war für mich eine Selbstverständlichkeit, dass es auch anders geht!
Ich probiere es gleich mal aus...

... so - habe es probiert und es geht! :)

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
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 Hubert, Hi Martin,

öhm, was geht jetzt genau und was geht jetzt nicht?
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
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16507
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

Hallo Manfred,
ich bezog mich nur auf Huberts Zweifel an dem Attribut XBPSTATIC_TEXT_WORDBREAK in Verbindung mit den Attributen XBPSTATIC_TEXT_RIGHT bzw. XBPSTATIC_TEXT_CENTER.

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