BlitzBasic: [AUSKLAPPEN] [EINKLAPPEN]
Type DateiListeTyp Field Ordner$ Field Dateiname$ Field Erweiterung$ End Type
Type diaTyp Field Ordner$ Field Erweiterung$ Field Schrift Field SchriftFarbe[2]
Field Hintergrund Field HintergrundFarbe
Field OK,OK_transparent,OKX,OKY Field Abbrechen,Abbrechen_transparent,AbbrechenX,AbbrechenY Field Loeschen,Loeschen_transparent,LoeschenX,LoeschenY Field Maus Field OK_Sound Field Abbrechen_Sound Field Loeschen_Sound
Field AktionWartenOk Field AktionWartenAbbrechen Field AktionWartenLoeschen
Field AuswahlbereichFarbe
Field AuswahlX1 Field AuswahlX2 Field AuswahlY1 Field AuswahlY2
Field LoeschenX2,LoeschenY2 Field AbbrechenX2,AbbrechenY2 Field OKX2,OKY2 End Type
Global DateiListe.DateiListeTyp
Const Ordner_Konnte_Nicht_auslesen_Werden=2 Const COrdner=2 Const CDatei=1
Function DateiAuswahl$(dia.diaTyp) SucheDateien dia\Ordner$,dia\Erweiterung$ SetBuffer BackBuffer() SetFont dia\Schrift SchriftHoch=FontHeight()
HidePointer
MaxDateiAnzeige=Floor#(dia\AuswahlY2/SchriftHoch)
If dia\Loeschen<>0 Then dia\LoeschenX2=ImageWidth(dia\Loeschen) dia\LoeschenY2=ImageHeight(dia\Loeschen) End If If dia\Abbrechen<>0 Then dia\AbbrechenX2=ImageWidth(dia\Abbrechen) dia\AbbrechenY2=ImageHeight(dia\Abbrechen) End If
If dia\OK<>0 Then dia\OKX2=ImageWidth(dia\OK) dia\OKY2=ImageHeight(dia\OK) End If
For DateiListe=Each DateiListeTyp DateiZahl=DateiZahl+1 Next
Ausgewahlt=1 anzeigenabDatei=1
Fensterx=GraphicsWidth() FensterY=GraphicsHeight ()
Repeat If dia\Hintergrund<>0 Then DrawBlock dia\Hintergrund,0,0 Else colorI dia\HintergrundFarbe Rect 0,0,Fensterx,FensterY End If
If dia\AuswahlbereichFarbe=>0 Then ColorI dia\AuswahlbereichFarbe Rect dia\AuswahlX1,dia\AuswahlY1,dia\AuswahlX2,dia\AuswahlY2 End If
SoundAn=False If ChannelID<>0 Then If ChannelPlaying(ChannelID)=True Then SoundAn=True End If End If
Select Aktion Case 1 If MilliSecs()-AktionZeit=>dia\AktionWartenOk And SoundAn=False Then
Aktion=0 DateiNr=0 ChannelID=0
For DateiListe=Each DateiListeTyp DateiNr=DateiNr+1 If DateiNr=Ausgewahlt+anzeigenabDatei-1 Then Dateiname$= DateiListe\Ordner$+DateiListe\DateiName$+\".\"+DateiListe\Erweiterung$ For DateiListe=Each DateiListeTyp Delete DateiListe Next Return Dateiname$ End If Next End If Case 2 If MilliSecs()-AktionZeit=>dia\AktionWartenAbbrechen Then
ChannelID=0 Aktion=0
For DateiListe=Each DateiListeTyp Delete DateiListe Next Return \"\"
End If
Case 3 If MilliSecs()-AktionZeit=>dia\AktionWartenLoeschen And SoundAn=False Then
ChannelID=0 Aktion=0 DateiNr=0
For DateiListe=Each DateiListeTyp DateiNr=DateiNr+1 If DateiNr=Ausgewahlt+anzeigenabDatei-1 Then DeleteFile DateiListe\Ordner$+DateiListe\DateiName$+\".\"+DateiListe\Erweiterung$ DateiZahl=DateiZahl-1 Delete DateiListe If DateiZahl<=MaxDateiAnzeige Then anzeigenabDatei=1 If Ausgewahlt>DateiZahl Then Ausgewahlt=DateiZahl End If Else anzeigenabDatei=anzeigenabDatei-1 End If Exit End If Next End If End Select
Mausx=MouseX() Mausy=MouseY() If MouseDown(1)>0 Then If Mausgedrueckt=False Then MausTaste=True Mausgedrueckt=True End If Else Mausgedrueckt=False MausTaste=False End If
MausUeberAuswahlBereich=False MausUeberDatei=False If Aktion=0 Then Taste=GetKey() Select Taste Case 29 If Ausgewahlt<MaxDateiAnzeige Then If Ausgewahlt+anzeigenabDatei<=DateiZahl Then Ausgewahlt=Ausgewahlt+1 End If Else If Ausgewahlt+anzeigenabDatei<=DateiZahl Then anzeigenabDatei=anzeigenabDatei+1 End If End If Case 28 If Ausgewahlt>1 Then Ausgewahlt=Ausgewahlt-1 Else If anzeigenabDatei>1 Then anzeigenabDatei=anzeigenabDatei-1 End If End If Case 2 If MaxDateiAnzeige=>DateiZahl Then anzeigenabDatei=1 Ausgewahlt=DateiZahl Else anzeigenabDatei=DateiZahl-MaxDateiAnzeige+1 Ausgewahlt=MaxDateiAnzeige End If Case 1 Ausgewahlt=1 anzeigenabDatei=1 Case 6 If MaxDateiAnzeige=>DateiZahl Then anzeigenabDatei=1 Ausgewahlt=DateiZahl Else If anzeigenabDatei<>DateiZahl-MaxDateiAnzeige+1 Then If Ausgewahlt=MaxDateiAnzeige And DateiZahl-anzeigenabDatei>=MaxDateiAnzeige Then If anzeigenabDatei+Ausgewahlt+MaxDateiAnzeige<DateiZahl Then anzeigenabDatei=anzeigenabDatei+MaxDateiAnzeige Ausgewahlt=MaxDateiAnzeige Else anzeigenabDatei=DateiZahl-MaxDateiAnzeige+1 Ausgewahlt=MaxDateiAnzeige End If Else anzeigenabDatei=1 Ausgewahlt=MaxDateiAnzeige End If End If End If Case 5 If MaxDateiAnzeige=>DateiZahl Then anzeigenabDatei=1 Ausgewahlt=1 Else Ausgewahlt=1 If anzeigenabDatei>1 Then If anzeigenabDatei>MaxDateiAnzeige Then anzeigenabDatei=anzeigenabDatei-MaxDateiAnzeige Else anzeigenabDatei=1 End If End If End If Case 32,13 If DateiZahl>0 Then If Dia\OK_Sound<>0 Then ChannelID=PlaySound(Dia\OK_Sound) End If Aktion=1 AktionZeit=MilliSecs() End If Case 4 If DateiZahl>0 Then If dia\Loeschen<>0 Then If Dia\Loeschen_Sound<>0 Then ChannelID=PlaySound(Dia\Loeschen_Sound) End If Aktion=3 AktionZeit=MilliSecs() End If End If Case 27 If Dia\Abbrechen_Sound<>0 Then ChannelID=PlaySound(Dia\Abbrechen_Sound) End If Aktion=2 AktionZeit=MilliSecs() End Select End If If Aktion=0 Then If KeyDown(156) Or KeyDown(76) Then If DateiZahl>0 Then If Dia\OK_Sound<>0 Then ChannelID=PlaySound(Dia\OK_Sound) End If Aktion=1 AktionZeit=MilliSecs() End If End If End If If Aktion=0 Then If KeyDown(197)=True Then If KeyHit(72)>0 Or KeyHit(74)>0 Then If Ausgewahlt>1 Then Ausgewahlt=Ausgewahlt-1 Else If anzeigenabDatei>1 Then anzeigenabDatei=anzeigenabDatei-1 End If End If End If If KeyHit(73)>0 Then If MaxDateiAnzeige=>DateiZahl Then anzeigenabDatei=1 Ausgewahlt=1 Else Ausgewahlt=1 If anzeigenabDatei>1 Then If anzeigenabDatei>MaxDateiAnzeige Then anzeigenabDatei=anzeigenabDatei-MaxDateiAnzeige Else anzeigenabDatei=1 End If End If End If End If
If KeyHit(81)>0 Then If MaxDateiAnzeige=>DateiZahl Then anzeigenabDatei=1 Ausgewahlt=DateiZahl Else If anzeigenabDatei<>DateiZahl-MaxDateiAnzeige+1 Then If Ausgewahlt=MaxDateiAnzeige And DateiZahl-anzeigenabDatei>=MaxDateiAnzeige Then If anzeigenabDatei+Ausgewahlt+MaxDateiAnzeige<DateiZahl Then anzeigenabDatei=anzeigenabDatei+MaxDateiAnzeige Ausgewahlt=MaxDateiAnzeige Else anzeigenabDatei=DateiZahl-MaxDateiAnzeige+1 Ausgewahlt=MaxDateiAnzeige End If Else anzeigenabDatei=1 Ausgewahlt=MaxDateiAnzeige End If End If End If End If
If KeyHit(80)>0 Or KeyHit(78)>0 Then If Ausgewahlt<MaxDateiAnzeige Then If Ausgewahlt+anzeigenabDatei<=DateiZahl Then Ausgewahlt=Ausgewahlt+1 End If Else If Ausgewahlt+anzeigenabDatei<=DateiZahl Then anzeigenabDatei=anzeigenabDatei+1 End If End If End If
If KeyHit(71)>0 Then Ausgewahlt=1 anzeigenabDatei=1 End If
If KeyHit(79)>0 Then If MaxDateiAnzeige=>DateiZahl Then anzeigenabDatei=1 Ausgewahlt=DateiZahl Else anzeigenabDatei=DateiZahl-MaxDateiAnzeige+1 Ausgewahlt=MaxDateiAnzeige End If End If End If End If
If Mausx>=dia\AuswahlX1 And Mausx<dia\AuswahlX2+dia\AuswahlX1 Then If MausY>=dia\AuswahlY1 And Mausy<dia\AuswahlY1+dia\AuswahlY2 Then MausUeberAuswahlBereich=True If Mausy<dia\AuswahlY1+MaxDateiAnzeige*SchriftHoch Then MausUeberDatei=Floor#((MausY-dia\AuswahlY1)/SchriftHoch)+1 If MausUeberDatei+anzeigenabDatei-1>DateiZahl Then MausUeberDatei=0 End If End If End If End If
MausNr=0 If MausUeberAuswahlBereich=True Then If MausUeberDatei>0 Then MausNr=0 Else MausNr=2 End If Else MausNr=1 End If
If dia\OK<>0 Then Select Aktion Case 1
If dia\OK_transparent=True Then DrawImage dia\OK,dia\OKX,dia\OKY,2 Else DrawBlock dia\OK,dia\OKX,dia\OKY,2 End If Case 2,3
If dia\OK_transparent=True Then If ImagesCollide(dia\Maus,Mausx,MausY,MausNr,dia\OK,dia\OKX,dia\OKY,OKNr) Then OKNr=1 Else OKNr=0 End If DrawImage dia\OK,dia\OKX,dia\OKY,OKNr Else If ImageRectCollide(dia\Maus,Mausx,MausY,MausNr,dia\OKX,dia\OKY,dia\OKX2,dia\OKY2) Then OKNr=1 Else OKNr=0 End If DrawBlock dia\OK,dia\OKX,dia\OKY,OKNr End If
Default If dia\OK_transparent=True Then If ImagesCollide(dia\Maus,Mausx,MausY,MausNr,dia\OK,dia\OKX,dia\OKY,OKNr) Then If MausTaste=True And DateiZahl>0 Then If Dia\OK_Sound<>0 Then ChannelID=PlaySound(Dia\OK_Sound) End If OKNr=2 Aktion=1 AktionZeit=MilliSecs() Else OKNr=1 End If Else OKNr=0 End If DrawImage dia\OK,dia\OKX,dia\OKY,OKNr Else If ImageRectCollide(dia\Maus,Mausx,MausY,MausNr,dia\OKX,dia\OKY,dia\OKX2,dia\OKY2) Then If MausTaste=True And DateiZahl>0 Then If Dia\OK_Sound<>0 Then ChannelID=PlaySound(Dia\OK_Sound) End If OKNr=2 Aktion=1 AktionZeit=MilliSecs() Else OKNr=1 End If Else OKNr=0 End If DrawBlock dia\OK,dia\OKX,dia\OKY,OKNr End If
End Select End If
If dia\Abbrechen<>0 Then Select Aktion Case 2 If dia\Abbrechen_transparent=True Then DrawImage dia\Abbrechen,dia\AbbrechenX,dia\AbbrechenY,2 Else DrawBlock dia\Abbrechen,dia\AbbrechenX,dia\AbbrechenY,2 End If Case 1,3
If dia\Abbrechen_transparent=True Then If ImagesCollide(dia\Maus,Mausx,MausY,MausNr,dia\Abbrechen,dia\AbbrechenX,dia\AbbrechenY,AbbrechenNr) Then AbbrechenNr=1 Else AbbrechenNr=0 End If DrawImage dia\Abbrechen,dia\AbbrechenX,dia\AbbrechenY,AbbrechenNr Else If ImageRectCollide(dia\Maus,Mausx,MausY,MausNr,dia\AbbrechenX,dia\AbbrechenY,dia\AbbrechenX2,dia\AbbrechenY2) Then AbbrechenNr=1 Else AbbrechenNr=0 End If DrawBlock dia\Abbrechen,dia\AbbrechenX,dia\AbbrechenY,AbbrechenNr End If
Default If dia\Abbrechen_transparent=True Then If ImagesCollide(dia\Maus,Mausx,MausY,MausNr,dia\Abbrechen,dia\AbbrechenX,dia\AbbrechenY,AbbrechenNr) Then If MausTaste=True Then If Dia\Abbrechen_Sound<>0 Then ChannelID=PlaySound(Dia\Abbrechen_Sound) End If Aktion=2 AktionZeit=MilliSecs() AbbrechenNr=2 Else AbbrechenNr=1 End If Else AbbrechenNr=0 End If DrawImage dia\Abbrechen,dia\AbbrechenX,dia\AbbrechenY,AbbrechenNr Else If ImageRectCollide(dia\Maus,Mausx,MausY,MausNr,dia\AbbrechenX,dia\AbbrechenY,dia\AbbrechenX2,dia\AbbrechenY2) Then If MausTaste=True Then If Dia\Abbrechen_Sound<>0 Then ChannelID=PlaySound(Dia\Abbrechen_Sound) End If Aktion=2 AktionZeit=MilliSecs() AbbrechenNr=2 Else AbbrechenNr=1 End If Else AbbrechenNr=0 End If DrawBlock dia\Abbrechen,dia\AbbrechenX,dia\AbbrechenY,AbbrechenNr End If End Select End If
If dia\Loeschen<>0 Then Select Aktion Case 3
If dia\Loeschen_transparent=True Then DrawImage dia\Loeschen,dia\LoeschenX,dia\LoeschenY,2 Else DrawBlock dia\Loeschen,dia\LoeschenX,dia\LoeschenY,2 End If
Case 1,2
If dia\Loeschen_transparent=True Then If ImagesCollide(dia\Maus,Mausx,MausY,MausNr,dia\Loeschen,dia\LoeschenX,dia\LoeschenY,LoeschenNr) Then LoeschenNr=1 Else LoeschenNr=0 End If DrawImage dia\Loeschen,dia\LoeschenX,dia\LoeschenY,LoeschenNr Else If ImageRectCollide(dia\Maus,Mausx,MausY,MausNr,dia\LoeschenX,dia\LoeschenY,dia\LoeschenX2,dia\LoeschenY2) Then LoeschenNr=1 Else LoeschenNr=0 End If DrawBlock dia\Loeschen,dia\LoeschenX,dia\LoeschenY,LoeschenNr End If
Default If dia\Loeschen_transparent=True Then If ImagesCollide(dia\Maus,Mausx,MausY,MausNr,dia\Loeschen,dia\LoeschenX,dia\LoeschenY,LoeschenNr) Then If MausTaste=True And DateiZahl>0 Then If Dia\Loeschen_Sound<>0 Then ChannelID=PlaySound(Dia\Loeschen_Sound) End If AktionZeit=MilliSecs() Aktion=3 LoeschenNr=2 Else LoeschenNr=1 End If Else LoeschenNr=0 End If DrawImage dia\Loeschen,dia\LoeschenX,dia\LoeschenY,LoeschenNr Else If ImageRectCollide(dia\Maus,Mausx,MausY,MausNr,dia\LoeschenX,dia\LoeschenY,dia\LoeschenX2,dia\LoeschenY2) Then If MausTaste=True And DateiZahl>0 Then If Dia\Loeschen_Sound<>0 Then ChannelID=PlaySound(Dia\Loeschen_Sound) End If AktionZeit=MilliSecs() Aktion=3 LoeschenNr=2 Else LoeschenNr=1 End If Else LoeschenNr=0 End If DrawBlock dia\Loeschen,dia\LoeschenX,dia\LoeschenY,LoeschenNr End If
End Select End If
AnzeigeZahler=0 DateiNr=0
If MausUeberDatei>0 Then If MausTaste=True Then Ausgewahlt=MausUeberDatei End If End If
For DateiListe=Each DateiListeTyp DateiNr=DateiNr+1 If DateiNr=>anzeigenabDatei And AnzeigeZahler<MaxDateiAnzeige Then If Ausgewahlt-1=AnzeigeZahler Then ColorI dia\SchriftFarbe[1] Text dia\AuswahlX1,SchriftHoch*AnzeigeZahler+dia\AuswahlY1,DateiListe\Dateiname$ Rect dia\AuswahlX1,SchriftHoch*AnzeigeZahler+dia\AuswahlY1,dia\AuswahlX2,SchriftHoch,0 ElseIf DateiNr=MausUeberDatei+anzeigenabDatei-1 Then Color 255,0,0 Text dia\AuswahlX1,SchriftHoch*AnzeigeZahler+dia\AuswahlY1,DateiListe\Dateiname$ Else ColorI dia\SchriftFarbe[0] Text dia\AuswahlX1,SchriftHoch*AnzeigeZahler+dia\AuswahlY1,DateiListe\Dateiname$ End If AnzeigeZahler=AnzeigeZahler+1 End If Next DrawImage dia\Maus,Mausx,Mausy,MausNr Delay 10 Flip Forever End Function
Function Farbe(r,g,B) Return r*$10000 + g*$100 + b End Function
Function ColorI(I) Color (I And $FF0000)/$10000,(I And $FF00)/$100,I And $FF End Function
Function SucheDateien(Ordner$,Erweiterung$) If Right$(Ordner$,1)<>\"\\" Then Ordner$=Ordner$+\"\\" End If LangErweiterung=Len(Erweiterung$) OrdnerNr=ReadDir(Ordner$) If OrdnerNr=0 Then Return Ordner_Konnte_Nicht_auslesen_Werden
Datei$=NextFile$(OrdnerNr) While Datei$<>\"\" Select FileType((Ordner$+Datei$)) Case COrdner If Datei$<>\".\" And Datei$<>\"..\" Then SucheDateien Ordner$+Datei$,Erweiterung$ End If Case CDatei DateiErweiterung$=Mid$(Datei$,Instr(Datei$+\".\",\".\")+1) DateiName$=Mid$(Datei$,1,Instr(Datei$+\".\",\".\")-1) If LangErweiterung>0 Then ErweiterungStimmt=False For PosErweiterung=1 To LangErweiterung Select Mid$(Erweiterung$,PosErweiterung,1) Case \"|\" If Upper$(TestErweiterung$)=Upper$(DateiErweiterung$) Then ErweiterungStimmt=True Exit End If TestErweiterung$=\"\" Default TestErweiterung$=TestErweiterung$+Mid$(Erweiterung$,PosErweiterung,1) End Select Next TestErweiterung$=\"\" If TestErweiterung$<>\"\" And Upper$(TestErweiterung$)=Upper$(DateiErweiterung$) Then ErweiterungStimmt=True End If End If If ErweiterungStimmt=True Or LangErweiterung=0 Then DateiListe= New DateiListeTyp DateiListe\Dateiname$=Dateiname$ DateiListe\Ordner$=Ordner$ DateiListe\Erweiterung$=DateiErweiterung$ End If End Select Datei$=NextFile$(OrdnerNr) Wend End Function
Function Upper$(S$) Slen=Len(S) If Slen>0 Then For P=1 To Slen ASCII=Asc(Mid$(S$,P,1)) If Ascii>96 And Ascii<123 Then Ascii=Ascii-32 ElseIf Ascii=252 Then Ascii=220 ElseIf Ascii=228 Then Ascii=196 ElseIf Ascii=246 Then Ascii=214 End If R$=R$+Chr$(ASCII) Next Return R$ End If End Function
Beispiel:
BlitzBasic: [AUSKLAPPEN] [EINKLAPPEN] Graphics 800,600,0,2
dia.diaTyp=New diaTyp
dia\Ordner$=\"C:\Spiel\\" dia\Erweiterung$=\"\" dia\Schrift=LoadFont(\"Arial\",24,True,True,False)
dia\SchriftFarbe[0]=Farbe(255,255,255) dia\SchriftFarbe[1]=Farbe(255,0,255) dia\SchriftFarbe[2]=Farbe(255,255,0)
dia\HintergrundFarbe=Farbe(123,255,0)
dia\AuswahlbereichFarbe=farbe(0,0,255)
dia\OK=LoadAnimImage(\"C:\OK.bmp\",160,39,0,3) dia\OK_transparent=0 dia\OKX=250 dia\OKY=550 dia\Abbrechen=LoadAnimImage (\"C:\Abbrechen.bmp\",160,39,0,3) dia\Abbrechen_transparent=0 dia\AbbrechenX=50 dia\AbbrechenY=550
dia\Loeschen=LoadAnimImage(\"C:\löschen.bmp\",160,39,0,3) dia\Loeschen_transparent=0 dia\LoeschenX=450 dia\LoeschenY=550
dia\AuswahlX1=50 dia\AuswahlX2=400 dia\AuswahlY1=80 dia\AuswahlY2=450
dia\AktionWartenOk=750 dia\AktionWartenAbbrechen=750 dia\AktionWartenLoeschen=750 dia\Loeschen_Sound=LoadSound(\"C:\Löschen.wav\") dia\Abbrechen_Sound=LoadSound(\"C:\Abbruch.wav\") dia\Maus=LoadAnimImage(\"C:\pointer.bmp\",11,19,0,3)
R$=DateiAuswahl$(dia.diaTyp) SetBuffer FrontBuffer() Color 255,255,255 Rect 0,0,800,600 Color 255,0,0 Print R$
WaitKey
|