Hallo,
ich versuche schon die ganze Zeit erfolglos, einzelne TabItems zu verstecken. Ich habs schon mit GUICtrlSetState($Tab, $GUI_HIDE) und ControlHide versucht, doch es funktioniert so nicht. Weiß jemand wie das genau gehen soll?
Hallo,
ich versuche schon die ganze Zeit erfolglos, einzelne TabItems zu verstecken. Ich habs schon mit GUICtrlSetState($Tab, $GUI_HIDE) und ControlHide versucht, doch es funktioniert so nicht. Weiß jemand wie das genau gehen soll?
schreib es doch einfach in eine datei und lösch es, wenn es wieder gebraucht wird importier es wieder oh man verlesen -.- Peinlich
ach ja und man kann guictrlsetstate($ListView, $GUI_HIDE) bei listviews nur anwenden, wenn der style mit den checkboxen benutzt wurde!
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
#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
EndSwitch
WEnd
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?
ZitatMach 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?
also als wenn da ganz viele sind und man weiter muss, damit alle da sind?
oder meinst du einfach, wenn man das anklickt, kommen die übrigen?
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.
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.
- 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:
So wird die Form direkt beim Aufruf der Exceltabelle allein angezeigt:
$sPath = 'Pfad_der_XLS'
$oExcel = ObjCreate('Excel.Application')
$oExcel.Visible = False
$oExcel.Workbooks.Open($sPath)
Nicht vergessen, das Excelobjekt am Ende zu schließen:
$oExcel.DisplayAlerts = False ; Beenden ohne Speichern der Änderungen
$oExcel.Application.Quit
Hallo BugFix. Danke für Deine sehr ausführliche Antwort. Ich werde es mal ausrobieren. Nachteil daran ist jetzt aber wieder, dass nicht jeder Excel hat. Naja aber wenn das nicht anders geht, muss ich mich damit wohl abfinden
Wenn ich nicht irre, darf die Runtimebibliothek für VBA weitergegeben werden. Dann wäre es vielleicht auch möglich ohne installiertes Office darauf zuzugreifen. Ist aber sicher nicht unkompliziert.