Aufruf von OpenFileRequester()
Aufruf von OpenFileRequester()
Lässt sich der OpenFileRequester() so starten, dass die angezeigten Dateien sofort nach dem Datum sortiert sind (neueste zuerst)?
Re: Aufruf von OpenFileRequester()
Laut Hilfe gibt es keine Flags, die man der Procedure übergeben kann um die Sortierung zu beinflussen.
Eventuell kann das Selberbauen des Dialogs mit Hilfe von ExplorerListGadget und Co. weiterhelfen.
Unter Windows gibt es die Möglichkeit 'Explorer-Style Hook Procedures' zu verwenden, dann kann man über WM_INITDIALOG und WM_NOTIFY Nachrichten Einfluss auf die Dialogbox nehmen. Das habe ich aber noch nicht ausprobiert, nur kurz danach gesucht.
Wie es geht steht wohl hier. https://docs.microsoft.com/en-us/window ... alog-boxes
Eventuell kann das Selberbauen des Dialogs mit Hilfe von ExplorerListGadget und Co. weiterhelfen.
Unter Windows gibt es die Möglichkeit 'Explorer-Style Hook Procedures' zu verwenden, dann kann man über WM_INITDIALOG und WM_NOTIFY Nachrichten Einfluss auf die Dialogbox nehmen. Das habe ich aber noch nicht ausprobiert, nur kurz danach gesucht.
Wie es geht steht wohl hier. https://docs.microsoft.com/en-us/window ... alog-boxes
Mostly running PureBasic <latest stable version and current alpha/beta> (x64) on Windows 11 Home
Re: Aufruf von OpenFileRequester()
Code von hier nehmen:
https://www.rsbasic.de/aktualisierung/w ... A4ndern.pb
Code abändern zu:Warum "+1" und warum erst "ByAttributes" sortiert wird, kann hier nachgelesen werden:
https://stackoverflow.com/questions/296 ... 83#2971783
https://www.rsbasic.de/aktualisierung/w ... A4ndern.pb
Code abändern zu:
Code: Alles auswählen
Procedure HookCallback(DialogHandle.I, Msg.I, WParam.I, LParam.I)
Protected DialogWindow.I
Protected *NMHdr.NMHDR
If Msg = #WM_NOTIFY
*NMHdr = LParam
If *NMHdr\code = #CDN_FOLDERCHANGE
DialogWindow = FindWindowEx_(GetParent_(DialogHandle), 0, "ShellDll_DefView", 0)
If DialogWindow
#byModified = $7605 + 1
#byAttributes = $7608 + 1
SendMessage_(DialogWindow, #WM_COMMAND, #OFN_VIEW_REPORT, 0)
SendMessage_(DialogWindow, #WM_COMMAND, #ByAttributes, 0)
SendMessage_(DialogWindow, #WM_COMMAND, #ByModified, 0)
EndIf
EndIf
EndIf
EndProcedure
https://stackoverflow.com/questions/296 ... 83#2971783
Warum OpenSource eine Lizenz haben sollte :: PB-CodeArchiv-Rebirth :: Pleasant-Dark (Syntax-Farbschema) :: RegEx-Engine (kompiliert RegExes zu NFA/DFA)
Manjaro Xfce x64 (Hauptsystem) :: Windows 10 Home (VirtualBox) :: Neueste PureBasic-Version
Re: Aufruf von OpenFileRequester()
Vielleicht hat das noch keiner gemerkt. Wir sind hier in de Linux Ecke !
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Re: Aufruf von OpenFileRequester()
Da hat mich mal wieder der Spaß mit der WinAPI gepackt, dass ich das gar nicht mitbekommen habe
Unter Linux würde ich auf die Schnelle ein OpenFileRequester selber bauen. Das ist keine große Sache und erspart dir die aufwändige Arbeit mit den APIs von GTK2-, GTK3- und QT.
Wenn du ein Beispiel-Code benötigst, wären noch weitere Informationen - wie du dir den Requester vorstellst - hilfreich (z. B. ob nur Dateien angezeigt werden sollen oder auch in Verzeichnisse gewechselt werden können soll).
Warum OpenSource eine Lizenz haben sollte :: PB-CodeArchiv-Rebirth :: Pleasant-Dark (Syntax-Farbschema) :: RegEx-Engine (kompiliert RegExes zu NFA/DFA)
Manjaro Xfce x64 (Hauptsystem) :: Windows 10 Home (VirtualBox) :: Neueste PureBasic-Version
Re: Aufruf von OpenFileRequester()
Jupp, hatte ich gemerkt, wollte durch meine Antwort die Linux Spezialisten 'locken'. Ich kann ja nur ein bischen 'Windows'.
Mostly running PureBasic <latest stable version and current alpha/beta> (x64) on Windows 11 Home
Re: Aufruf von OpenFileRequester()
Muss mal schauen ob es die möglichkeit gibt die Sortierung anzupassen.
Dafür muss aber der OpenFileRequester neue geschrieben werden.
Habe aber noch nicht gefunden (gesucht) wie die Sortierfolge geändert wird.
Dafür muss aber der OpenFileRequester neue geschrieben werden.
Habe aber noch nicht gefunden (gesucht) wie die Sortierfolge geändert wird.
Code: Alles auswählen
;-TOP
; Modify by mk-soft
EnableExplicit
ImportC ""
gtk_file_chooser_dialog_new(title.p-utf8, *parent.GtkWidget, action.i, b1.p-utf8, a1.i, b2.p-utf8, a2.i, null);
gtk_file_filter_set_name(*filter, label.p-utf8);
gtk_file_filter_add_pattern(*filter,pattern.p-utf8)
gtk_file_chooser_set_current_folder(*dialog, path.p-utf8)
EndImport
Procedure.s MyOpenFileRequester(Title.s, Path.s, Pattern.s, PatterPostion, Flags = 0)
Protected *dialog, *filter, *mem
Protected r1.l
Protected part.s, label.s, patter.s , index
Protected FileName.s
*dialog = gtk_file_chooser_dialog_new(Title, 0, #GTK_FILE_CHOOSER_ACTION_OPEN,
#GTK_STOCK_CANCEL,#GTK_RESPONSE_CANCEL,
#GTK_STOCK_OPEN,#GTK_RESPONSE_ACCEPT,
#Null);
gtk_window_set_modal_(*dialog, #True)
gtk_file_chooser_set_current_folder_(*dialog,path)
Repeat
index + 1
part = StringField(pattern, index, ";")
If part = ""
Break
EndIf
*filter = gtk_file_filter_new_()
label.s = StringField(part, 1, "|")
patter.s = StringField(part, 2, "|")
gtk_file_filter_set_name(*filter, label)
gtk_file_filter_add_pattern(*filter, patter)
gtk_file_chooser_add_filter_(*dialog, *filter)
ForEver
r1 = gtk_dialog_run_(*dialog)
If r1 = #GTK_RESPONSE_ACCEPT
*mem = gtk_file_chooser_get_filename_(*dialog);
filename.s = PeekS(*mem, -1, #PB_UTF8)
If *mem
g_free_(*mem);
EndIf
Else
FileName = ""
EndIf
gtk_widget_destroy_(*dialog)
ProcedureReturn FileName
EndProcedure
OpenWindow(0, 0, 0, 0, 0, "", #PB_Window_Invisible)
Define file.s = MyOpenFileRequester("Test", "/home", "PB-Files|*.pb;All Files|*", 0 , 0)
MessageRequester("Ifo", "Result = " + file)
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Re: Aufruf von OpenFileRequester()
Natürlich könnte ich das auch selbst machen. Leider ist mein Programm aber schon hart am Limit dessen, was die Testversion zulässtUnter Linux würde ich auf die Schnelle ein OpenFileRequester selber bauen.
Re: Aufruf von OpenFileRequester()
Eigentlich ist dies in Linux so gelöst, dass man in einem FileRequester auf den Spaltentitel klickt (z.B. auf "Letzte Änderung") und fortan sind die Dateien nach dem Datum sortiert (neueste zuerst). Dies wird durch ein Dreieck mit der Spitze nach oben im Spaltenkopf angezeigt. Klickt man erneut auf den Spaltentitel, wird die Sortierreihenfolge umgekehrt (neueste zuletzt) und die Spitze des Dreiecks im Spaltenkopf zeigt dann nach unten. Dies erfolgt separat jeweils für Ordner und Dateien.
Diese Einstellung merkt sich der der FileRequester und beim nächsten Aufruf von OpenFileRequester() und sogar beim nächsten Start des Programms wird die Sortierung so eingestellt, wie der Anwender sie zuletzt eingestellt hatte.
Dies wirkt einer Bevormundung des Anwenders durch den Programmierer entgegen, denn während Du vielleicht am liebsten Ordner und Dateien nach Datum sortiert haben möchtest, möchte ein anderer Anwender vielleicht lieber eine Sortierung nach Ordner- und Dateinamen.
Re: Aufruf von OpenFileRequester()
Ich könnte durchaus damit leben, wenn es so wäre, aber das ist leider nicht der Fall. Ich wähle z.B. kurz hintereinander zwei Bilddateien aus. Manchmal sind die Dateien beim zweiten Mal so sortiert, wie ich es beim ersten Mal eingestellt habe. Aber meistens muss ich wieder zweimal auf "Datum" klicken. Jedenfalls unter Linux Mint 19.3. Und nach einem Neustart meines Programms sowieso.
Ich will ja auch niemanden bevormunden. Optimal fände ich einen Flag, der die gewünschte Sortierung automatisch auslöst.
Alternativ könnte man dem Fenster ja auch einen Tastendruck schicken, aber die Sortierung reagiert leider nicht auf Tastendrücke.
Ich will ja auch niemanden bevormunden. Optimal fände ich einen Flag, der die gewünschte Sortierung automatisch auslöst.
Alternativ könnte man dem Fenster ja auch einen Tastendruck schicken, aber die Sortierung reagiert leider nicht auf Tastendrücke.