Seite 1 von 2

ExplorerTreeGadget-Anzeige ohne Dateiendung

Verfasst: 06.05.2009 08:32
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

Verfasst: 06.05.2009 08:46
von ts-soft
Da wirste wohl ein Treegadget bemühen müssen und selber füllen.

Verfasst: 06.05.2009 10:21
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

Verfasst: 06.05.2009 18:32
von dysti
Hey, dann muß ich wohl was basteln.

Verfasst: 06.05.2009 19:04
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

Verfasst: 06.05.2009 19:44
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!

Verfasst: 06.05.2009 20:05
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.

Verfasst: 06.05.2009 20:11
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

Verfasst: 06.05.2009 20:24
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.

Verfasst: 06.05.2009 20:37
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: