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:

eine Fileselectbox (Datei laden/speichern) ohne API
Gehe zu Seite 1, 2  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Projektvorstellungen
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
stevie1401



Anmeldungsdatum: 04.07.2006
Beiträge: 133

BeitragVerfasst am: 17.10.2006, 13:36    Titel: eine Fileselectbox (Datei laden/speichern) ohne API Antworten mit Zitat

So, hier ist sie nun: die Fileselectbox ohne API und im "Anfängerstil programmiert.
Über Anregungen würde ich mich sehr freuen.



Code:
'Eine Fileselectbox unter Freebasic ohne API
'Danke an ytwinky und terminator für die Tips
'Über feedbacks würde ich mich sehr freuen.
'(c) by stevie1401   17.10.2006


'Aufruf ist: auswahl$=fs$(DialogString,DateiendungString)

'Die Function dos_win$ wandelt die ASCII richtig um,
'sodass sie unter Windows richtig angezeigt werden.

'Die Function fs$ läuft unter SCREEN 19 und SCREEN 20


Declare Function fs$(Dialog$,Dateiendung$)
Declare Function dos_win$(t$)
Screen 19,32,2,1

Chdir exepath
auswahl$=fs$(dos_win$("Datei öffnen"),"*.*")
Cls
Print auswahl$
t$="Bitte eine Taste drücken"
print dos_win$(t$)
sleep
Chdir exepath
auswahl$=fs$(dos_win$("Datei speichern unter"),"*.*")
Cls
Print auswahl$

sleep


Function fs$(Dialog$,Dateiendung$)
   
    anz=2000
    Dim DateiAnz,OrdnerAnz,Auswahl$,SuchPfad$
    Dim O_rdner$(anz),D_atei$(anz)
    Dim xordner(anz),yordner(anz),xdatei(anz),ydatei(anz), lw$(30)
    Dim ordnerfarbe,dateifarbe,textfarbe,neulesen,MaxDateiLaenge,MaxOrdnerLaenge
    Dim Dateidummy$(anz),OrdnerDummy$(anz),rueckgabe,inbox,links,rechts
    Dim mx,my,mr,mk
    links=1
    rechts=2
    inbox=rechts
    Do
       
        neulesen=0
        ordnerfarbe=Rgb(255,255,0)
        dateifarbe=Rgb(40,59,80)
        Texthintergrund=Rgb(101,150,202)
        laufwerkfarbe=Rgb(255,255,255)
        Max_FS_Zeilen=25
       
        Line (0,0)-(800,600),Rgb(101,150,202),bf 'obere Box
        Line (0,0)-(800,40),Rgb(80,119,161),bf  'linke Box
        Line (0,40)-(40,600),Rgb(40,59,80),bf  'Bix in der Mitte
       
        Line (42,524)-(580,546),Rgb(40,59,80),b 'erste untere Dialogbox
        Line (42,558)-(580,580),Rgb(40,59,80),b 'zweite untere Dialogbox
       
        Line (585,555)-(650,586),Rgb(40,59,80),b 'Abbruch-Box
        Line (680,555)-(770,586),Rgb(40,59,80),b 'Übernehmen-Box
       
        Line (94,70)-(320,500),Rgb(255,255,255),b ' Box für die Ordner
        Line (460,70)-(670,500),Rgb(255,255,255),b ' Box für die Dateien
     
       
       
       
        Line (0,0)-(800,600),Rgb(0,0,0),b 'Umrandung
        Color Rgb(255,255,255),Rgb(80,119,161)
        Locate 2,40
        Print Dialog$
        Color 0,Texthintergrund
        Locate 36,75
        Print "Abbruch"
        Locate 36,87
        Print dos_win$("übernehmen")
        Rem aktuellen Pfad anzeigen
        Color 0,Rgb(80,119,161)
        Locate 2,2
        Print Curdir
        Color 0,Texthintergrund
        Rem Dateiendung anzeigen
        Locate 36,10
        Print Dateiendung$
       
        rem Laufwerke ermitteln
        lwanz=0
        For i=Asc("c") To Asc("z")
            rem Dateien aller Art ermitteln
            FileName$ = Dir$(Chr$(i)+":\*.*", &H20 Or &H02 Or &H04 Or &H01 Or &H10)
            If FileName$<>"" Then
                lwanz=lwanz+1
                lw$(lwanz)=Chr$(i)
            End If
        Next i
       
        Color laufwerkfarbe,Rgb(40,59,80)
        y=3
        If lwanz>0 Then
            For i=1 To lwanz
                Locate y+i,2
                Print lw$(i)+":\"
            Next i
        End If
       
        Suchpfad$=curdir
        suche$ = SuchPfad$+"\"+Dateiendung$
        Rem doppelte Backslashes entfernen
        s=Instr(suche$,"\\")
        If s>0 Then
            l=Len(suche$)
            suche$=Left$(suche$,s)+Right$(suche$,l-s-1)
        End If
       
       
       
       
        attrib=1+2+4+16+32+8
        filename$= Dir( suche$,attrib,@rueckgabe)
        DateiAnz=0
        OrdnerAnz=1
        O_rdner$(OrdnerAnz)=".."
        Do
           
            If filename$ <> "." and filename$<> ".." Then
               
                if rueckgabe and 16 then  'Ist es ein Ordner?
                    OrdnerAnz=OrdnerAnz+1
                    rem O_rdner$(OrdnerAnz)=dos_win$(Filename$)
                    O_rdner$(OrdnerAnz)=Filename$
                else
                    DateiAnz=DateiAnz+1
                    rem D_atei$(DateiAnz)=dos_win$(FileName$)
                    D_atei$(DateiAnz)=FileName$
                end if   
               
            end if
           
            filename$ = Dir(@rueckgabe)
           
        Loop while filename$ > ""
       
        rem Datei-Ausgabelänge kürzen, damit es in die Ausgabebox passt
        rem ...und nebenbei die Ausgabe auch noch "Ö" und "Ä" etc richtig anzeigen lassen
        rem ...dazu packen wir die Datei in einen Dummy, welche dann angezeigt wird
        For i=1 To DateiAnz
            If Len(D_atei$(i))>20 Then
                DateiDummy$(i)=Left$(D_atei$(i),20)+"..."
            Else
                DateiDummy$(i)=D_atei$(i)
            End If
            DateiDummy$(i)=dos_win$(DateiDummy$(i))
            Rem ggf. mit Leezeichen auffüllen, um den Rest der Zeile zu löschen
            DateiDummy$(i)=DateiDummy$(i)+Space$(23-Len(DateiDummy$(i)))
        Next i
       
       
       
        Rem keine Daten gefunden?
        If DateiAnz=0 Then
            DateiAnz=1
            D_atei$(DateiAnz)="Keine Daten gefunden"
            DateiDummy$(DateiAnz)=D_atei$(DateiAnz)
        End If
       
       
       
        rem Ordner-Ausgabelänge kürzen, damit es in die Ausgabebox passt
        rem ...und nebenbei die Ausgabe auch noch "Ö" und "Ä" etc richtig anzeigen lassen
        rem ...dazu packen wir die Datei in einen Dummy, welche dann angezeigt wird
        For i=1 To OrdnerAnz
            If Len(O_rdner$(i))>20 Then
                OrdnerDummy$(i)=Left$(O_rdner$(i),20)+"..."
            Else
                OrdnerDummy$(i)=O_rdner$(i)
            End If
            OrdnerDummy$(i)=dos_win$(OrdnerDummy$(i))
            Rem ggf. mit Leezeichen auffüllen, um den Rest der Zeile zu löschen
            OrdnerDummy$(i)=OrdnerDummy$(i)+Space$(23-Len(OrdnerDummy$(i)))
        Next i
       
       
       
        rem Ordner anzeigen
       
        y=5
        x=15
        OrdnerShowStart=0
        i=OrdnerShowStart
        OrdnerShowEnde=0
        Color ordnerfarbe,Texthintergrund
        Do
            i=i+1
            y=y+1
            OrdnerShowEnde=OrdnerShowEnde+1
            Locate y,x
            rem Print dos_win$(O_rdner$(i))
            Print Ordnerdummy$(i)
            yordner(i)=y
            xordner(i)=x
        Loop Until OrdnerShowEnde=Max_FS_Zeilen Or i=OrdnerAnz
       
        rem Dateien anzeigen
       
       
        y=5
        x=60
       
        DateiShowStart=0
        i=DateiShowStart
        DateiShowEnde=0
        Color dateifarbe,Texthintergrund
        Do
            i=i+1
            y=y+1
            DateiShowEnde=DateiShowEnde+1
            Locate y,x
           
            Print DateiDummy$(i)
            ydatei(i)=y
            xdatei(i)=x
        Loop Until DateiShowEnde=Max_FS_Zeilen Or i=DateiAnz
       
        Do
           
           
            rem Mausabrage
            Getmouse mx,my,mr,mk
            taste$=Inkey$
           
           
           
            If Len(taste$)=2 Then
                rem Pfeil nach unten
                If Right$(taste$,1)="P" Then 
                    if inbox=links then
                        taste$="a"
                    else
                        taste$="-"
                    end if
                   
                End If
                rem Pfeil nach oben
                If Right$(taste$,1)="H" Then 
                    if inbox=links then
                        taste$="q"
                    else
                        taste$="+"
                    end if
                End If
                rem Pfeil nach rechts
                If Right$(taste$,1)="M"  Then 
                    if inbox=links then
                        inbox=rechts
                    else
                        inbox=links
                    end if
                End If
                rem Pfeil nach links
                If Right$(taste$,1)="K"  Then 
                    if inbox=links then
                        inbox=rechts
                    else
                        inbox=links
                    end if
                End If
            End If
           
            if inbox=links then
               
                Line (92,68)-(322,502),Rgb(255,255,255),b ' Box für die Ordner
                Line (94,70)-(320,500),Rgb(255,255,255),b ' Box für die Ordner
               
               
                Line (458,68)-(672,502),Rgb(255,255,255),b ' Box für die Dateien
                Line (460,70)-(670,500),texthintergrund,b ' Box für die Dateien
            else
                Line (94,70)-(320,500),texthintergrund,b ' Box für die Ordner
                 Line (92,68)-(322,502),Rgb(255,255,255),b ' Box für die Ordner
                Line (458,68)-(672,502),Rgb(255,255,255),b ' Box für die Dateien
                Line (460,70)-(670,500),Rgb(255,255,255),b ' Box für die Dateien
            end if
           
           
           
           
           
            If taste$="a" And OrdnerShowStart+OrdnerShowEnde<OrdnerAnz Then      'das "Plus" für Ordner
               
                y=5
                x=15
                OrdnerShowStart=OrdnerShowStart+1
                i=OrdnerShowStart
                OrdnerShowEnde=0
                Color ordnerfarbe,Texthintergrund
                Do
                    i=i+1
                    y=y+1
                    OrdnerShowEnde=OrdnerShowEnde+1
                    Locate y,x
                    rem Print dos_win$(O_rdner$(i))+Space$(MaxOrdnerLaenge-Len(O_rdner$(i)))
                    Print OrdnerDummy$(i)
                    yordner(i)=y
                    xordner(i)=x
                Loop Until OrdnerShowEnde=Max_FS_Zeilen Or i=OrdnerAnz
               
               
               
               
            End If
           
            If taste$="q" And OrdnerShowStart>0 Then      'das "Minus" für Ordner
               
                y=5
                x=15
                OrdnerShowStart=OrdnerShowStart-1
                i=OrdnerShowStart
                OrdnerShowEnde=0
                Color ordnerfarbe,Texthintergrund
                Do
                    i=i+1
                    y=y+1
                    OrdnerShowEnde=OrdnerShowEnde+1
                    Locate y,x
                    rem Print dos_win$(O_rdner$(i))+Space$(MaxOrdnerLaenge-Len(O_rdner$(i)))
                    Print OrdnerDummy$(i)
                    yordner(i)=y
                    xordner(i)=x
                Loop Until OrdnerShowEnde=Max_FS_Zeilen Or i=OrdnerAnz
               
               
               
               
            End If
           
           
            If taste$="-" And DateiShowStart+DateiShowEnde<DateiAnz Then
                DateiShowStart=DateiShowStart+1
                i=DateiShowStart
                y=5
                x=60
                anz=0
                DateiShowEnde=0
                Color dateifarbe,Texthintergrund
                Do
                    i=i+1
                    y=y+1
                   
                    DateiShowEnde=DateiShowEnde+1
                    ydatei(i)=y
                    xdatei(i)=x
                    Locate y,x
                    rem Print dos_win$(D_atei$(i))+Space$(MaxDateiLaenge-Len(D_atei$(i)))
                    Print DateiDummy$(i)
                Loop Until DateiShowEnde=Max_FS_Zeilen Or i=DateiAnz
               
            End If 
           
           
           
            If taste$="+" And DateiShowStart>0 Then
                DateiShowStart=DateiShowStart-1
                i=DateiShowStart
               
                y=5
                x=60
                DateiShowEnde=0
               
                Color dateifarbe,Texthintergrund
                Do
                    i=i+1
                    y=y+1
                   
                    DateiShowEnde=DateiShowEnde+1
                    ydatei(i)=y
                    xdatei(i)=x
                    Locate y,x
                    rem Print dos_win$(D_atei$(i))+Space$(MaxDateiLaenge-Len(D_atei$(i)))
                    Print DateiDummy$(i)
                Loop Until DateiShowEnde=Max_FS_Zeilen Or i=DateiAnz
               
               
            End If
           
            rem Maus auf einem Ordner?
            For i=OrdnerShowstart To OrdnerShowstart+OrdnerShowEnde
                If mx>xordner(i)*8-8 And mx<xordner(i)*8-8+100 And my>yordner(i)*16-16 And my<yordner(i)*16 Then
                    If mk=1 Then
                       
                        Chdir O_rdner$(i)
                        Do
                            Getmouse mx,my,mr,mk
                            taste$=Inkey$
                        Loop Until taste$="" And mk=0
                        neulesen=1
                    End If
                End If
            Next i
            rem Maus auf einer Datei?
            For i=DateiShowStart To DateiShowStart+DateiShowEnde
                If mx>xdatei(i)*8-8 And mx<xdatei(i)*8+200 And my>ydatei(i)*16-16 And my<ydatei(i)*16 Then
                    Color Rgb(255,255,255),Texthintergrund
                    Locate ydatei(i),xdatei(i)
                    rem Print D_atei$(i)
                    Print DateiDummy$(i)
                   
                    If mk=1 Then
                        Auswahl$=D_atei$(i)
                        Locate 34,10
                        Print Auswahl$+Space$(MaxDateiLaenge-Len(Auswahl$))
                    End If
                   
                Else
                    Color textfarbe,Texthintergrund
                    Locate ydatei(i),xdatei(i)
                    rem Print D_atei$(i)   
                    Print DateiDummy$(i)
                End If
               
               
            Next i
           
            Rem Maus auf der Abbruch-Box?
            If mx>585 And mx<650 And my>555 And my<586 And mk=1 Then
                Auswahl$="Abbruch"
                taste$=Chr$(27)
            End If
            Rem Maus auf der Übernehmen-Box?
            If mx>680 And mx<770 And my>555 And my<586 And mk=1 And Auswahl$<>"" Then
                Auswahl$=Curdir+"\"+Auswahl$
                Rem Doppelte Ba
                s=Instr(auswahl$,"\\")
                If s>0 Then auswahl$=Left$(auswahl$,s)+Right$(auswahl$,Len(auswahl$)-s-1)
                taste$=Chr$(27)
            End If
           
            Rem Maus in der zweiten untere Dialogbox?
           
            If mx>42 And mx<580 And my>558 And my<580 And mk=1 Then
                Do
                    Getmouse mx,my,mr,mk
                    taste$=Inkey$
                    taste=Asc(taste$)
                Loop Until taste$="" And mk=0
               
                Color Rgb(255,255,255),Texthintergrund
               
                Do
                    Getmouse mx,my,mr,mk
                    taste$=Inkey$
                    taste=Asc(taste$)
                    Locate 36,10
                    Print Dateiendung$+"|  "
                    If Len (taste$)=1 And taste$<>"" And taste<>13 And taste<>27  And taste<>8  Then
                        Dateiendung$=Dateiendung$+taste$
                        Locate 36,10
                        Print Dateiendung$+"|  "
                       
                    End If
                    If taste=8 And Len(Dateiendung$)>0 Then
                        Dateiendung$=Left$(Dateiendung$,Len(Dateiendung$)-1)
                       
                        Locate 36,10
                        Print Dateiendung$+"|  "
                       
                    End If
                    Sleep 1
                Loop Until taste$=Chr$(13) Or Len(taste$)>1 Or taste$=Chr$(27) Or mk>0
                Color 0, Texthintergrund
                Locate 36,10
                Print Dateiendung$+"  "
                neulesen=1
               
            End If
           
            Rem Auf ein Laufwerkbuchstaben geklickt?
            For i=1 To lwanz
                y=3
                If mx>2 And mx<60 And my>(y+i)*16-16 And my<(y+i)*16 Then
                    rem Color laufwerkfarbe,Rgb(40,59,80)
                    Color Rgb(255,0,0),Rgb(40,59,80)
                    Locate y+i,2
                    Print lw$(i)+":\"
                    If mk=1 Then
                       
                       
                        NeuesLaufwerk$=lw$(i)+":\"
                       
                        Chdir NeuesLaufwerk$
                        Do
                            Getmouse mx,my,mr,mk
                            taste$=Inkey$
                        Loop Until taste$="" And mk=0
                        neulesen=1
                       
                    End If
                   
                Else
                    Color laufwerkfarbe,Rgb(40,59,80)
                    Locate y+i,2
                    Print lw$(i)+":\"
                   
                End If
               
            Next i
           
            Rem Maus in der Datei-Anzeige-Box?
           
            If mx>42 And mx<580 And my>524 And my<546 Then
                If mk=1 Then
                    Auswahl$=""
                    Color Rgb(255,0,0),texthintergrund
                    Locate 34,10
                    print space$(30)
                    rem Print auswahl$+"|"
                    Rem Maus und Tastaturpuffer leeren
                   
                    Do
                        Getmouse mx,my,mr,mk
                        taste$=Inkey$
                       
                    Loop Until taste$="" And mk=0
                   
                    Rem Eingabe
                    Do
                        Getmouse mx,my,mr,mk
                        taste$=Inkey$
                        taste=Asc(taste$)
                        Locate 34,10
                        Print Auswahl$+"|  "
                        If Len (taste$)=1 And taste$<>"" And taste<>13 And taste<>27  And taste<>8  Then
                            Auswahl$=Auswahl$+taste$
                            Locate 34,10
                            Print Auswahl$+"|  "
                           
                        End If
                        If taste=8 And Len(Auswahl$)>0 Then
                            Auswahl$=Left$(Auswahl$,Len(Auswahl$)-1)
                           
                            Locate 34,10
                            Print Auswahl$+"|  "
                           
                        End If
                        Sleep 1
                       
                    Loop Until taste$=chr$(13) or mk>0
                    Color Textfarbe,texthintergrund
                    Locate 34,10
                    Print auswahl$
                End If
               
            End If
           
            Sleep 1  'Pause für die CPU
        Loop Until taste$=Chr$(27) Or Auswahl$="Abbruch" Or neulesen=1
        neulesen=0
    Loop Until taste$=Chr$(27)
   
    fs$=Auswahl$
   
   
   
    Erase lw$
    Erase O_rdner$,D_atei$
    Erase xordner,yordner,xdatei,ydatei,OrdnerDummy$,Dateidummy$
   
   
   
End Function

Function dos_win$(t$)
    For i=1 To Len(t$)
        If Mid$(t$,i,1)=Chr$(252) Then
            Mid$(t$,i,1)=Chr$(129)
        End If
    Next i
    For i=1 To Len(t$)
        If Mid$(t$,i,1)=Chr$(228) Then
            Mid$(t$,i,1)=Chr$(132)
        End If
    Next i
    For i=1 To Len(t$)
        If Mid$(t$,i,1)=Chr$(196) Then
            Mid$(t$,i,1)=Chr$(142)
        End If
    Next i
    For i=1 To Len(t$)
        If Mid$(t$,i,1)=Chr$(246) Then
            Mid$(t$,i,1)=Chr$(148)
        End If
    Next i
    For i=1 To Len(t$)
        If Mid$(t$,i,1)=Chr$(214) Then
            Mid$(t$,i,1)=Chr$(153)
        End If
    Next i
    For i=1 To Len(t$)
        If Mid$(t$,i,1)=Chr$(220) Then
            Mid$(t$,i,1)=Chr$(154)
        End If
    Next i
    dos_win$=t$ 
End Function



Stevie1401
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Mao



Anmeldungsdatum: 25.09.2005
Beiträge: 4409
Wohnort: /dev/hda1

BeitragVerfasst am: 17.10.2006, 13:57    Titel: Antworten mit Zitat

Zuersteinmal ein nett gemeinter(!) Hinweis:
Wenn das Programm so groß ist, dann lad' doch bitte mal den Source hoch statt ihn zu posten, oder poste ihn in NoPaste auf freebasic.de. zwinkern

So, nun zum Programm:
das Ergebnis sieht ser schön aus, funktioniert problemlos. lächeln
Allerdings im Source: du mixt deine Kommentare zwischen ' und REM. Benutz doch nicht mehr REM, das is' soooo alt. zwinkern
Aber sonst: weiter so! Daumen rauf!
_________________
Eine handvoll Glück reicht nie für zwei.
--
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ytwinky



Anmeldungsdatum: 28.05.2005
Beiträge: 2624
Wohnort: Machteburch

BeitragVerfasst am: 17.10.2006, 21:21    Titel: Antworten mit Zitat

fbc output hat Folgendes geschrieben:
Command executed:
"D:\Sprachen\FreeBASIC\fbc.exe" "D:\Sprachen\FreeBasic\bas\SelectBox.Bas"

Compiler output:
D:/Sprachen/FreeBasic/bas/SelectBox.Bas(556) : warning level 0: Implicit variable allocation, taste
D:/Sprachen/FreeBasic/bas/SelectBox.Bas(558) : warning level 0: Implicit variable allocation, taste

Results:
Compilation successful
Generated executable: D:\Sprachen\FreeBasic\bas\SelectBox.exe

System:
FBIde: 0.4.6
fbc: FreeBASIC Compiler - Version 0.16 for win32 (target:win32)
OS: Windows XP (build 2600, Service Pack 2)
das läßt sich aber leicht abfangen mit
Code:
..
Function fs$(Dialog$,Dateiendung$)
  Dim Taste$
..
Ich hatte gleich den Verdacht, daß 'Option Explicit' den Fehler aufdecken würde..
..aber da hätte ich alle Variablen dimensionieren müssen, das war mir denn doch zuviel..
Aber so funktionierts mit FB0.16bSE..
..aber weil ich ein fanatischer Mausquäler bin, fehlt mir doch der Doppelclick zur Übernahme.
Läßt sich ja vllt. noch einbauen..
Ansonsten: Ein gelungenes Stück.
[Edit]
Für die Umformung der Umlaute solltest du dir aber mal TransUmlaut.Bas ansehen..
..das scheint mir doch ein ganzes Stück schneller zu gehen als Dos_Win(..) zwinkern

Gruß
ytwinky
_________________
v1ctor hat Folgendes geschrieben:
Yeah, i like INPUT$(n) as much as PRINT USING..
..also ungefähr so, wie ich GOTO..
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Michael712
aka anfänger, programmierer


Anmeldungsdatum: 26.03.2005
Beiträge: 1593

BeitragVerfasst am: 17.10.2006, 23:09    Titel: Antworten mit Zitat

Ich gebe direkt mal einen Tipp ab:

Keine Suffixe mehr verwenden (%, $, etc), ALLE Variablen dimensionieren, und auch bei Funktionen die zurückgegebene Variable immer angeben(also Function blubb() As Integer). "Dim Variable" geht auch nicht mehr, es muss immer der Datentyp angegeben werden.
Die neuste CVS Version meckert dann, und dann kommt da sowas raus(ist jetzt dein Prog mit der 0.17 CVS compiliert) :

Code:
fbc2 test.bas
test.bas(15) error 136: Suffixes are only valid in -lang deprecated or qb, found '(' in 'Declare Function fs$(Dialog$,Dateiendung$)'
test.bas(16) error 136: Suffixes are only valid in -lang deprecated or qb, found '(' in 'Declare Function dos_win$(t$)'
test.bas(20) error 136: Suffixes are only valid in -lang deprecated or qb, found 'auswahl' in 'auswahl$=fs$(dos_win$("Datei öffnen"),"*.*")'
test.bas(20) error 56: Type mismatch, at parameter 1 of FS() in 'auswahl$=fs$(dos_win$("Datei öffnen"),"*.*")'
test.bas(22) error 136: Suffixes are only valid in -lang deprecated or qb, found 'auswahl' in 'Print auswahl$'
test.bas(23) error 136: Suffixes are only valid in -lang deprecated or qb, found 't' in 't$="Bitte eine Taste drücken"'
test.bas(24) error 136: Suffixes are only valid in -lang deprecated or qb, found 't' in 'print dos_win$(t$)'
test.bas(27) error 136: Suffixes are only valid in -lang deprecated or qb, found 'auswahl' in 'auswahl$=fs$(dos_win$("Datei speichern unter"),"*.*")'
test.bas(29) error 136: Suffixes are only valid in -lang deprecated or qb, found 'auswahl' in 'Print auswahl$'
test.bas(34) error 136: Suffixes are only valid in -lang deprecated or qb, found '(' in 'Function fs$(Dialog$,Dateiendung$)'
test.bas(34) error 123: Too many errors, exiting


Und den Code immer mit -lang qb kompilieren ist meiner Meinung nach nicht so schön grinsen

Sogar Option Explicit ist auch nur in -lang deprecated, das ist bei der CVS Version standard:

Code:
error 134: Only valid in -lang deprecated or qb, found 'explicit' in 'option explicit'


Und es wird auch nicht kompiliert, wenn eine Variable nicht deklariert ist.


Hab deinen Code schon ein bisschen verbessert, hab aber keine zeit zu testen. Morgen sag ich dann was darüber zwinkern
_________________
Code:
#include "signatur.bi"
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
stevie1401



Anmeldungsdatum: 04.07.2006
Beiträge: 133

BeitragVerfasst am: 18.10.2006, 06:29    Titel: Antworten mit Zitat

Vielen Dank für eure Antworten.
@Mao
Ich habe NoPaste noch nicht verstanden, ich werde versuchen zukünftig den Code dorthin hochzuladen.
@ytwinky
Ja, ich gebe dir vollkommen Recht: Doppelklick muss sein lächeln
Auch fehlen mir persönlich noch die Schiebebalken. Aber letztendlich ging es mir erst einmal um das Prinzip der Function und um den Lösungsansatz.
Wie du ja weisst, gibt es mehrere Möglichkeiten eine solche Fileselect-Box zu bauen.
Auch die Grafik finde ich unter aller Kanone, aber auch das ist Absicht, da ich bewusst alles in eine Function packen wollte und es (einigermassen) übersichtlich bleiben sollte.
Dass "taste$" nicht gedimmt war liegt daran, dass ich normalerweise eine Sub namens Maus habe:
Code:

Sub Maus
do
getmouse mx,my,mr,mk
taste$=inkey$
loop until taste$="" and mk=0
do
getmouse mx,my,mr,mk
taste$=inkey$
loop until taste$<>"" or mk<>0
end sub



...und am Anfang des Programmes mache ich dann:
Code:
Dim shared mx,my,mr,mk,taste$


@programmierer
Ich habe nur die Hälfte von dem verstanden, was du geschrieben hast.
Wie dem auch sei: ich liebe es Suffixe zu verwenden. Ich finde es sogar übersichtlicher, denn dann weiss ich, welche Variable TEXT und welche eine Zahl beinhaltet.
Deshalb finde ich Freebasic 15b auch angenehmer als die 16er, aber leider gehen bei der 15er einige Dinge nicht.
Sollte die Angabe von Suffixen in zukünftigen FB-Versonen nicht mehr gehen, dann läuft die Entwicklung von FreeBASIC eindeutig in die FALSCHE Richtung.
Zumindest ich möchte in BASIC programmieren und nicht in einer "Hochsprache".


Stevie1401
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Mao



Anmeldungsdatum: 25.09.2005
Beiträge: 4409
Wohnort: /dev/hda1

BeitragVerfasst am: 18.10.2006, 11:48    Titel: Antworten mit Zitat

Hm, also wenn ich was größeres starte, dann verwende ich die ungarische Notation. Sprich, wenn du beispielsweise einen Integer Namens Blubb erzeugen willst, dann:
Code:

Dim As Integer iBlubb

Mit Pointern:
Code:

Dim As Any Ptr pBlubb ' oder besser ptrBlubb


So geht's, find ich, eigentlich leichter. lächeln
_________________
Eine handvoll Glück reicht nie für zwei.
--
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Michael712
aka anfänger, programmierer


Anmeldungsdatum: 26.03.2005
Beiträge: 1593

BeitragVerfasst am: 18.10.2006, 14:52    Titel: Antworten mit Zitat

Es geht, allerdings muss man dann mit "-lang qb" oder "-lang deprecated" kompilieren(in der FBIDE einfach bei kompilereinstellungen hinzufügen). Und ich finde es so besser, da bei suffixen auch schneller fehler entstehen können, vor allem wenn man variablen nicht deklariert.

@Mao: Genau so mache ich es auch, jedenfalls bei Pointern. immer ein "p" davor, dann erkennt man das schon. Und da ich auch die Variablen veringere, nehme ich oft einfach "text" für String variablen, da ich die meißtens eh nur selten brauche(ausser wenn ich jetzt die taste speichern möchte, dann nehme ich "inky" happy ). Bei den meißten Variablen ist es aber klar, das ein Text gemeint ist. Beispiele:
name, dateiname, pfad, ...

Da wäre dann ein Suffix nur überflüssig Zunge rausstrecken
_________________
Code:
#include "signatur.bi"
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Mao



Anmeldungsdatum: 25.09.2005
Beiträge: 4409
Wohnort: /dev/hda1

BeitragVerfasst am: 18.10.2006, 15:02    Titel: Antworten mit Zitat

programmierer hat Folgendes geschrieben:

dann nehme ich "inky" happy

Deklarierst du davor auch noch eine "ytw" Variable? durchgeknallt lachen

programmierer hat Folgendes geschrieben:

Da wäre dann ein Suffix nur überflüssig Zunge rausstrecken

Ungarische Notation arbeitet ja auch mit Präfixen. cool
_________________
Eine handvoll Glück reicht nie für zwei.
--
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
stevie1401



Anmeldungsdatum: 04.07.2006
Beiträge: 133

BeitragVerfasst am: 18.10.2006, 21:27    Titel: Neue Version Antworten mit Zitat

So, ich habe das ganze etwas überarbeitet lächeln
Besser so?
Ich habe das in NoPaste hochgeladen, weiss allerdings nicht, wie ich das jetzt hier zeigen soll?
Also hier die Adresse der HP:
http://www.hundertdrei-allerlei.de/freebasic/fs2.bas
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
ytwinky



Anmeldungsdatum: 28.05.2005
Beiträge: 2624
Wohnort: Machteburch

BeitragVerfasst am: 18.10.2006, 22:26    Titel: Antworten mit Zitat

Wenn du wissen willst, wie sowas geht,
dann schau dir mal den Quelltext von dieser Seite an..
Oder als Anleitung:
[ury=http://www.hundertdrei-allerlei.de/freebasic/fs2.bas] ach, so geht das [/ury]
[ury=http://http://freebasic.de/fbnp/?view=193] ach, so geht das [/ury]
(du mußt aber ury durch url ersetzen..)
Gruß
ytwinky
_________________
v1ctor hat Folgendes geschrieben:
Yeah, i like INPUT$(n) as much as PRINT USING..
..also ungefähr so, wie ich GOTO..
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 18.10.2006, 23:14    Titel: Antworten mit Zitat

udn wieso schreibst du nicht gleich url? durchgeknallt
_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
ytwinky



Anmeldungsdatum: 28.05.2005
Beiträge: 2624
Wohnort: Machteburch

BeitragVerfasst am: 19.10.2006, 00:17    Titel: Antworten mit Zitat

Hi stevie1401,
probier mal dies:
Code:
Function Dos_Win(s As String) As String
    Dim As Long i, j
    Dim s1 As String=Chr$(252)+Chr$(228)+Chr$(196)+Chr$(246)+Chr$(214)+Chr$(220) 'zur besseren Übersicht
    Dim s2 As String=Chr$(129)+Chr$(132)+Chr$(142)+Chr$(148)+Chr$(153)+Chr$(154) 'stehen diese Dim's untereinander
    For i=1 To Len(s)
      j=Instr(s1, Mid(s, i, 1))
      If j Then Mid(s, i, 1)=Mid(s2, j, 1)
    Next i
    Function=s
End Function
Es macht schon einen Unterschied, ob die Strings einmal komplett durchlaufen werden oder 6 mal..
Ich war angenehm überrascht grinsen
@Jojo:
na, weils dann nicht zusehen gewesen wäre zwinkern
Gruß
ytwinky
_________________
v1ctor hat Folgendes geschrieben:
Yeah, i like INPUT$(n) as much as PRINT USING..
..also ungefähr so, wie ich GOTO..
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
stevie1401



Anmeldungsdatum: 04.07.2006
Beiträge: 133

BeitragVerfasst am: 19.10.2006, 07:43    Titel: Re: Neue Version Antworten mit Zitat

[quote="stevie1401"]So, ich habe das ganze etwas überarbeitet lächeln
Besser so?

Hier ist es:

Ach ja, das Mausrad habe ich jetzt auch eingebaut - langsam bekommt das ganze ja Gesicht lächeln
Aber ich muss schon zugeben, für einen einzigen Befehl ist das ´ne ganz schöne fette Angelegenheit.
@ytwinky:
Deine Function dos_win() ist eindeutig übersichtlicher, mir ging es allerdings auch darum, dass ANFÄNGER mit dem Code etwas anfangen können.
Ich denke, gerade Anfänger verstehen hier im Forum meistens nur Bahnhof.
Wollte nicht jemand mal ein schönes Howto schreiben?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
ytwinky



Anmeldungsdatum: 28.05.2005
Beiträge: 2624
Wohnort: Machteburch

BeitragVerfasst am: 20.10.2006, 11:01    Titel: Antworten mit Zitat

Guter Vorschlag, kannst es ja hier posten, wenn es fertig ist vor lachen auf dem Boden rollen
Wenn ich wieder Telefon habe, werde ich mal meine Version deines Programmes hochladen..
(Ich habe zur Zeit irgendein telekomisches Problem: kein Freizeichen-->Kabelfehler, bezahlt is nämlich lachen )
So hatte ich Zeit, mir das mal 'anzusehen' happy
Gruß
ytwinky
_________________
v1ctor hat Folgendes geschrieben:
Yeah, i like INPUT$(n) as much as PRINT USING..
..also ungefähr so, wie ich GOTO..
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 20.10.2006, 11:15    Titel: Antworten mit Zitat

[OffTopic]Internet über Modem (TAE-N) funktioniert, aber Telefon (TAE-F) nicht oder schreibst du mal wieder aus dem Internetcafé? lächeln [/OffTopic]
_________________

Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
ytwinky



Anmeldungsdatum: 28.05.2005
Beiträge: 2624
Wohnort: Machteburch

BeitragVerfasst am: 20.10.2006, 12:49    Titel: Antworten mit Zitat

@Sebastian:
Es war eine Störung im telekomischen Kabel=>kein Telefon(TAE-F) und kein Modem(TAE-N)
(Deine Vermutung war richtig..
..schließlich mußte ich ja irgendwie meine Mails abfragen!)
@stevie1401:
Die versprochene Datei ist hier..
[Edit]
Achtung: PrintAt(..) geändert, ggfs. neu downloaden..
[Edit2]
Code:
Dim Anz=2000 'ist 'etwas' knapp bemessen, bei mir müsste es schon 2100 sein

btw:
Timer liefert Double's..
..in case you didn't know..
[Edit3]
Ooops, 'kleinen' Fehler(meinerseits) berichtigt..
(Deine Änderungen sind da noch nicht eingearbeitet..)
Gruß
ytwinky
_________________
v1ctor hat Folgendes geschrieben:
Yeah, i like INPUT$(n) as much as PRINT USING..
..also ungefähr so, wie ich GOTO..
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 22.10.2006, 21:42    Titel: Antworten mit Zitat

Hm, wie lautet denn nun der komplette sourcecode der DirListBox? ich würde sie nämlich gerne in meinem geplanten installer verwenden und evtl. etwas verbessern.
_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
ytwinky



Anmeldungsdatum: 28.05.2005
Beiträge: 2624
Wohnort: Machteburch

BeitragVerfasst am: 22.10.2006, 22:34    Titel: Antworten mit Zitat

meinereiner hat Folgendes geschrieben:
Die versprochene Datei ist hier..
..oder du nimmst die von stevie1401..
Vielleicht hast du ja auch Interesse an einer ASCII-Box?
Gruß
ytwinky
_________________
v1ctor hat Folgendes geschrieben:
Yeah, i like INPUT$(n) as much as PRINT USING..
..also ungefähr so, wie ich GOTO..
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 23.10.2006, 21:08    Titel: Antworten mit Zitat

naja ich bevorzuge die variante oben zwinkern
_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
ytwinky



Anmeldungsdatum: 28.05.2005
Beiträge: 2624
Wohnort: Machteburch

BeitragVerfasst am: 23.10.2006, 21:23    Titel: Antworten mit Zitat

Hi,
..kann ich verstehen, bis jetzt kann ich auch nur Laufwerke ermitteln grinsen
..und ob ich dabei überhaupt weitermache, weiß ich noch nicht.
Aber die TextBox gefällt mir gut, mal sehen, was sich damit anstellen läßt zwinkern
Gruß
ytwinky
_________________
v1ctor hat Folgendes geschrieben:
Yeah, i like INPUT$(n) as much as PRINT USING..
..also ungefähr so, wie ich GOTO..
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Projektvorstellungen Alle Zeiten sind GMT + 1 Stunde
Gehe zu Seite 1, 2  Weiter
Seite 1 von 2

 
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