Hakemistopuu

Oletko tehnyt jotain, mistä muut voisivat hyötyä. Postita vinkit tänne.
Post Reply
MrMonday
Advanced Member
Posts: 378
Joined: Fri Oct 10, 2008 2:35 pm

Hakemistopuu

Post by MrMonday »

Eli pistän nyt jakoon alkeellisen hakemistopuu systeemin, jota voi tarpeen tai kiinnostuksen mukaan muokkailla paremmaksi.
Perus hiirellä liikkuminen. Olettaa että hiiressäsi on rulla, joten jos ei löydy, on se helppo muuttaa näppäimistölle..

Mutta pidemmittä tyhjänjauhamisitta tässä itse asia:

Code: Select all

SCREEN 800,600,32

ShowMouse ON

Repeat
        
        // Eli ensimmäisenä lisäämme tekstit jotka kertovat 
        // nykyisen sijainnin ja listaa sen sisällön.
        
        ClearText
        Color 255,0,0
        AddText "Kansio: "+CurrentDir()
        AddText ""
        AddText File$
        
        
        // Harvinaisen perushuttua siis yllä oleva.
        
        // Sitten aloitetaan haku, joka jatkuu niin kauan 
        // kun kyseisestä sijainnista tavaraa löytyy.
        
    StartSearch // Aloitetaan haku
        Repeat // Aloitetaan silmukka
        
            Y = Y + TextHeight("A") // Jokaisen lisätyn rivin jälkeen on syytä kasvattaa 
                                    // Y-Koordinaattia, (Huom. Näyttökoordinaatit)
                                    // ettei teksti mene päällekkäin. Kommentoi rivi, niin ymmärrät..
            File$ = FindFile()      // Tässä Merkkijono muuttujaan tallennetaan tieto nykyisestä sijainnista.
 
                If IsDirectory(File$) = 1 Then 
                    Color 255,255,0
                Else
                    Color 255,255,255
                EndIf 
 
                // Ylläolevassa tarkastetaan onko löytynyt tiedosto kansio.
                // Jos löytynyt tiedosto oli kansio, värjätään se keltaiseksi,
                // muussa tapauksessa valkoiseksi
 
                // Alapuolella taasen tarkastellaan, onko löytynyt tiedosto jotain tiettyä muotoa.
                // Esim. nyt kaikki CoolBasicin tukemat kuva formaatit värjäytyvät vihreäksi.
 
                If Lower(Right(File$, 4)) = ".bmp" Then     // Jos löydetty tiedosto oli ".bmp"-päätteinen,
                    Color 0,255,0                           // niin värjätään se vihreäksi.              
                EndIf
                
                If Lower(Right(File$, 4)) = ".jpg" Then
                    Color 0,255,0       
                EndIf
                
                If Lower(Right(File$, 4)) = ".png" Then
                    Color 0,255,0       
                EndIf
                
                If Lower(Right(File$, 4)) = ".tga" Then
                    Color 0,255,0       
                EndIf

                If TextButton(X,Y,File$) = 1 Then   // Jos klikataan tiedostoa, (koskee ainoastaan kansioita)
                    ChDir File$                     // niin siirrytään kansioon.
                EndIf

        Until File$ = "" // Haetaan tiedostoja, kunnes ne loppuvat
    EndSearch
        
    
        Y = MouseZ()*TextHeight("A")    // Hiiren rullalla voipi rullata listaa ylös ja alas.. .. rajattomasti..
    
    If MouseHit(2) Or KeyHit(14) Then   // Jos painetaan hiiren kakkos namikkaa tai näppäimistöltä 
        ChDir ".."                      // backspasea,(Tekstin pyyhkimis näppäin) 
    EndIf                               // niin poistutaan edelliseen sijaintiin ja palataan kohti
                                        // hakemistopolun juurta.
    DrawScreen

Forever

    // Ja vielä lopuksi TextButton() functio, joka tekee tekstistä hiirellä painettavan nappulan,
    // tai tässäkin tapauksessa "linkin".
Function TextButton(X,Y,Txt$)
    Locate X, Y
        AddText Txt$ 
    If MouseX() > X And MouseX() < X+TextWidth(Txt$) And MouseY() > Y And MouseY() < Y + TextHeight(Txt$) And MouseHit(1) Then Return 1       
End Function
Riittää kun lätkäsee sorsan editoriin ja jurnauttaa päälle, eli mittään ylimääräsiä ei tarvitse latailla.
Koodinpätkä on myös jotenkin kommentoitu, jos yhtään auttaa..
Muokatkaa tosiaan vapaasti ja lähettäkää toki myös näytille omat kyhäelmät :)
MaGetzUb
Guru
Posts: 1715
Joined: Sun Sep 09, 2007 12:35 pm
Location: Alavus

Re: Hakemistopuu

Post by MaGetzUb »

Njuu, ihan kätevähän tuo. Itse en ole edes tämmöisiä ikinä tehnytkään, voin sanoa että koodi on yksinkertaisuudessaan mahtava. :) Tosin AddText on vähän turha komento, kun voisit suoraan käyttää Text komentoa buttonien teossa. :P
Solar Eclipse
Meneillä olevat Projektit:
We're in a simulation, and God is trying to debug us.
MrMonday
Advanced Member
Posts: 378
Joined: Fri Oct 10, 2008 2:35 pm

Re: Hakemistopuu

Post by MrMonday »

MaGetzUb wrote:Njuu, ihan kätevähän tuo. Itse en ole edes tämmöisiä ikinä tehnytkään, voin sanoa että koodi on yksinkertaisuudessaan mahtava. :) Tosin AddText on vähän turha komento, kun voisit suoraan käyttää Text komentoa buttonien teossa. :P
Kiitos :D

Jees, onhan tuossa vielä varaa tiivistääkkin, mutta kunhan jotenkin toimivan systeemin sain kasaan,
vieläpä kohtalaisen vähällä purkalla, niin saavat muut sitten korjata niitä pikkuvikoja :P
phons
Guru
Posts: 1056
Joined: Wed May 14, 2008 10:11 am

Re: Hakemistopuu

Post by phons »

Haha´, ihmettelin ainakin 1min miksei joissakin kansioissa muka ollut mitään mutta tajusin ettei tuota y juttua koskaan nollata, eli jos olla program filesin lopussa ja mennään kansioon jossa on yksi file, niin joutuu skrollaamaan ylös jotta näkisin sen, eli nollaus siinä vaiheessa kun siirrytään kansioissa. Muuten ihan ok...
Image
User avatar
Knoy
Active Member
Posts: 187
Joined: Fri Feb 12, 2010 10:50 pm

Re: Hakemistopuu

Post by Knoy »

Code: Select all

SCREEN 800,600,32

ShowMouse ON

Dim Txt(199) As String 

Repeat
        
        // Eli ensimmäisenä lisäämme tekstit jotka kertovat 
        // nykyisen sijainnin ja listaa sen sisällön.
        
        ClearText
        Color 255,0,0
        AddText "Kansio: "+CurrentDir()+TekstiFile$
        AddText ""
        AddText File$
        
        
        // Harvinaisen perushuttua siis yllä oleva.
        
        // Sitten aloitetaan haku, joka jatkuu niin kauan 
        // kun kyseisestä sijainnista tavaraa löytyy.
        
    StartSearch // Aloitetaan haku
        Repeat // Aloitetaan silmukka
        
            Y = Y + TextHeight("A") // Jokaisen lisätyn rivin jälkeen on syytä kasvattaa 
                                    // Y-Koordinaattia, (Huom. Näyttökoordinaatit)
                                    // ettei teksti mene päällekkäin. Kommentoi rivi, niin ymmärrät..
            File$ = FindFile()      // Tässä Merkkijono muuttujaan tallennetaan tieto nykyisestä sijainnista.

                If IsDirectory(File$) = 1 Then 
                    Color 255,255,0
                Else
                    Color 255,255,255
                EndIf 

                // Ylläolevassa tarkastetaan onko löytynyt tiedosto kansio.
                // Jos löytynyt tiedosto oli kansio, värjätään se keltaiseksi,
                // muussa tapauksessa valkoiseksi

                // Alapuolella taasen tarkastellaan, onko löytynyt tiedosto jotain tiettyä muotoa.
                // Esim. nyt kaikki CoolBasicin tukemat kuva formaatit värjäytyvät vihreäksi.

                If Lower(Right(File$, 4)) = ".bmp" Or Lower(Right(File$, 4)) = ".jpg" Or Lower(Right(File$, 4)) = ".png" Or Lower(Right(File$, 4)) = ".tga" Then     // Jos löydetty tiedosto oli ".bmp"-päätteinen,
                    Color 0,255,0                           // niin värjätään se vihreäksi.                    
                ElseIf Lower(Right(File$, 4)) = ".txt" Then
                    Color 125,125,125
                ElseIf Lower(Right(File$, 4)) = ".exe" Then
                    Color 255,0,0
                ElseIf Lower(Right(File$, 4)) = ".wav" Or Lower(Right(File$, 4)) = ".raw" Or Lower(Right(File$, 4)) = ".mp3" Or Lower(Right(File$, 4)) = ".ogg" Then
                    Color 0,0,255
                EndIf 
                
                If Tekstiä = 0 Then 

                    If TextButton(X,Y,File$) = 1 Then   // Jos klikataan tiedostoa, (koskee ainoastaan kansioita)
                        If IsDirectory(File$)= 1 Then 
                            ChDir File$                     // niin siirrytään kansioon.
                        ElseIf Lower(Right(File$, 4)) = ".txt" Then
                            Tekstiä = 1
                            TekstiFile$=File$
                            TxtF=OpenToRead(File$)
                                For Var = 0 To 199
                                    Txt(Var)=ReadLine(TxtF)
                                Next Var
                            CloseFile TxtF
                        ElseIf Lower(Right(File$, 4)) = ".bmp" Or Lower(Right(File$, 4)) = ".jpg" Or Lower(Right(File$, 4)) = ".png" Or Lower(Right(File$, 4)) = ".tga" Then
                            Tekstiä = 2
                            TekstiFile$=File$
                            Kuva=LoadImage(File$)
                        ElseIf Lower(Right(File$, 4)) = ".wav" Or Lower(Right(File$, 4)) = ".raw" Or Lower(Right(File$, 4)) = ".mp3" Or Lower(Right(File$, 4)) = ".ogg" Then
                            Ääni=LoadSound(File$)
                            PlaySound Ääni
                        ElseIf Lower(Right(File$, 4)) = ".exe" Then
                            Execute File$
                        EndIf 
                    EndIf
                
                EndIf 

        Until File$ = "" // Haetaan tiedostoja, kunnes ne loppuvat
    EndSearch
    
    If Tekstiä = 1 Then
    
        TextY = MouseZ()*TextHeight("A")    // Hiiren rullalla voipi rullata listaa ylös ja alas.. .. rajattomasti..
        
         For Var = 0 To 49
            Text 15,30+(15*Var)+TextY,Txt(Var)
         Next Var

    ElseIf Tekstiä = 2 Then
    
        DrawImage Kuva,15,30
    
    Else
    
        Y = MouseZ()*TextHeight("A")    // Hiiren rullalla voipi rullata listaa ylös ja alas.. .. rajattomasti..
        
    EndIf 
    
    If MouseHit(2) Or KeyHit(14) Then   // Jos painetaan hiiren kakkos namikkaa tai näppäimistöltä 
        If Tekstiä=0 Then 
            ChDir ".."                      // backspasea,(Tekstin pyyhkimis näppäin) 
        Else
            TekstiFile$=""
            Kuva=0
            Tekstiä = 0
            For Var = 0 To 99
                Txt(Var)=""
            Next Var
        EndIf 
    EndIf                               // niin poistutaan edelliseen sijaintiin ja palataan kohti
                                        // hakemistopolun juurta.
    DrawScreen

Forever

    // Ja vielä lopuksi TextButton() functio, joka tekee tekstistä hiirellä painettavan nappulan,
    // tai tässäkin tapauksessa "linkin".
Function TextButton(X,Y,Txt$)
    Locate X, Y
        AddText Txt$ 
    If MouseX() > X And MouseX() < X+TextWidth(Txt$) And MouseY() > Y And MouseY() < Y + TextHeight(Txt$) And MouseHit(1) Then Return 1       
End Function
Nyt voi avata tekstiä (.txt), kuvia (.bmp, .png, .jpg ja .tga), ääniä (.raw, .wav, .ogg ja .mp3) ja exejä (.exe).
MrMonday
Advanced Member
Posts: 378
Joined: Fri Oct 10, 2008 2:35 pm

Re: Hakemistopuu

Post by MrMonday »

phons wrote:Haha´, ihmettelin ainakin 1min miksei joissakin kansioissa muka ollut mitään mutta tajusin ettei tuota y juttua koskaan nollata, eli jos olla program filesin lopussa ja mennään kansioon jossa on yksi file, niin joutuu skrollaamaan ylös jotta näkisin sen, eli nollaus siinä vaiheessa kun siirrytään kansioissa. Muuten ihan ok...
Tuo minulla seuraavaksi oli mielessä tehdä, kun itsekkin sitä aluksi hämmästelin, mutta jostain syystä sitten jäikin pois :?
Knoy wrote:

Code: Select all

..Koodia..
Nyt voi avata tekstiä (.txt), kuvia (.bmp, .png, .jpg ja .tga), ääniä (.raw, .wav, .ogg ja .mp3) ja exejä (.exe).
Tämä oli loistava lisä, kiitos siitä, koska itsellänikin oli tämä suunnitelmissa toteuttaa, mutta vieläkään kun en mikään mestari ohjelmoinnissa ole, niin olisin varmaan repinyt itseni kaljuksi :lol:
Post Reply