ExplorerTreeGadget-Anzeige ohne Dateiendung

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
dysti
Beiträge: 656
Registriert: 10.02.2006 18:34
Wohnort: Schlicktown

ExplorerTreeGadget-Anzeige ohne Dateiendung

Beitrag von dysti »

Hey,
wie kann ich das ExplorerTreeGadget dazu bringen, die Dateien in einem Verzeichnis ohne Dateiendung anzuzeigen.
Beispiel:
"foto1.jpg" soll nicht angezeigt werden, sondern "foto1"
Gruß
Dysti
PB5 / Spiderbasic / WB14 / Win7 / Win8.1 / Win10 / Debian 9
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Da wirste wohl ein Treegadget bemühen müssen und selber füllen.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag von STARGÅTE »

Würde ich dir ohnehin raten selber ein ExplorerTreeGadget zu bauen.

Klar ist das PB-ExplorerTreeGadget recht gut, aber es arbeitet zB nicht mit Threads, was dazu führt, dass beim öffnen von Ordnern die viel inhalt haben die gesamte Anwendung zum stillstand kommt.

Außdem kannst du so auch selber eigene "Extras" einbinden, wie zB Desktop, Netwerkumgebung, usw. was ja beim PB nicht angezeogt wird.
Dort hast du nun Eigene Dateien
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
dysti
Beiträge: 656
Registriert: 10.02.2006 18:34
Wohnort: Schlicktown

Beitrag von dysti »

Hey, dann muß ich wohl was basteln.
PB5 / Spiderbasic / WB14 / Win7 / Win8.1 / Win10 / Debian 9
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

STARGÅTE hat geschrieben:zB nicht mit Threads, was dazu führt, dass beim öffnen von Ordnern die viel inhalt haben die gesamte Anwendung zum stillstand kommt.
Auch ein Treegadget kann man nicht im Thread befüllen, lediglich die Daten
vorbereiten, was nichts bringt. Das füllen dauert eben so lange, jedenfalls
beim ListiconGadgert, mit TreeGadget hab ichs ja nicht getestet
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag von STARGÅTE »

Ja Daten vorbereiten sowieso, aber auch das füllen geht im Thread:

Code: Alles auswählen

OpenWindow(0, 0, 0, 800, 400, "Fenster", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
 TreeGadget(1, 5, 5, 390, 390)
 TreeGadget(2, 405, 5, 390, 390)
 
 
Procedure Fill(Null)
 For n = 1 To 3000
  AddGadgetItem(1, -1, "Eintrag "+Str(n))
 Next
 For n = 1 To 3000
  AddGadgetItem(2, -1, "Eintrag "+Str(n))
 Next
EndProcedure 
 
; Fill(0) ; Fülllen ohne Thread
; CreateThread(@Fill(),0) ; Fülllen mit Thread
 
Repeat
 Event = WaitWindowEvent()
 Select Event
  Case #PB_Event_CloseWindow
   End
  Case #PB_Event_Gadget
   Select EventGadget()
    Case 0
   EndSelect
  Case #PB_Event_Menu
   Select EventMenu()
    Case 0
   EndSelect
 EndSelect
ForEver
machst du nur Fill(0)
bleibt das ganze fenster grau und "eingefroren", für ca 5s

bei CreateThread(@Fill(),0)
kann ich dem Fenster beim füllen zusehen, und wenn das erste efüllt ist bereits schon rumscollen, ohne das ihn das stört.

Alle Einträge werden auch sauber eingetragen.
HINWEIS!
Zwei Thread die auf das selber gadget zugreifen sollte man nicht machen, das geht in die hose!
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

> kann ich dem Fenster beim füllen zusehen, und wenn das erste efüllt ist bereits schon rumscollen, ohne das ihn das stört.
Trotzdem mußte zumindest das gadget was gefüllt wird deaktivieren, was
meinste was das Programm macht wenn man da doppelt klickt :lol:

Es bringt absolut garnichts.

Du könntest ein virtuelles Control im Thread befüllen und dann den Speicher
copieren, das wäre die einzige sinnvolle Möglichkeit. Leider weiß ich nicht
wie man da dran kommt, gnozal bietet sowas in seiner Userlib.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag von STARGÅTE »

ts-soft hat geschrieben: Trotzdem mußte zumindest das gadget was gefüllt wird deaktivieren, was
meinste was das Programm macht wenn man da doppelt klickt :lol:
Es öffnet ganz normal den Baum der ausgewählt wurde, ohne das das befüllen behindert wird.

Dazu einfach mal den Code heir ersetzen:

Code: Alles auswählen

Procedure Fill(Null) 
 For n = 1 To 3000 
  AddGadgetItem(1, -1, "Eintrag "+Str(n), 0, n%3) 
 Next 
 For n = 1 To 3000 
  AddGadgetItem(2, -1, "Eintrag "+Str(n), 0, n%3) 
 Next 
EndProcedure
Zumindest habe ich noch kein "schlimmes" Eregnis gehabt, und ich benutze diese Art zu füllen schon länger ...
ich berichte dann wen es den ersten fehler gab ...

INFO: Ich werde auch nicht mit einem thread zwischen den einträgen rumspielen! sondern immer nur hinten was anhängen, damit sollte nie die riehenfolge oder Eintragsnummer von andere Einträgen verändert werden wenn der thread was neues hinzufügt
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Warum sollte die Routine im Thread schneller sein? Sehe ich nicht. Das
Gadget muß in jedemfall deaktiviert werden, was passiert wenn ich auf eine
leere Stelle droppe, wenn der da gerade was füllt?
Geschwindigkeitsvorteil: 0
Erhöhung der Fehlerwahrscheinlichkeit: 50%

Hab da ja nun genug Tests gemacht. GUI-Sachen bringen in Threads nichts,
ausser evtl. Abstürze.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag von STARGÅTE »

Schneller nicht, aber immerhin wird das Fenster/die Hauptschleife nicht blockiert.

Mit dem Droppen hast du recht, da könnte wirklich etwas passieren, obwohl ich ja dort auch das Ereignis selber abfangen kann, und das eigentliche Droppen erst statt findet wenn der Thread beendet wurde oder die Thread pausiere ...

HauptPunkt war bei mir halt, das ich nicht will, dass das Fenster beim "öffnen von C:\" (was bei mir sehr voll ist) einfriert.
Fass es da einen andere Weg gibt, wäre ich auch glücklich.
! Außer C:\ leerer zu machen :lol:
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Antworten