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 »

Lord hat geschrieben:Nichtsdestotrotz solltest Du in den Beispielen keine absoluten Pfade benutzen, die bei anderen Usernso nicht existieren
Ubs ja, dass kommt davon wenn man "private" Beispiele weiter gibt ^^
Lord hat geschrieben:Eines ist mir allerdings aufgefallen bei "VerticalExampel".Der Schalter für einen neuen Tab und der Scroll-Pfeilsollten auf der linken Seite oben sein.Bei den drei anderen Seiten befinden sich diese immeram Ende der Tabs in Leserichtung.Ebenfalls sollte sich die Tabs beim Scrollen an den An-fang "untenbündig" befinden. Auf der rechten Seite paßtes.
Auf genau solches Feedback habe ich gewartet.
Ich wusste nicht genau wie ich es machen sollte, wenn die Tabs auf der linken Seite von unten nach oben gestapelt werden sah es auch irgendwie komisch aus.
Aber du hast natürlich rechts, dass aktuell die linke Variante nicht zu den anderen passt (in bezug auf Leserrichtung).
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
Pure_Beginner
Beiträge: 247
Registriert: 29.09.2011 21:49
Computerausstattung: i7 9XX 4000 MHZ / 12 GB RAM / Win 8.1 64Bit / Win 7 64Bit
Wohnort: Brühl

Re: TabBarGadget - Tabs wie im Browser

Beitrag von Pure_Beginner »

Hallo Stargate,

habe ein Problem mit dem TabBarGadGet.
Wenn ich folgenden Code verwende erhalte ich eine Fehlermeldung.

Code: Alles auswählen

For k = 0 To 11                                             ;schleife für monate
        ;AddGadgetItem(#PANEL, k, Monat(k) )  
        AddTabBarGadgetItem(#PANEL, k,  Monat(k));panelgadget beschriftung
        egrid_CreateGrid(2+k, 10, 10, 1601, 767, 22,#egrid_NoHeaderButtons|#egrid_GridLines,#egrid_CustomHeader|#egrid_MultiLineText)  ;|#egrid_GridLines,#egrid_CustomHeader|#egrid_MultiLineText
        egrid_CreateCellCallback(2+k, @MyCellCallBack())
        
        egrid_AddColumn(2+k,0,"Tag",35)
        egrid_AddColumn(2+k,1,"",26)
        egrid_AddColumn(2+k,2,"Desktop Visualizer", Weite.i)
        egrid_AddColumn(2+k,3,"Beamer 1 2500 Ansi Lumen",Weite.i)
        egrid_AddColumn(2+k,4,"Beamer 2 2500 Ansi Lumen",Weite.i)
        egrid_AddColumn(2+k,5,"Beamer 3 Full HD", Weite.i)
        egrid_AddColumn(2+k,6,"Laptop 1", Weite.i)
        egrid_AddColumn(2+k,7,"Laptop 2", Weite.i)
        egrid_AddColumn(2+k,8,"Overhead 1", Weite.i)
        egrid_AddColumn(2+k,9,"Overhead 2", Weite.i)
        egrid_AddColumn(2+k,10,"fahrbare Rollbild- leinwand", Weite.i)
        egrid_AddColumn(2+k,11,"Flipchart 1", Weite.i)
        egrid_AddColumn(2+k,12,"Flipchart 2", Weite.i)
        egrid_AddColumn(2+k,13,"Flipchart 3", Weite.i)
        egrid_AddColumn(2+k,14,"Pinnwand 1", Weite.i)
        egrid_AddColumn(2+k,15,"Pinnwand 2", Weite.i)
        egrid_AddColumn(2+k,16,"Pinnwand 3", Weite.i)
        egrid_AddColumn(2+k,17,"Moderator Koffer", Weite.i)

        egrid_SetHeaderHeight(2+k,50)

        egrid_SetOption(2+k, #egrid_HeaderBorderColour, #Red)
        egrid_SetOption(2+k, #egrid_SelectionBorderColour, #Blue)
        egrid_SetOption(2+k, #egrid_SelectionBorderWidth, 2)
        egrid_SetOption(2+k, #egrid_GridLineColour, #Black)
        SetActiveGadget(2+k)
        
        egrid_AddRows(2+k,-1, Monatstage(k)) ;100 rows.
        
        
        For i = 1 To Monatstage(k)                                ;schleife für anzahl der tage
          Ergebnis = DayOfWeek(Date (Jahr,1+k,i,0,0,0))            ;aktueller tag ermitteln
          
          Select Ergebnis                                          ;umwandeln in text
            Case 0
              Tagtext = "So"
            Case 1
              Tagtext = "Mo"
            Case 2
              Tagtext = "Di"
            Case 3
              Tagtext = "Mi"
            Case 4
              Tagtext = "Do"
            Case 5
              Tagtext = "Fr"
            Case 6
              Tagtext = "Sa"
          EndSelect
          
          egrid_SetCellText(2+k, 0, i-1, Tagtext)
          egrid_SetCellText(2+k, 1, i-1, Str(i))
          
        Next           
      Next     
Auch das ändern der Zeile

Code: Alles auswählen

AddTabBarGadgetItem(#PANEL, k,  Monat(k))
in
AddTabBarGadgetItem(#PANEL, #PB_Default, Monat(k))
funktioniert nicht.

Hättest du einen Tipp für mich ?

Grüße
Christian
PureBasic 5.30 Beta 3 (X64/X86) | Win 8 (64) Pro / Win 7 (64) Pro | Es ist der Hobbyist[/col
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 »

Kannst du mir etwas mehr Informationen geben?
Was für eine Fehlermeldung und wo?
Welche Version verwendest du (PureBasic und Include)?
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
Andreas21
Beiträge: 390
Registriert: 30.08.2004 09:05
Computerausstattung: Desktop
Windows 10 Pro x64
CPU: AMD Ryzen 5 2600 3.40 GHz
Ram: 16GB RAM
Grafik: NVIDA Geforce 1060
PB: 5.72 X86/X64
Wohnort: Heidelberg

Re: TabBarGadget - Tabs wie im Browser

Beitrag von Andreas21 »

Hi,

Das Event für Editierbare Karten wird bei mir nicht erkannt.

Wenn ich einen Karten Text änder giebt es kein Event.
Windows 10 x64 Pro - PB 5.61 X64 / x32 - PB 4.6 x32
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 »

@Andreas21:
Danke für den Bug-Report. Stimmt, wenn ich mit Enter das Editieren beende, kommt kein Event, nur wenn ich beim editieren auf eine andere Karte klicke, kommt das Event. Außerdem gibt EventTab() das falsche Tab aus.
Wird gefixt.
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
Pure_Beginner
Beiträge: 247
Registriert: 29.09.2011 21:49
Computerausstattung: i7 9XX 4000 MHZ / 12 GB RAM / Win 8.1 64Bit / Win 7 64Bit
Wohnort: Brühl

Re: TabBarGadget - Tabs wie im Browser

Beitrag von Pure_Beginner »

Hallo Leute,

bin immer noch ziemlicher Anfänger (seit Jahren), Programmiere nur so zu Spaß.
Ich denke es liegt an der For Schleife und das GadGet kann den Zähler nicht auswerten.
Bestimmt habt ihr das im Post vorher schon so dargestell ? :?

Die Version die ich verwende ist 1.4 Beta 1 (2013-01-08).

Der Fehler: Zeiger ist Null

Code: Alles auswählen

Procedure.i AddTabBarGadgetItem(Gadget.i, Position.i, Text.s, ImageID.i=#Null, DataValue.i=#Null) ; OK
	
	Protected *TabBarGadget.TabBarGadget = GetGadgetData(Gadget)
	Protected *Item.TabBarGadgetItem
	
	If Position = #TabBarGadgetItem_NewTab
		*TabBarGadget\Attributes | #TabBarGadget_NewTab
		*Item = @*TabBarGadget\NewTabItem
	ElseIf Position = #PB_Default
		LastElement(*TabBarGadget\Item())
		*Item = AddElement(*TabBarGadget\Item())
		Position = ListIndex(*TabBarGadget\Item())
	ElseIf TabBarGadget_ItemID(*TabBarGadget, Position)
		*Item = InsertElement(*TabBarGadget\Item())
	EndIf
	
	With *Item
		\Text             = Text
		\ShortText        = Text
		TabBarGadget_ReplaceImage(*TabBarGadget, *Item, ImageID)
		\DataValue        = DataValue
		\Color\Text       = TabBarGadgetInclude\TextColor
		\Color\Background = TabBarGadgetInclude\FaceColor
	EndWith
	
	TabBarGadget_PostUpdate(*TabBarGadget)
	
	ProcedureReturn Position
	
EndProcedure


Zeile 2152 \Text = Text

War leider etwas ungenau, weil ich dachte es liegt wie immer an meinen Künsten.

Grüße
Christian
PureBasic 5.30 Beta 3 (X64/X86) | Win 8 (64) Pro / Win 7 (64) Pro | Es ist der Hobbyist[/col
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 »

Du hast vermutlich eine ungültige Position übergeben, aber das sollte mein Inlcude abfangen also ein Bug ^^

Was funktionieren sollte ist aber AddTabBarGadgetItem(#PANEL, -1, Monat(k)).
Ansonsten, wenn wieder ein Fehler kommt, einfach nur die Zeile posten und den Fehler, das Include hab ich ja selber.
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
Pure_Beginner
Beiträge: 247
Registriert: 29.09.2011 21:49
Computerausstattung: i7 9XX 4000 MHZ / 12 GB RAM / Win 8.1 64Bit / Win 7 64Bit
Wohnort: Brühl

Re: TabBarGadget - Tabs wie im Browser

Beitrag von Pure_Beginner »

@STARGÅTE

funktioniert leider nicht.
Gleiche Wirkung wie #PB_Default

hier mein gesamter Code, bitte nicht erschrecken.

Code: Alles auswählen

EnableExplicit
XIncludeFile "D:\Program Files (x86)\PureBasic (X86)\Includes\esgrid.pbi"
XIncludeFile "D:\Program Files (x86)\PureBasic (X86)\Includes\TabBarGadget.pbi"
IncludePath ""
LoadFont(1, "Arial", 10,#PB_Font_Bold )

Enumeration 20 Step 1
  #WINDOW
  #PANEL
  #GRID
  #BTN_ABBRECHEN
  #BTN_SPEICHERN
  #BTN_DRUCKEN
EndEnumeration

Procedure.i MyCellCallBack(egrid, uMsg, *cellinfo.egridCellInfo)
  Protected result
  Select uMsg
      Case #egrid_NotifyCellType
        If *cellinfo\column=0 Or  *cellinfo\column=1   
           *cellinfo\font=FontID(1)
        *cellinfo\celltype=#egrid_StaticString     ;zelle 0 und 1 sperren
      EndIf

      
      
    Case #egrid_cellUpdated
      result=1
      
    Case #egrid_SelectCell
      result=#True
      InvalidateRect_(GadgetID(egrid),0,0)
      
    Case #egrid_FormatCell
      If *cellinfo\row=-1
        *cellinfo\textjustification = #egrid_centerText
                   *cellinfo\font=FontID(1)

      EndIf
      If *cellinfo\row<>-1 And *cellinfo\row=egrid_SelectedRow(egrid)
        
        
        *cellinfo\backcolour = $CCFFCC;$A5F4F9
      EndIf
      
      If *cellinfo\row <> - 1 ; ist nicht der header
       
        If egrid_GetCellText(egrid, 0, *cellinfo\row) = "Sa" Or egrid_GetCellText(egrid, 0, *cellinfo\row) = "So"
          *cellinfo\backcolour = $99CC99
          *cellinfo\forecolour=#Red
        EndIf
      EndIf
    Default
      result = #True                     
  EndSelect
  
  ProcedureReturn result
EndProcedure


Procedure Tage_im_Monat(Jahr.i)

  If OpenWindow(#WINDOW, 10, 10, 1651, 905, "Kalender " + Str(Jahr), #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget)
    
    ButtonGadget(#BTN_ABBRECHEN,1558,840,80,40,"ABBRECHEN")
    ButtonGadget(#BTN_SPEICHERN,10,840,80,40,"SPEICHERN")
    ButtonGadget(#BTN_DRUCKEN,200,840,80,40,"DRUCKEN")
    
    ;If PanelGadget(#PANEL, 10, 10, 1629,815)
  If TabBarGadget(#PANEL, 10, 10, 1629,815, #TabBarGadget_CloseButton|#TabBarGadget_BottomLine)
    
    Protected Tage.i, k.i, Ergebnis.i, i.i, Event.i, Quit.i, Weite.i = 96, GadgetID.i
      Protected Tagtext.s
      
      If Jahr % 4 = 0 And  (Jahr % 100 <> 0 Or Jahr % 400 = 0)         ;auf schaltjahr überprüfen
        Tage = 29
      Else
        Tage = 28
      EndIf
      
      Dim Monatstage.i(11)                                              ;array für anzahl der tage
      Monatstage(0) = 31
      Monatstage(1) = Tage
      Monatstage(2) = 31
      Monatstage(3) = 30
      Monatstage(4) = 31
      Monatstage(5) = 30
      Monatstage(6) = 31
      Monatstage(7) = 31
      Monatstage(8) = 30
      Monatstage(9) = 31
      Monatstage(10) = 30
      Monatstage(11) = 31
      
      Dim Monat.s(11)                                                     ;array für monatsnamen
      Monat(0) = "Januar"
      Monat(1) = "Februar"
      Monat(2) = "März"
      Monat(3) = "April"
      Monat(4) = "Mai"
      Monat(5) = "Juni"
      Monat(6) = "Juli"
      Monat(7) = "August"
      Monat(8) = "September"
      Monat(9) = "Oktober"
      Monat(10) = "November"
      Monat(11) = "Dezember"
      
      
      For k = 0 To 11                                             ;schleife für monate
        ;AddGadgetItem(#PANEL, k, Monat(k) )
        AddTabBarGadgetItem(#PANEL, -1, Monat(k))
        ;AddTabBarGadgetItem(#PANEL, k,  Monat(k));panelgadget beschriftung
        egrid_CreateGrid(2+k, 10, 10, 1601, 767, 22,#egrid_NoHeaderButtons|#egrid_GridLines,#egrid_CustomHeader|#egrid_MultiLineText)  ;|#egrid_GridLines,#egrid_CustomHeader|#egrid_MultiLineText
        egrid_CreateCellCallback(2+k, @MyCellCallBack())
        
        egrid_AddColumn(2+k,0,"Tag",35)
        egrid_AddColumn(2+k,1,"",26)
        egrid_AddColumn(2+k,2,"Desktop Visualizer", Weite.i)
        egrid_AddColumn(2+k,3,"Beamer 1 2500 Ansi Lumen",Weite.i)
        egrid_AddColumn(2+k,4,"Beamer 2 2500 Ansi Lumen",Weite.i)
        egrid_AddColumn(2+k,5,"Beamer 3 Full HD", Weite.i)
        egrid_AddColumn(2+k,6,"Laptop 1", Weite.i)
        egrid_AddColumn(2+k,7,"Laptop 2", Weite.i)
        egrid_AddColumn(2+k,8,"Overhead 1", Weite.i)
        egrid_AddColumn(2+k,9,"Overhead 2", Weite.i)
        egrid_AddColumn(2+k,10,"fahrbare Rollbild- leinwand", Weite.i)
        egrid_AddColumn(2+k,11,"Flipchart 1", Weite.i)
        egrid_AddColumn(2+k,12,"Flipchart 2", Weite.i)
        egrid_AddColumn(2+k,13,"Flipchart 3", Weite.i)
        egrid_AddColumn(2+k,14,"Pinnwand 1", Weite.i)
        egrid_AddColumn(2+k,15,"Pinnwand 2", Weite.i)
        egrid_AddColumn(2+k,16,"Pinnwand 3", Weite.i)
        egrid_AddColumn(2+k,17,"Moderator Koffer", Weite.i)

        egrid_SetHeaderHeight(2+k,50)

        egrid_SetOption(2+k, #egrid_HeaderBorderColour, #Red)
        egrid_SetOption(2+k, #egrid_SelectionBorderColour, #Blue)
        egrid_SetOption(2+k, #egrid_SelectionBorderWidth, 2)
        egrid_SetOption(2+k, #egrid_GridLineColour, #Black)
        SetActiveGadget(2+k)
        
        egrid_AddRows(2+k,-1, Monatstage(k)) ;100 rows.
        
        
        For i = 1 To Monatstage(k)                                ;schleife für anzahl der tage
          Ergebnis = DayOfWeek(Date (Jahr,1+k,i,0,0,0))            ;aktueller tag ermitteln
          
          Select Ergebnis                                          ;umwandeln in text
            Case 0
              Tagtext = "So"
            Case 1
              Tagtext = "Mo"
            Case 2
              Tagtext = "Di"
            Case 3
              Tagtext = "Mi"
            Case 4
              Tagtext = "Do"
            Case 5
              Tagtext = "Fr"
            Case 6
              Tagtext = "Sa"
          EndSelect
          
          egrid_SetCellText(2+k, 0, i-1, Tagtext)
          egrid_SetCellText(2+k, 1, i-1, Str(i))
          
        Next           
      Next     
      
      
      Repeat
        Event = WaitWindowEvent()
        GadgetID = EventGadget()
        Select GadgetID
          Case #BTN_ABBRECHEN
            End
          Case #BTN_SPEICHERN
          Case #BTN_DRUCKEN
          
            StopDrawing()
        EndSelect
        If Event = #PB_Event_CloseWindow 
          Quit = 1
        EndIf
 
      Until Quit = 1
    EndIf    
  EndIf
  
EndProcedure

Tage_im_Monat(2012)
PureBasic 5.30 Beta 3 (X64/X86) | Win 8 (64) Pro / Win 7 (64) Pro | Es ist der Hobbyist[/col
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 »

Du willst hier das TabBarGadget aber wie ein PanelGadget verwenden, aber mein TabBarGadget ist kein PanelGadget.
Das TabBarGadget erzeugt selbst kein Container, wie das PanelGadget. Außerdem hast du TabBarGadgetEvent() vergessen.

Nutze in deinem Fall bitte weiter das PanelGadget, denn da der Code ohne das esgrid.pbi läuft, scheint es ja daran zu liegen.
Hast du eine Quelle dafür?
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
NicTheQuick
Ein Admin
Beiträge: 8807
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: TabBarGadget - Tabs wie im Browser

Beitrag von NicTheQuick »

Irgendwie fehlt noch, dass man ein Tab außerhalb des sichtbaren Bereichs schieben kann. Oder wenn man ein Tab greift und über einen der Pfeile hält, sich alle langsam in die entsprechende Richtung bewegen, damit man dann irgendwann das Tab fallen lassen kann.
Moment muss man es immer an den rechten Rand schieben, dann mit den Pfeilen weiter klicken und dann wieder das Tab weiter ziehen.

Und was ich auch ganz interessant finde, was zum Beispiel Firefox so macht, wäre bei einem Doppelklick auf einen Pfeil alle Tabs eine ganze Tabbarbreite weiter zu schieben.

Ansonsten sehr schönes Ding. :) :allright:
Antworten