Text mittels Funktion an best Position anzeigen

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

Hagbard

Betreff: Text mittels Funktion an best Position anzeigen

BeitragDo, Aug 17, 2006 20:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Leider komme ich nicht weiter bei meiner Funktion...

Ich übergebe einen Text an die Funktion und da an das Feld t_inhalt2$(I, t_id).
(I ist die Kennzeichnung der Zeile und t_id die Kenzeichnung der Seite)
Ist der Text zu lang für eine Zeile, so wird er abgeschitten und weitergeschoben in die nächste Zeile (usw.)

Jetzt möchte ich jede Zeile zählen, in der ein Text steht, um bei einem weiterem Aufruf den neuen Text von da an dranzufügen...

Mein Ansatz ist folgender...
Allerdings wäre ich nicht nur für Code Verbesserungen dankbar, sondern auch für Ansätze generell.


Code: [AUSKLAPPEN]

AppTitle "Mathe, 10. Klasse"
Graphics 800, 600, 16, 2

SetBuffer BackBuffer()


; Variablen und Felder
Global t_anzahl2

; Text
Dim t_width(25)
Dim t_anzahl(25)
Dim t_inhalt3(26, 15)
Dim t_inhalt2$(50, 15)
Dim t_um(25)
Dim t_Y(25)

Global t_X


; Laden
Global con_1 = LoadFont("Verdana", 20, 1)
Global con_2 = LoadFont("Verdana", 17, 1)
Global con_3 = LoadFont("verdana", 15, 0)


; #####  Hauptschleife
Repeat
Cls




Create_Text(1, 1, "CREDITS", "Verbreitung", "Dieses Programm darf kostenlos verbreitet werden. Eine komerzielle Nutzung ohne Genehmigung des Autors, sowie die Verlinkung, Bewerbung oder Präsentation auf Dialer Sites ist nicht gestattet. Und irgendwie sollte das jetzt langsam mal funktionieren! Ich bin dumm!")
Create_Text(1, 2, "CREDITS", "Kontakt", "http://www.teeecke.de.hm -teeesoft info@aol.com")
;Create_Text(1, 3, "CREDITS", "usw. test", "just a slob like one of us")


For I = 1 To 25
  Text 020, 10 + 20*I, t_inhalt3(I, 1)
  Text 100, 10 + 20*I, t_anzahl(I)
Next




Flip
Until KeyHit(1)
End




Function Create_Text(t_id, t_id2, t_head$, t_head2$, t_inhalt$)
 

  ; Haupt
  SetFont con_1
  Color 0, 0, 0
  Text 291 + 240, 154 + 20, t_head, 1, 1

  For I = 1 To 25

    t_width(I) = 66

    t_inhalt2(I, t_id) = Mid$(t_inhalt$, (I-1)*t_width(I) + 1,  t_width(I))

    ; Bei "-" abbrechen und in nächster Zeile weiterführen
    ;t_um(I) = Instr(t_inhalt2(I-1), "-", 1)
    ;If t_um(I) > 0 Then
    ;  t_inhalt2(I, t_id) = Mid$(t_inhalt2(I-1), t_um(I)+1) + t_inhalt2(I, t_id)
    ;  t_inhalt2(I-1) = LSet(t_inhalt2(I-1), t_um(I)-1)
    ;EndIf

   ; Leerzeichen am Anfang entfernen
    ;If Mid$(t_inhalt2(I, t_id), 1, 1) = " " Then t_inhalt2(I, t_id) = Trim(t_inhalt2(I, t_id))

    ; Kennzeichnung
    If Len(t_inhalt2(I, t_id)) > 0 Then t_inhalt3(I, t_id) = 1
    t_X = 305
    t_anzahl2 = t_inhalt3(1, t_id) + t_inhalt3(2, t_id) + t_inhalt3(3, t_id) + t_inhalt3(4, t_id) + t_inhalt3(5, t_id) + t_inhalt3(6, t_id) + t_inhalt3(7, t_id) + t_inhalt3(8, t_id) + t_inhalt3(9, t_id) + t_inhalt3(10, t_id) + t_inhalt3(11, t_id)
    t_anzahl(t_id2+1) = t_anzahl(t_id2) + t_anzahl2
    t_Y(t_id2) = 209 + t_anzahl(t_id2)*20 + (-1 + t_id2)*40

  ; Content
    SetFont con_2
    Color 0, 0, 0
    Text t_X, t_Y(t_id2) + ((I-(I)) * 20), t_head2

  ; 2. Haupt
    SetFont con_3
    Color 0, 0, 0
    Text t_X, t_Y(t_id2) + ((I-1) * 20), t_inhalt2(I-1, t_id)


  Next

End Function
  • Zuletzt bearbeitet von Hagbard am Sa, Apr 17, 2010 20:55, insgesamt einmal bearbeitet

Smokie

BeitragDo, Aug 17, 2006 20:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Also ich hab mir deinen code nicht angeschaut aber ein Lösung für das was du machen willst wäre ein Dim feld

Dim zeile$(number_of_rows)

Dann kannst du in jede line deinen String eintragen und wenn alles voll ist lässt du alles "runterrutschen" das heißt, du löschst den letzten Eintrag. UNd machst, dass der vorletzte zum letzten wird und so weiter. Und der erste ist dann der neue.
Code: [AUSKLAPPEN]


for i= 0 to number_of_rows Step -1 ;Rückwärts zählen

      zeile$(i)=zeile$(i-1)

next

zeile$(0) = new_string$.

;Text zeichen
for i= 0 to number_of_rows

text 0,i*font_height + 2,zeile$(i)

next



Bei dem Beispil geh ich von einer Seite aus. Bei mehreren Seite fügst du ein Dimension ein und musst die Zeilen net "runterrutschen lassen", sonder einfach nur die Seite änder.

Hoffe, dass hilftt dir

Grüße
M-Soft Studios Mit selbst gemachtem Forum!!!
Unbequem lebt's sich schwer.
Musik macht erst Spaß, wenn man sie mit 2,8 facher Geschwindigkeit hört
Zuletzt bearbeitet von Smokie am Fr Jan 01, 1888 51:58 PM, insgesamt 1000-mal bearbeitet

Hubsi

BeitragFr, Aug 18, 2006 10:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Smokie hat Folgendes geschrieben:
Also ich hab mir deinen code nicht angeschaut aber ein Lösung für das was du machen willst wäre ein Dim feld

Merkt man Mr. Green

Das Problem ist das Du in der Function Create_Text() ein paar Color drin hast welche als Farbe schwarz setzen. Schwarze Schrift auf schwarzem Hintergrund hat aber einen wahnsinnig schlechten Kontrast Very Happy Du kannst also entweder eine andere Hintergrundfarbe verwenden (in Deinem Fall wär ql:ClsColor wohl ganz praktisch) oder ein Hintergrundbild, macht sich immer gut, oder schlicht die Schriftfarbe ändern Very Happy
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...

Hagbard

BeitragFr, Aug 18, 2006 18:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich habe das Gefühl, dass ich den nicht ganz korrekt gepostet habe...
Aber geht auch mehr ums Prinzip!
  • Zuletzt bearbeitet von Hagbard am Sa, Apr 17, 2010 20:56, insgesamt einmal bearbeitet

Smokie

BeitragFr, Aug 18, 2006 19:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Hast du's jetzt verstanden, oder haben wir dein Problem net beantwortet?

Grüße
M-Soft Studios Mit selbst gemachtem Forum!!!
Unbequem lebt's sich schwer.
Musik macht erst Spaß, wenn man sie mit 2,8 facher Geschwindigkeit hört
Zuletzt bearbeitet von Smokie am Fr Jan 01, 1888 51:58 PM, insgesamt 1000-mal bearbeitet

Hagbard

BeitragSo, Aug 20, 2006 10:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Deine Idee hab ich schon versucht umzusetzen...schon vorher!

Ich würde dann nur wissen, wie ich eine Variable um n erhöhe, ohne dass das die ganze Zeit passiert, da die Funktion in der Schleife aufgerufen wird.
Ich werde jetzt erstmal suchen!

Hubsi

BeitragMo, Aug 21, 2006 14:53
Antworten mit Zitat
Benutzer-Profile anzeigen
ql:MilliSecs() gibt die Zeit seit Systemstart in Millisekunden zurück. Wenn Du jetzt diesen Wert in einer Variable zwischenspeicherst läßt sich ganz bequem die vergangene Zeit seit dem letzten zwischenspeichern errechnen und wenn diese Differenz einen von Dir bestimmten Wert überschreitet zählst Du deine Variable hoch. Code dazu wirst Du auch zu Hauf finden, wenns wirklich gar nicht klappen sollte Very Happy
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...

Hagbard

BeitragMo, Aug 21, 2006 19:44
Antworten mit Zitat
Benutzer-Profile anzeigen
ICH HABS GESCHAFFT!!!
Wie so oft lag die Lösung schon vor Augen und wurde nur wegen einem Fehler nicht gefunden!
Naja, hab es letztendlich so ähnlich gelöst wie Smokie es vorgeschagen hat.

Nochmal DANKE!

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group