 |
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
stevie1401
Anmeldungsdatum: 04.07.2006 Beiträge: 133
|
Verfasst am: 17.10.2006, 13:36 Titel: eine Fileselectbox (Datei laden/speichern) ohne API |
|
|
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 |
|
 |
Mao
Anmeldungsdatum: 25.09.2005 Beiträge: 4409 Wohnort: /dev/hda1
|
Verfasst am: 17.10.2006, 13:57 Titel: |
|
|
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.
So, nun zum Programm:
das Ergebnis sieht ser schön aus, funktioniert problemlos.
Allerdings im Source: du mixt deine Kommentare zwischen ' und REM. Benutz doch nicht mehr REM, das is' soooo alt.
Aber sonst: weiter so!  _________________ Eine handvoll Glück reicht nie für zwei.
--
 |
|
Nach oben |
|
 |
ytwinky

Anmeldungsdatum: 28.05.2005 Beiträge: 2624 Wohnort: Machteburch
|
Verfasst am: 17.10.2006, 21:21 Titel: |
|
|
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(..)
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 |
|
 |
Michael712 aka anfänger, programmierer
Anmeldungsdatum: 26.03.2005 Beiträge: 1593
|
Verfasst am: 17.10.2006, 23:09 Titel: |
|
|
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
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  _________________
Code: | #include "signatur.bi" |
|
|
Nach oben |
|
 |
stevie1401
Anmeldungsdatum: 04.07.2006 Beiträge: 133
|
Verfasst am: 18.10.2006, 06:29 Titel: |
|
|
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
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 |
|
 |
Mao
Anmeldungsdatum: 25.09.2005 Beiträge: 4409 Wohnort: /dev/hda1
|
Verfasst am: 18.10.2006, 11:48 Titel: |
|
|
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.  _________________ Eine handvoll Glück reicht nie für zwei.
--
 |
|
Nach oben |
|
 |
Michael712 aka anfänger, programmierer
Anmeldungsdatum: 26.03.2005 Beiträge: 1593
|
Verfasst am: 18.10.2006, 14:52 Titel: |
|
|
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" ). 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  _________________
Code: | #include "signatur.bi" |
|
|
Nach oben |
|
 |
Mao
Anmeldungsdatum: 25.09.2005 Beiträge: 4409 Wohnort: /dev/hda1
|
Verfasst am: 18.10.2006, 15:02 Titel: |
|
|
programmierer hat Folgendes geschrieben: |
dann nehme ich "inky"
|
Deklarierst du davor auch noch eine "ytw" Variable?
programmierer hat Folgendes geschrieben: |
Da wäre dann ein Suffix nur überflüssig
|
Ungarische Notation arbeitet ja auch mit Präfixen.  _________________ Eine handvoll Glück reicht nie für zwei.
--
 |
|
Nach oben |
|
 |
stevie1401
Anmeldungsdatum: 04.07.2006 Beiträge: 133
|
Verfasst am: 18.10.2006, 21:27 Titel: Neue Version |
|
|
So, ich habe das ganze etwas überarbeitet
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 |
|
 |
ytwinky

Anmeldungsdatum: 28.05.2005 Beiträge: 2624 Wohnort: Machteburch
|
Verfasst am: 18.10.2006, 22:26 Titel: |
|
|
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 |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 18.10.2006, 23:14 Titel: |
|
|
udn wieso schreibst du nicht gleich url?  _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
ytwinky

Anmeldungsdatum: 28.05.2005 Beiträge: 2624 Wohnort: Machteburch
|
Verfasst am: 19.10.2006, 00:17 Titel: |
|
|
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
@Jojo:
na, weils dann nicht zusehen gewesen wäre
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 |
|
 |
stevie1401
Anmeldungsdatum: 04.07.2006 Beiträge: 133
|
Verfasst am: 19.10.2006, 07:43 Titel: Re: Neue Version |
|
|
[quote="stevie1401"]So, ich habe das ganze etwas überarbeitet
Besser so?
Hier ist es:
Ach ja, das Mausrad habe ich jetzt auch eingebaut - langsam bekommt das ganze ja Gesicht
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 |
|
 |
ytwinky

Anmeldungsdatum: 28.05.2005 Beiträge: 2624 Wohnort: Machteburch
|
Verfasst am: 20.10.2006, 11:01 Titel: |
|
|
Guter Vorschlag, kannst es ja hier posten, wenn es fertig ist
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 )
So hatte ich Zeit, mir das mal 'anzusehen'
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 |
|
 |
Sebastian Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
|
Nach oben |
|
 |
ytwinky

Anmeldungsdatum: 28.05.2005 Beiträge: 2624 Wohnort: Machteburch
|
Verfasst am: 20.10.2006, 12:49 Titel: |
|
|
@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 |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 22.10.2006, 21:42 Titel: |
|
|
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 |
|
 |
ytwinky

Anmeldungsdatum: 28.05.2005 Beiträge: 2624 Wohnort: Machteburch
|
Verfasst am: 22.10.2006, 22:34 Titel: |
|
|
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 |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 23.10.2006, 21:08 Titel: |
|
|
naja ich bevorzuge die variante oben  _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
ytwinky

Anmeldungsdatum: 28.05.2005 Beiträge: 2624 Wohnort: Machteburch
|
Verfasst am: 23.10.2006, 21:23 Titel: |
|
|
Hi,
..kann ich verstehen, bis jetzt kann ich auch nur Laufwerke ermitteln
..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
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 |
|
 |
|
|
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.
|
|