Text formatieren wie Tabelle
Übersicht

![]() |
GinaBetreff: Text formatieren wie Tabelle |
![]() Antworten mit Zitat ![]() |
---|---|---|
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. ![]() Vielen Dank, Gina. |
||
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
hmm, schade. Dann muss ich wohl selber tüfteln... ![]() Kann es sein, dass BlitzBasic doppelte Leerzeichen ignoriert? Gina. |
||
![]() |
Markus2 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 ![]() |
||
![]() |
Gina |
![]() Antworten mit Zitat ![]() |
---|---|---|
Na das ist doch schonmal ein guter Tipp..![]() Aso, die scheinen aber extrem schmal zu sein... ![]() Vielen Dank, Gina. |
||
OJay |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 ![]() PS: 666 posts ![]() |
||
![]() |
Gina |
![]() Antworten mit Zitat ![]() |
---|---|---|
Uii, vielen Dank... userlibs ist klar... ![]() Und gratzi zur 666... ![]() Gina. |
||
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
@OJay
Em , muß ich Dreamora mal in Schutz nehmen weil sein Beispiel besser ist als deins ![]() |
||
![]() |
Gina |
![]() Antworten mit Zitat ![]() |
---|---|---|
Gugu, also ich fand beide Beispiele sehr nützlich... ![]() 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... ![]() ![]() 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 ![]() |
||
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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. |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group