Vertikales Text scrolling... Wie gehts?

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

Producer

Betreff: Vertikales Text scrolling... Wie gehts?

BeitragDi, Mai 22, 2007 22:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo erstmal,

Ich habe ich zwar B+ aber weil ich keine GUI Fkt. in meinem Problem benutze glaube ich passt es besser hier rein...
Und zwar schreibe ich grade für ein Netzwerk-Programm eine Art Konsole(ihr wisst was ich meine - sowas wie die Eingabeaufforderung cmd) Auf der soll z.B. angezeigt werden wenn jmd online kommt oder eine Nachricht schreibt etc. Das funktioniert auch problemlos, nur verwende ich ein Fenster mit 640*480px (12px Zeilenabstand macht also ca 36 Zeilen) und wenn immer mehr Messages angezeigt werden wird das Fenster ja halt schnell mit Text voll... Das Problem ist das dann natürlich nichts mehr unter den Text geschrieben wird(ich hoffe ihr wisst was ich meine Confused ist schwer zu erklären) wenn der Bildschirm voll ist... ich könnte natürlich mit 'cls' das Fenster säubern und in oberster Zeile wieder weiterschreiben.... Aber ich hätte gerne das der Text quasi nach unten scrollt (hatte das vorher ohne Fenster mit 'Print' gemacht wo ja so ein cmd Fenster sich öffnet bei B+ - da funktioniert das mit dem scrollen logischerweise automatisch)

Also hatte ich mir überlegt diese Zeilen die angezeigt werden sollen in eine Datei zu schreiben und wenn es mehr werden halt die oberste zu löschen...(und dann halt nach 'clrscr;' alles neu zu zeichnen...) Das ganze ist aber komplizierter weil ich ja nichtgenau die Bytewerte kenne die eine Zeile lang ist (geht also nicht mit 'fseek()' oder wie das bei BB heißt)

Ich hoffe ihr könnt mir irgendwie helfen und versteht man Problem Smile

Wichtig ist vllcht noch das das Fenster in dem es ist ein Canvas Gadget verwendet... Also wie fast wie BB2D und nicht sone Textarea von B+

Achja hier mal der Quelltext der betreffenden Funktion den ich leider schon recht enstellt hab mit meinen versuchen Wink kann sein das noch große Fehler drin sind



Code: [AUSKLAPPEN]
Function message(mstring$,farbe=0)
   Local tempmessages = OpenFile(CurrentDir()+"\tmp\messages.tmp")
   While Not Eof(tempmessages)
      ReadLine(tempmessages)
   Wend
   WriteLine(tempmessages,mstring$)
   WriteLine(tempmessages,farbe)
   CloseFile (tempmessages)
   Select (farbe)
      Case 0
         Color 255,255,255
      Case 1
         Color 255,0,0
      Case 2
         Color 0,255,0
      Case 3
         Color 0,0,255
      Default
         Color 255,255,255
   End Select
   Text 0, texty*12, mstring$
   If texty <36  Then
      texty=texty+1
   Else
      Cls
      tempmessages = OpenFile(CurrentDir()+"\tmp\messages.tmp")
      Local tempmessagesbackup = WriteFile(CurrentDir()+"\tmp\messages.tmp.backup")
      ReadLine(tempmessages)
      ReadLine(tempmessages)
      While Not Eof(tempmessages)
         WriteLine(tempmessagesbackup,ReadLine(tempmessages))
      Wend
      CloseFile(tempmessages)
      CloseFile(tempmessagesbackup)
      DeleteFile CurrentDir()+"\tmp\messages.tmp"
      CopyFile CurrentDir()+"\tmp\messages.tmp.backup",CurrentDir()+"\tmp\messages.tmp"
      DeleteFile CurrentDir()+"\tmp\messages.tmp.backup"
      texty=0
      tempmessages = OpenFile(CurrentDir()+"\tmp\messages.tmp")
      While Not Eof(tempmessages)
         farbe=ReadLine(tempmessages)
         mstring$=ReadLine(tempmessages)
         Select (farbe)
            Case 0
               Color 255,255,255
            Case 1
               Color 255,0,0
            Case 2
               Color 0,255,0
            Case 3
               Color 0,0,255
            Default
               Color 255,255,255
         End Select
         Text 0, texty*12, mstring$
         texty=texty+1
      Wend
      texty=texty-1
      CloseFile(tempmessages)
   EndIf
      
   
End Function


Ich hab schon viel versucht wie ihr seht Wink Aber ich glaube für euch ist die Lösung sicher kein 'Problem der?

BladeRunner

Moderator

BeitragDi, Mai 22, 2007 22:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Speicher die Eingaben in einem String-array (oder in einem passenden Type). Das Array wird der Reihe nach befüllt. Nun gibt es 2 Möglichkeiten:
Sobald alle zeilen befüllt sind kopierst Du die Strings immer ins vorhergehende Feld ODER
Du machst dein Array sagen wir doppelt so groß wie die Zeilenanzahl und befüllst es durchlaufend, d.h. wenn der letzte Eintrag erreicht ist wird von vorne angefangen. Zeitgleich lässt Du einen Counter mitlaufen der Speichert ab welchem index ausgegeben werden muss.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

Producer

BeitragDi, Mai 22, 2007 22:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Vielen Danke für die schnelle Hilfe...
Ich hoffe nur das der Stringarray der dann ja 36 bzw. 72 Elemente hat den RAM oder CPU nicht zuviel belastet... Aber das müsste doch minimal sein oder?

... irgendwas geht nicht... Deklariere ich den Array in main als Global dann sagt er 'Variable Type missmatch', deklariere ich den Array in meiner Prozedur als Lokal so sagt der Compiler 'Variable must be a Blitz array'
Confused

Hier nochmal der jetzige Code

Code: [AUSKLAPPEN]
Function message(mstring$,farbe=0)   
   Select (farbe)
      Case 0
         Color 255,255,255
      Case 1
         Color 255,0,0
      Case 2
         Color 0,255,0
      Case 3
         Color 0,0,255
      Default
         Color 255,255,255
   End Select
   Text 0, texty*12, mstring$
   If texty <36  Then
      nachrichtenarray$[texty]=mstring$
      texty=texty+1
   Else
      Cls
      For i=1 To 35
         nachrichtenarray$[texty-i]=nachrichtenarray$[texty]
      Next
   EndIf
      
   
End Function


Den Fehler scheint er gleich bei der ersten Verwendung von dem Array in der Funktion zu vermuten Code: [AUSKLAPPEN]
nachrichtenarray$[texty]=mstring$


in meinem Hauptprogramm habe ich übrigens das ganze so deklariert

Code: [AUSKLAPPEN]
Global nachrichtenarray$[36]

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragDi, Mai 22, 2007 23:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Bei einem Blitz Array nur beim erstellen die Art deklarieren (% # $)
danach nicht mehr!
Code: [AUSKLAPPEN]

;falsch
nachrichtenarray$[texty]=mstring$
;richtig
nachrichtenarray[texty]=mstring$


Aber warum muß es unbedingt ein BlitzAarry sein?
[BB2D | BB3D | BB+]

Tankbuster

BeitragMi, Mai 23, 2007 12:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Genau! das würde ich nur für Types nehmen!
Ein "normales" Array tuts doch auch!
Twitter
Download Jewel Snake!
Windows|Android

Producer

BeitragMi, Mai 23, 2007 13:24
Antworten mit Zitat
Benutzer-Profile anzeigen
@ Rallimen: Danke für den Tip, das wusst ich leider nicht...
@Tankbuster: Srry wenn ich frage, aber wie deklariert man einen normalen Array in BB? Ich dachte da gäbe es nur den Blitzarray... Und was hat ein normaler Array für Vorteile?

Auf jeden Fall funktioniert das jetzt endlich das scrolling...
Danke nochmal an alle Wink

Tankbuster

BeitragMi, Mai 23, 2007 13:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Also.. du kannst es Mit
Zitat:
Dim Variable(3)

Erstellen!
Die "normalen" Arrays sind immer Global! und du kannst auch leicht 3-Dimensionale Arrays machen, indem du schreibst!
Zitat:
Dim Variable(3,3)


ich hoffe dir ist klar, wofür die 3 steht^^
Twitter
Download Jewel Snake!
Windows|Android

Producer

BeitragMi, Mai 23, 2007 13:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Aso, Dim-Felder^^

ja ist klar... dachte ihr meintet noch andere Arrays Wink

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group