Einzelne TabItems verstecken?

  • schreib es doch einfach in eine datei und lösch es, wenn es wieder gebraucht wird importier es wieder ;)
    ach ja und man kann guictrlsetstate($ListView, $GUI_HIDE) bei listviews nur anwenden, wenn der style mit den checkboxen benutzt wurde!
    oh man verlesen -.- Peinlich
    Edit1: weil ich so blöd war, hier die lösung (wie erst gedacht, war ja aber falsche art des controls -.-)
    damit das label wieder sichtbar wird, muss man leider einmal auf den tab klicken, das lässt sich aber sicherlich lösen ;)

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <TabConstants.au3>
    #include <WindowsConstants.au3>
    #include <GuiTab.au3>
    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Form1", 625, 445, 192, 124)
    $Tab1 = GUICtrlCreateTab(24, 16, 529, 377)
    GUICtrlSetResizing(-1, $GUI_DOCKWIDTH+$GUI_DOCKHEIGHT)
    $TabSheet1 = GUICtrlCreateTabItem("TabSheet1")
    $TabSheet2 = GUICtrlCreateTabItem("TabSheet2")
    $Label1 = GUICtrlCreateLabel("Label1", 40, 56, 36, 17)
    GUICtrlCreateTabItem("")
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###
    While 1
    MsgBox(0, "Löschvorgang", "2. Tab löschen")
    _GUICtrlTab_DeleteItem($Tab1, 1)
    MsgBox(0, "Wiederherstellen", "2. Tab wiederherstellen")
    GUICtrlCreateTabItem("TabSheet2")
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit

    [/autoit] [autoit][/autoit] [autoit]

    EndSwitch
    WEnd

    [/autoit]
  • Zitat

    Mach es doch so, dass das TabItem nicht auswählbar ist (wenn es angeklickt wird, wird das NachbarItem aktiviert).
    Aber wieso willst du es überhaupt verstecken?

    Ich wollte neben 6 Tabs einen 7. anlegen, das so beschriftet ist: ">>". Klickt man da drauf, werden alle angezeigt. Also vorher sollen natürlich nur 2 Tabs sichtbar sein.

    Wisst Ihr, was ich meine?

    • Offizieller Beitrag

    Soweit ich herausgefunden habe, geht verstecken nicht. Aber du kannst die Breite der 'zu versteckenden' Items auf 0 setzen. Dazu gibt es aber keine Funktion, du mußt beim Zeichnen des Ctrl selbst eingreifen (OWNERDRAW).
    Das hatte ich bei meiner Listview-UDF auch so verwendet.

    • Offizieller Beitrag

    Ich mach mal einen neuen Eintrag, damit du merkst, dass noch was an Antwort gekommen ist ;) .

    Also:
    Ownerdraw funktioniert hierfür nicht. Ich kann alles zeichnerische auf dem Ctrl selbst gestalten aber nicht das Ctrl selber.

    Wenn es dir extrem wichtig ist, unbedint Tabs zu verstecken, gibt es einen Lösungsweg von hinten durch die Brust aufs Auge. :D
    - Exceltabelle - dadrin VBA-Editor aufrufen und ein Macro bauen mit deiner GUI. Du wirst merken, dass die Tabgestaltungsmöglichkeiten deutlich einfacher zu realisieren sind als in AutoIt (z.B. auf jedem Item ein eigenes Hintergrundbild, alle Ctrls transparent). Und das für dich wichtige: Visible=False ^^
    Die Tabs heißen in VBA übrigens Multiseiten.
    Der Pferdefuß ist das Interagieren zwischen AutoIt und VBA. VBA verwendet keine Ctrl, die du per ControlCommand() etc. ansprechen könntest. Insofern wäre ein Weg, von VBA sich ändernde Werte in die Hintergrund-Exceltabelle zu schreiben, die du dann (anstatt GuiGetMsg) intervallmäßig auf Änderungen prüfst.
    Ist sicher nicht optimal, aber damit kannst du dein Ziel umsetzen.
    Um eine VBA-Form ohne das dahinterliegende Excelsheet anzuzeigen, mußt du im VBAProject 'Diese Arbeitsmappe' auswählen und dort folgendes Makro erstellen:

    Code
    Private Sub Workbook_Open()
        Call Der_Name_deines_Makros_für_die_Form
    End Sub


    So wird die Form direkt beim Aufruf der Exceltabelle allein angezeigt:

    [autoit]

    $sPath = 'Pfad_der_XLS'
    $oExcel = ObjCreate('Excel.Application')
    $oExcel.Visible = False
    $oExcel.Workbooks.Open($sPath)

    [/autoit]


    Nicht vergessen, das Excelobjekt am Ende zu schließen:

    [autoit]

    $oExcel.DisplayAlerts = False ; Beenden ohne Speichern der Änderungen
    $oExcel.Application.Quit

    [/autoit]