Text formatieren wie Tabelle

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

Gina

Betreff: Text formatieren wie Tabelle

BeitragSo, Aug 01, 2004 20:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Huhu...

gibt es eine möglichkeit Text so zu formatieren, dass er wie eine Tabelle untereinander steht und dabei eine Spalte rechtsbündig und eine linksbündig ist, ohne selbst die Positionen fest anzugeben?

Also dass man ihn flexibel nach der Auflösung platzieren kann?

Habe in der Onlinehilfe leider nix dazu gefunden.Sad

Vielen Dank, Gina.
 

Dreamora

BeitragSo, Aug 01, 2004 21:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Von Blitz selbst her nicht, allerdings ist es nicht allzuschwer, eine solche funktion selbst zu schreiben mittels der positionsangabe und textlänge
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Gina

BeitragSo, Aug 01, 2004 21:55
Antworten mit Zitat
Benutzer-Profile anzeigen
hmm, schade. Dann muss ich wohl selber tüfteln... Smile

Kann es sein, dass BlitzBasic doppelte Leerzeichen ignoriert?

Gina.

Markus2

BeitragSo, Aug 01, 2004 21:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Was Dreamora damit sagen will ist das du einmal eine Spalte durch
gehst und die maximal breite ermittelst .

Also der erste Durchlauf zeigt nix an und rechnet nur aus
und der zweite Durchlauf zeigt den Text an der richtigen Stelle .
Und das machst du dann für jeweils eine Spalte und addierst
zu jeder den X Offset der letzen gesamt breite .

Space Zeichen sind meist schmaler als andere Zeichen Wink

Gina

BeitragSo, Aug 01, 2004 22:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Na das ist doch schonmal ein guter Tipp..Wink Dann lass ich ihn mal losrennen... *gg*

Aso, die scheinen aber extrem schmal zu sein... Shocked

Vielen Dank, Gina.
 

OJay

BeitragSo, Aug 01, 2004 22:16
Antworten mit Zitat
Benutzer-Profile anzeigen
wenn du blitz3d hast, kannst du dir folgendes mal anschauen: Systemlaufwerke ermitteln

hat zwar erstmal nichts mit der textausrichtung zu tun, aber die ausgabe der informationen erfolgt in tabellenform! ich hoffe du weist, was du mit den userlib-infos machen musst?


speziell diese zeilen dürften interessant sein:
Code: [AUSKLAPPEN]
For vol=Each volumeinfo
   r$=vol\driveletter$+"     "+Left$(vol\drivename$+String$(" ",19),19)
   r$=r$+" "+Left$(vol\drivetype$+String$(" ",12),12)
   r$=r$+" "+Right$(String$(" ",10)+Str$(vol\serial),11)+"   "
   r$=r$+Right$("      "+Str$(vol\flags),6)+"   "+vol\filesystem
   Print r$
Next


wie du siehst, wird der auszugebende spaltenwert je nach ausrichtung zunächst entweder von links oder rechts mit leerzeichen überfüllt, und dann wird einfach ein string ausgeschnitten, der der breite der spalte entspricht.

viel spass Smile


PS:
666 posts Twisted Evil

Gina

BeitragSo, Aug 01, 2004 22:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Uii, vielen Dank... userlibs ist klar... Wink

Und gratzi zur 666... Smile

Gina.
 

Dreamora

BeitragSo, Aug 01, 2004 23:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Nein das meinte ich definitiv net.

Es gibt einen Befehl Namens "StringWidth"

Mit diesem kann man herausfinden, wieviel Platz ein String braucht.
Dadurch kann man einen String problemlos pixelperfekt ausrichten!

Code: [AUSKLAPPEN]

Function PrintText( text1$, x, y, align )
   select align
       case 1 ; left
          text text1, x, y
       case 2 ; right
          text text1, x - StringWidth( text1 ), y
       case 3 ; middle
          text text1, x - StringWidth( text1 )/2, y
    end select
end function


( sorry falls es net ganz gehen sollte, ist nur ne 2min hackerei )
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

OJay

BeitragMo, Aug 02, 2004 0:28
Antworten mit Zitat
Benutzer-Profile anzeigen
dreamora, du hast nicht im ansatz verstanden um was es hier geht...bitte lass deine unqualifizierten aussagen in zukunft. das nervt nämlich langsam.
 

Dreamora

BeitragMo, Aug 02, 2004 1:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Es geht darum es wie ne Tabelle auszugeben und dazu brauchst du ne eigeneTextausgabe wenn du nen Align drin haben willst, wie es im Startposting gewünscht wurde ( inkl dem flexibel je nach auflösung )
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Markus2

BeitragMo, Aug 02, 2004 12:19
Antworten mit Zitat
Benutzer-Profile anzeigen
@OJay

Em , muß ich Dreamora mal in Schutz nehmen weil sein
Beispiel besser ist als deins Wink

Gina

BeitragMo, Aug 02, 2004 13:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Gugu, also ich fand beide Beispiele sehr nützlich... Wink

Zusammen ergeben sie ein super Tabellen-Programm:

Code: [AUSKLAPPEN]
GRAPHICS 640,480,16,2
SETBUFFER backbuffer()
Global MaxX = 640
Global MaxY = 480
Font = LoadFont ("Arial",24,1,0,0)
SetFont Font

;------------------------------------------------------------------------------
; TopTen-Felder definieren
;------------------------------------------------------------------------------

Dim TopPunkte(10), TopName$(10)

;------------------------------------------------------------------------------
; TopTen schreiben
;------------------------------------------------------------------------------

datei = WriteFile("score.dat")
for i = 1 to 10
  WriteInt datei, i*10
  WriteString datei, "Champ"+i+i*150 ;+i+i*50 ist nur, um die Länge des Namens zu verändern ;)
Next
CloseFile datei

;------------------------------------------------------------------------------
; TopTen laden
;------------------------------------------------------------------------------

datei = ReadFile("score.dat")
For i = 1 To 10
  TopPunkte(i) = ReadInt(datei)
  TopName$(i) = Readstring(datei)
Next
CloseFile datei

;------------------------------------------------------------------------------
; alle nötigen Textbreiten ermitteln
;------------------------------------------------------------------------------

For i = 1 to 10
    Max1 = textbreite(Toppunkte(i),max1,"")   ; Breite von Punkte
    max2 = textbreite(Topname$(i),max2,"##")  ; Breite von Name
    max3 = textbreite(i,max3,"#")             ; Breite von Platznummer
next

max4 = textbreite("Platz",max4,"##")          ; Breite von "Platz"
max5 = textbreite("Score :",max5,"##")        ; Breite von "Score :"
max6 = textbreite(max2,max6,"")               ; Breite von max2
max7 = textbreite(max3+max4,max7,"#")         ; Breite von max3+max4

maxG = max6+max7+max4+max3+max2+max5+max1     ; Gesamtbreite der Tabelle

; Die Spalten werden in dieser Reihenfolge ausgegeben...

;------------------------------------------------------------------------------
; Tabelle ausgeben
;------------------------------------------------------------------------------

While Not Keyhit(1)
Cls

  x=(maxX-MaxG)/2   ; Startposition x
  y=MaxY/4          ; Startposition y
  p=0               ; Zeilenabstand

  Text x, y/2, "Gesamtbreite: "+(MaxG), 0, 1
  For i = 1 to 10
 
      Printtext(max2, x+max6, y+p, 2, 1)                            ; Max-Breite von Name
      Printtext(max3+max4, x+max6+max7, y+p, 2, 1)                  ; Max-Breite von "Platz" + Platznummer
      Printtext("Platz", x+max6+max7+max4, y+p, 2, 1)               ; "Platz"
      Printtext(i+":", x+max6+max7+max4+max3, y+p, 2, 1)            ; Platznummer
      Printtext("  "+TopName$(i), x+max6+max7+max4+max3, y+p, 1, 1) ; Name
      Printtext("Score :", x+max6+max7+max4+max3+max2, y+p, 1, 1)   ; "Score"
      Printtext(TopPunkte(i), x+maxG, y+p, 2, 1)                    ; Punkte

      p= p + 30
     
  next

flip 0
wend
end

;------------------------------------------------------------------------------
; Funktion Printtext
;------------------------------------------------------------------------------
; Parameter align: 1, 2 oder 3 angeben
; Parameter mittig: 1 = vertikal mittig, 0 = normal
;------------------------------------------------------------------------------

Function PrintText( text1$, x, y, align, mittig)
   select align
       case 1 ; linksbündig
          text x, y, text1, 0, mittig
       case 2 ; rechtsbündig
          text x - StringWidth( text1 ), y, text1, 0, mittig
       case 3 ; zentriert
          text x - StringWidth( text1 )/2, y, text1, 0, mittig
    end select
end function

;------------------------------------------------------------------------------
; Funktion Textbreite
;------------------------------------------------------------------------------
; Parameter max   : zur Ermittlung der maximalen Breite
; Parameter leer$ : gewünschter Leerraum zwischen den Spalten
;------------------------------------------------------------------------------

function textbreite(Text1$,max, leer$)

If Stringwidth(Text1$)+Stringwidth(leer$)  > Max then
   max = Stringwidth(Text1$)+Stringwidth(leer$)
End if

Return Max

End function


Sorry für das Durcheinander der max'es... Embarassed ich hoffe, ihr seht durch...Wink

Die Tabelle wird horizontal zentriert ausgegeben. (vertikal hab ich jetzt nicht drin...) Ihr könnt ja mit der Schriftgrösse etwas experimentieren...

Vielen Dank nochmal an alle Wink , für die Hilfe..., Gina.
 

Dreamora

BeitragMo, Aug 02, 2004 15:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn du vertikal auch brauchst, kannst du mittels StringHeight übrigens auch die Höhe des Strings herausbekommen und die Funktion entsprechend erweitern
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Gina

BeitragMo, Aug 02, 2004 17:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Jup, hab ich probiert... Allerdings scheinen die Werte dann nicht ganz zu stimmen. Laut Onlinehilfe wird StringHeight ja auch entfernt. Habe dafür Fontheight genommen. Das klappt ganz wunderbar. Nur wenn man damit rechnen will, muss man sie erst in einer Variablen speichern...

Ist schon merkwürdig: FontWidth und StrinHeight werden entfernt und StringWidth und Fontheight bleiben. Kann er sich nicht entscheiden?

Gina.

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group