TabBarGadget - Tabs wie im Browser

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7028
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: TabBarGadget - Tabs wie im Browser

Beitrag von STARGÅTE »

Na in der PB-IDE kannst du unter Einstellungen->Editor auch den Haken bei "Schließ-Knöpfe in jedem Tab" rausnehmen.
Dann kannst du die Tabs immer noch mit der Mittel-Maus-Taste schließen.

Ich weiß nicht, ob meine Finale Version früher fertig ist als seine letzte Beta, und gerade das mit dem Thread muss unbedingt noch genauer untersucht werden, nicht das die IDE ab und zu abstürzt wegen meiner Tabs.
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
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: TabBarGadget - Tabs wie im Browser

Beitrag von RSBasic »

STARGÅTE hat geschrieben:[...], nicht das die IDE ab und zu abstürzt wegen meiner Tabs.
Das wäre natürlich nicht so schön. ;)
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Kevin
Beiträge: 236
Registriert: 11.06.2007 12:55

Re: TabBarGadget - Tabs wie im Browser

Beitrag von Kevin »

STARGÅTE hat geschrieben:Na in der PB-IDE kannst du unter Einstellungen->Editor auch den Haken bei "Schließ-Knöpfe in jedem Tab" rausnehmen.
Dann kannst du die Tabs immer noch mit der Mittel-Maus-Taste schließen.
Das mit der Mittleren Maustaste wusste ich nicht!

und es kann zu zufälligen abstürzen kommen:

Code: Alles auswählen

Procedure TabBarGadget_Timer(Null.i)
  Protected last	
  With TabBarGadgetInclude\Timer
    Repeat
      If \TabBarGadget
        Delay(0)
        If \TabBarGadget
          Repeat
            If ElapsedMilliseconds() - last => 200
              PostEvent(#PB_Event_Gadget, \TabBarGadget\Window, \TabBarGadget\Number, #TabBarGadgetEvent_Pushed, \Type)
              last=ElapsedMilliseconds()
            EndIf
            Delay(0)
          Until	 \TabBarGadget = #Null
        EndIf
      Else
        Delay(0)
      EndIf
    ForEver
  EndWith
EndProcedure
(angepasster code damit dem Zufall nachgeholfen wird) einfach tabs verschieben und es stürzt irgendwann ab...

mfg kevin
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7028
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: TabBarGadget - Tabs wie im Browser

Beitrag von STARGÅTE »

Kann ich leider nicht reproduzieren (zumindest in den ersten 3min nicht).

PostEvent() ist auf jedenfall Threadsicher:
"Dieser Befehl kann sehr nützlich für die Kommunikation zwischen Threads und der Haupt-Ereignisschleife sein. Zum Beispiel kann ein Thread ein benutzerdefiniertes Ereignis (mit zugewiesenen Daten) senden, wenn er mit seiner Verarbeitung fertig ist, wodurch die Hauptschleife dieses erhält und die weitere Verarbeitung stattfinden kann."

Da im Thread keine String-Verarbeitung stattfindet, ist ja Thread-Safe nicht nötig.

Allerdings habe ich schon eine Fehlerquelle entdeckt.
Denn wenn "Until \TabBarGadget = #Null" zwar fehlschlegt, genau danach aber \TabBarGadget gelöscht wird, würde \TabBarGadget\Window ein IMA erzeugen.

Ich werde dort ein Mutex einbauen.
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
STARGÅTE
Kommando SG1
Beiträge: 7028
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: TabBarGadget - Tabs wie im Browser

Beitrag von STARGÅTE »

Nach langer Pause ist es nun wieder so weit, ich habe ein neues Update für euch.

Vorab möchte ich mich jedoch bei allen aktuellen nutzer entschuldigen,
da das neue Update leider ein paar grundlegende Änderungen mit sich bringt,
welche jedoch die Benutzung des Includes (gerade für neue Nutzer) um einiges Vereinfacht.

Update 1.5 Beta 1 (19. Oktober 2013)
  • Umstellung der Ereignisverwaltung auf PB 5.20 und BindEvent().
    Somit ist kein TabBarGadgetEvent() mehr nötig und Ereignistypen
    können wie woanders mit EventType() abgefragt werden.
  • Beim Erstellen muss nun das Fenster angegeben werde, wo es hinein soll.
  • Einige Konstantennamen haben sich geändert, um PureBasic-Ähnlich zu sein.
  • EventTab() hab ich entfernt um Namenskollision zu vermeiden,
    dafür gibt es nun GetTabBarGadgetItemPosition() und SetTabBarGadgetItemPosition(),
    so können Tabs auch mit einem Befehl verschoben werden.
  • Außerdem wurde die Funktionalität von vertikalen Tabs, Multiselect, Checkboxen und der Navigation verbessert.
  • Das AutoScroll funktioniert aus Sicherheitsgründen nur, wenn ThreadSafe aktiviert ist.
Checkboxen beim benutzen von #TabBarGadget_CheckBox:
Bild

Download: TabBarGadget V 1.5 Beta 1 Enthält die Include und die umfangreiche Hilfe mit Erklärungen und Beispielcodes
Onlinehilfe: TabBarGadget Hilfe

Wäre nett, wenn ihr die neue Version testet.
In der Hilfe gibt es u.A. ein kleinen Editor, wo man alle Attribute usw. in Echtzeit testen kann:
http://www.unionbytes.de/help/tabbargad ... ditor.html

PS: Ich suche jemanden der die Hilfe ins englische Übersetzen würde (ohne Google Translator), bitte per PN melden.

Hinweise zum Updaten von alten Versionen zu 1.5 Beta 1:
  • Bei TabBarGadget() bitte nun als letzten Parameter (nach den Attributen) immer die Fensternummer angeben!
  • TabBarGadgetEvent(<Gadget>) bitte mit EventType() (ohne Gadget-Angabe) ersetzen.
  • Die Event-Konstanten haben sich wie folgt geändert:
    • #TabBarGadgetEvent_TabEdited -> #TabBarGadget_EventType_EditItem
    • #TabBarGadgetEvent_Resized -> #TabBarGadget_EventType_Resize
    • #TabBarGadgetEvent_NewTab -> #TabBarGadget_EventType_NewItem
    • #TabBarGadgetEvent_CloseTab -> #TabBarGadget_EventType_CloseItem
    • #TabBarGadgetEvent_Change -> #TabBarGadget_EventType_Change
    • #TabBarGadgetEvent_TabSwapped -> #TabBarGadget_EventType_SwapItem
    • #TabBarGadgetEvent_PopupButton -> #TabBarGadget_EventType_PopupButton
  • EventTab() bitte mit GetTabBarGadgetItemPosition(<Gadget>, #TabBarGadgetItem_Event) ersetzen.
  • DisableTabBarGadgetItem() bitte ersetzen durch SetTabBarGadgetItemState() mit angabe von #TabBarGadget_Disabled
Zuletzt geändert von STARGÅTE am 19.10.2013 18:33, insgesamt 1-mal geändert.
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
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: TabBarGadget - Tabs wie im Browser

Beitrag von RSBasic »

Danke für die neue Version. Ich finds echt schade, dass die Aufrufe u.ä. geändert wurden. Bei PB hat mich das immer gestört, dass bestimmte Parameter vertauscht wurden oder dass bestimmte Funktionen umbenannt wurden. Ich nutze erstmal in einem Projekt immernoch deine alte Version. Mal schauen, wann ich Lust habe, es upzudaten und anzupassen.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7028
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: TabBarGadget - Tabs wie im Browser

Beitrag von STARGÅTE »

Die alten Versionen (1.3 bzw 1.4) wird auch weiterhin Verfügbar bleiben.
Ich kann dich auch verstehen, finde ich selbst auch nervig, nur war es eben erforderlich weil inzwischen bei einem PB-Event (zB LeftMouseUp) u.U. zwei TabBarGadget-Events zurück gegeben werden müssen. Und dank BindEvent() läuft die Aktualisierung des Gadgets besser.
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
frankmannb
Beiträge: 47
Registriert: 21.02.2010 13:02

Re: TabBarGadget - Tabs wie im Browser

Beitrag von frankmannb »

Hallöchen,

bin gerade durch das Forum auf dein super TabBarGadget gestossen. Leider erhalte ich in der neuen Version 5.2 beim Aufruf der Example.pb inf folgender Zeile eine Fehlermeldung (ungültige Bildtiefe)

CreateImage(#PB_Any, 16, 16, 32|#PB_Image_Transparent)

Ist hier noch ein Fehler ?

Grüße aus Potsdam
frankmannb
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7028
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: TabBarGadget - Tabs wie im Browser

Beitrag von STARGÅTE »

Hallo frankmannb,
Bitte verwende die neuste Beta:
Download: TabBarGadget V 1.5 Beta 1 Enthält die Include und die umfangreiche Hilfe mit Erklärungen und Beispielcodes
Sie ist mit PB 5.2 kompatibel.
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
RomanR
Beiträge: 23
Registriert: 21.04.2006 13:43
Wohnort: Eisenstadt

Re: TabBarGadget - Tabs wie im Browser

Beitrag von RomanR »

Hallo STARGÅTE,

wirklich toll dein TabBarGadget! Bin gerade dabei, es in einem Editor zu verwenden. Funktioniert wirklich gut und habe bis jetzt keine Bugs entdeckt.

Ich habe aber eine Frage: wäre es möglich, ein RightClick-Event zu bekommen? Ich würde das für ein Popup-Menü pro Button benötigen (z.B. Editieren ein/ausschalten, Farbe ändern, Icon ändern, Tab schützen, ...) - im Prinzip sowas wie das PopupButton-Event, nur halt pro Tab.

Vielen Dank für deine herausragende Arbeit! :allright:

mfG RomanR
Antworten