Hallo zusammen,
ich wollte in meinem Script Tabs benutzen, wollte diese aber auch entsprechend designtechnisch anpassen, daher habe ich mir mal das OwnTab.au3 von funkey aus dem englischen Forum angeschaut.
Um das ganze erst einmal auszuprobieren und z schauen, ob ich es für mich verwenden kann, habe ich ein Beispielscript gebastelt, was auch absolut einwandfrei funktioniert:
Spoiler anzeigen
#include "OwnTab.au3"
Local $hGui = GUICreate("TAB (in) TAB", 800, 450)
GUISetBkColor(0x000000)
;$OwnTab_Style = 1
; "CADASTRO","RELATÓRIOS","FERRAMENTAS","LABORATÓRIO","BACKUP","SAIR"
Local $aTabText[3] = [" MENU 01 ", " MENU 02 ", " MENU 03 "]
Local $aTabIcons[3][2] = [[""],[""],[""]]
Global $aCtrlTab = _OwnTab_Create($hGui, $aTabText, 10, 10, 780, 400, 30, 0x000000, 0x000000, 0x000000, $aTabIcons)
Local $aTabTip[3] = ["Dica Menu 01", "Dica Menu 02", "Dica Menu 03"]
_OwnTab_SetTip($aCtrlTab, $aTabTip) ;set the tooltips for the OwnTab-control
#Region Tab1
_OwnTab_Add($aCtrlTab) ;Start controls tab1
GUICtrlCreateLabel("Etiqueta 01", 15, 55, 769, 20)
GUICtrlSetColor(-1, 0xFFB400)
;$OwnTab_Style = 0
#EndRegion Tab1
#Region Tab2
_OwnTab_Add($aCtrlTab) ;Start controls tab2
GUICtrlCreateLabel("Etiqueta 02", 15, 43, 769, 20)
#EndRegion Tab2
#Region Tab3
_OwnTab_Add($aCtrlTab) ;Start controls tab3
GUICtrlCreateLabel("Etiqueta 03", 15, 43, 769, 20)
#EndRegion Tab3
_OwnTab_End($aCtrlTab) ;new: end control-definition AND inizialize the OwnTab
_OwnTab_SetFontCol($aCtrlTab, 0xFFB400) ;new: set font-color
GUISetState()
_OwnTab_Hover($aCtrlTab, 0x333333,0,200) ;start hover-function if you want
Local $msg
While 1
$msg = GUIGetMsg()
For $a = 1 To UBound($aCtrlTab, 1) - 1
If $msg = $aCtrlTab[$a][0] Then
_OwnTab_Switch($aCtrlTab, $a)
EndIf
Next
Switch $msg
;Case $Button1
; _OwnTab_SetAlarm($aCtrlTab, 4, 0xFF0000)
;Case $Button4
; _OwnTab_ResetAlarm($aCtrlTab, 4)
;Case $BtnSet
; _OwnTab_SetAlarm($aCtrlTab2, 2, 0x5050FF)
;Case $BtnReset
; _OwnTab_ResetAlarm($aCtrlTab2, 2)
;Case $Button5
; _OwnTab_Enable($aCtrlTab, 3)
;Case $Button6
; _OwnTab_Disable($aCtrlTab, 3)
;Case $Button7
; _OwnTab_Hide($aCtrlTab, 2)
;Case $Button8
; _OwnTab_Show($aCtrlTab, 2)
;Case $Box1
; If GUICtrlRead($Box1) = 1 Then
; _OwnTab_Hover($aCtrlTab, 0xFFFF88, GUICtrlRead($Input1))
; Else
; _OwnTab_Hover($aCtrlTab, 0xFFFF88, 0)
; EndIf
;Case $Input1
; If GUICtrlRead($Box1) = 1 Then _OwnTab_Hover($aCtrlTab, 0xFFFF88, GUICtrlRead($Input1))
Case -3
Exit
EndSwitch
Sleep(10)
WEnd
Alles anzeigen
Die OwnTab.au3 habe ich als Anhang beigefügt.
Wie gesagt, dieses Testscript funktioniert einwandfrei.
'Ich habe anschließend das Testscript auf mein eigentliches Script übertragen. Dei Tabs werden zwar einwandfrei angezeigt, allerdings funktioniert das Umschalten zwischen den einzelnen Tabs nicht. Ich habe alle möglichen Varianten getestet, aber egal wie ichs mache, die Umschaltung funktioniert einfach nicht.
Im Englischen Forum bekomme ich leider seit Wochen keine Antwort, daher hoffe ich nun, dass vielleicht einer der Experten hier mal drüber schaut und evtl. eine Lösung für mich findet.
Hier mein Script:
Spoiler anzeigen
#NoTrayIcon
#include <Constants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <Clipboard.au3>
#include <Date.au3>
#include <MsgBoxConstants.au3>
#include <WinAPIShellEx.au3>
#include <GuiMenu.au3>
#include <WinAPI.au3>
#include <TrayConstants.au3>
#include ".\settings.au3"
;#include ".\newentry.au3"
;#include ".\editentry.au3"
;#include ".\delentry.au3"
;#include ".\drucken.au3"
;#include ".\update.au3"
;#include ".\ping.au3"
#include <ButtonConstants.au3>
#include <ComboConstants.au3>
#include <EditConstants.au3>
#include <SQLite.au3>
#include <SQLite.dll.au3>
#include <StaticConstants.au3>
#include <Array.au3>
#include <GuiListView.au3>
#include <String.au3>
#include <Timers.au3>
#include <OwnTab.au3>
FileInstall("hilfe.gif", @TempDir & "\")
FileInstall("sqlite3.dll", @TempDir & "\")
Opt("GUIOnEventMode", 1)
Opt('TrayOnEventMode', 1)
Opt('TrayMenuMode', 1)
Global $g_idExit, $aQuery, $aRow, $listview, $aResult, $iRows, $iColumns, $iRval, $sItem, $ttest, $setfunc, $sethkey, $manueltext, $okey, $otext, $resettings, $e_newEntry, $e_editEntry, $replace, $g_zeit, $First3Lines1, $vQuery, $vRow, $version, $guiversion
Global Enum $e_ftasten = 1000, $e_idOpen, $e_idSave, $e_idExit, $e_options, $e_idCopy, $e_idPaste, $e_idAbout, $fprint, $e_UpdateDB, $e_hilfe
_Main()
Func _Main()
Global $hGUI = GUICreate("Smile Tool", 600, 520, -1, $WS_EX_ACCEPTFILES)
GUISetBkColor(0x000000)
GUICtrlSetDefBkColor(0x000000)
GUICtrlSetDefColor(0xFFB400)
; Create File menu
$hFile = _GUICtrlMenu_CreateMenu()
_GUICtrlMenu_InsertMenuItem($hFile, 0, "F-Tasten drucken", $e_ftasten)
_GUICtrlMenu_InsertMenuItem($hFile, 1, "", 0)
_GUICtrlMenu_InsertMenuItem($hFile, 2, "Beenden", $e_idExit)
; Create Options menu
$hOptions = _GUICtrlMenu_CreateMenu()
_GUICtrlMenu_InsertMenuItem($hOptions, 0, "Optionen", $e_options)
; Create Help menu
$hHelp = _GUICtrlMenu_CreateMenu()
_GUICtrlMenu_InsertMenuItem($hHelp, 0, "Hilfe", $e_hilfe)
_GUICtrlMenu_InsertMenuItem($hHelp, 1, "About", $e_idAbout)
; Create Main menu
$hMain = _GUICtrlMenu_CreateMenu()
_GUICtrlMenu_InsertMenuItem($hMain, 0, "&File", 0, $hFile)
_GUICtrlMenu_InsertMenuItem($hMain, 1, "&Einstellungen", 0, $hOptions)
_GUICtrlMenu_InsertMenuItem($hMain, 2, "&Help", 0, $hHelp)
; Set window menu
_GUICtrlMenu_SetMenu($hGUI, $hMain)
Local $aTabText[3] = [" Texte ", " Ping ", " Traceroute "]
Local $aTabIcons[3][2] = [[""],[""],[""]]
Global $aCtrlTab = _OwnTab_Create($hGui, $aTabText, 5, 5, 590, 48, 30, 0x000000, 0x000000, 0x000000, $aTabIcons)
Local $aTabTip[3] = ["Texte", "Ping", "Traceroute"]
_OwnTab_SetTip($aCtrlTab, $aTabTip) ;set the tooltips for the OwnTab-control
#Region Tab1
_OwnTab_Add($aCtrlTab) ;Start controls tab1
GUICtrlCreateLabel("Nachfolgend werden alle bisher eingerichteten Texte mit entsprechendem HotKey angezeigt." & @CRLF & "Um die Texte nutzen zu können, einfach den entsprechenden HotKey auf der Tastatur drücken.", 10, 50)
$listview = GUICtrlCreateListView("Name|Text|Hotkey|3Zeiler", 5, 60, 590, 400)
GUICtrlSetColor(-1, 0xFFB400)
GUICtrlSetBkColor(-1, 0x000000)
_GUICtrlListView_SetColumnWidth($listview, 0, 150)
_GUICtrlListView_SetColumnWidth($listview, 1, 295)
_GUICtrlListView_SetColumnWidth($listview, 2, 50)
_GUICtrlListView_SetColumnWidth($listview, 3, 50)
; Hilfe
;Global $hilfepic = GUICtrlCreatePic(@TempDir & "\hilfe.gif", 570, 5, 20, 20)
;GUICtrlSetOnEvent($hilfepic, "_Hilfe")
;GUICtrlSetCursor($hilfepic, 4)
; Button unten links
$e_newEntry = GUICtrlCreateButton("Neuen Eintrag hinzufügen", 50, 450, 150, 30)
GUICtrlSetOnEvent($e_newEntry, "o_NewEntry")
$e_editEntry = GUICtrlCreateButton("Eintrag bearbeiten", 220, 450, 150, 30)
GUICtrlSetOnEvent($e_editEntry, "o_EditEntry")
$e_DelEntry = GUICtrlCreateButton("Eintrag löschen", 390, 450, 150, 30)
GUICtrlSetOnEvent($e_DelEntry, "o_DelEntry")
#EndRegion Tab1
#Region Tab2
_OwnTab_Add($aCtrlTab) ;Start controls tab2
; Rechte Seite, Ping und Traceroute
GUICtrlCreateLabel("Im nachfolgenden kannst Du ein Pingtest auf einen Host oder eine IP durchführen:" & @CRLF & "(Bitte beachte, Ergebnis erscheint erst nach vollständigem Pingtest)", 10, 50, 400, 30)
GUICtrlCreateLabel("Bitte Host oder IP eingeben", 10, 90, 200, 15)
GUICtrlSetColor(-1, 0xFFB400)
Global $host = GUICtrlCreateInput("", 10, 110, 200, 20)
GUICtrlCreateLabel("Bitte Anzahl der Pings angeben", 10, 140, 200, 15)
GUICtrlSetColor(-1, 0xFFB400)
Global $count = GUICtrlCreateInput("", 10, 160, 200, 20)
Global $e_pingtest = GUICtrlCreateButton("Ping ausführen", 10, 190, 150, 30)
GUICtrlSetOnEvent($e_pingtest, "o_pingtest")
;Global $pingergebnis = GUICtrlCreateEdit("", 650, 190, 500, 250, $ES_AUTOVSCROLL + $WS_VSCROLL)
GUICtrlCreateLabel("Ergebnis des Pings zu:", 10, 220, 130, 15)
Global $e_ip = GUICtrlCreateLabel("na", 140, 220, 120, 20)
GUICtrlSetFont(-1, 8.5, 700, 4)
#EndRegion Tab2
#Region Tab3
_OwnTab_Add($aCtrlTab) ;Start controls tab3
GUICtrlCreateLabel("Etiqueta 03", 15, 43, 400, 20)
#EndRegion Tab3
_OwnTab_End($aCtrlTab) ;new: end control-definition AND inizialize the OwnTab
_OwnTab_SetFontCol($aCtrlTab, 0xFFB400) ;new: set font-color
; Copyright
GUICtrlCreateLabel("© 2015 - Erstellt von: Stefan Streif", 180, 485, 200, 15)
$guiversion = GUICtrlCreateLabel("", 390, 485, 150, 15)
GUICtrlSetColor(-1, 0xFFB400)
; Exit und Minimize
GUISetOnEvent($GUI_EVENT_CLOSE, "OnExit")
GUISetOnEvent($GUI_EVENT_MINIMIZE, '_Minimize')
TraySetOnEvent(-7, '_Restore')
GUISetState() ; display the GUI
_OwnTab_Hover($aCtrlTab, 0x333333,0,200) ;start hover-function if you want
GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")
_SETTINGS($resettings = "0")
_Timer_SetTimer($hGUI, 1000, "_UpdateClock") ; create timer
Local $msg
While 1
$msg = GUIGetMsg()
For $a = 1 To UBound($aCtrlTab, 1) - 1
If $msg = $aCtrlTab[$a][0] Then
_OwnTab_Switch($aCtrlTab, $a)
EndIf
Next
Switch $msg
Case $GUI_EVENT_CLOSE
ExitLoop
EndSwitch
Sleep(1000)
WEnd
EndFunc ;==>_Main
Func _SETTINGS($resettings)
If $resettings = "1" Then
_GUICtrlListView_DeleteAllItems($listview)
EndIf
_SQLite_Startup(@TempDir & "\sqlite3.dll", False, 1)
;_SQLite_Startup()
If @error Then Exit MsgBox(16, "SQLite Fehler", "SQLite.dll konnte nicht geladen werden!")
If FileExists("settings.sqlite") Then
$hDB = _SQLite_Open("settings.sqlite")
If @error Then Exit MsgBox(16, "SQLite Fehler", "1 - Kann die Datenbank nicht öffnen!")
; DB Abfrage der Version aus "settings"
_SQLite_Query($hDB, "SELECT version FROM settings", $vQuery)
If @error Then
MsgBox(16, "SQLite Fehler", "Die Datenbank ist nicht mehr aktuell. Nach Klick auf Ok, wird diese aktualisiert!")
_UpdateDB()
_NeustartNachDrucken()
Else
While _SQLite_FetchData($vQuery, $vRow, False, True) = $SQLITE_OK
If $vRow[0] < "2.0" Then
MsgBox(16, "SQLite Fehler", "Die Datenbank ist nicht mehr aktuell. Nach Klick auf Ok, wird diese aktualisiert!")
_UpdateDB2()
_NeustartNachDrucken()
EndIf
WEnd
EndIf
_SQLite_Query($hDB, "SELECT * FROM settings", $aQuery)
; Auslesen der nächsten Zeile
While _SQLite_FetchData($aQuery, $aRow, False, True) = $SQLITE_OK
Global $uLine1 = $aRow[1]
Global $uLine2 = $aRow[2]
Global $uLine3 = $aRow[3]
Global $sPaste = $aRow[4]
Global $version = "Version " & $aRow[5]
WEnd
GUICtrlSetData($guiversion, $version)
If _SQLite_GetTable2d($hDB, "Select subject,text,key,dreizeiler From texte WHERE active='1'", $aResult, $iRows, $iColumns) = $SQLITE_OK Then
For $iR = 1 To $iRows
$sItem = ""
For $iC = 0 To $iColumns - 1
;$replace = $aResult[$iR][$iC]
;$replace = StringReplace($replace, "{", "")
;$replace = StringReplace($replace, "}", "")
$sItem &= $aResult[$iR][$iC] & "|"
Next
GUICtrlCreateListViewItem(StringTrimRight($sItem, 1), $listview)
Next
Else
MsgBox($MB_SYSTEMMODAL, "SQLite Error: " & _SQLite_ErrMsg())
EndIf
Global $First3Lines = $uLine1 & @CRLF & $uLine2 & @CRLF & $uLine3 & @CRLF
;Am Skriptanfang
Global $oDict = ObjCreate("Scripting.Dictionary")
_SQLite_Query($hDB, "SELECT text,key From texte WHERE active='1'", $aQuery)
; Auslesen der nächsten Zeile
While _SQLite_FetchData($aQuery, $aRow, False, False) = $SQLITE_OK
$aRow[1] = StringReplace($aRow[1], "+", "")
$aRow[1] = StringReplace($aRow[1], "STRG", "^")
$aRow[1] = StringReplace($aRow[1], "ALT", "!")
$aRow[1] = StringReplace($aRow[1], "Shift", "+")
$oDict($aRow[1]) = $aRow[0] ;((key)) : text
HotKeySet($aRow[1], "ssf")
WEnd
_SQLite_QueryFinalize($aQuery)
_SQLite_Close()
_SQLite_Shutdown()
Else
MsgBox(16, "SQLite Fehler", "Die Datenbank wurde nicht gefunden!" & @CRLF & "Es werden nun die 'Einstellungen' geöffnet," & @CRLF & "um eine neue Datenbank zu erstellen!")
_OPTIONS()
EndIf
EndFunc ;==>_SETTINGS
; Handle menu commands
Func WM_COMMAND($hWnd, $iMsg, $wParam, $lParam)
#forceref $hWnd, $iMsg, $lParam
Switch _WinAPI_LoWord($wParam)
Case $e_ftasten
fprint()
Case $e_idExit
Exit
Case $e_options
_OPTIONS()
Case $e_hilfe
_Hilfe()
Case $e_idAbout
MsgBox(BitOR($MB_OK, $MB_ICONINFORMATION, $MB_DEFBUTTON1, $MB_SYSTEMMODAL, $MB_SETFOREGROUND), 'About', 'Dieses Tool wurde geschrieben von:' & @CRLF & @CRLF & 'Stefan Streif' & @CRLF & 'Technical Support' & @CRLF & 'NL Villingen-Schwenningen' & @CRLF & 'Tel: 07721 6806 29470' & @CRLF & @CRLF & $version)
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_COMMAND
; --------------- Functions ---------------
Func _UpdateClock($hWnd, $iMsg, $iIDTimer, $iTime)
#forceref $hWnd, $iMsg, $iIDTimer, $iTime
Global $g_zeit = StringFormat("%02d:%02d", @HOUR, @MIN)
;MsgBox(0, "Zeit", "Aktuelle Zeit ist: "& $g_zeit, 2)
EndFunc ;==>_UpdateClock
Func ssf()
$First3Lines1 = $First3Lines
$First3Lines1 = StringReplace($First3Lines1, "%datum%", _NowDate())
$First3Lines1 = StringReplace($First3Lines1, "%zeit%", $g_zeit)
$First3Lines1 = StringReplace($First3Lines1, "%name%", @UserName)
_ClipBoard_SetData($First3Lines1 & $oDict(@HotKeyPressed) & @CRLF)
;_ClipBoard_SetData($uline1 & _NowDate() &" / "& $g_zeit &" / "& @UserName & @CRLF & $oDict(@HotKeyPressed) & @CRLF)
If $sPaste = "1" Then Send("^v")
EndFunc ;==>ssf
Func fprint()
Local $iMsgBoxAnswer
$iMsgBoxAnswer = MsgBox(4145, "F-Tastenbelegung drucken", "Wenn du auf 'OK' klickst, wird der Druckauftrag sofort gestartet und auf dem in Windows definierten Standard Drucker gedruckt.")
Select
Case $iMsgBoxAnswer = 1 ;OK
d_ftasten()
Case $iMsgBoxAnswer = 2 ;Cancel
EndSelect
EndFunc ;==>fprint
Func _Hilfe()
MsgBox(BitOR($MB_ICONQUESTION, $MB_SYSTEMMODAL), 'Generelle Hilfe', 'Du befindest im Hauptprogramm.' & @CRLF & @CRLF & 'Hier bekommst Du die aktuell eingerichteten Texte mit den entsprechenden Hotkeys angezeigt.' & @CRLF & @CRLF & _
'Um diese nutzen zu können, einfach die entsprechend angezeigte HotKey Kombination auf der Tastatur drücken.' & @CRLF & 'Des Weiteren kannst Du in diesem Bereich auch neue Texte anlegen, bestehende bearbeiten oder löschen.' & @CRLF & @CRLF & _
'"Bearbeiten"' & @CRLF & 'Um ein bestehenden Text zu bearbeiten, diesen in der Auflistung anklicken und den Button "Eintrag bearbeiten" betätigen.' & @CRLF & @CRLF & _
'"Löschen"' & @CRLF & 'Um ein bestehenden Text zu löschen, diesen in der Auflistung anklicken und den Button "Eintrag löschen" betätigen.' & @CRLF & @CRLF & _
'Solltest Du weitergehende Hilfe brauchen, dann klicke im Menü oben auf "Hilfe" -> "About" und kontaktiere den dort angegebenen Autor dieses Tools.')
EndFunc ;==>_Hilfe
Func _NeustartNachDBErstellung()
MsgBox(BitOR($MB_ICONINFORMATION, $MB_SYSTEMMODAL), 'Information', 'Die Datenbank wurde erstellt. Das Tool wird nach drücken des "OK" Buttons neu gestartet, damit die eben erstellte Datenbank eingelesen und die Einstellungen übernommen werden können.')
Exit Run(@ScriptFullPath)
EndFunc ;==>_NeustartNachDBErstellung
Func _NeustartNachDrucken()
Exit Run(@ScriptFullPath)
EndFunc ;==>_NeustartNachDrucken
Func OnExit()
Exit
EndFunc ;==>OnExit
Func o_NewEntry()
_NewEntry()
EndFunc ;==>o_NewEntry
Func o_EditEntry()
Local $editItem_id = _GUICtrlListView_GetSelectionMark($listview)
If $editItem_id = -1 Then
MsgBox(0, "Fehler", "Du hast vergessen, zuvor einen Eintrag auszuwählen. Sowas ist natürlich ganz schlecht, wenn Du etwas bearbeiten willst!")
Else
Global $editItem = _GUICtrlListView_GetItemText($listview, $editItem_id, 2)
_EditEntry($editItem)
EndIf
EndFunc ;==>o_EditEntry
Func o_DelEntry()
Local $DelItem_id = _GUICtrlListView_GetSelectionMark($listview)
If $DelItem_id = -1 Then
MsgBox(0, "Fehler", "Du hast vergessen, zuvor einen Eintrag auszuwählen. Sowas ist natürlich ganz schlecht, wenn Du etwas löschen willst!")
Else
Global $DelItem = _GUICtrlListView_GetItemText($listview, $DelItem_id, 2)
_DelEntry($DelItem)
EndIf
EndFunc ;==>o_DelEntry
Func _Minimize()
TraySetState(1)
GUISetState(@SW_HIDE)
EndFunc ;==>_Minimize
Func _Restore()
TraySetState(2)
GUISetState(@SW_SHOW)
EndFunc ;==>_Restore
Func o_pingtest()
Local $p_host = GUICtrlRead($host)
Local $p_count = GUICtrlRead($count)
_ping($p_count, $p_host)
EndFunc ;==>o_pingtest
Alles anzeigen
Ich habe einige eigene au3 Scripts auskommentiert, da diese zum testen der Tabs nicht notwendig sind. Aber egal ob diese mit eingebunden sind oder nicht, es geht so oder so nicht.
Um die sqlite3.dll mit anhängen zu können, habe ich ein .txt angehängt. Um diese zu nutzen also einfach das .txt wieder entfernen.