Code-Beispiel
Dateidialog
Lizenz: | Erster Autor: | Letzte Bearbeitung: |
LGPL | Volta | 16.06.2007 |
Nach jeder neuen FB-Version .....
... eine neue version des LoadSaveDialogs. :D
Bei den älteren Versionen war der Einsatz des Dateidialogs bei fbgfx-Windows sehr schwer möglich, entweder er verschwand irgendwo in den Hintergrund oder das fbgfx-Windows erhielt nicht mehr den Focus zurück. Daher hatte ich den Dateidialog auf die Konsoleanwendungen beschränkt.
Mit den "Neuen" FB-Versionen dachte ich leichter an die notwendigen Parameter zu gelangen, leider nicht.
Die Funktion LoadSaveDialog ist eigentlich die gleiche geblieben (zumindest der Teil für Konsoleanwendung). Um an die nötigen Parameter des fbgfx-Window zu kommen mußte ich einige Definitionen hinzufügen.
Die neue Version habe ich in eine Include-Datei (LoadSaveDialog.inc) und eine Testdatei aufgeteilt.
'-----------LoadSaveDialog.inc
'Nutzt den komfortablen Window-Dialog zur Auswahl des Laufwerk/Pfad/Dateinamens
'zum öffnen oder speichern einer Datei.
'13.03.2006 - WIN32 console application - by Volta
'21.08.2006 - FB 0.16b - für XP Bugs entfernt, einige Verbesserungen - by Volta
'15.06.2007 - FB 0.17b(FB 0.18) - erweitert auf fbgfx-Window - by Volta
'hat unter ME Probleme im Fullscreen-Modus (teilweise wird Print nicht ausgeführt?)
#Include once "windows.bi"
#Include once "win\commdlg.bi"
#ifdef __fbgfx_bi__
' Some defines and typedefs for the Win32Driver structure
#define WINDOW_TITLE_SIZE 128
#define WINDOW_CLASS_PREFIX "fbgfxclass_"
' Structure containing GfxLib's internal Windows info FB 0.18
Type WIN32DRIVER
Version As Integer
hInstance As HINSTANCE
WndClass As WNDCLASS
Wnd As HWND
Palette(0 To 255) As PaletteEntry
Blitter As Sub(Byval As Ubyte Ptr, Byval As Integer)
Is_Running As Integer
Is_Palette_Changed As Integer
Is_Active As Integer
w As Integer
h As Integer
Depth As Integer
flags As Integer
Refresh_Rate As Integer
Window_Title As Ubyte Ptr
WindowClass(0 To WINDOW_TITLE_SIZE + sizeof(WINDOW_CLASS_PREFIX)-1) As Ubyte
Init As Function() As Integer
Exit As Function() As Integer
Paint As Function() As Integer
Thread As Sub(Byval Running_Event As HANDLE)
mouse_clip As Integer
End Type
Extern FB_Win32 Alias "fb_win32" As WIN32DRIVER
#endif
Declare Function LoadSaveDialog (_
Byval savedlog As Integer = 0,_
Byval filter As string = "",_
Byval fltrindex As Integer = 1,_
Byval initdir As String = ".",_
Byval strDefExt As String = "") As String
'Voreinstellungen: LoadSaveDialog(0, "", 1, ".", "")
' savedlog = 0 -> Datei Öffnen, 1(<>0) -> Datei Speichern
' filter = "" -> Alle Dateien, sonst siehe lsd_fil
'fltrindex = 1, sonst welcher Eintrag, der bei filter angegebenen Auswahl, aktiv ist
' initdir = "" = "." aktueller Pfad, sonst Pfad angeben
'strDefExt = "" keine Vorgabe, sonst z.B. "bak" als Vorgabe der Endung zum Speichern
Function LoadSaveDialog (Byval savedlog As Integer, Byval filter As string, _
Byval fltrindex As Integer, Byval initdir As String, _
Byval strDefExt As String) As String
Dim As Zstring *MAX_PATH Titel = ""
Dim FB_OFN AS OPENFILENAME
FB_OFN.lStructSize = sizeof(FB_OFN)
#ifdef __fbgfx_bi__
FB_OFN.hwndOwner = FB_Win32.Wnd
FB_OFN.hInstance = FB_Win32.hInstance
#endif
#ifndef __fbgfx_bi__
GetConsoleTitle (@Titel, MAX_PATH)
FB_OFN.hwndOwner = FindWindow( 0, Titel )
FB_OFN.hInstance = 0
#endif
Dim strFilter As String = "Alle Dateien (*.*)" + Chr(0) +"*.*" + Chr(0, 0) 'Vorgabe
If filter = "" Then
FB_OFN.lpstrFilter = StrPtr(strFilter)
Else
FB_OFN.lpstrFilter = StrPtr(filter)
End If
FB_OFN.nFilterIndex = fltrindex
Dim As String *1024 strFile = Space(1023)+ chr(0)
FB_OFN.lpstrFile = StrPtr(strFile)
FB_OFN.nMaxFile = sizeof(strFile)
Dim As String *1024 strFileTitle = String(1023,Chr(0))
FB_OFN.lpstrFileTitle = StrPtr(strFileTitle)
FB_OFN.nMaxFileTitle = Len(strFileTitle)
If initdir = "" Then
initdir = "." ' Vorgabe aktueller Pfad
End If
FB_OFN.lpstrInitialDir = StrPtr(initdir)
Dim As String strcapt = "Datei Öffnen"
If savedlog Then
strcapt = "Datei Speichern"
FB_OFN.lpstrTitle = StrPtr(strcapt)
FB_OFN.lpstrDefExt = StrPtr(strDefExt)
FB_OFN.flags = OFN_EXPLORER Or OFN_LONGNAMES Or _
OFN_OVERWRITEPROMPT Or OFN_HIDEREADONLY
If GetSaveFileName(@FB_OFN) Then LoadSaveDialog = Trim(strFile)
Else
FB_OFN.lpstrTitle = StrPtr(strcapt)
FB_OFN.flags = OFN_EXPLORER Or OFN_LONGNAMES Or OFN_CREATEPROMPT Or _
OFN_NODEREFERENCELINKS Or OFN_HIDEREADONLY
If GetOpenFileName(@FB_OFN) Then LoadSaveDialog = Trim(strFile)
End If
End Function
'-Ende----------LoadSaveDialog.inc
Auch der Aufruf der Funktion LoadSaveDialog ist gleich geblieben, ebenso die Voreinstellungen. Sie sind in der Testdatei ausführlich erklärt.
Die Aufrufe des LoadSaveDialogs sind allerdings für Konsole- oder fbgfx-Fenster unterschiedlich.
Bei Konsolefenster einfach nur:
#Include once "LoadSaveDialog.inc"
...
Das Testlisting zeigt den Aufruf bei fbgfx-Fenster.
Wichtig ist hier zuerst den Screen oder Screenres und dann LoadSaveDialog.inc anzugeben, da die benötigten Parameter erst nach dem screen-Befehl verfügbar sind.
'--------Test_LSDialog.bas---by Volta
#Include once "fbgfx.bi" 'für den Screenmod nötig, für Console nicht
screen 18,32
''Wichtig: zuerst Screen oder Screenres dann LoadSaveDialog.inc
#Include once "LoadSaveDialog.inc"
Dim As String DateiName
'Dies ist ein Vorschlag/Muster, kann nach eigenem Bedarf geändert werden
Dim As String lsd_fil _
= "Basic Dateien (*.BAS)" + Chr(0) + "*.BAS" + Chr(0) _
+ "Text Dateien (*.TXT)" + Chr(0) + "*.TXT" + Chr(0)_
+ "BMP Dateien (*.BMP)" + Chr(0) + "*.BMP" + Chr(0)_
+ "EXE Dateien (*.EXE)" + Chr(0) + "*.EXE" + Chr(0)_
+ "Alle Dateien (*.*)" + Chr(0) + "*.*"+ Chr(0, 0)
'Voreinstellungen: LoadSaveDialog(0, "", 1, ".", "")
'savedlog = 0 -> Datei Öffnen, 1(<>0) -> Datei Speichern
'filter = "" -> Alle Dateien, sonst siehe lsd_fil
'fltrindex = 1, sonst welcher Eintrag, der bei filter angegebenen Auswahl, aktiv ist
'initdir = "" = "." aktueller Pfad, sonst Pfad angeben
'strDefExt = "" keine Vorgabe, sonst z.B. "bak" als Vorgabe der Endung zum Speichern
''Beispiele:
''einfachster Aufruf "Datei Öffnen", alle Vorgaben werden übernommen.
DateiName = LoadSaveDialog
Print DateiName
''Aufruf "Datei Öffnen" mit Filter, alle anderen = Vorgaben.
DateiName = LoadSaveDialog (,lsd_fil)
Print DateiName
''Aufruf "Datei Öffnen" mit Filter Index 2 (TXT), alle anderen = Vorgaben.
DateiName = LoadSaveDialog (,lsd_fil,2)
Print DateiName
''Aufruf "Datei Öffnen" im Pfad "c:\", alle anderen = Vorgaben.
DateiName = LoadSaveDialog (,,,"c:\")
Print DateiName
''Aufruf "Datei Speichern", alle Vorgaben werden übernommen.
'DateiName = LoadSaveDialog (1)
''Aufruf "Datei Speichern" wenn keine Dateiendung angegeben wird, "bak" als
''Endung benutzen, alle anderen = Vorgaben.
'DateiName = LoadSaveDialog (1,,,,"bak")
Print "Verdisch.."
Sleep
End'--------Test_LSDialog.bas---by Volta
Download gibts auf meiner HP ..
Viel Spass damit
Volta
Zusätzliche Informationen und Funktionen | |||||||
---|---|---|---|---|---|---|---|
|