Buchempfehlung
Windows System Programming
Windows System Programming
Das Kompendium liefert viele interessante Informationen zur Windows-Programmierung auf Englisch. [Mehr Infos...]
FreeBASIC-Chat
Es sind Benutzer im FreeBASIC-Chat online.
(Stand:  )
FreeBASIC bei Twitter
Twitter FreeBASIC-Nachrichten jetzt auch über Twitter erhalten. Follow us!

fb:porticula NoPaste

Info
Info / Hilfe
Liste
Übersicht / Liste
Neu
Datei hochladen
Suche
Quellcode suchen
Download
Dateidownload

Main_v1.1.bas

Uploader:MitgliedAlexander283
Datum/Zeit:27.02.2012 16:19:44
Hinweis: Dieser Quelltext ist Bestandteil des Projekts DiskMgr, zu dem es auf FreeBASIC-Portal.de eine Projektseite gibt.

' ##############################################################################
' #                                           +-------+                        #
' #      DiskManager  v 1.1                   |   #   |                        #
' #                                           |   O.  |                        #
' #      11.12.2011  Alexander Dahmen         ]       |                        #
' #                                           +-------+                        #
' #                                                                            #
' ##############################################################################

' -- Definitionen --
#define false 0
#define true not(false)
#define nul chr(0)

' ---------- Screen ------------------------------------------------------------
screen 18,32

' ---------- Typen -------------------------------------------------------------

type tdot
    as integer x
    as integer y
end type

type tsquare
    as tdot p1
    as tdot p2
end type

type tdisk
    as integer x
    as integer y
    as integer visible
    as integer grab

    as string caption
    as string program(255)

    as tsquare button

    declare sub create (buffer as any ptr,disk as tdisk,number as integer,clr as integer)
end type

type tmouse
    as integer x
    as integer y
    as integer wheel
    as integer key

    as tdot button

    declare sub reload()
end type

type tbox
    as tsquare button
    as integer returned
    as integer grab
end type

type tprog
    as tsquare button
    as integer returned
end type

' ---------- Deklarationen -----------------------------------------------------

dim Mouse as tmouse
dim Disk(1 to 255) as tdisk
dim box as tbox
dim prog as tprog
dim search_button as tsquare

dim grab as integer
dim key as string*1

dim i as integer
dim shared retry as integer=true

declare function inside(sqare as tsquare,dot as tdot) as integer
declare sub search(disk() as tdisk)
declare sub diskbox(disk() as tdisk,sprite as any ptr,back as any ptr)
declare sub label(disk() as tdisk,number as integer)
declare sub adress(byref disk as tdisk)
declare sub save (disk() as tdisk)
declare sub load (disk() as tdisk)

' ---------- Sprite-Daten ------------------------------------------------------

const name_back="Background.bmp"
const name_disk="DiskBig.bmp"
const name_dbox="DiskBox.bmp"
const name_prog="ProgMenu.bmp"

dim ptr_back as any ptr
dim ptr_disk as any ptr
dim ptr_dbox as any ptr

ptr_back=imagecreate(640,480)
ptr_disk=imagecreate(128,128)
ptr_dbox=imagecreate(640,480)

bload name_back,ptr_back
bload name_disk,ptr_disk
bload name_dbox,ptr_dbox

' ---------- HAUPTPROGRAMM -----------------------------------------------------

'for i=1 to 3
'    disk(i).x=100+i*10
'    disk(i).y=200+i*10
'    disk(i).visible=true
''    disk(i).caption="TEST"
'next i

for i=4 to 255
    disk(i).visible=false
next

box.button.p1.x=516
box.button.p1.y=378
box.button.p2.x=631
box.button.p2.y=477

prog.button.p1.x=504
prog.button.p1.y=11
prog.button.p2.x=631
prog.button.p2.y=105

search_button.p1.x=506
search_button.p1.y=171
search_button.p2.x=617
search_button.p2.y=243

' Lade-Routine
load(disk())

do
    do
        put (0,0),ptr_back                                                      ' Hintergrund setzen

        key=inkey                                                               ' Tastatur abfragen
        mouse.reload()                                                          ' Maus abfragen

        screenlock
            if mouse.key=1 then                                                 ' Disketten bewegen
                if grab=false then
                    for i=1 to 255
                        if inside(disk(i).button,mouse.button)=true and _
                        disk(i).grab=false and _
                        disk(i).visible=true then
                            disk(i).grab=true                                   ' Den Parameter für Greifen einstellen
                            grab=true                                           ' Keine weiteren Disketten greifen
                            exit for
                        end if
                    next i
                end if

                if inside(box.button,mouse.button) and box.returned=false then  ' Ist der Button für die Diskettenbox gedrückt?
                    for i=1 to 255
                        if disk(i).grab=true then                               ' \
                            box.grab=true                                       '  \
                            disk(i).visible=false                               '  / Lasse eine Diskette in der Box verschwinden
                            exit for                                            ' /
                            else
                            box.grab=false
                        end if
                    next i

                    screenunlock
                    box.returned=true
                    if box.grab=false then diskbox(disk(),ptr_disk,ptr_dbox)    ' Rufe, wenn keine Diskette abgelegt wurde,
                    screenlock                                                  ' das Boxmenü auf
                end if

                if inside(prog.button,mouse.button)=true then
                    for i=1 to 255
                        if disk(i).grab=true and prog.returned=false then
                            prog.returned=true
                            screenunlock
                                adress(disk(i))
                            screenlock
                            exit for
                        end if
                    next i
                end if

                if inside(search_button,mouse.button)=true and grab=false then
                    screenunlock
                        search(disk())
                    screenlock
                end if

            else
                for i=1 to 255:disk(i).grab=false:next i                        ' \
                grab=false                                                      '  \
                prog.returned=false                                             '  / Wenn die Maus nich gedrückt wird, setze alles auf "NORMAL"
                box.returned=false                                              ' /
            end if


            if mouse.key=2 then
                for i=1 to 255
                    if inside(disk(i).button,mouse.button)=true and disk(i).grab=false and disk(i).visible=true then
                        screenunlock
                            label(disk(),i)
                        screenlock
                    end if
                next i
            end if

            for i=255 to 1 step -1                                                  ' Alle Disketten aktualisieren
                disk(i).button.p1.x=disk(i).x                                       ' \
                disk(i).button.p1.y=disk(i).y                                       '  \
                disk(i).button.p2.x=disk(i).x+128                                   '  / Die Disk-Button-Funktion aktualisieren
                disk(i).button.p2.y=disk(i).y+128                                   ' /

                if disk(i).grab=true then                                           ' \
                    disk(i).x=mouse.x-64                                            '  } Disketten an Mausposition, wenn gegriffen
                    disk(i).y=mouse.y-64                                            ' /
                end if

                if disk(i).visible=true then disk(i).create(ptr_disk,disk(i),i,&H0000FF)' Diskette zeichnen
            next i

        screenunlock
        sleep 20,1
        cls
    loop until key=chr(27)                                                          ' Ende mit ESC

    ' SPEICHER-ROUTINE
    save(disk())
loop until retry=false

if ptr_disk <> 0 then imagedestroy ptr_back                                     ' \
if ptr_back <> 0 then imagedestroy ptr_disk                                     '  } Sprites-Speicher freigeben
if ptr_dbox <> 0 then imagedestroy ptr_dbox                                     ' /
end

' ---------- Subs --------------------------------------------------------------

sub tmouse.reload()                                                             ' Maus aktualisieren
    with this
        getmouse .x,.y,.wheel,.key
        .button.x=.x
        .button.y=.y
    end with
end sub

sub tdisk.create (buffer as any ptr,disk as tdisk,number as integer,clr as integer)' Disketten-zeichnen-Routine
    put (disk.x,disk.y),buffer,trans

    draw string (disk.x+65,disk.y+94),str(number),&HFF0000
    draw string (disk.x+56,disk.y+106),disk.caption,clr
end sub

function inside(square as tsquare,dot as tdot) as integer                       ' Prüfen, ob ein Punkt in einer Fläche liegt
    if (dot.x>square.p1.x and dot.x<square.p2.x) and (dot.y>square.p1.y and dot.y<square.p2.y) then return true
end function

' ********** Diskettenmenü *****************************************************

sub diskbox(disk() as tdisk,sprite as any ptr,back as any ptr)                  ' Diskettenbox-Sub
    cls

    dim i as integer

    dim page as integer
    dim show as integer
    dim incoming as integer=true
    dim number as integer=0

    dim key as string*1
    dim mouse as tmouse

    while inkey<>"":wend

    dim wheel_old as integer
    dim wheel_new as integer
    dim wheel_dir as integer

    dim max as integer=ubound(disk)
    wheel_old=-1

    setmouse (,,0)

    do
        key=inkey
        mouse.reload()                                                          ' Maus aktualisieren

        if incoming=true then                                                   ' \
            if mouse.key=0 then incoming=false                                  '  \ Wenn man in die Box hineinkommt,
            mouse.key=0                                                         '  / die Maus resetten
        end if                                                                  ' /

        getmouse(mouse.x,mouse.y,wheel_new)                                     '  \
        if mouse.button.x<>-1 and mouse.button.y<>-1 then                       '   \
            wheel_dir=-sgn(wheel_new-wheel_old)                                 '   / Die Drehrichtung herausfinden
            wheel_old=wheel_new                                                 '  /
        end if

        screenlock
            put(1,1),back,pset                                                             ' /

            select case wheel_dir                                               ' Scroll-Vorgang
            case -1
                if show<=1 then
                    if page<=0 then
                        show=1
                        page=0
                    else
                        show=1
                        page-=1
                    end if
                else
                    show-=1
                end if
            case  1
                if show>=4 then
                    if page>=(max-4) then
                        show=4
                        page=(max-4)
                    else
                        show=4
                        page+=1
                    end if
                else
                    show+=1
                end if
            end select                                                          ' Ende Scrollen

            for i=1 to 4
                if show=i then
                    put (55+(i-1)*130,165),sprite,add,255
                    draw string (120+(i-1)*130,259),str(i+page),&HFF0000
                    draw string (110+(i-1)*130,271),disk(i+page).caption,&H0000FF
                else
                    if disk(i+page).visible=true then
                        put (55+(i-1)*130,165),sprite,alpha,63
                        draw string (120+(i-1)*130,259),str(i+page),&HFF0000
                        draw string (110+(i-1)*130,271),disk(i+page).caption,&H0000FF
                    else
                        put (55+(i-1)*130,165),sprite,trans
                        draw string (120+(i-1)*130,259),str(i+page),&HFF0000
                        draw string (110+(i-1)*130,271),disk(i+page).caption,&H0000FF
                    end if
                end if
            next i

            if mouse.key=1 and show<>0 then
                if disk(show+page).visible=false then number+=1
                disk(show+page).visible=true
                disk(show+page).x=(number-1)*2
                disk(show+page).y=(number-1)*2
            end if

        screenunlock
        sleep 20,1
        cls
    loop until (mouse.key=2 or key<>"")
    setmouse ,,1
end sub

' ********** Diskette beschriften **********************************************

sub label (disk() as tdisk,number as integer)
    dim i as integer
    dim finish as integer=0
    dim diskname as string

    dim key as string
    dim mouse as tmouse
    while inkey<>"":wend

    dim ptr_back as any ptr = imagecreate(640,480)                              ' Erstelle Hintergrund-Sprite
    get(0,0)-(639,479),ptr_back                                                 '  = Ehemaliger Hintergrund

    dim ptr_disk as any ptr=imagecreate(128,128)                                ' Erstelle Disk-Sprite
    bload "DiskBig.bmp",ptr_disk

    dim ptr_pen as any ptr=imagecreate(128,128)                                 ' erstelle Stift-Sprite
    bload "Pencil.bmp",ptr_pen

'    disk(number).caption=""                                                     ' Lösche alte Caption

    do
        key=inkey                                                               ' Tastatur abfragen
        mouse.reload()                                                          ' Maus abfragen
        screenlock
            cls
            put (0,0),ptr_back,pset                                             ' Hintergrund zeichnen

            for i=255 to 1 step -1
                if disk(i).visible=true then
                    if i=number then
                        disk(i).create(ptr_disk,disk(i),i,&HFFFF00)             ' Disketten zeichnen
                    else
                        disk(i).create(ptr_disk,disk(i),i,&H0000FF)             ' Disketten zeichnen
                    end if
                end if
            next i

            put(disk(number).x+62+len(diskname)*8,disk(number).y+114),ptr_pen,trans ' Stift zeichnen

            ' Hier beginnt die eigentliche Routine der Beschriftung
            if key<>"" then                                                     ' Beginne, wenn eine Taste gedrückt wird
                select case asc(left(key,1))                                    ' Was für ein Zeichen ist KEY ?
                case 13,27                                                      ' -> Enter oder Escape
                    finish=1                                                    '      Beende LABEL
                case 8                                                          ' -> Backspace
                    if len(diskname)>0 then diskname=left(diskname,len(diskname)-1)'   Lösche letztes zeichen
                case else                                                       ' -> Sonst
                    if len(diskname)<8 then diskname+=key                       '      Füge gegebenes Zeichen zum namen hinzu
                end select
                disk(number).caption=diskname                                   ' Abtualisiere die Disk.Caption
            end if

        screenunlock
        sleep 20,1
    loop until finish=1
    if ptr_back<>0 then imagedestroy ptr_back                                   ' \
    if ptr_disk<>0 then imagedestroy ptr_disk                                   '  } Speicherbereinigung von Sprites
    if ptr_pen <>0 then imagedestroy ptr_pen                                    ' /
end sub

' ********** Laufwerksmenü *****************************************************

sub adress(byref disk as tdisk)
    dim ptr_back as any ptr=imagecreate(640,480)                                ' \ Hintergrund-Pointer
    bload "Progmenu.bmp",ptr_back                                               ' / erstellen

    dim mouse(2) as tmouse
    dim mouse_dir(2) as integer
    dim key as string

    dim cursor as tdot
    dim page as integer

    dim i as integer
    dim n as integer
    dim finish as integer
    dim show_cap as string

    ' Variablen für Cursorbewegung
    dim MK_old(255) as integer
    dim MK_new(255) as integer
    dim getchr as integer
    dim p_old as integer
    dim p_new as integer

    ' Variablen für die Radbewegung
    dim wheel_new as integer
    dim wheel_old as integer
    dim wheel_dir as integer

    mouse(2).x=1
    mouse(2).y=1

    cursor.x=1
    cursor.y=1

    if disk.caption="" then show_cap="No Name" else show_cap=disk.caption

    do
        mouse(1).reload()
        wheel_new=mouse(1).wheel

        sleep 10,1                                                              '  \
        if mouse(1).button.x<>-1 and mouse(1).button.y<>-1 then                 '   \
            mouse_dir(1)=mouse(2).x-mouse(1).x                                  '    } Die Bewegung herausfinden
            mouse_dir(2)=mouse(2).y-mouse(1).y                                  '   /
            mouse(2)=mouse(1)                                                   '  /
        end if

        wheel_dir=-sgn(wheel_new-wheel_old)                                     ' \ Die Radbewegung herausfinden
        wheel_old=wheel_new                                                     ' /

        key=inkey

        ' Pfeilastenabfrage
        p_old=p_new
        for i=1 to 150
            MK_old(i)=MK_new(i)
            MK_new(i)=multikey(i)
            if MK_new(i)=0 then
                if MK_old(i)=0 then
                    ' Empty
                else
                    if i=&H01 then finish=1
                    p_new=false
                end if
            else
                if MK_old(i)=0 then
                    p_new=true
                else
                    ' Empty
                end if
            end if
        next i
        getchr=p_new-p_old
        ' Ende Pfeiltasten

        while len(inkey):wend                                                   ' Tastaturpuffer leeren

        screenlock
            cls
            put (0,0),ptr_back,pset                                             ' Hintergrund setzen

            if mouse(1).key=1 then
                if (mouse(1).y-6)/12>1 then cursor.y=(mouse(1).y-6)/12          ' Bei Mausklick den Cursor versetzen
            end if

            select case wheel_dir                                               ' \
            case -1                                                             '  \
                if page>0 then page-=1                                          '   \
            case 1                                                              '   / Bei Mausrad-Drehung die Seite scrollen
                if page<215 then page+=1                                        '  /
            end select                                                          ' /

            select case asc(left(key,1))
            case 32 to 165                                                      ' Sinnvolle Taste
                if cursor.x<33 then disk.program(cursor.y+page)+=key
            case 8                                                              ' Backspace
                disk.program(cursor.y+page)=left(disk.program(cursor.y+page),len(disk.program(cursor.y+page))-1)

                if cursor.x=1 then
                    if page>0 and cursor.y=1 then
                        page-=1
                    else
                        cursor.y-=1
                    end if
                end if
            end select

            if getchr=true then
                if multikey(&H48) then                                          ' Oben
                    if cursor.y=1 and page>0 then
                        page-=1
                    else
                        cursor.y-=1
                    end if
                end if
                if multikey(&H50) or multikey(&H1C) then                        ' Enter oder  Unten
                    if cursor.y=40 then
                        if page<215 then
                            page+=1
                        end if
                    else
                        cursor.y+=1
                    end if

                end if
            end if

            cursor.x=len(disk.program(cursor.y+page))+1                         ' Den Cursor-X an die Rechte Seite setzen
            if cursor.y<1 then cursor.y=1                                       ' \
            if cursor.y>40 then cursor.y=40                                     ' / Überprüfen, ob Cursor-Y im güligen Bereich liegt

            draw string (544,0),show_cap,&H009900
            if cursor.x=33 then line(cursor.x*12+38,(cursor.y-1)*12)-(cursor.x*12+46,(cursor.y-1)*12+12),&HFF0000,BF
            for n=1 to 40                                                       ' Zeichen-Routine von Strings
                for i=1 to 32
                    if i=cursor.x and n=cursor.y then
                        line(i*12+38,(n-1)*12)-(i*12+46,(n-1)*12+12),&H00FF00,BF
                        draw string(i*12+38,(n-1)*12),mid(disk.program(n+page),i,1),&HAF0000
                    else
                        draw string(i*12+38,(n-1)*12),mid(disk.program(n+page),i,1),&H0000AF
                    end if
                next i
                draw string (1,(n-1)*12),str(n+page),&H00AF00
            next n
        screenunlock
        sleep 10,1
    loop until finish=1

    disk.x=128
    disk.y=128

    if ptr_back<>0 then imagedestroy ptr_back
    while len(inkey):wend
end sub

' ********** SPEICHERN *********************************************************
sub save(disk() as tdisk)
    dim i as integer
    dim n as integer
    dim rpos as integer

    dim choice as string*1
    dim outstr as string

    dim ff as integer=freefile

    for i=1 to 255
        for n=1 to 255
            for rpos=1 to len(disk(i).program(n))
                if mid(disk(i).program(n),rpos,1)="," then                      ' \ ACHTUNG: Kommata in Programmnamen
                    mid(disk(i).program(n),rpos,1)="."                          ' / müssen zu Punkten umgewandelt werden !
                end if
            next rpos
        next n
    next i

    if open("DISKS.DAT" for binary as #ff)=0 then                               ' Speicher-Routine
        retry=false
        for i=1 to ubound(disk)
            outstr=disk(i).caption+string(8-len(disk(i).caption),255)+","
            for n=1 to 255
                if disk(i).program(n)<>"" then
                    outstr+=disk(i).program(n)+","
                else
                    outstr+=chr(27)+","
                end if
            next n
            print #ff,outstr
        next i
    else
        print "ATTENTION! Data could not be saved!"
        input "Do you wish to return to workbench? ";choice
        if ucase(choice)="Y" then retry=true else retry=false
        exit sub
    end if
end sub

' ********** LADEN *************************************************************
sub load(disk() as tdisk)
    dim i as integer
    dim n as integer
    dim rpos as integer

    dim inpstr as string
    dim choice as string*1

    dim ff as integer=freefile

    if open("DISKS.DAT" for input as #ff)=0 then
        i=0
        do ' Disketten Wechsel
            i+=1

            line input #ff,inpstr
'            print inpstr
            inpstr:sleep 5,1
            ' Caption
            for n=1 to 8 'Caption Zeichen
                if mid(inpstr,n,1)<>chr(255) then disk(i).caption+=mid(inpstr,n,1)
            next n

            ' Programme
            n=1
            for rpos=1 to len(inpstr)
                if rpos<10 then continue for

                select case mid(inpstr,rpos,1)
                case chr(27)
                    disk(i).program(n)=""
                case ","
                    n+=1
                case else
                    disk(i).program(n)+=mid(inpstr,rpos,1)
                end select
            next rpos
        loop until i>254
    else
        print "ATTENTION! Data could not be load!"
        input "Do you wish to retry? ";choice
        if ucase(choice)="Y" then retry=true else retry=false
        exit sub
    end if
end sub

sub search(disk() as tdisk)
    ' Such-Variablen
    dim arg as string
    dim key as string*1
    dim result(255) as string

    ' Zähl- und Anzeigevariablen
    dim i as integer
    dim n as integer
    dim update as integer
    dim finish as integer=false
    dim res_index as integer
    dim page as integer

    ' Variablen für Cursor-Blinken
    dim blink as integer
    dim turn as integer=1

    ' Variablen für Mausrad-Bewegung
    dim direction as integer
    dim wheel_old as integer
    dim wheel_new as integer

    ' Variablen für Auswahl von Disketten
    dim disk_index as integer
    dim mouse_index as integer
    dim number(255) as integer
    dim max as integer
    dim mshow as integer
    dim arglen as integer
    dim outset as integer

    ' Multikey-Variablen
    dim MK_new(255) as integer
    dim MK_old(255) as integer

    ' Maus-Variablen
    dim mouse as tmouse
    dim cursor as tdot

    ' Hintergrund-Pointer
    dim back_ptr as any ptr=imagecreate(640,480)
    bload "SearchMenu.bmp",back_ptr

    do
        key=inkey                                                               ' \ Maus und Tastatur
        mouse.reload()                                                          ' / aktualisieren

        wheel_old=wheel_new                                                     ' \
        wheel_new=mouse.wheel                                                   '  } Drehrichtung des Mausrades
        direction=-sgn(wheel_new-wheel_old)                                     ' /

        select case key                                                         ' Tastatur auswerten
        case chr(27)
            ' Empty
        case chr(8)
            arg=left(arg,len(arg)-1)
        case chr(13)
            update=true
        case else
            if len(arg)<33 then arg+=key
        end select

        for i=1 to 150                                                          ' Multikey auf ESC auswerten
            MK_old(i)=MK_new(i)
            MK_new(i)=multikey(i)
            if MK_new(i)=0 then
                if MK_old(i)=0 then
                    ' Empty
                else
                    if i=&H01 then finish=true
                end if
            end if
        next i

        if update=true then                                                     ' Such-Routine
            draw string(0,0),"Update",&H000000                                  ' Rückmeldung

            for i=1 to 255                                                      ' Altes Ergebnis löschen
                result(i)=""
                number(i)=0
            next i

            res_index=0
            max=0

            arglen=len(arg)

            for i=1 to 255                                                      ' ****** SUCHEN ******
                for n=1 to 255
                    if instr(ucase(disk(i).program(n)),ucase(arg))>0 then
                        res_index+=1
                        result(res_index)=disk(i).caption
                        number(res_index)=i
                        max+=1
                        exit for
                    end if
                next n
            next i

            mshow=max                                                           ' Anzahl der gezeigten Ergebnisse errechnen
            if max>28 then mshow=28

            update=false
        end if

        mouse_index=int((mouse.y-65)/12)+page                                   ' Auswertung von Maus auf Überschneidung mit Ergebnisliste
        disk_index=number(mouse_index)
        if mouse_index>28+page then disk_index=-1
        if mouse_index<1 +page then disk_index=-1
        if mouse.x>400 then disk_index=-1
        if mouse.x< 40 then disk_index=-1

        blink+=turn                                                             ' Blinken aktualisieren
        if blink>1024 then turn=-1
        if blink< 0   then turn=+1

        page+=direction                                                         ' Entsprechend dem Mausrad scrollen
        if page>max-28 then page=max-28
        if page<0 then page=0

        if mouse.key=1 then                                                     ' Angeklickte Diskette hinauslegen
            if disk_index>0 then
                if disk(disk_index).visible=false then outset+=1
                disk(disk_index).visible=true
                disk(disk_index).x=10+number(disk_index)*2
                disk(disk_index).y=10+number(disk_index)*2
            end if
        end if

        screenlock
            put (0,0),back_ptr,pset
            draw string (42,41),arg,&H000000

'            draw string (0,0),str(disk_index),&H000000
'            draw string (0,12),str(max),&H000000

            if turn=1 then line (43+len(arg)*8,41)-(44+len(arg)*8,53),&H000000,BF ' Blinkenden Strich zeichnen

            if max=0 and arglen>0 then draw string(50,77),"No results were found",&HFF0000 ' Nachicht, wenn keine Ergebnisse gefunden wurden

            for i=1 to mshow                                                    ' Zeichen-Routine der Ergebnisse
                if i=mouse_index-page then
                    line (40,65+12*i)-(400,77+12*i),&H000000,BF
                    if disk(number(i+page)).visible=false then
                        draw string(50,65+12*i),_
                                str(number(i+page))+string(4-len(str(number(i+page)))," ")+result(i+page),_
                                &HFFFFFF
                    else
                        draw string(50,65+12*i),_
                                str(number(i+page))+string(4-len(str(number(i+page)))," ")+result(i+page),_
                                &H909090
                    end if
                else
                    if disk(number(i+page)).visible=false then
                        draw string(50,65+12*i),_
                                str(number(i+page))+string(4-len(str(number(i+page)))," ")+result(i+page),_
                                &H000000
                    else
                        draw string(50,65+12*i),_
                                str(number(i+page))+string(4-len(str(number(i+page)))," ")+result(i+page),_
                                &H909090
                    end if
                end if
            next i
        screenunlock

    loop until finish=true and key<>chr(27)
    while inkey<>"" : wend
end sub