Probleme mit Scrollbalken

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

Iguan

Betreff: Probleme mit Scrollbalken

BeitragMi, Jun 04, 2008 21:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo Zusammen!

Ich möchte gerne einen Text-Editor sprich eine ganz simple IDE programmieren.. nun scheiterts schon beim Scrollbalken... ich probiere jetzt schon seit Tagen verschiedene Lösungen, aber ich kriege es irgendwie nicht hin, dass sich die Länge des Griffes vom Scrollbalken an der Text-File Länge anpasst. Dabei soll bei extrem grossen Files eine minimale Länge nicht unterschritten werden.
wenn der Scrollbalken am oberen Anschlag ist, soll die erste Zeile lesbar sein, und wenn er ganz unten ist, soll die unterste Zeile lesbar sein...
klingt ganz einfach, aber ich kriegs irgendwie nicht hin...

vielleicht könnt ihr mir etwas nachhilfe geben?
oder gibt es vielleicht schon quellcodes, die genau das machen?

(die suche nach Text-Editor&BlitzBasic und Eingabe-Routine hat leider nichts sinvolles herausgespuckt)


Hier mein code:
Code: [AUSKLAPPEN]

Pfad$ = "F:\"
File$ = "Test.txt"

FensterBreite = 1000
FensterHoehe = 950
MenueBreite = 200
ScrollBalkenBreite = 20
SchriftGroesse = 16
MausradSchrittWeite = 20
TastaturSchrittWeite = 5

AppTitle "Viscontrol IDE"
Graphics FensterBreite,FensterHoehe,32,2
SetBuffer BackBuffer ()

ClsColor 255,255,255
;HidePointer






Font = LoadFont("Courier",SchriftGroesse,0,0,0)
SetFont(Font)



ZeilenZaehler = 0
FileHandle = OpenFile(Pfad$ + File$)
Repeat
  T$ = ReadLine(FileHandle)
  ZeilenZaehler = ZeilenZaehler + 1
Until Eof(FileHandle)
CloseFile (FileHandle)

AnzahlZeilen = ZeilenZaehler
Dim TextZeile$(AnzahlZeilen)


ZeilenNr = 0
FileHandle = OpenFile(Pfad$ + File$)
Repeat
  T$ = ReadLine(FileHandle)
  ZeilenNr = ZeilenNr + 1
  TextZeile$(ZeilenNr) = T$
Until Eof(FileHandle)
CloseFile (FileHandle)






;************** Main Loop ******************
Repeat
Cls   
   
Color 0,0,0




MouseLB = MouseDown(1)

If MouseLB Then
  If RectsOverlap(GraphicsWidth()-ScrollBalkenBreite-MenueBreite,ScrollGriffSenkrechtY-ScrollGriffSenkrechtLaenge/2,ScrollBalkenBreite,ScrollGriffSenkrechtLaenge,MouseX(),MouseY(),1,1) Then
    ScrollBalkenSenkrechtZiehen = 1
    If DeltaY = 0 Then DeltaY = ScrollGriffSenkrechtY - MouseY():PosScrollGriffSenkrecht = ScrollGriffSenkrechtY   
  EndIf
Else
  DeltaY = 0
  ScrollBalkenSenkrechtZiehen = 0
EndIf


If ScrollBalkenSenkrechtZiehen = 0 Then 
  ScrollGriffSenkrechtY = (GraphicsHeight()-ScrollBalkenBreite-ScrollGriffSenkrechtLaenge/2)*(ScrollY + AnzahlZeilenSichtbar/2)/AnzahlZeilen
Else
  ScrollGriffSenkrechtY = MouseY()+DeltaY
  If ScrollGriffSenkrechtY < ScrollGriffSenkrechtLaenge/2 Then ScrollGriffSenkrechtY = ScrollGriffSenkrechtLaenge/2
 
  If PosScrollGriffSenkrecht <> ScrollGriffSenkrechtY Then
    ScrollY = (ScrollGriffSenkrechtY-ScrollGriffSenkrechtLaenge/2) * (AnzahlZeilen /(GraphicsHeight()-ScrollBalkenBreite-ScrollGriffSenkrechtLaenge))
  EndIf
EndIf   





;#Region Text anzeigen
AnzahlZeilenSichtbar = 0
ZeileY = 0
For Zeile = ScrollY To ScrollY + 200
  If Zeile > AnzahlZeilen Or ZeileY+SchriftGroesse > GraphicsHeight()-ScrollBalkenBreite Then Exit
  Text 20,ZeileY,TextZeile(Zeile)
  ZeileY = ZeileY + SchriftGroesse    
  AnzahlZeilenSichtbar = AnzahlZeilenSichtbar + 1
Next

If KeyDown(200) Then ScrollY = ScrollY - TastaturSchrittWeite
If KeyDown(208) Then ScrollY = ScrollY + TastaturSchrittWeite
ScrollY = ScrollY - MouseZSpeed()*MausradSchrittWeite
If ScrollY < 0 Then ScrollY = 0
If ScrollY > AnzahlZeilen - AnzahlZeilenSichtbar+1 Then ScrollY = AnzahlZeilen - AnzahlZeilenSichtbar+1
;#End Region





;Menü
Color 220,220,220
Rect GraphicsWidth()-MenueBreite-ScrollBalkenBreite,0,GraphicsWidth(),GraphicsHeight()


;#Region Scrollbalken senkrecht
;Scrollbalken senkrecht
Color 210,210,255
Rect GraphicsWidth()-ScrollBalkenBreite-MenueBreite,0,ScrollBalkenBreite,GraphicsHeight()-ScrollBalkenBreite,1
ScrollGriffSenkrechtLaenge = AnzahlZeilenSichtbar * (GraphicsHeight()-ScrollBalkenBreite-ScrollGriffSenkrechtLaenge)/AnzahlZeilen
If ScrollBalkenSenkrechtZiehen = 0 Then Color 100,100,255 Else Color 10,10,255
Rect GraphicsWidth()-ScrollBalkenBreite-MenueBreite,ScrollGriffSenkrechtY-ScrollGriffSenkrechtLaenge/2,ScrollBalkenBreite,ScrollGriffSenkrechtLaenge,1
;#End Region

;Scrollbalken waagrecht
Color 210,255,255
Rect 0,GraphicsHeight()-ScrollBalkenBreite,GraphicsWidth()-MenueBreite-ScrollBalkenBreite,ScrollBalkenBreite,1





Flip   
Until KeyHit(1)

;********************************************


End

BladeRunner

Moderator

BeitragDo, Jun 05, 2008 7:00
Antworten mit Zitat
Benutzer-Profile anzeigen
http://www.blitzbasic.com/code...?code=1895
auch bb.com hat nützliches zu bieten Wink
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

ozzi789

BeitragDo, Jun 05, 2008 18:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Ausm Kopf :

a=Xgrösse des Scrollbars/Anzahlzeilen
b=X grösse des Scrollbars/aufderlinie auf der man jetzt is

position = a-b

Solte gehn
hoff de rafst was ich da schreib xD


mfg
oz
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5

Iguan

BeitragDo, Jun 05, 2008 21:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Nein leider kapier ich nicht was du meinst.. könntest du mir das in meinem code zeigen/einbauen ?

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group