 |
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
vinny
Anmeldungsdatum: 27.02.2007 Beiträge: 32
|
Verfasst am: 27.06.2007, 21:46 Titel: Scrollbar |
|
|
Hi!
nach langer Zeit melde ich mich mal wieder vielleicht erinnern sich ja noch einige, dass ich ein Vereinsverwaltungsprogramm schreiben wollte. Nun, dies musste leider aus schulischen Gründen erstmal auf Eis gelegt werden... nun sind aber bald Ferien und ich habe wieder Zeit ich habe schonmal angefangen und bin soweit, dass ich Vereinsmitglieder eintragen und anzeigen lassen kann(die Daten werden in einer .dat Datei gespeichert). Allerdings habe ich ein Problem: leider passen nicht alle Mitglieder auf eine Seite, wenn ich alle in einer Tabelle anzeigen will. Zudem gibt es zu viele Spalten für eine Seite. Deshalb habe ich mir überlegt, ob es nicht möglich wäre, in der Liste mit Pfeiltasten hoch und Runter bzw. zu den Seiten zu scrollen. Quasi wie in einem Webbrowser nur mit Tasten. Ist das möglich?
Ich habe mir das so gedacht:
Das Prog erkennt, dass nicht alle Einträge auf eine Seite passen und erstellt an der Seite und Unten jeweils eine Scrollbar mit der man dann hoch und runter scrollen kann(mit den Pfeiltasten) und je nach dem wie viel Einträge nach unten und nach rechts vorhanden sind, desto weiter kann man scrollen.
Ist das möglich?
Danke für eure Hilfe!!
LG,
vinny |
|
Nach oben |
|
 |
PMedia
Anmeldungsdatum: 14.08.2006 Beiträge: 2847
|
Verfasst am: 27.06.2007, 21:53 Titel: |
|
|
Ja, es ist möglich. Magst du auch noch wissen, wie? |
|
Nach oben |
|
 |
vinny
Anmeldungsdatum: 27.02.2007 Beiträge: 32
|
Verfasst am: 27.06.2007, 21:56 Titel: |
|
|
Hi!
sehr gerne  |
|
Nach oben |
|
 |
PMedia
Anmeldungsdatum: 14.08.2006 Beiträge: 2847
|
Verfasst am: 27.06.2007, 22:11 Titel: |
|
|
x)
Aaalso:
Bau dir ne Sub, die dir mit nem Parameter StartY (Integer) ab Zeile 2 23 Zeilen deiner Tabelle anzeigen lässt. StartX (Integer) zeigt von Spalte 1 bis 79 deine Tabelle.
Rechts und unten kannst du deine Scrollbar recht einfach mit Prozentrechnung darstellen.
Also (Position / Gesamt) * 79 für die X-Achse und (Position / Gesamt) * 23 für die Y-Achse |
|
Nach oben |
|
 |
vinny
Anmeldungsdatum: 27.02.2007 Beiträge: 32
|
Verfasst am: 16.08.2007, 17:02 Titel: |
|
|
Hi!
irgentwie bin ich dafür zu blöd
könntest du mir dass vll ein bisschen einfacher/genauer erklären?
DANKE!!! |
|
Nach oben |
|
 |
mkfezzo
Anmeldungsdatum: 16.08.2007 Beiträge: 25
|
Verfasst am: 16.08.2007, 21:28 Titel: |
|
|
vielleicht brauchst du ja gar keine scrollbar:
start=1
do
a$=inkey$
if a$="+" then and start+1<=maxanzahldatensätze then start=start+1:gosub anzeigen
if a$="-" and start-1>0 then start=start-1:gosub anzeigen
loop until a$="q"'q=ende
anzeigen:
cls
for zeilen=start to start+23
? daten (zeilen)'hier das datenarray
next zeilen
return
ist nur nen schnellschuss, aber guck die das mal an... |
|
Nach oben |
|
 |
stevie1401
Anmeldungsdatum: 04.07.2006 Beiträge: 133
|
Verfasst am: 18.08.2007, 08:55 Titel: |
|
|
Ich habe mal was gebastelt, in der Hoffnung, es erklärt sich von selbst.
Wenn nicht, kannst du gerne nachfragen.
Code: |
declare Function inbox(Byval x As Integer,Byval y As Integer,Byval x1 As Integer,Byval y1 As Integer)As Integer
declare Sub box (x1 As Integer, y1 As Integer, x2 As Integer, y2 As Integer, farbe As Double, flg As Integer)
declare function scrollbalken(x as integer,y as integer,x1 as integer,y1 as integer,byval maxanz as integer,byval ZpS as integer,zeile as integer,flg as integer)as integer
declare sub sbknopf(x as integer,y as integer,x1 as integer,y1 as integer)
dim shared as integer mx,my,mr,mk
dim shared as string taste
dim shared as double weiss
dim as integer xres,yres,res,txtheight
'Information der Aufloesung holen
screeninfo xres,yres,res
'Die fensterkoordinaten etwas kleiner machen
xres-=20
yres-=100
'Farbe
weiss=rgb(255,255,255)
'Texthoehe
txtheight=16
'Fenster oeffnen
Screenres xres,yres,res,1,1
'Fenster in die Mitte setzen
screencontrol 100,10,0
dim as integer i,j,txtanz=100,ZpS=24,y,start,ii,anz
dim as string txt(txtanz)
'ZpS=Zeilen pro Seite
'Beliebige Zeilen generieren
for i=1 to txtanz
txt(i)="das ist Zeile "+str(i)
next i
'Weisses Fenster zeichenen (siehe SUB Box)
box 0,0,1024,768,weiss,1
draw string(110,530),"Zum Beenden <ESC> druecken",0
start=0
do
screenlock
box 100,100,600,500,weiss,1
box 100,100,600,500,0,0
anz=0
'Eine Seite Text anzeigen lassen
do
anz+=1
if start<0 then start=0
ii=anz+start
if ii>txtanz then ii=txtanz
draw string(110,100+anz*txtheight),txt(ii),0
'Zeilen schreiben bis die Zeilen pro Seite erreicht ist oder
'bis die letzte Zeile erreicht ist
loop until anz=ZpS or ii=txtanz
'Slider anzeigen lassen (flg=1)
scrollbalken (605,100,723,500,txtanz,ZpS,ii,1)
screenunlock
getmouse mx,my,mr,mk
taste=inkey
sleep 5 'Verschnaufpause fuer die CPU
if mk=1 then 'linke Maustaste gedrueckt?
'Ist der Mauszeiger innerhalb des Scrollbereiches?
if inbox(605,100,630,500)=1 then
screenlock
'Zeile errechnen (flg=2)
start=scrollbalken (605,100,623,500,txtanz,ZpS,ii,2)
screenunlock
end if
end if
'Pfeil unten gedrueckt?
If Asc(Right(taste, 1))= 80 then
start+=1
if start+anz>txtanz then start=txtanz-anz
End If
'Pfeil unten gedrueckt?
If Asc(Right(taste, 1))= 72 Then
start-=1
if start<0 then start=0
End If
'Schleife bis ESC gedrueckt
loop until taste=chr(27)
function scrollbalken(x as integer,y as integer,x1 as integer,y1 as integer,byval maxanz as integer,byval ZpS as integer,zeile as integer,flg as integer)as integer
'x ist die x-Koordinate des Fensters in dem der text gescrollt wird
'y ist die y-Koordinate des Fensters in dem der text gescrollt wird
'x1 ist die x1-Koordinate des Fensters in dem der text gescrollt wird
'y1 ist die y1-Koordinate des Fensters in dem der text gescrollt wird
'maxanz ist die maximale Anzahl der Zeilen
'ZpS ist die Anzahl der Zeilen pro Seite
'zeile ist die LETZTE Zeile der Seite
'flf ist das flf, was angezeigt werden soll
'die Breite der Pfeile ist 18 Pixel
'Deshalb muss die Boxbreite x+18 sein
'x1 oben als Parameter ist also nur eine Dummyeingabe
x1=x+18
dim as double teiler,teiler1,teiler2
dim as integer boxtiefe,sbknopftiefe,z,k,sliderbreite,zeilemerki
zeilemerki=zeile
z=zeile-ZpS
if z<0 then z=0
teiler=maxanz/ZpS
'teiler1=ZpS/maxanz
boxtiefe=y1-y
teiler2=boxtiefe/maxanz
sbknopftiefe=boxtiefe/teiler
'teiler errechnet sich aus der maximalen Anzahl der Eintraege/Zeilen pro Seite
'boxtiefe ist die Tiefe des Fensters, in dem die Zeilen angezeigt werden
'teiler2 errechnet sich aus der Boxtiefe/maximalen Eintraege
'teiler2 wird benoetigt, um die Tiefe des Sliders zu errechnen
if sbknopftiefe>boxtiefe then sbknopftiefe=boxtiefe
if flg=1 then
'Slider nur anzeigen lassen
box x,y,x1,y1,weiss,1
box x,y,x1,y1,Rgb(77,97,133),0
'Slider zeichnen
sliderbreite=sbknopftiefe+z*teiler2
sbknopf x+1,y+1+z*teiler2,x1-1,y+sliderbreite
end if
if flg=2 then
getmouse mx,my,mr,mk
k=(my-y)/teiler2
k=int(k)-1
if k<0 then k=0
if k+ZpS>maxanz then k=maxanz-ZpS
return k
end if
end function
sub sbknopf(x as integer,y as integer,x1 as integer,y1 as integer)
'..mald den eigentlichen Knopf, kann man natuerlich verschoenern
box x,y,x1,y1,rgb(255,0,0),1
box x,y,x1,y1,0,0
' aussenfenster2 x,y,x1,y1,Rgb(127,157,185)
end sub
Sub box (x1 As Integer, y1 As Integer, x2 As Integer, y2 As Integer, farbe As Double, flg As Integer)
'Ich mag den LINE-Befehl nicht, deshalb ein Ersatz...
If flg = 1 Then
'Box in Farbe malen
Line (x1, y1)-(x2, y2), farbe, BF
Else
'nur Umrandung malen
Line (x1, y1)-(x2, y2), farbe, B
End If
End Sub
Function inbox(Byval x As Integer,Byval y As Integer,Byval x1 As Integer,Byval y1 As Integer)As Integer
'prueft, ob sich der Mauszeiger innerhalb des Bereiches x,y,x1,y1 befindet
dim as integer mx1,my1,mr1,mk1
Getmouse mx1,my1,mr1,mk1
inbox=0
If mx1>x Then
If my1>y Then
If mx1<x1 Then
If my1<y1 Then
inbox=1
End If
End If
End If
End If
End Function
'
|
Stevie1401 |
|
Nach oben |
|
 |
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
|