Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Neuer Window-Datei-Dialog

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1876
Wohnort: D59192

BeitragVerfasst am: 27.08.2005, 15:15    Titel: Neuer Window-Datei-Dialog Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Kai Bareis



Anmeldungsdatum: 10.09.2004
Beiträge: 545
Wohnort: Baden Würtemberg

BeitragVerfasst am: 27.08.2005, 15:50    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 27.08.2005, 18:37    Titel: Antworten mit Zitat

Die früheren Probleme gab es, wenn ich mich richtig erinnere, weil FreeBasic zu diesem Zeitpunkt nicht korrekt mit CHR$(0) arbeiten konnte.
_________________

Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Michael712
aka anfänger, programmierer


Anmeldungsdatum: 26.03.2005
Beiträge: 1593

BeitragVerfasst am: 27.08.2005, 21:02    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1876
Wohnort: D59192

BeitragVerfasst am: 27.08.2005, 21:33    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Michael712
aka anfänger, programmierer


Anmeldungsdatum: 26.03.2005
Beiträge: 1593

BeitragVerfasst am: 27.08.2005, 22:18    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
licer



Anmeldungsdatum: 17.05.2005
Beiträge: 51

BeitragVerfasst am: 28.08.2005, 09:36    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Tomtitom



Anmeldungsdatum: 20.09.2004
Beiträge: 308

BeitragVerfasst am: 13.03.2006, 18:16    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1876
Wohnort: D59192

BeitragVerfasst am: 13.03.2006, 19:43    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Tomtitom



Anmeldungsdatum: 20.09.2004
Beiträge: 308

BeitragVerfasst am: 13.03.2006, 20:40    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1876
Wohnort: D59192

BeitragVerfasst am: 14.03.2006, 09:35    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1876
Wohnort: D59192

BeitragVerfasst am: 15.06.2007, 21:50    Titel: Dateidialog Antworten mit Zitat

Nach jeder neuen FB-Version .....
... eine neue version des LoadSaveDialogs. grinsen

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
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.

 Impressum :: Datenschutz