 |
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 |
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1876 Wohnort: D59192
|
Verfasst am: 27.08.2005, 15:15 Titel: Neuer Window-Datei-Dialog |
|
|
Hallo,
hier ein neuer Dateidialog:
http://forum.qbasic.at/viewtopic.php?p=58872#58872
(gelöscht; Listing war veraltet)
Gruß
Volta _________________ Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater.
Zuletzt bearbeitet von volta am 15.06.2007, 21:54, insgesamt einmal bearbeitet |
|
Nach oben |
|
 |
Kai Bareis

Anmeldungsdatum: 10.09.2004 Beiträge: 545 Wohnort: Baden Würtemberg
|
Verfasst am: 27.08.2005, 15:50 Titel: |
|
|
Cool. Also das ganze hat bei mir unter Win 98se und Win 2000. _________________ MfG Kai Bareis
Es ist noch kein Meister vom Himmel gefallen! Warum einfach wens auch umständlich geht! |
|
Nach oben |
|
 |
Sebastian Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
|
Nach oben |
|
 |
Michael712 aka anfänger, programmierer
Anmeldungsdatum: 26.03.2005 Beiträge: 1593
|
Verfasst am: 27.08.2005, 21:02 Titel: |
|
|
Hallo.
Klappt bei mir unter WIN98SE perfekt. Hab sowas schon lange gesucht. Wie kann man denn machen, dass man ordner bzw. mehrere dateien auswählen kann?? Wenn man das not unten einfach weg macht, dann kommt bei mir als rückgabewert -1.
Mfg
Michael
EDIT: Ein kleiner Fehler:
Code: |
+ "Alle Dateien (*.*)" + Chr(0) + "*.*" + Chr(0, 0)
|
durch
Code: |
+ "Alle Dateien (*.*)" + Chr(0) + "*.*" + Chr(0) 'ohne ,0
|
ersetzen. Dann klappt es bei der Auswahl richtig. |
|
Nach oben |
|
 |
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1876 Wohnort: D59192
|
Verfasst am: 27.08.2005, 21:33 Titel: |
|
|
Hallo,
für die Mehrfachauswahl statt
Code: | FB_OFN.flags = OFS_FILE_OPEN_FLAGS And (Not OFN_ALLOWMULTISELECT) |
diese Zeile
Code: | FB_OFN.flags = OFS_FILE_OPEN_FLAGS |
aber die Trennung der einzelnen Dateinamen wird durch dieses Prog nicht erledigt (siehst du auch bei "Print DateiName").
Der doppelte chr(0) am ende des filter-strings ist, so viel ich nachlesen konnte, als Kennzeichen für das Ende des Strings notwendig?
Gruß
Volta _________________ Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater. |
|
Nach oben |
|
 |
Michael712 aka anfänger, programmierer
Anmeldungsdatum: 26.03.2005 Beiträge: 1593
|
Verfasst am: 27.08.2005, 22:18 Titel: |
|
|
Hallo.
Danke. Jetzt klappts. Das mit dem ,0 stimmt auch. Das muss da sein. Ich hatte das eben zum testen am anfang gemacht und dann kam da nur .bas zum auswählen. Ich dachte, dann ist da irgendwas falsch. SRY.
Mfg
Michael |
|
Nach oben |
|
 |
licer
Anmeldungsdatum: 17.05.2005 Beiträge: 51
|
Verfasst am: 28.08.2005, 09:36 Titel: |
|
|
Ja das Thema hatten wir schonmal. Damals war aber das Problem, dass die v.1.3b noch probleme mit den Null-terminated-strings hatte. Aber wenn ich das richtig verstanden hab soll sich in der v.15b schon wieder was mit den WinApi funktionen ändern und dann muss wieder alles umgeschrieben werden. Kann aber auch sein, dass ich mich täusche.
Wegen der Kompatiblität: Laut der win32.hlp müsste es ab win95 gehn und ich denke das wir nur noch sehr wenig win3.11 nutzer unter uns haben *g* |
|
Nach oben |
|
 |
Tomtitom

Anmeldungsdatum: 20.09.2004 Beiträge: 308
|
Verfasst am: 13.03.2006, 18:16 Titel: |
|
|
hallo,
kann mir jemand (du volta?) eine funktionierende Version für FB 0.15 ++ schreiben, ich habe es schon ein wenig probiert, allerdings bin ich nur bis OFS_FILE_OPEN_FLAGS gekommen, dies scheint irgendwie nicht mehr zu existieren. Ich bin leider nicht so der winapi-Experte.
schonmal danke im Voraus.
MfG, Tomtitom |
|
Nach oben |
|
 |
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1876 Wohnort: D59192
|
Verfasst am: 13.03.2006, 19:43 Titel: |
|
|
Bitteschön...
Code: | '03/13/06 - FB 0.15b - WIN32 console application - by Volta
'Nutzt den komfortablen Window-Dialog zur Auswahl des Laufwerk/Pfad/Dateinamens
'zum öffnen oder speichern einer Datei in Consolenanwendungen
Option Explicit
#INCLUDE ONCE "WINDOWS.BI"
#Include Once "win\COMMDLG.BI"
Declare Function LoadSaveDialog (_
savedlog As Integer = 0,_
filter As String = "",_
fltrindex As Integer = 1,_
initdir As String = "",_
strDefExt As String = "") As String
'Voreinstellungen:
'savedlog = 0 "Datei Öffnen", 1(<>0) "Datei Speichern"
'filter = "" "Alle Dateien", sonst siehe fil
'fltrindex = 1, sonst welcher Eintrag, der bei filter angegebenen Auswahl, aktiv ist
'initdir = "" = "." aktueller Pfad, sonst angegebener Pfad
'strDefExt = "" keine Vorgabe, sonst z.B. "bak" als Vorgabe der Endung zum Speichern
Dim As String DateiName, fil
fil = "Basic Dateien (*.BAS)" + Chr(0) + "*.BAS" + Chr(0) _
+ "Text Dateien (*.TXT)" + Chr(0) + "*.TXT" + Chr(0)_
+ "Bild Dateien (*.BMP)" + Chr(0) + "*.BMP" + Chr(0)_
+ "EXE Dateien (*.EXE)" + Chr(0) + "*.EXE" + Chr(0)_
+ "Alle Dateien (*.*)" + Chr(0) + "*.*" + Chr(0, 0)
'Beispiele:
'einfachster Aufruf "Datei Öffnen", alle Vorgaben werden übernommen.
'DateiName = LoadSaveDialog
'Aufruf "Datei Öffnen" mit Filter, alle anderen Vorgaben werden übernommen.
'DateiName = LoadSaveDialog (,fil)
'Aufruf "Datei Öffnen" mit Filter Index 2 (TXT), alle anderen Vorgaben werden übernommen.
'DateiName = LoadSaveDialog (,fil,2)
'Aufruf "Datei Öffnen" im Pfad "c:\", alle anderen Vorgaben werden übernommen.
DateiName = LoadSaveDialog (,,,"c:\")
'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 werden übernommen.
'DateiName = LoadSaveDialog (1,,,,"bak")
Print DateiName
Print "Verdisch.."
Sleep
End
Function LoadSaveDialog (savedlog As Integer, filter As String, fltrindex As Integer,_
initdir As String, strDefExt As String) As String
Dim FB_OFN AS OPENFILENAME
FB_OFN.lStructSize = Len(FB_OFN)
FB_OFN.hwndOwner = 0 ' nur Console
FB_OFN.hInstance = 0
Dim strFilter As String
If filter = "" Then
strFilter = "Alle Dateien (*.*)" + Chr(0) +"*.*" + Chr(0, 0) 'Vorgabe
Else
strFilter = filter + Chr(0, 0)
End If
FB_OFN.lpstrFilter = StrPtr(strFilter)
FB_OFN.nFilterIndex = fltrindex
Dim strFile As String *2048
strFile = Space(2047) + Chr(0)
FB_OFN.lpstrFile = StrPtr(strFile)
FB_OFN.nMaxFile = Len(strFile)
Dim strFileTitle As String *2048
strFileTitle = String(2048, 0)
FB_OFN.lpstrFileTitle = StrPtr(strFileTitle)
FB_OFN.nMaxFileTitle = Len(strFileTitle)
Dim strdrstr As String
If initdir = "" Then
strdrstr = "." ' Vorgabe aktueller Pfad
Else
strdrstr = initdir
End If
FB_OFN.lpstrInitialDir = StrPtr(strdrstr)
Dim strcapt As String
If savedlog Then
strcapt = "Dateien Speichern"
FB_OFN.lpstrTitle = StrPtr(strcapt)
If strDefExt > "" Then
Dim strdext As String
strdext = strDefExt
FB_OFN.lpstrDefExt = StrPtr(strdext)
End If
FB_OFN.flags = OFN_EXPLORER Or OFN_LONGNAMES Or OFN_OVERWRITEPROMPT Or OFN_HIDEREADONLY
If GetSaveFileName(@FB_OFN) Then LoadSaveDialog = Trim(strFile)
Else
strcapt = "Dateien Öffnen"
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 |
_________________ Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater. |
|
Nach oben |
|
 |
Tomtitom

Anmeldungsdatum: 20.09.2004 Beiträge: 308
|
Verfasst am: 13.03.2006, 20:40 Titel: |
|
|
juhu, danke.
Aber mich dünkt, ich hatte auch schon alles so - habe alle Windowslibs eingebunden und das OFS_FILE_OPEN_FLAGS genau wie du ersetzt, aber trotzdem lief es nicht. Ist da noch eine Änderung, die ich nicht sehe? |
|
Nach oben |
|
 |
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1876 Wohnort: D59192
|
Verfasst am: 14.03.2006, 09:35 Titel: |
|
|
ja,
Code: | GetSaveFileName(@FB_OFN)
*^* |
Übergabe von FB_OFN als Pointer. _________________ Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater. |
|
Nach oben |
|
 |
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1876 Wohnort: D59192
|
Verfasst am: 15.06.2007, 21:50 Titel: Dateidialog |
|
|
Nach jeder neuen FB-Version .....
... eine neue version des LoadSaveDialogs.
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.
Code: | '-----------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:
Code: | #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.
Code: | '--------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 der HP .. _________________ Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater. |
|
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.
|
|