Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Scrollbar

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
vinny



Anmeldungsdatum: 27.02.2007
Beiträge: 32

BeitragVerfasst am: 27.06.2007, 21:46    Titel: Scrollbar Antworten mit Zitat

Hi!
nach langer Zeit melde ich mich mal wieder zwinkern 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 grinsen 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
Benutzer-Profile anzeigen Private Nachricht senden
PMedia



Anmeldungsdatum: 14.08.2006
Beiträge: 2847

BeitragVerfasst am: 27.06.2007, 21:53    Titel: Antworten mit Zitat

Ja, es ist möglich. Magst du auch noch wissen, wie?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
vinny



Anmeldungsdatum: 27.02.2007
Beiträge: 32

BeitragVerfasst am: 27.06.2007, 21:56    Titel: Antworten mit Zitat

Hi!
sehr gerne grinsen
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
PMedia



Anmeldungsdatum: 14.08.2006
Beiträge: 2847

BeitragVerfasst am: 27.06.2007, 22:11    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
vinny



Anmeldungsdatum: 27.02.2007
Beiträge: 32

BeitragVerfasst am: 16.08.2007, 17:02    Titel: Antworten mit Zitat

Hi!
irgentwie bin ich dafür zu blöd mit dem Kopf durch die Mauer wollen
könntest du mir dass vll ein bisschen einfacher/genauer erklären? verlegen

DANKE!!!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
mkfezzo



Anmeldungsdatum: 16.08.2007
Beiträge: 25

BeitragVerfasst am: 16.08.2007, 21:28    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
stevie1401



Anmeldungsdatum: 04.07.2006
Beiträge: 133

BeitragVerfasst am: 18.08.2007, 08:55    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
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.

 Impressum :: Datenschutz