Datei Browser

Übersicht BlitzBasic Codearchiv

Neue Antwort erstellen

FreetimeCoder

Betreff: Datei Browser

BeitragMo, Nov 13, 2006 12:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi @ all!
Ich habe gestern einen Dateibroswer von mir ausgegraben, nun ja der Rest steht im Code, viel Spaß damit Wink

Code: [AUSKLAPPEN]

;Datei-Browser für B3D
;Von FreetimeCoder
;(c) by Niemandem
;Macht damit was ihr wollt. Das ist wahrscheinlich nicht die beste Lösung,
;aber man kann schön sehen wie ein Browser funktioniert. Wenn ihr was
;zu verbessern habt, dürft ihr gerne was umprogrammieren. Die Bilder, die
;im Code erstellt werden, sollten durch LoadImage() ersetzt werden (Damit
;die besser aussehen)
;Dann noch viel Spaß damit.
;>>>>>>>>>>>www.freetimestudio.de.vu<<<<<<<<<<<<<<


Graphics 260,480,0,2
SetBuffer BackBuffer()

AppTitle "Verzeichnis öffnen"

;Icons erstellen
Dir=CreateImage(10,15)
FilePic=CreateImage(10,15)
TxtPic=CreateImage(10,15)
Button_open=CreateImage(130,30,2)
Button_abbord=CreateImage(130,30,2)
Mouse=CreateImage(20,20)
ScrollUP=CreateImage(20,30,2)
ScrollDown=CreateImage(20,30,2)

;Scroll Hoch Bild Inaktiv
Color 255,0,0
Rect 0,0,20,30
Color 0,0,0
Line 0,29,20,29
Line 0,30,20,30
For i=0 To 10
   Line i,0,0,20
Next
For i=10 To 20
   Line i,0,20,20
Next
CopyRect 0,0,20,30,0,0,BackBuffer(),ImageBuffer(ScrollUP,0)
Cls

;Scroll Hoch Bild Aktiv
Color 0,255,0
Rect 0,0,20,30
Color 0,0,0
Line 0,29,20,29
Line 0,30,20,30
For i=0 To 10
   Line i,0,0,20
Next
For i=10 To 20
   Line i,0,20,20
Next
CopyRect 0,0,20,30,0,0,BackBuffer(),ImageBuffer(ScrollUP,1)
Cls

;Scroll Runter Bild Inaktiv
Color 255,0,0
Rect 0,0,20,30
Color 0,0,0
Line 0,0,20,0
Line 0,1,20,1
For i=0 To 10
   Line 0,10,i,30
Next
For i=10 To 20
   Line 20,10,i,30
Next
CopyRect 0,0,20,30,0,0,BackBuffer(),ImageBuffer(ScrollDown,0)
Cls

;Scroll Runter Bild Aktiv
Color 0,255,0
Rect 0,0,20,30
Color 0,0,0
Line 0,0,20,0
Line 0,1,20,1
For i=0 To 10
   Line 0,10,i,30
Next
For i=10 To 20
   Line 20,10,i,30
Next
CopyRect 0,0,20,30,0,0,BackBuffer(),ImageBuffer(ScrollDown,1)
Cls

;Maus Bild
Color 255,0,0
Line 0,0,10,10
Line 0,0,0,10
Line 0,10,10,10
Line 7,10,12,20
Line 3,10,9,20
Line 10,19,12,19
CopyRect 0,0,20,20,0,0,BackBuffer(),ImageBuffer(Mouse,0)
Cls

;Schließen Button Inaktiv
Color 155,155,155
Rect 0,0,130,30,1
Color 10,10,10
Rect 2,2,126,26,0
Rect 0,0,130,30,0
Text 130/2,30/2,"Abbrechen",1,1
CopyRect 0,0,130,30,0,0,BackBuffer(),ImageBuffer(Button_abbord,0)
MaskImage Button_abbord,255,0,255
Cls

;Schließen Button Aktiv
Color 100,100,100
Rect 0,0,130,30,1
Color 10,10,10
Rect 0,0,130,30,0
Rect 2,2,126,26,0
Text 130/2,30/2,"Abbrechen",1,1
CopyRect 0,0,130,30,0,0,BackBuffer(),ImageBuffer(Button_abbord,1)
MaskImage Button_abbord,255,0,255
Cls

;Öffnen Button Inaktiv
Color 155,155,155
Rect 0,0,130,30,1
Color 10,10,10
Rect 0,0,130,30,0
Rect 2,2,126,26,0
Text 130/2,30/2,"Öffnen",1,1
CopyRect 0,0,130,30,0,0,BackBuffer(),ImageBuffer(Button_open,0)
MaskImage Button_open,255,0,255
Cls

;Öffnen Button Aktiv
Color 100,100,100
Rect 0,0,130,30,1
Color 10,10,10
Rect 0,0,130,30,0
Rect 2,2,126,26,0
Text 130/2,30/2,"Öffnen",1,1
CopyRect 0,0,130,30,0,0,BackBuffer(),ImageBuffer(Button_open,1)
MaskImage Button_open,255,0,255
Cls

;Ordner Icon
Color 255,255,0
Rect 0,3,10,12,1
Rect 0,0,5,5
Color 0,0,0
Rect 0,0,10,15,0
CopyRect 0,0,10,15,0,0,BackBuffer(),ImageBuffer(Dir)
MaskImage Dir,255,0,255
Cls

;Datei Icon
Color 255,255,255
Rect 0,0,10,15,1
Color 0,0,0
Line 0,3,10,3
Line 0,6,10,6
Line 0,9,10,9
Line 0,12,10,12
Rect 0,0,10,15,0
CopyRect 0,0,10,15,0,0,BackBuffer(),ImageBuffer(FilePic)
MaskImage FilePic,255,0,255
Cls

;.txt Datei Icon
Color 255,255,255
Rect 0,0,10,15,1
Color 0,0,0
Rect 0,0,10,15,0
Color 255,0,0
Text 5,7.5,"T",1,1
CopyRect 0,0,10,15,0,0,BackBuffer(),ImageBuffer(TxtPic)
MaskImage TxtPic,255,0,255
Cls
;Icons fertig

Global Folderpath$=CurrentDir() ; Dieses Verzeichniss wird geöffnet

Global Scrollblock=0

.Start ;Ab hier geht das Auslesen eines Ordners los

Filedim=0
Folder=ReadDir(Folderpath) ;Der Ordner wird gelesen
Repeat

File$=NextFile(Folder) ; Alle Dateien abgehen

If File="" ;Wenn die letzte Datei gelesen wurde, aus der Schleife raus
   Exit
EndIf


Filedim=Filedim+1 ;Die Gesamtzahl aller Dateien ermittlen

Forever

Global MaxY=0

Cls
Folder=ReadDir(Folderpath) ;Der Ordner wird erneut gelesen
Dim Files$(Filedim) ;Die Arrays für die Dateien werden erstellt
Dim FilesBack$(Filedim)
Dim FilesType%(Filedim)
For i=1 To Filedim ;Den Arrays werden die Dateien zugeordnet
Files$(i)=NextFile(Folder)
FilesType(i)=FileType(Folderpath+Files(i))
MaxY=MaxY+1
Next

Global Auswahl=0
Global Datei$=""
Y1=0
HidePointer()
;Hauptschleife
While Not KeyHit(1)
   If Scrollblock=0
      Speed#=MouseZSpeed() ;Scrollen mit Scrollrad der Maus
   EndIf
   If Speed>0 And Y1<0
      Y1=Y1+Speed*5
   ElseIf Speed<0 And Y1-GraphicsHeight()>-(MaxY*15+30)
      Y1=Y1+Speed*5
   EndIf
   Cls
   Color 255,255,255
   Rect 0,0,GraphicsWidth(),GraphicsHeight();Hintergrund zeichnen
   
   Y=0+Y1
   If MouseHit(2) ;Bei Rechtsklick wird die Scrollmethode geändert | Von Scrollrad zu Pfeilen
      Scrollblock=-Scrollblock+1
   EndIf
   If MouseHit(1) And Scrollblock=0 ;Wenn die Maustaste gedrückt wurde und die Scrollpfeile nicht aktiv sind
      If MouseY()<440 ;Wenn die Maus auf der Dateiliste ist,
         For Test=1 To Filedim ;werden alle Dateien überprüft
            Y=Test*15+Y1
            If MouseY()<Y And MouseY()>Y-15 And Auswahl=0
               If FilesType(Test)=2 ;Ist die Datei ein Ordner?
                  If Files(Test)<>"." ;Sofern der Ordner nich "." heißt kann weitergemacht werden
                     If Files(Test)="..";Heißt der Ordner ".." muss der Übergeordnete Ordner geöffnet werden
                        Tesst=1
                        While Tester=0 ;Nun wird der ganze Ordnerpfad untersucht, bis der Übergeordnete gefunden wurde
                           Tesst=Tesst+1
                           Rechts$=Right(Folderpath,Tesst)
                           Links$=Left(Rechts,1)
                           If Links="/" Or Links="\"
                              Folderpath=Left(Folderpath,Len(Folderpath)-Tesst+1)
                              Tester=1
                           EndIf
                        Wend
                        Tester=0
                     Else ;Wenn der Ordner ein Untergeordneter ist, wird dieser geöffnet
                        Folderpath=Folderpath+Files(Test)+"\"
                     EndIf
                     Goto Start ;Um den Ordner auszulesen, von vorne anfangen
                  EndIf
               Else ;Ist also kein Ordner und wird als Datei markiert
                  Datei=Files(Test)
               EndIf
            EndIf
         Next   
      Else ;Wenn die Maus auf den Buttons ist
         If ImagesCollide(Mouse,MouseX(),MouseY(),0,Button_open,0,450,1);Öffnen?
            If Datei<>""
               ;Hier wird die Datei geöffnet!
               ;Also muss hier sowas wie "ExecFile" oder Open(Datei) hin
            EndIf
         Else
            If ImagesCollide(Mouse,MouseX(),MouseY(),0,Button_abbord,130,450,1);Abbrechen?
               Goto Ende ;Hier wird abgebrochen
            EndIf      
         EndIf
      EndIf
   EndIf
   If MouseDown(1) And ImagesCollide(Mouse,MouseX(),MouseY(),0,ScrollUP,230,0,1);Scrollpfeil Oben
      Speed=5
   Else
      If MouseDown(1) And ImagesCollide(Mouse,MouseX(),MouseY(),0,ScrollDown,230,30,1);Scrollpfeil Unten
         Speed=-5
      Else
         Speed=0 ;Sonst gar nichts machen
      EndIf
   EndIf
   ;Zum Schluss noch das Visuelle:
   For i=1 To Filedim
      If MouseY()<Y+15 And MouseY()>Y And MouseX()<255 And Scrollblock=0 ;Erstmal schauen, ob die Maus über der Datei ist und kein Scrollen aktiv ist
         Color 255,255,0 ;Wenn die Maus über der Datei ist, Gelb
      Else
         If Datei=Files(i) ;Wenn die Datei ausgewählt ist, Grün
            Color 0,225,0
         Else
            Color 255,255,255 ;Sonst Weiß
         EndIf
      EndIf
      Rect 10,Y,255,15 ;Unter der Datei ein Rechteck malen
      If FilesType(i)=2 ;Ist die Datei ein Ordner=
         If Files(i)<>"." ;Dieser Ordner wird ignoriert
            DrawImage Dir,0,Y ;Ordnericon malen
         EndIf
      Else
         If Right(Files(i),4)=".txt" ;Mit solchen Abfragen kann man verschiedene Icons setzen
            DrawImage TxtPic,0,Y ;.txt Icon malen
         Else
            DrawImage FilePic,0,Y ;Andere Datei? Dann das Dateiicon malen
         EndIf
      EndIf
      ;Als letztes noch die Datei und Ordnernamen:
      Color 0,0,0 ;in Schwarz versteht sich
      If Files(i)<>"." ;Dieser Ordner wird wieder ignoriert
         If Files(i)="..";Bei diesem Ordner muss natürlich was anderes stehen
            Text 10,Y, "Übergeordneten Ordner öffnen";Und zwar das!
         Else
            Text 10,Y, Files$(i) ;Sonst wird einfach der Datei oder Ordnername geschrieben
         EndIf
      EndIf
      Y=I*15+Y1
   Next
   ;Die ganzen Buttons
   If ImagesCollide(Mouse,MouseX(),MouseY(),0,Button_open,0,450,0) And MouseY()>450
      DrawImage Button_open,0,450,1
      Auswahl=1
   Else
      DrawImage Button_open,0,450,0
   EndIf
   If ImagesCollide(Mouse,MouseX(),MouseY(),0,Button_abbord,130,450,0) And MouseY()>450 And (Not ImagesCollide(Mouse,MouseX(),MouseY(),0,Button_open,0,450,0))
      DrawImage Button_abbord,130,450,1
      Auswahl=2
   Else
      DrawImage Button_abbord,130,450,0
   EndIf
   If (Not ImagesCollide(Mouse,MouseX(),MouseY(),0,Button_abbord,130,450,0)) And (Not ImagesCollide(Mouse,MouseX(),MouseY(),0,Button_open,0,450,0))
      Auswahl=0
   EndIf
   If Scrollblock=1 ;Den Hintergrund für die Scrollpfeile und die Pfeile selbst
      Color 155,155,155
      Rect 220,0,40,60,1
      If ImagesCollide(Mouse,MouseX(),MouseY(),0,ScrollUP,230,0,0)
         DrawImage ScrollUP,230,0,1
      Else
         DrawImage ScrollUP,230,0,0
      EndIf
      If ImagesCollide(Mouse,MouseX(),MouseY(),0,ScrollDown,230,30,0)
         DrawImage ScrollDown,230,30,1
      Else
         DrawImage ScrollDown,230,30,0
      EndIf
   EndIf
   DrawImage Mouse,MouseX(),MouseY() ;Mauszeiger
   Y2=Y
   Flip
Wend

.Ende ;Speicher säubern
FreeImage Dir
FreeImage FilePic
FreeImage Button_open
FreeImage Button_abbord
FreeImage Mouse
FreeImage ScrollUP
FreeImage ScrollDown
End
"Wir haben keine Chance, aber wir werden sie nutzen!"
Projekte:
Dexterity Ball (100%)
Aquatic Atmosfear (22 % ca 4700 Zeilen) eingefrohren mangels OOP Fähigkeiten von Blitz
(ehemals Uboot)
PC: Intel D 3 GHz | NVidiaGforce 6700 256 Mb | 1024 Mb DDR RAM 400 Mhz | 2x160 GB S-ATA
  • Zuletzt bearbeitet von FreetimeCoder am So, Jun 12, 2011 16:50, insgesamt einmal bearbeitet

TheMatrix

BeitragMo, Nov 27, 2006 1:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Schon nicht schlecht, aber hier mal ein paar Verbesserungsvorschläge:

1. Ein bischen arg viel Code, für so eine kleine Spierrei
2. Es gibt kein Slider um das Verzeichniss zu scrollen. Ist ein bischen nervig, dass nur mit Mouserad zu erliedigen. Dauert einfach zu lange Wink
3. Man kann sich nur innerhalb von C: bewegen. Was ist, wenn man zwischen mehreren Medien hinundher schalten möchte?
4. Es wäre eventuell besser, ein Ordner mit Doppelklick zu öffnen.
5. Ist ein Ordner an letzter Stelle und man möchte diesen öffnen, so lässt sich dieser nicht öffnen.
6. Es wäre das alles in Funktionen zu packen, damit man seinen Hauptcode nicht "zumüllt".

Fazit: Entwickel lieber nocheinmal ein wenig weiter Wink
°_° °.° °~° °v° .. -.-

FreetimeCoder

BeitragMo, Nov 27, 2006 19:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
Wenn ihr was zu verbessern habt, dürft ihr gerne was umprogrammieren


Tja wie gesagt, hab ichs ausgegraben. Inzwischen benutzte ich den Standartbrowser mit Hilfe der BlitzSys.dll.
"Wir haben keine Chance, aber wir werden sie nutzen!"
Projekte:
Dexterity Ball (100%)
Aquatic Atmosfear (22 % ca 4700 Zeilen) eingefrohren mangels OOP Fähigkeiten von Blitz
(ehemals Uboot)
PC: Intel D 3 GHz | NVidiaGforce 6700 256 Mb | 1024 Mb DDR RAM 400 Mhz | 2x160 GB S-ATA

Neue Antwort erstellen


Übersicht BlitzBasic Codearchiv

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group