fb:porticula NoPaste
OpenFile über Includes
Uploader: | raph ael |
Datum/Zeit: | 07.04.2008 17:24:45 |
' main.bas - Hauptdatei
#Include Once "windows.bi"
#Include Once "win/commdlg.bi"
#Include "OpenFile.bi"
#Include "openfile.bas"
Declare Function DlgProc(ByVal hWnd As HWND, ByVal uMsg As UINT, ByVal wParam As WPARAM, ByVal lParam As LPARAM) As Integer
'Dialogform anzeigen
hInstance=GetModuleHandle(NULL)
DialogBoxParam(hInstance,Cast(ZString Ptr,IDD_DLG1), NULL, @DlgProc, NULL)
ExitProcess(0)
End
FUNCTION DlgProc(BYVAL hWin AS HWND, BYVAL uMsg AS UINT, BYVAL wParam AS WPARAM, _
BYVAL lParam AS LPARAM) AS INTEGER
DIM AS LONG id, Event, x, y
DIM hBtn AS HWND
DIM rect AS RECT
DIM buff AS ZSTRING * 250
SELECT CASE uMsg
CASE WM_INITDIALOG
'
CASE WM_CLOSE
EndDialog(hWin, 0)
'
CASE WM_COMMAND
id=LOWORD(wParam)
Event=HIWORD(wParam)
SELECT CASE id
CASE SF_FileOpen
FileOpen()
'
'
END SELECT
CASE WM_SIZE
'
CASE ELSE
RETURN FALSE
'
END SELECT
RETURN TRUE
END FUNCTION
' OpenFile.bas:
SUB FileOpen()
DIM hWin AS HWND
'250000 Zeichen als Leerstring vorgeben (Damit auch ganz viele Dateien ausgewählt werden können
'(überflüssige Leerzeichen werden später wieder entfernt)
DIM AS STRING *250000 strFile = SPACE(249999)+ CHR(0)
DIM OFN AS OpenFileName, RetStr AS STRING, Liste() AS STRING
DIM X AS INTEGER, Y AS INTEGER, Z AS INTEGER
CONST szNULL=!"\0"
CONST szFilter = "MP3-Dateien (*.mp3)" & szNULL & "*.mp3" & szNULL
WITH OFN
.lStructSize = SIZEOF(OpenFileName)
.hwndOwner = hWin
.hInstance = hInstance
'"Arbeitsplatz" als Ausgangsordner vorgeben - ansprechen über Class ID
.lpstrInitialDir = STRPTR("::{20D04FE0-3AEA-1069-A2D8-08002B30309D}")
.lpstrFile = STRPTR(strFile)
.nMaxFile = SIZEOF(strFile)
.lpstrFilter = STRPTR(szFilter)
.lpstrTitle = STRPTR(" MP3-Datei auswählen (Mehrfachauswahl möglich)")
'Flags: &H200 = Mehrfachauswahl möglich
' &H4& = Kontrollkästchen "Schreibgeschützt" wird versteckt
' &H80000 = Dialoge des Win-Explorer werden genutzt
.flags = &H200 OR &H4& OR &H80000
END WITH
IF GetOpenFileName(@OFN) THEN
Y = 0
REDIM Liste(Y)
RetStr = TRIM(strFile)
'Prüfen, ob CHR(0) im Rückgabestring enthalten (wenn ja -> mehrere Dateien markiert)
IF INSTR(RetStr, CHR(0)) THEN
'Mehrere Dateien ausgwählt -> Rückgabestring zerlegen und in Liste aufnehmen (jeder Listen-
'eintrag = eine Datei); WICHTIG: CHR(0) anhängen - letzter Teil wird sonst "vergessen"
RetStr = RetStr & CHR(0)
DO WHILE INSTR(RetStr, CHR(0))
X = INSTR(RetStr, CHR(0))
Liste(Y) = LEFT(RetStr, X - 1)
'Rückgabestring um ausgelesenen Teil verkürzen
RetStr = RIGHT(RetStr, LEN(RetStr) - X)
Y = Y + 1
REDIM PRESERVE Liste(Y)
LOOP
FOR X = 1 TO UBOUND(Liste)
'Liste(0) = Verzeichnis; jeweiliger Dateiname wird mit "\" & Liste(X) angehängt
'MessageBox nur temporär zur Anzeige; Später werden Dateien an die Audiogenie.Dll
'von Stefan Töngi übergeben
MessageBox(hWin, Liste(0) & "\" & Liste(X), "Ausgewählte Datei", 64)
NEXT
ELSE
'Nur eine Datei ausgewählt - RetStr enthält kompletten Pfad
MessageBox(hWin, RetStr, "Ausgewählte Datei", 64)
END IF
ELSE
'Nix ausgewählt
MessageBox(hWin, "Keine Dateien ausgewählt", "Keine Auswahl", 48)
END IF
END SUB