Wie Bekomme Ich eine Scrollbar hin ?

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

tommyglocke

Betreff: Wie Bekomme Ich eine Scrollbar hin ?

BeitragFr, Feb 16, 2007 13:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich versuche schon seit gestern eine Scrollbar zu coden.
aber das bekomme ich nicht so hin !

Also: ich habe einen Text und möchte das er, wenn ich die Tasten
Up oder Down drücke, nach unten bzw. nach oben scrollt.

Außerdem soll rechts noch ein Rechteck mitlaufen also eine Scrollbar.

Welche Befele brauch ich um das am besten umzusetzen?

mfg Tommy

Christoph

BeitragFr, Feb 16, 2007 13:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Befehle?

naja, zum Zeichnen wohl ql:color, ql:rect, usw.

um eine Scrollbar zu machen brauchst du einige Variablen.
Eine Variable z.B., die speichert, an welcher Stelle du im Dokument (oder Text) bist.
 

tommyglocke

BeitragFr, Feb 16, 2007 13:52
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke, mal sehn ob es klappt Very Happy
 

tommyglocke

BeitragFr, Feb 16, 2007 14:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Naja so richtig klappts nicht aber ich probiere weiter.
Danke noch mal !

mfg Tommy

Christoph

BeitragFr, Feb 16, 2007 14:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Schau, du hast jetzt eine Var, z.B. ypos
Die speichert, wo du bist. D.h., wenn ypos 50 ist, dann bist du vom Anfang des Dokumentes 50 Pixel entfernt.

Dann musst du bei allen Grafikbefehlen, die von ypos abhängig sind (also, die, die beim Scrollen verschoben werden sollen), den yWert um ypos verringern.

zB.:
Ich habe einen Text der auf x=0, y=50 liegt.
Wenn ypos gleich 10 ist, du also schon 10 Pixel nach unten gescrollt bist, liegt der Text jetzt auf y=40 (denn 50-10=40)

Code: [AUSKLAPPEN]
Graphics 640,480,16,2
SetBuffer BackBuffer()
Repeat
   Cls
   If KeyDown(200) Then ypos = ypos - 1
   If KeyDown(208) Then ypos = ypos + 1
   ;Hier steht der Text
   Text 0, 0-ypos, "Hallo"
   Text 0, 20-ypos, "mit Pfeiltaste oben oder Pfeiltaste unten,"
   text 0, 40-ypos, "kannst du diesen Text scrollen lassen."
   
   Flip
Until KeyDown(1)

SpionAtom

BeitragFr, Feb 16, 2007 15:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Hab mal wieder zuviel Zeit gehabt...
Ihr müsst nur euer eigenes Bild einsetzen. Und wenn es eben ein Text sein soll, so müsst ihr den Text halt vorher in einen Imagebuffer schreiben Surprised


Code: [AUSKLAPPEN]
;Scrollbox von Thomas Decker - Februar 2007
Graphics 640, 480, 0, 3
SetBuffer BackBuffer()

   pic = LoadImage("tileset.png")
   xbar = 0
   ybar = 0

   Repeat   
      If KeyDown(200) Then ybar = ybar - 1
      If KeyDown(208) Then ybar = ybar + 1
      If KeyDown(203) Then xbar = xbar - 1
      If KeyDown(205) Then xbar = xbar + 1   
   
      Cls
      scrollBox pic, 5, 30, 200, 100, xbar, ybar
      Flip()   
      
   Until KeyDown(1)
   End   
   

;Zeigt den Ausschnitt eines Bildes an
;p - Bild
;x, y, w, h - Position und Ausmaße des Ausschnitts
;xbar, ybar - Position der Scrollleisten
Function scrollBox(p, x, y, w, h, xbar, ybar)

   iw = ImageWidth(p)
   ih = ImageHeight(p)
   
   If xbar < 0 Then xbar = 0 Else If xbar > iw - w Then xbar = iw - w
   If ybar < 0 Then ybar = 0 Else If ybar > ih - h Then ybar = ih - h
   If w > iw Then xbar = 0
   If h > ih Then ybar = 0

   sbs = 5 ;Dicke der Scrollleisten
   sbx = Float(w) / ImageWidth(p) * w: sbxp = Float(xbar) / ImageWidth(p) * w
   sby = Float(h) / ImageHeight(p) * h: sbyp = Float(ybar) / ImageHeight(p) * h   
   
   DrawImageRect p, x,  y, xbar, ybar, w, h

   Color 255, 255, 255:    Rect x, y, w, h, 0
   If ImageWidth(p) > w Then Rect x, y + h - 1, w, sbs, 0: Rect x + sbxp, y + h - 1, sbx, sbs, 1
   If ImageHeight(p) > h Then Rect x + w - 1, y, sbs, h, 0: Rect x + w - 1, y + sbyp, sbs, sby, 1   

End Function
os: Windows 10 Home cpu: Intel Core i7 6700K 4.00Ghz gpu: NVIDIA GeForce GTX 1080
 

tommyglocke

BeitragFr, Feb 16, 2007 15:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Hey Danke dies mal geht es !

Christoph

BeitragFr, Feb 16, 2007 15:49
Antworten mit Zitat
Benutzer-Profile anzeigen
@SpionAtom

lol

Ich stelle mir gerade vor, wie ressourcenfreundlich dein Programm bei einem 20-seitigem Textdokument ist.

"Schreib doch alles in ein 800*50000 Pixel großes Bild."

Rolling Eyes

SpionAtom

BeitragFr, Feb 16, 2007 15:58
Antworten mit Zitat
Benutzer-Profile anzeigen
@Christoph An ein 20seitiges Textdokument habe ich gar nicht gedacht. Ich glaube zwar kaum, dass jemand vorhat, ein so großes Dokument in einem kleinen Fenster anzeigen zu lassen, aber wenn hier der Wille besteht, dann schreibe ich die Function extra nochmal für Text-only um. Rolling Eyes

Das mit den Bildern ist aber imo die schnellste Lösung, die es gibt - auch wenn es etwas am Grafikspeicher zerrt.
os: Windows 10 Home cpu: Intel Core i7 6700K 4.00Ghz gpu: NVIDIA GeForce GTX 1080

Christoph

BeitragFr, Feb 16, 2007 16:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
Also: ich habe einen Text und möchte das er, wenn ich die Tasten
Up oder Down drücke, nach unten bzw. nach oben scrollt.


Nun ja, ich finde deinen Lösungsvorschlag ziemlich umständlich, da es sich hier eben um text-only handelt. Warum dann den Speicher zumüllen, mit Bildern???

SpionAtom

BeitragFr, Feb 16, 2007 16:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Das mit den Bildern ist halt eine universelle Lösung, um alles zu scrollen.
Hier die Text-variante. Das dumme ist nur, dass der Text zweimal eingelesen wird, da ich ihn nicht zwischenspeichern wollte (es könnte ja der Speicher zugemüllt werden Twisted Evil *nicht so ernst nehmen*)

Code: [AUSKLAPPEN]
;Scrollbox von Thomas Decker - Februar 2007
Graphics 640, 480, 0, 3
SetBuffer BackBuffer()

   txt$ = "text.txt"
   xbar = 0
   ybar = 0

   Repeat
   
      If KeyDown(200) Then ybar = ybar - 1
      If KeyDown(208) Then ybar = ybar + 1
      If KeyDown(203) Then xbar = xbar - 1
      If KeyDown(205) Then xbar = xbar + 1   
   
      Cls
      scrollTextBox txt$, 5, 30, 200, 100, xbar, ybar
      Flip()   
      
   Until KeyDown(1)
   End   
   

;Zeigt den Ausschnitt eines Bildes an
;txt - Textdatei
;x, y, w, h - Position und Ausmaße des Ausschnitts
;xbar, ybar - Position der Scrollleisten
Function scrollTextBox(txt$, x, y, w, h, xbar, ybar)

   f = ReadFile(txt$)
   mzeilen = 0
   iw = 0
   While Not Eof(f)
      mzeilen = mzeilen + 1
      zeile$ = ReadLine(f)
      If StringWidth(zeile$) >  iw Then iw = StringWidth(zeile$)
   Wend
   CloseFile f   

   sh = StringHeight("#")
   ih = mzeilen * sh   
   
   If xbar < 0 Then xbar = 0 Else If xbar > iw - w Then xbar = iw - w
   If ybar < 0 Then ybar = 0 Else If ybar > ih - h Then ybar = ih - h
   If w > iw Then xbar = 0
   If h > ih Then ybar = 0

   sbs = 5 ;Dicke der Scrollleisten
   sbx = Float(w) / iw * w: sbxp = Float(xbar) / iw * w
   sby = Float(h) / ih * h: sbyp = Float(ybar) / ih * h   
   
   Viewport x, y, w, h
   f = ReadFile(txt$)
   z = 0
   While Not Eof(f)
      zeile$ = ReadLine(f)
      If y + z - ybar >= y - sh And y +  z - ybar <= y + h Then Text x - xbar, y + z - ybar, zeile$
      z = z + sh
   Wend
   CloseFile(f)
   Viewport 0, 0, GraphicsWidth(), GraphicsHeight()   

   Color 255, 255, 255:    Rect x, y, w, h, 0
   If iw > w Then Rect x, y + h - 1, w, sbs, 0: Rect x + sbxp, y + h - 1, sbx, sbs, 1
   If ih > h Then Rect x + w - 1, y, sbs, h, 0: Rect x + w - 1, y + sbyp, sbs, sby, 1   
   
End Function
os: Windows 10 Home cpu: Intel Core i7 6700K 4.00Ghz gpu: NVIDIA GeForce GTX 1080
 

Sabber

BeitragSa, März 10, 2007 23:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo bin neu hier und hab auch dierekt mal eine Frage..
Bin im Momen just for fun nen Kleines Spiel am programmieren
Und hab folgendes Problem
Also in meinem Menu habe ich die Einträge In einem einzige Image. Das einzige was sich bei mir bewegt ist ein Pfeil an der Seite.
Nun grübel ich schon die ganze zeit wie zum Teufel ich dem Sagen soll welche y position nun meine Auswahl ist.. Als erstes dachte ich an eine array da habe ich nur das Problem das ich den namen nich als zahl definieren kann ist ja auch verständlich.

Wenn man allso Up drück soll er immer eins nach oben springen ist er beim obersten angelangt dann geht es wieder runter zum letzten.... Nur irgendwo finde ich keinen Ansatzt wie zumteufel ich dem das sagen soll... ^^. Ich möchte auch keine vorgekaute Lösung (dabei lerne ich nix) vieleicht kann mir eine einen Tip geben.
user posted image
Sabber

the FR3AK

BeitragSa, März 10, 2007 23:27
Antworten mit Zitat
Benutzer-Profile anzeigen
lol...warum schreibst du in den veralteten Thread rein?Mach doch nen neuen Idea
 

Sabber

BeitragSa, März 10, 2007 23:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Weil ich in mehreren Foren unterwegs bin, und weiß das unötiges geposte nervt.. Und es hat ja wasmit dem Thema zutun also Wink


Sabber

SpionAtom

BeitragSo, März 11, 2007 3:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Zum Bleistift löst du das so:

Pseudocode:
Code: [AUSKLAPPEN]
Select auswahl
   case 1
   mal Pfeil an Position 50, 100
   case 2
   mal Pfeil an Position 50, 200
   case 3
   mal Pfeil an Position 50, 300
End Select


Tasten fragst du am besten mit den Befehlen Keydown oder KeyHit ab.
os: Windows 10 Home cpu: Intel Core i7 6700K 4.00Ghz gpu: NVIDIA GeForce GTX 1080

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group