1. Dashboard
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forenregeln
  4. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. AutoIt.de - Das deutschsprachige Forum.
  2. Mitglieder
  3. BugFix

Beiträge von BugFix

  • Gui Tabs einzeln löschen

    • BugFix
    • 14. Juni 2011 um 12:54

    Hier mal eine Variante von mir:
    Ist das TabItem aktiv und du bist mit der Maus auf dem Register wird ein x-Button eingeblendet mit dem das TabItem gelöscht werden kann. Das letzte ist nicht löschbar.
    Kurioserweise ist die Positionsmessung der TabItem für einzelne Item nicht korrekt (z.B. Item 'sieben' wird bei mir mit falscher Größe ausgegeben). Aber als Ansatz vielleicht nützlich.

    Spoiler anzeigen
    [autoit]

    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <GuiTab.au3>
    #include <StaticConstants.au3>
    #include <StructureConstants.au3>
    #include <TabConstants.au3>
    #include <WinAPI.au3>

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

    Global $btCloseTABItem, $iTabItem, $tTabItem, $iItemCount, $tmpItem, $fIsButton = False

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

    #region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Form1", 615, 440, 192, 124)
    $Tab1 = GUICtrlCreateTab(80, 80, 481, 305)
    Local $tabitems[10] = [ _
    GUICtrlCreateTabItem("Eins") , _
    GUICtrlCreateTabItem("Zwei") , _
    GUICtrlCreateTabItem("Drei") , _
    GUICtrlCreateTabItem("Vier") , _
    GUICtrlCreateTabItem("Fünf"), _
    GUICtrlCreateTabItem("sechs") , _
    GUICtrlCreateTabItem("sieben") , _
    GUICtrlCreateTabItem("acht") , _
    GUICtrlCreateTabItem("neun") , _
    GUICtrlCreateTabItem("zehn")]
    GUICtrlCreateTabItem("")
    $btCloseTABItem = GUICtrlCreateButton('x', 1, 1, 10, 10, BitOR($ES_CENTER, $SS_CENTERIMAGE))
    GUICtrlSetBkColor(-1, 0xFF6611)
    GUICtrlSetState(-1, $GUI_HIDE)
    GUISetState(@SW_SHOW)
    #endregion ### END Koda GUI section ###

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

    While 1
    $tmpItem = -1
    $iItemCount = _GUICtrlTab_GetItemCount($Tab1)
    For $i = 0 To $iItemCount -1
    If _MouseOverTabItem($Form1, $Tab1, $i) Then
    $tmpItem = $i
    ExitLoop
    EndIf
    Next
    If $iTabItem <> $tmpItem Then
    GUICtrlSetState($btCloseTABItem, $GUI_HIDE)
    $fIsButton = False
    $iTabItem = $tmpItem
    EndIf
    ; Löschbutton nur Anzeigen bei min. 2 TabItem und aktivem TabItem
    If $iTabItem > -1 And $iItemCount > 1 And (Not $fIsButton) And GUICtrlRead($Tab1) = $iTabItem Then _ShowCloseButtonOnTabItem($Form1, $Tab1, $iTabItem)
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
    Exit
    Case $btCloseTABItem
    _GUICtrlTab_DeleteItem($Tab1, $iTabItem)
    GUICtrlSetState($btCloseTABItem, $GUI_HIDE)
    $fIsButton = False
    EndSwitch
    WEnd

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

    Func _ShowCloseButtonOnTabItem($GUI, $TabID, $iTabItem)
    Local $aSize = _GUICtrlTab_GetItemRectRelativ($GUI, $TabID, $iTabItem)
    Local $posRight = $aSize[2]
    Local $x = $posRight -10
    Local $y = $aSize[1] +2
    ControlMove($Form1, '', $btCloseTABItem, $x, $y)
    GUICtrlSetState($btCloseTABItem, BitOR($GUI_SHOW,$GUI_FOCUS,$GUI_ONTOP))
    $fIsButton = True
    EndFunc

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

    Func _MouseOverTabItem($GUI, $TabID, $iTabItem)
    If Not BitAND(WinGetState($GUI), 8) Then Return False
    Local $old = Opt('MouseCoordMode', 2)
    Local $posM = MouseGetPos(), $tMouse = DllStructCreate($tagPOINT)
    DllStructSetData($tMouse, 1, $posM[0])
    DllStructSetData($tMouse, 2, $posM[1])
    Opt('MouseCoordMode', $old)
    Local $tTabItem = _GUICtrlTab_GetItemRectRelativ($GUI, $TabID, $iTabItem, 1)
    If _WinAPI_PtInRect($tTabItem, $tMouse) Then
    Return True
    Else
    Return False
    EndIf
    EndFunc ;==>_MouseOverTabItem

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

    ;===============================================================================
    ; Function Name: _GUICtrlTab_GetItemRectRelativ($GUI, $TabID, $iTabItem, $iReturnType=0)
    ; Description: Returns the coordinates of a TabItem relatively to the GUI co-ordinates
    ; Parameter(s): $GUI - window handle
    ; $TabID - Tab ID (not handle!)
    ; $iTabItem - TabItem index
    ; $iReturnType - Return type array=0 (default), RECT-structure=1
    ; Return Value(s): Array or structure with coordinates of a TabItem (left, top, right, bottom)
    ; Author(s): BugFix ([email='bugfix@autoit.de'][/email])
    ;===============================================================================
    Func _GUICtrlTab_GetItemRectRelativ($GUI, $TabID, $iTabItem, $iReturnType=0)
    Local $hWnd = GUICtrlGetHandle($TabID)
    Local $TabPos = ControlGetPos($GUI, '', $TabID)
    Local $tRECT = DllStructCreate("int Left;int Top;int Right;int Bottom")
    Local $pRect = DllStructGetPtr($tRECT)
    GUICtrlSendMsg($TabID, $TCM_GETITEMRECT, $iTabItem, $pRect)
    Local $posLeft = $TabPos[0]+2, $posTop = $TabPos[1]+2
    Local $width = (DllStructGetData($tRECT,3) - DllStructGetData($tRECT,1))
    Local $height = DllStructGetData($tRECT,4) - DllStructGetData($tRECT,2)
    If $iTabItem > 0 Then
    For $i = 0 To $iTabItem -1
    GUICtrlSendMsg($TabID, $TCM_GETITEMRECT, $iTabItem, $pRect)
    $posLeft += (DllStructGetData($tRECT,3) - DllStructGetData($tRECT,1))
    Next
    EndIf
    If $iReturnType Then
    DllCall("user32", 'long', 'SetRect', 'ptr', $pRECT, 'long', $posLeft, _
    'long', $posTop, 'long', $posLeft+$width, 'long', $posTop +$height)
    Return $tRECT
    Else
    Local $aOut[4] = [$posLeft, $posTop, $posLeft +$width, $posTop +$height]
    Return $aOut
    EndIf
    EndFunc ;==>_GUICtrlTab_GetItemRectRelativ

    [/autoit]
  • String im Suchmuster von StringRegExp - damit zuordnen/sortieren

    • BugFix
    • 14. Juni 2011 um 10:03

    Wenn ich das richtig sehe, gehören zu einem DName immer die Profile 0 und 1 und somit zwei nbr_call.
    Unter der Voraussetzung, dass in der existierenden Datenbank die Zeilenumbrüche identisch sind, wie von dir gepostet, würde sich folgendes Pattern nutzen lassen:
    (?i)dname: "([\w/.]+)".+nbr_call: "(\w+)".+\r\n.+nbr_call: "(\w+)"
    Mit Flag 3 im RegExp erhältst du dann folgendes Array:
    [DName1,nbr_call(Profil 0),nbr_call(Profil 1),DName2,nbr_call(Profil 0),nbr_call(Profil 1),...]

    Dann kannst du dieses Array mit Schrittweite 3 (DName) durchwandern und mit deiner Vorgabe vergleichen.

  • Kalender Control (wie Win7 Datums-Control)

    • BugFix
    • 13. Juni 2011 um 22:14

    Und zum 2.ten mal heute: NEU - Version 1.3 in Post #1

  • Ini. Datei auslesen funktioniert nicht

    • BugFix
    • 13. Juni 2011 um 10:42

    [OT]
    Wenn ich so etwas hier lese:

    Zitat von simon1602

    ;Copyright by Simon 2011

    weiß ich immer nicht, ob ich Lachen oder Weinen soll. :wacko:
    Zum Einen hat das "Copyright" hier sowieso keinen Wert (bzw. fast nie, wir hatten das vor langer Zeit mal ausgiebig erörtert) und zum Anderen ist es eine kranke Unsitte, für jeden Furz Rechte vergeben zu wollen. Demnächst läßt sich noch jemand eine Lizenz fürs "Schei.." erstellen und jeder der keine Gebühr bezahlt, darf nicht mehr aufs Klo... :rofl:
    [/OT]

  • Kalender Control (wie Win7 Datums-Control)

    • BugFix
    • 13. Juni 2011 um 10:23

    NEU: Version 1.2 in Post #1

  • Dictionary-Object dynamisch befüllen

    • BugFix
    • 12. Juni 2011 um 15:15

    Problem ist für mich deine etwas magere Problembeschreibung.
    Ich vermute daher mal aus deinen Fragmenten, dass du INI-Sektionen auslesen willst und das Dict.Objekt soll mit dem Namen der Sektion angesprochen werden. Ist das korrekt?
    Ich hänge dir mal meine Dictionary-UDF an, die kannst du dazu nutzen.

    Ahh, habe den Link doch noch gefunden ;)

    Dateien

    objDictonary.au3 15,4 kB – 301 Downloads
  • Dictionary-Object dynamisch befüllen

    • BugFix
    • 12. Juni 2011 um 14:44
    Zitat von ip_trainer

    ;KLAPPT NICHT $section.Add("test" = "bla")


    Wie auch, ist absolut sinnfrei.
    - du erstellst eine Variable mit dem Wert "test" (sinnlos und überflüssig, da Wert überschrieben wird)
    - dann verknüpst du diese Variable mit einem neuen Wert - dem Handle des Dict.Object
    - die Syntax für .Add ist falsch, richtig:

    [autoit]

    $oDict.Add($KEY, $VALUE)

    [/autoit]

    Assign ist übrigens eine absolute "Krücke" und sollte auch nur dann genutzt werden, wenn es gar nicht anders geht (was ich fast noch nie erlebt habe).

  • Auf bestimmte Wörter im Input reagieren?

    • BugFix
    • 12. Juni 2011 um 12:35

    Wenn du in beiden Abfragen identische Begriffe (hier: schmeckt) verwendest, wird logischerweise immer das erste Auftreten und somit der erste If-Zweig verwendet: also Funktion_1 wird aufgerufen.

  • ODBC - Firebird SQL Errorhandling

    • BugFix
    • 10. Juni 2011 um 22:25

    Verwende den Objekt-Errorhandler.
    Am Skriptanfang initialisieren:

    [autoit]

    Global $oMyError = ObjEvent("AutoIt.Error","MyErrFunc")

    [/autoit][autoit]

    Func MyErrFunc()
    Local $sERR = _
    "err.description is: " & @TAB & $oMyError.description & @CRLF & _
    "err.windescription:" & @TAB & $oMyError.windescription & @CRLF & _
    "err.number is: " & @TAB & hex($oMyError.number,8) & @CRLF & _
    "err.lastdllerror is: " & @TAB & $oMyError.lastdllerror & @CRLF & _
    "err.scriptline is: " & @TAB & $oMyError.scriptline & @CRLF & _
    "err.source is: " & @TAB & $oMyError.source & @CRLF & _
    "err.helpfile is: " & @TAB & $oMyError.helpfile & @CRLF & _
    "err.helpcontext is: " & @TAB & $oMyError.helpcontext
    Msgbox(0,"AutoItCOM Test","Ein COM-Fehler ist aufgetreten !" & @CRLF & @CRLF & $sERR)
    Local $err = $oMyError.number
    If $err = 0 Then $err = -1
    Local $g_eventerror = $err
    Endfunc

    [/autoit]
  • Kalender Control (wie Win7 Datums-Control)

    • BugFix
    • 5. Juni 2011 um 22:31

    Hi,
    in letzter Zeit waren einige Fragen zur farblichen Markierung von Datums-Controls.
    Ich habe daher mal das Monats-Ctrl anhand des aus Win7 bekannten Datums-Ctrl nachkodiert. Funktionalität ist identisch, nur dass ich nicht diese smoothingen Übergänge benutze.
    Zusätzlich lassen sich in meinem Bsp. beliebig viele Daten farbig markieren. Entweder mit einer vordefinierten Farbe für alle Markierungen gleich oder mit Öffnen der Farbpalette zur individuellen Auswahl bei jedem Klick auf ein Tagesdatum. Ist ein Datum bereits markiert, wird die Markierung beim Klick gelöscht.
    Datum der Markierung und verwendete Farbe werden in einem Dictionary Objekt gespeichert und können von dort für weitere Verwendung genutzt werden.

    Edit: Noch einen Bug beim Wechsel auf die 10-Jahres Übersicht gefixt

    Edit 13.06.2011: Version 1.2
    - HEUTE (Tag im Monatskalender) und aktueller/zuletzt gewählter Wert (Monat im Jahreskalender, Jahr im 10-Jahreskalender, 10-Jahr-Block in 10-Jahres-Übersicht) sind rot umrahmt
    - im Monatskalender am linken Rand jeder Zeile ein Blind-Label eingefügt mit ControlTip: Nummer Kalenderwoche

    Edit 13.06.2011 (2): Version 1.3
    - markierte Datumswerte werden mit Farbwert in einer INI gespeichert und beim Start geladen
    - markierten Datumswerten können per Rechtsklick in einem Editfenster Kommentare zugeordnet werden
    - die Kommentare werden in der INI beim Beenden gespeichert und beim Start wieder geladen
    - da es erst beim Beenden passiert, wird ein Kommentar nicht sofort durch versehentliches Demarkieren eines Datums gelöscht

    Edit 15.06.2011: Version 1.4
    - statt vordefinierter Farbe oder Palette, wird eine frei konfigurierbare Liste (gefärbte Radio-Ctrl) für Kategorie+Farbe eingeblendet
    - die Liste wird zur Laufzeit dynamisch gestaltet (Ctrl hinzufügen/löschen), Anpassung Fenstergröße
    - Kategorien/Farben werden beim Beenden in einer INI gespeichert und beim Start neu geladen

    Spoiler anzeigen
    [autoit]

    #Region - TimeStamp
    ; 2011-06-15 14:12:42 v 1.4
    #EndRegion - TimeStamp
    #include <ButtonConstants.au3>
    #include <Date.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <Misc.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    ; BugFix

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

    Opt('GUIOnEventMode', 1)

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

    Global $h10YearView, $h10YearCal, $hYearCal, $hMonthCal, $hComment, $hEdit, $sDateComment, $hCategory
    Global $btPrev10YearView, $btNext10YearView
    Global $btPrevYear, $btNextYear, $lbYear
    Global $btPrevMonth, $btNextMonth, $lbMonth
    Global $TodayID, $aCtrlFrame = 0
    Global $iCurrMonth = @MON, $iCurrYear = @YEAR, $iCurr10Year = StringLeft($iCurrYear, 3), $iCurr10YearEnd = $iCurr10Year & 9
    Global $iShowMonth = $iCurrMonth, $iShowYear = $iCurrYear, $iShow10Year = $iCurr10Year
    ;~ $iCurrMonth aktueller (bzw. zuletzt gewählter) Monat
    ;~ $iCurrYear aktuelles (bzw. zuletzt gewähltes) Jahr
    ;~ $iCurr10Year aktuelles (bzw. zuletzt gewähltes) Jahrzehnt (3-stellig)
    ;~ $iCurr10YearEnd letztes Jahr des aktuellen (bzw. zuletzt gewählten) Jahrzehnts
    ;~ $iShowMonth Monat für Rahmen im Jahreskalender
    ;~ $iShowYear Jahr für Rahmen im 10-Jahreskalender
    ;~ $iShow10Year Jahrzehnt für Rahmen in 10-Jahresübersicht (3-stellig)
    Global $aShortMonth[12] = ['Jan','Feb','Mrz','Apr','Mai','Jun','Jul','Aug','Sep','Okt','Nov','Dez']
    Global $a10YearsView[24], $a10Years[12], $aMonth[12], $aDays[42], $aToolTip[6] ; [ID]
    Global $oMarkedDays = ObjCreate("Scripting.Dictionary") ; Key=Datum (JJJJ/MM/TT), Value=Hintergrundfarbe
    Global Const $DefCol = 0xF0F0F0, $LightPink = 0xFFB6C1, $LightSkyBlue = 0x87CEEB, $LightGoldenrodYellow = 0xFAFAD2, $LightCyan = 0xE0FFFF
    Global $oComment = ObjCreate("Scripting.Dictionary") ; Key=Datum (JJJJ/MM/TT), Value=Kommentar
    Global $aCat[1][2] = [[0]], $yCat = 40, $sDateCat, $IndexCat
    ;~ Global $iChooseCol = $LightSkyBlue
    Global $iSetCol, $iChooseCol = -1 ; wenn -1 wird (benutzerdefinierte, speicherbar) Palette (mit Kategorienamen)zur Farbauswahl bei Klick auf Datum geladen, sonst wird die hier definierte Farbe gesetzt
    Local $x, $y

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

    ; beim Start Markierungen/Kommentare aus INI laden
    Local $sINI = @ScriptDir & '\myCal.INI'
    _ReadMarkedDaysFromINI($oMarkedDays, $sINI, 'marked')
    _ReadMarkedDaysFromINI($oComment, $sINI, 'comment')

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

    #region - Funktionen zu markierten Datumswerten
    ; Auslesen aus INI und Markierungen setzen beim Programmstart
    ; Rückgabe: Anzahl gelesener Markierungen
    Func _ReadMarkedDaysFromINI(ByRef $oDICT, $sINI, $sSection)
    Local $aSection = IniReadSection($sINI, $sSection)
    If @error Then Return SetError(1)
    For $i = 1 To $aSection[0][0]
    $oDICT.Add($aSection[$i][0], $aSection[$i][1])
    Next
    Return $aSection[0][0]
    EndFunc

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

    Func _ReadCategoryFromINI($sINI)
    Local $aRead = IniReadSection($sINI, 'category')
    If @error Then Return
    For $i = 1 To $aRead[0][0]
    _CatCtrlCreate($aRead[$i][0], $aRead[$i][1])
    Next
    GUISetState(@SW_HIDE, $hCategory)
    EndFunc

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

    ; Schreiben in INI
    ; Rückgabe: Return von IniWriteSection (1=Erfolg, 0=Fehler)
    Func _WriteMarkedDaysToINI(ByRef $oDICT, $sINI, $sSection)
    Local $aToINI = _GetMarkedDays($oDICT)
    If @error Then
    Return SetError(1)
    ElseIf $aToINI = 0 Then
    Return IniWriteSection($sINI, $sSection, '')
    EndIf
    Return IniWriteSection($sINI, $sSection, $aToINI)
    EndFunc
    ; z.B. Vorbereiten zum Schreiben in INI
    ; mit Übergabe Datum (JJJJ/MM/TT) wird geprüft ob dieser Tag markiert, sonst Rückgabe alle markierten Datumswerte
    ; Rückgabe Array [['JJJJ/MM/TT', iColor]] oder Trennzeichen-String '|' (nur Datum)
    ; wenn Datum nicht markiert oder keine markierten Daten vorhanden ==> Rückgabe 0, Fehler 1
    Func _GetMarkedDays(ByRef $oDICT, $sDate='', $fString=0)
    Local $iCount = $oDICT.Count, $sRet = ''
    If Not $iCount Then Return 0
    If $sDate = '' Then
    Local $aRet[$iCount +1][2] = [[$iCount]]
    Else
    If Not $oDICT.Exists($sDate) Then Return SetError(1,0,0)
    Local $aRet[2][2] = [[1],[$sDate,$oDICT.Item($sDate)]]
    If $fString = 1 Then Return $sDate
    Return $aRet
    EndIf
    Local $i = 1, $strKey, $colKeys = $oDICT.Keys
    For $strKey In $colKeys
    $aRet[$i][0] = $strKey
    $aRet[$i][1] = $oDICT.Item($strKey)
    $sRet &= $strKey & '|'
    $i += 1
    Next
    If $fString = 1 Then Return StringTrimRight($sRet, 1)
    Return $aRet
    EndFunc
    #endregion - markierte Datumswerte

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

    #region - Jahrzehnt Übersicht
    $h10YearView = GUICreate('Kalender', 200, 171, -1, -1, -1, $WS_EX_TOOLWINDOW)
    GUISetOnEvent($GUI_EVENT_CLOSE, '_end', $h10YearView)
    $btPrev10YearView = GUICtrlCreateButton('<', 5, 5, 15, 20)
    GUICtrlSetOnEvent(-1, '_10YearViewEvent')
    $btNext10YearView = GUICtrlCreateButton('>', 180, 5, 15, 20)
    GUICtrlSetOnEvent(-1, '_10YearViewEvent')
    GUICtrlSetState(-1, $GUI_HIDE)
    $x = 6
    $y = 37
    For $i = 0 To 23
    Switch $i
    Case 2, 4, 6, 10, 12, 14, 18, 20, 22
    $y -= 21
    $x += 47
    Case 1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23
    $y += 21
    Case 8, 16
    $x = 6
    $y += 22
    EndSwitch
    $a10YearsView[$i] = GUICtrlCreateLabel('', $x, $y, 46, 21, BitOR($ES_CENTER, $SS_CENTERIMAGE))
    GUICtrlSetOnEvent(-1, '_10YearEvent')
    GUICtrlSetBkColor(-1, 0xD0D0D0)
    Next
    #endregion - Jahrzehnt Übersicht

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

    #region - Jahrzehntkalender
    $h10YearCal = GUICreate('Kalender', 200, 171, -1, -1, -1, $WS_EX_TOOLWINDOW)
    GUISetOnEvent($GUI_EVENT_CLOSE, '_end', $h10YearCal)
    $btPrev10Year = GUICtrlCreateButton('<', 5, 5, 15, 20)
    GUICtrlSetOnEvent(-1, '_10YearCalEvent')
    $lb10Year = GUICtrlCreateLabel($iCurr10YearEnd -9 & ' - ' & $iCurr10YearEnd, 21, 8, 158, 17, $ES_CENTER)
    GUICtrlSetOnEvent(-1, '_10YearCalEvent')
    GUICtrlSetColor(-1, 0x0000FF)
    $btNext10Year = GUICtrlCreateButton('>', 180, 5, 15, 20)
    GUICtrlSetOnEvent(-1, '_10YearCalEvent')
    $x = 6
    $y = -5
    For $i = 0 To 11
    If Not Mod($i, 4) Then
    $x = 6
    $y += 42
    EndIf
    $a10Years[$i] = GUICtrlCreateLabel($iCurr10YearEnd -10 +$i, $x, $y, 46, 41, BitOR($ES_CENTER, $SS_CENTERIMAGE))
    GUICtrlSetOnEvent(-1, '_YearEvent')
    GUICtrlSetBkColor(-1, 0xD0D0D0)
    If $i = 0 Or $i = 11 Then
    GUICtrlSetState(-1, $GUI_DISABLE)
    Else
    GUICtrlSetState(-1, $GUI_ENABLE)
    EndIf
    $x += 47
    Next
    #endregion - Jahrzehntkalender

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

    #region - Jahreskalender
    $hYearCal = GUICreate('Kalender', 200, 171, -1, -1, -1, $WS_EX_TOOLWINDOW)
    GUISetOnEvent($GUI_EVENT_CLOSE, '_end', $hYearCal)
    $btPrevYear = GUICtrlCreateButton('<', 5, 5, 15, 20)
    GUICtrlSetOnEvent(-1, '_YearCalEvent')
    $lbYear = GUICtrlCreateLabel($iCurrYear, 21, 8, 158, 17, $ES_CENTER)
    GUICtrlSetOnEvent(-1, '_YearCalEvent')
    GUICtrlSetColor(-1, 0x0000FF)
    $btNextYear = GUICtrlCreateButton('>', 180, 5, 15, 20)
    GUICtrlSetOnEvent(-1, '_YearCalEvent')
    $x = 6
    $y = -5
    For $i = 0 To 11
    If Not Mod($i, 4) Then
    $x = 6
    $y += 42
    EndIf
    $aMonth[$i] = GUICtrlCreateLabel($aShortMonth[$i], $x, $y, 46, 41, BitOR($ES_CENTER, $SS_CENTERIMAGE))
    GUICtrlSetBkColor(-1, 0xD0D0D0)
    GUICtrlSetOnEvent(-1, '_MonthEvent')
    $x += 47
    Next
    #endregion - Jahreskalender

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

    #region - Kategorie Marker
    $hCategory = GUICreate('Kategorie', 200, 40, -1, -1, -1, $WS_EX_TOOLWINDOW)
    GUISetOnEvent($GUI_EVENT_CLOSE, '_CloseCategory', $hComment)
    $btCat_New = GUICtrlCreateButton('Neu', 5, 5, 60, 20)
    GUICtrlSetResizing(-1, $GUI_DOCKALL)
    GUICtrlSetOnEvent(-1, '_CatNew')
    $btCat_Del = GUICtrlCreateButton('Löschen', 70, 5, 60, 20)
    GUICtrlSetResizing(-1, $GUI_DOCKALL)
    GUICtrlSetOnEvent(-1, '_CatDel')
    $btCat_Sel = GUICtrlCreateButton('Auswahl', 135, 5, 60, 20)
    GUICtrlSetResizing(-1, $GUI_DOCKALL)
    GUICtrlSetOnEvent(-1, '_CatSel')
    $group = GUICtrlCreateGroup('', 5, 28, 190, 2)
    GUICtrlSetBkColor(-1, 0xD0D0D0)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    GUICtrlSetResizing($group, $GUI_DOCKALL)
    _setCatCtrlState()
    _ReadCategoryFromINI($sINI)
    #endregion - Kategorie Marker

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

    #region - Kommentarfenster
    $hComment = GUICreate('Kommentar', 300, 250, -1, -1, -1, $WS_EX_TOOLWINDOW)
    GUISetOnEvent($GUI_EVENT_CLOSE, '_CloseComment', $hComment)
    $hEdit = GUICtrlCreateEdit('', 5, 5, 290, 240)
    #endregion

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

    #region - Monatskalender
    Local $aWDays[7] = ['Mo','Di','Mi','Do','Fr','Sa','So']
    $hMonthCal = GUICreate('Kalender', 200, 171, -1, -1, -1, $WS_EX_TOOLWINDOW)
    GUISetOnEvent($GUI_EVENT_CLOSE, '_end', $hMonthCal)
    GUISetOnEvent($GUI_EVENT_SECONDARYUP, '_RClickMonth', $hMonthCal)
    $btPrevMonth = GUICtrlCreateButton('<', 5, 5, 15, 20)
    GUICtrlSetOnEvent(-1, '_MonthCalEvent')
    $lbMonth = GUICtrlCreateLabel('Monat Jahr', 21, 8, 158, 17, $ES_CENTER)
    GUICtrlSetOnEvent(-1, '_MonthCalEvent')
    GUICtrlSetColor(-1, 0x0000FF)
    $btNextMonth = GUICtrlCreateButton('>', 180, 5, 15, 20)
    GUICtrlSetOnEvent(-1, '_MonthCalEvent')
    $x = 6
    For $i = 0 To 6
    GUICtrlCreateLabel($aWDays[$i], $x, 30, 26, 17, BitOR($ES_CENTER, $SS_CENTERIMAGE))
    GUICtrlSetBkColor(-1, 0xD0D0D0)
    $x += 27
    Next
    $x = 6
    $y = 40
    For $i = 0 To 41
    If Not Mod($i, 7) Then
    $x = 6
    $y += 18
    EndIf
    $aDays[$i] = GUICtrlCreateLabel($i, $x, $y, 26, 17, BitOR($ES_CENTER, $SS_CENTERIMAGE))
    GUICtrlSetOnEvent(-1, '_DayEvent')
    $x += 27
    Next
    ; (leere) Label für Tooltip Wochennummer
    $y = 58
    For $i = 0 To 5
    $aToolTip[$i] = GUICtrlCreateLabel(' ', 1, $y, 5, 17)
    $y += 18
    Next
    _setMonthView()
    #endregion - Monatskalender

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

    GUIRegisterMsg($WM_MOVE, "_WM_MOVE")
    GUISetState(@SW_SHOW, $hMonthCal)

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

    While 1
    Sleep(10)
    WEnd

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

    Func _end()
    ; Kommentare löschen, falls Markierung gelöscht
    _DeleteUnusedComments()
    ; beim Beenden Markierungen/Kommentare/Kategorien in INI schreiben
    If $aCat[0][0] = 0 Then
    IniWriteSection($sINI, 'category', '')
    Else
    For $i = 1 To $aCat[0][0]
    $aCat[$i][0] = ControlGetText($hCategory, '', $aCat[$i][0])
    Next
    IniWriteSection($sINI, 'category', $aCat)
    EndIf
    _WriteMarkedDaysToINI($oMarkedDays, $sINI, 'marked')
    _WriteMarkedDaysToINI($oComment, $sINI, 'comment')
    Exit
    EndFunc

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

    Func _CloseComment()
    Local $sRead = GUICtrlRead($hEdit)
    If $sRead <> '' Then
    $sRead = StringRegExpReplace($sRead, '\r\n', '¤')
    If $oComment.Exists($sDateComment) Then
    $oComment.Item($sDateComment) = $sRead
    Else
    $oComment.Add($sDateComment, $sRead)
    EndIf
    EndIf
    GUICtrlSetData($hEdit, '')
    GUISetState(@SW_HIDE, $hComment)
    EndFunc

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

    Func _DeleteUnusedComments()
    Local $strKey, $colKeys = $oComment.Keys
    For $strKey In $colKeys
    If Not $oMarkedDays.Exists($strKey) Then
    $oComment.Remove($strKey)
    EndIf
    Next
    EndFunc

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

    ;======= ANZEIGEN =====
    Func _show10YearView() ; wechselt von 10-Jahreskalender zu 10-Jahres-Übersicht
    GUISetState(@SW_SHOW, $h10YearView)
    _set10YearView()
    GUISetState(@SW_HIDE, $h10YearCal)
    EndFunc

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

    Func _show10YearCal($hWndFrom) ; wechselt von Jahreskalender/10-Jahres-Übersicht zu 10-Jahreskalender
    GUISetState(@SW_SHOW, $h10YearCal)
    If $iCurr10Year = $iShow10Year Then
    $aCtrlFrame = _FrameAroundCtrl_Create($h10YearCal, $a10Years[StringRight($iShowYear,1)+1])
    Else
    _FrameAroundCtrl_Delete()
    EndIf
    GUISetState(@SW_HIDE, $hWndFrom)
    EndFunc

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

    Func _showYearCal($hWndFrom) ; wechselt von Monatskalender/10-Jahreskalender zu Jahreskalender
    GUICtrlSetData($lbYear, $iCurrYear)
    GUISetState(@SW_SHOW, $hYearCal)
    _setYear()
    GUISetState(@SW_HIDE, $hWndFrom)
    EndFunc

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

    Func _showMonthCal() ; wechselt von Jahreskalender zu Monatskalender
    GUISetState(@SW_SHOW, $hMonthCal)
    If $iCurrYear = @YEAR And $iCurrMonth = @MON Then
    $aCtrlFrame = _FrameAroundCtrl_Create($hMonthCal, $TodayID)
    Else
    _FrameAroundCtrl_Delete()
    EndIf
    GUISetState(@SW_HIDE, $hYearCal)
    EndFunc
    ;======================

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

    ;======= ÜBERSICHT ====
    Func _10YearViewEvent() ; Klick auf Control in 10-Jahres-Übersicht
    GUISetState(@SW_LOCK, $h10YearView)
    Switch @GUI_CtrlId
    Case $btPrev10YearView
    If $iCurrYear -10 < 1900 Then Return
    $iCurrYear = 1900
    GUICtrlSetState($btPrev10YearView, $GUI_HIDE)
    GUICtrlSetState($btNext10YearView, $GUI_SHOW)
    Case $btNext10YearView
    If $iCurrYear +10 > 2099 Then Return
    $iCurrYear = 2099
    GUICtrlSetState($btPrev10YearView, $GUI_SHOW)
    GUICtrlSetState($btNext10YearView, $GUI_HIDE)
    EndSwitch
    _set10YearView()
    GUISetState(@SW_UNLOCK, $h10YearView)
    EndFunc

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

    Func _10YearEvent() ; Klick auf 10-Jahresbereich in 10-Jahres-Übersicht
    _FrameAroundCtrl_Delete()
    Local $i10Year = GUICtrlRead(@GUI_CtrlId)
    If $i10Year = '' Then Return
    If StringRight($i10Year, 1) = 0 Then $i10Year += 9
    $iCurr10YearEnd = $i10Year
    $iCurr10Year = StringLeft($i10Year, 3)
    GUICtrlSetData($lb10Year, $iCurr10Year & '0 - ' & $iCurr10YearEnd)
    _set10Year()
    _show10YearCal($h10YearView)
    EndFunc

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

    Func _set10YearView() ; setze Daten in 10-Jahres-Übersicht
    _FrameAroundCtrl_Delete()
    Local $iSet = 2, $iFrom = 1990, $iTo = 1999, $iLoop = 2
    GUICtrlSetState($btPrev10YearView, $GUI_SHOW)
    GUICtrlSetState($btNext10YearView, $GUI_HIDE)
    If $iCurrYear < 2010 Then
    $iSet = 1
    $iFrom = 1900
    $iTo = 1909
    GUICtrlSetState($btPrev10YearView, $GUI_HIDE)
    GUICtrlSetState($btNext10YearView, $GUI_SHOW)
    EndIf
    If $iSet = 1 Then
    GUICtrlSetData($a10YearsView[0], '')
    GUICtrlSetData($a10YearsView[1], '')
    Else
    $iLoop = 0
    GUICtrlSetData($a10YearsView[22], '')
    GUICtrlSetData($a10YearsView[23], '')
    EndIf
    For $i = $iLoop To $iLoop +21
    If Not Mod($i, 2) Then
    GUICtrlSetData($a10YearsView[$i], $iFrom)
    $iFrom += 10
    Else
    GUICtrlSetData($a10YearsView[$i], $iTo)
    If StringLeft(GUICtrlRead($a10YearsView[$i]),3) = $iShow10Year Then _
    $aCtrlFrame = _FrameAroundCtrl_Create($h10YearView, $a10YearsView[$i])
    $iTo += 10
    EndIf
    Next
    EndFunc
    ;======================

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

    ;======= 10 JAHR ======
    Func _10YearCalEvent() ; Klick auf Control im 10-Jahreskalender
    GUISetState(@SW_LOCK, $h10YearCal)
    Switch @GUI_CtrlId
    Case $btPrev10Year
    If $iCurr10Year -1 < 190 Then Return
    $iCurr10YearEnd -= 10
    $iCurrYear -= 10
    $iCurr10Year -= 1
    _set10Year()
    Case $btNext10Year
    If $iCurr10Year +1 > 209 Then Return
    $iCurr10YearEnd += 10
    $iCurrYear += 10
    $iCurr10Year += 1
    _set10Year()
    Case $lb10Year
    $iShow10Year = $iCurr10Year
    _show10YearView()
    EndSwitch
    GUISetState(@SW_UNLOCK, $h10YearCal)
    EndFunc

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

    Func _YearEvent() ; Klick auf Jahr im 10-Jahreskalender
    $iCurrYear = GUICtrlRead(@GUI_CtrlId)
    $iCurr10Year = StringLeft($iCurrYear, 3)
    GUICtrlSetData($lbYear, $iCurrYear)
    _showYearCal($h10YearCal)
    EndFunc

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

    Func _set10Year()
    GUICtrlSetData($lb10Year, $iCurr10YearEnd -9 & ' - ' & $iCurr10YearEnd)
    Local $iStart = $iCurr10YearEnd -10
    For $i = 0 To 11
    GUICtrlSetData($a10Years[$i], $iStart + $i)
    Next
    If $iCurrYear = $iShowYear Then
    $aCtrlFrame = _FrameAroundCtrl_Create($h10YearCal, $a10Years[StringRight($iShowYear,1)+1])
    Else
    _FrameAroundCtrl_Delete()
    EndIf
    EndFunc
    ;======================

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

    ;======= JAHR =========
    Func _YearCalEvent() ; Klick auf Controls im Jahreskalender
    GUISetState(@SW_LOCK, $hYearCal)
    Switch @GUI_CtrlId
    Case $btPrevYear
    If $iCurrYear -1 < 1900 Then Return
    $iCurrYear -= 1
    _setYear()
    Case $btNextYear
    If $iCurrYear +1 > 2099 Then Return
    $iCurrYear += 1
    _setYear()
    Case $lbYear
    $iCurrYear = GUICtrlRead($lbYear)
    $iShowYear = $iCurrYear
    $iShow10Year = StringLeft($iShowYear, 3)
    GUICtrlSetData($lb10Year, $iCurr10Year & '0 - ' & $iCurr10YearEnd)
    _set10Year()
    _show10YearCal($hYearCal)
    EndSwitch
    GUISetState(@SW_UNLOCK, $hYearCal)
    EndFunc

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

    Func _MonthEvent() ; Klick auf Monat im Jahreskalender
    Local $sMonth = GUICtrlRead(@GUI_CtrlId)
    For $i = 0 To 11
    If $aShortMonth[$i] = $sMonth Then
    $iCurrMonth = $i +1
    ExitLoop
    EndIf
    Next
    $iShowMonth = $iCurrMonth
    $iCurrYear = GUICtrlRead($lbYear)
    $iShowYear = $iCurrYear
    $iCurr10Year = StringLeft($iCurrYear, 3)
    _setMonthView($iCurrYear, $iCurrMonth)
    _showMonthCal()
    EndFunc

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

    Func _setYear()
    $iCurr10Year = StringLeft($iCurrYear, 3)
    $iCurr10YearEnd = $iCurr10Year & 9
    GUICtrlSetData($lbYear, $iCurrYear)
    If $iCurrYear = $iShowYear Then
    $aCtrlFrame = _FrameAroundCtrl_Create($hYearCal, $aMonth[$iShowMonth-1])
    Else
    _FrameAroundCtrl_Delete()
    EndIf
    EndFunc
    ;======================

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

    ;======= MONAT ========
    Func _MonthCalEvent() ; Klick auf Controls im Monatskalender
    GUISetState(@SW_LOCK, $hMonthCal)
    Switch @GUI_CtrlId
    Case $btPrevMonth
    $iCurrMonth -= 1
    _setMonthView($iCurrYear, $iCurrMonth)
    Case $btNextMonth
    $iCurrMonth += 1
    _setMonthView($iCurrYear, $iCurrMonth)
    Case $lbMonth
    $iShowMonth = $iCurrMonth
    _showYearCal($hMonthCal)
    EndSwitch
    GUISetState(@SW_UNLOCK, $hMonthCal)
    EndFunc

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

    Func _DayEvent() ; Klick auf Tag im Monatskalender
    $iSetCol = $iChooseCol
    For $i = 0 To 41
    $IndexCat = $i
    If $aDays[$i] = @GUI_CtrlId Then ExitLoop
    Next
    Local $sFullDate = $iCurrYear & '/' & StringRight( '0' & $iCurrMonth, 2) & '/' & GUICtrlRead($aDays[$i])
    $sDateCat = $sFullDate
    If $oMarkedDays.Exists($sFullDate) Then
    $oMarkedDays.Remove($sFullDate)
    GUICtrlSetBkColor($aDays[$i], $DefCol)
    Else
    If $iChooseCol = -1 Then
    GUISetState(@SW_SHOW, $hCategory)
    Else
    $oMarkedDays.Add($sFullDate, $iSetCol)
    GUICtrlSetBkColor($aDays[$i],$iSetCol)
    EndIf
    EndIf
    EndFunc

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

    Func _setMonthView($iYear=-1, $iMonth=-1) ; setzt Monatskalender für aktuellen Monat/Jahr
    Local $aLongMonth[13] = ['','Januar ','Februar ','März ','April ','Mai ','Juni ','Juli ','August ','September ','Oktober ','November ','Dezember ']
    If $iYear = -1 Or IsKeyword($iYear) Then $iYear = @YEAR
    If $iMonth = -1 Or IsKeyword($iMonth) Then $iMonth = @MON
    If $iMonth = 0 Then
    If $iCurrYear -1 < 1900 Then Return
    $iCurrYear -= 1
    $iCurrMonth = 12
    ElseIf $iMonth = 13 Then
    If $iCurrYear +1 > 2099 Then Return
    $iCurrMonth = 1
    $iCurrYear += 1
    Else
    $iCurrMonth = $iMonth
    $iCurrYear = $iYear
    EndIf
    $iCurr10Year = StringLeft($iCurrYear, 3)
    $iCurr10YearEnd = $iCurr10Year & 9
    GUICtrlSetData($lbMonth, $aLongMonth[$iCurrMonth] & $iCurrYear)
    _CalcDayArray()
    If $iCurrYear = @YEAR And $iCurrMonth = @MON Then ; Datum HEUTE mit Rahmen
    $aCtrlFrame = _FrameAroundCtrl_Create($hMonthCal, $TodayID)
    Else
    _FrameAroundCtrl_Delete()
    EndIf

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

    EndFunc

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

    Func _CalcDayArray() ; im Monatskalender Tageswerte (+ Farben, falls gesetzt) eintragen
    Local $iMonthDays = _DateDaysInMonth($iCurrYear, $iCurrMonth)
    Local $1stWeekDay = (_DateToDayOfWeekISO($iCurrYear, $iCurrMonth, 1) -1) *(-1)
    Local $s1stFullDate = $iCurrYear & '/' & $iCurrMonth & '/01'
    Local $1stWeekNum = _WeekNumberISO($iCurrYear, $iCurrMonth, '01'), $refDate, $n = 0
    For $i = 0 To 5
    GUICtrlSetTip($aToolTip[$i], $1stWeekNum +$i, 'Kalenderwoche', 1, 1)
    Next
    If $1stWeekDay <> 0 Then
    For $i = $1stWeekDay To 0
    If $i = 0 Then ExitLoop
    $refDate = _DateAdd('D', $i, $s1stFullDate)
    If $oMarkedDays.Exists($refDate) Then
    GUICtrlSetBkColor($aDays[$n], $oMarkedDays.Item($refDate))
    Else
    GUICtrlSetBkColor($aDays[$n], $DefCol)
    EndIf
    GUICtrlSetData($aDays[$n], StringRight($refDate, 2))
    GUICtrlSetState($aDays[$n], $GUI_DISABLE)
    $n += 1
    Next
    EndIf
    For $i = 0 To $iMonthDays -1
    $refDate = _DateAdd('D', $i, $s1stFullDate)
    If $oMarkedDays.Exists($refDate) Then
    GUICtrlSetBkColor($aDays[$n], $oMarkedDays.Item($refDate))
    Else
    GUICtrlSetBkColor($aDays[$n], $DefCol)
    EndIf
    GUICtrlSetData($aDays[$n], StringRight($refDate, 2))
    GUICtrlSetState($aDays[$n], $GUI_ENABLE)
    If StringRight($refDate, 2) = @MDAY Then $TodayID = $aDays[$n]
    $n += 1
    Next
    $i = $iMonthDays
    While $n <= 41
    $refDate = _DateAdd('D', $i, $s1stFullDate)
    If $oMarkedDays.Exists($refDate) Then
    GUICtrlSetBkColor($aDays[$n], $oMarkedDays.Item($refDate))
    Else
    GUICtrlSetBkColor($aDays[$n], $DefCol)
    EndIf
    GUICtrlSetData($aDays[$n], StringRight($refDate, 2))
    GUICtrlSetState($aDays[$n], $GUI_DISABLE)
    $i += 1
    $n += 1
    WEnd
    EndFunc
    ;======================

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

    ;======= KATEGORIE ====
    Func _setCatCtrlState()
    If $aCat[0][0] = 0 Then
    GUICtrlSetState($btCat_Del, $GUI_DISABLE)
    GUICtrlSetState($btCat_Sel, $GUI_DISABLE)
    Else
    GUICtrlSetState($btCat_Del, $GUI_ENABLE)
    GUICtrlSetState($btCat_Sel, $GUI_ENABLE)
    EndIf
    EndFunc

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

    Func _CatNew()
    Local $sName = InputBox('Neue Kategorie', 'Bitte Namen der Kategorie eingeben')
    If $sName = '' Then Return
    If $aCat[0][0] > 0 Then
    For $i = 1 To $aCat[0][0]
    If GUICtrlRead($aCat[$i][0]) = $sName Then Return MsgBox(0, 'Achtung!', 'Eine Kategorie mit diesem Namen' & @CRLF & 'existiert bereits!')
    Next
    EndIf
    Local $iBkCol = _ChooseColor(2)
    If $iBkCol = -1 Then Return
    _CatCtrlCreate($sName, $iBkCol)
    EndFunc

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

    Func _CatCtrlCreate($sName, $iBkCol)
    Local $y = $yCat
    If $aCat[0][0] > 0 Then $y = $yCat + ($aCat[0][0] * 27)
    ReDim $aCat[UBound($aCat) +1][2]
    $aCat[0][0] += 1
    Local $winPos = WinGetPos($hCategory)
    WinMove($hCategory, '', $winPos[0], $winPos[1] -13, $winPos[2], $winPos[3] +27)
    $aCat[UBound($aCat) -1][0] = GUICtrlCreateRadio($sName, 5, $y, 190, 22, BitOR($BS_CENTER, $BS_VCENTER))
    GUICtrlSetResizing(-1, $GUI_DOCKALL)
    GUICtrlSetBkColor($aCat[UBound($aCat) -1][0], $iBkCol)
    $aCat[UBound($aCat) -1][1] = $iBkCol
    _setCatCtrlState()
    EndFunc

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

    Func _CatDel()
    Local $Index = 0
    For $i = 1 To $aCat[0][0]
    If BitAND(GUICtrlRead($aCat[$i][0]), $GUI_CHECKED) Then
    $Index = $i
    ExitLoop
    EndIf
    Next
    If $Index = 0 Then Return
    Local $CtrlPos
    GUICtrlDelete($aCat[$Index][0])
    Local $winPos = WinGetPos($hCategory)
    For $i = $Index To $aCat[0][0] -1
    $CtrlPos = ControlGetPos($hCategory, '', $aCat[$i+1][0])
    $aCat[$i][0] = GUICtrlCreateRadio(ControlGetText($hCategory, '', $aCat[$i+1][0]), 5, $CtrlPos[1] -27, 190, 22, BitOR($BS_CENTER, $BS_VCENTER))
    GUICtrlSetResizing(-1, $GUI_DOCKALL)
    GUICtrlSetBkColor(-1, $aCat[$i+1][1])
    $aCat[$i][1] = $aCat[$i+1][1]
    GUICtrlDelete($aCat[$i+1][0])
    Next
    WinMove($hCategory, '', $winPos[0], $winPos[1] +13, $winPos[2], $winPos[3] -27)
    $aCat[0][0] -= 1
    ReDim $aCat[UBound($aCat)-1][2]
    _setCatCtrlState()
    EndFunc

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

    Func _CatSel()
    $iSetCol = -1
    Local $Index = 0
    For $i = 1 To $aCat[0][0]
    If BitAND(GUICtrlRead($aCat[$i][0]), $GUI_CHECKED) Then
    $Index = $i
    ExitLoop
    EndIf
    Next
    If $Index = 0 Then Return
    $iSetCol = $aCat[$Index][1]
    _CloseCategory()
    EndFunc

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

    Func _CloseCategory()
    GUISetState(@SW_HIDE, $hCategory)
    If $iSetCol <> -1 Then
    $oMarkedDays.Add($sDateCat, $iSetCol)
    GUICtrlSetBkColor($aDays[$IndexCat],$iSetCol)
    $iSetCol = -1
    EndIf
    GUISetState(@SW_SHOW, $hMonthCal) ; wirkt machmal nicht
    WinWaitActive($hMonthCal, '', 1)
    If WinGetHandle('[ACTIVE]') <> $hMonthCal Then WinActivate($hMonthCal)
    EndFunc
    ;======================

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

    ;======= KOMMENTAR ====
    Func _RClickMonth()
    Local $IDover = _GetCtrlUnderMouse()
    If $IDover = 0 Or BitAND(GUICtrlGetState($IDover), $GUI_DISABLE) Then Return
    $sDateComment = $iCurrYear & '/' & $iCurrMonth & '/' & GUICtrlRead($IDover)
    If Not _GetMarkedDays($oMarkedDays, $sDateComment, 1) Then Return
    WinSetTitle($hComment, '', 'Kommentar ' & StringRegExpReplace($sDateComment, '(\d{4})/(\d{2})/(\d{2})', '$3.$2.$1'))
    If $oComment.Exists($sDateComment) Then GUICtrlSetData($hEdit, StringRegExpReplace($oComment.Item($sDateComment), '¤', @CRLF))
    GUISetState(@SW_SHOW, $hComment)
    EndFunc

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

    Func _GetCtrlUnderMouse()
    Local $oldOpt = Opt('MouseCoordMode', 2)
    Local $Mouse = MouseGetPos(), $Ctrl, $retID = 0
    For $i = 0 To 41
    $Ctrl = ControlGetPos($hMonthCal, '', $aDays[$i])
    If @error Then ContinueLoop
    If ($Mouse[0] >= $Ctrl[0] And $Mouse[0] <= $Ctrl[0] + $Ctrl[2]) And _
    ($Mouse[1] >= $Ctrl[1] And $Mouse[1] <= $Ctrl[1] + $Ctrl[3]) Then
    $retID = $aDays[$i]
    ExitLoop
    EndIf
    Next
    Opt('MouseCoordMode', $oldOpt)
    Return $retID
    EndFunc
    ;======================

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

    ;======= RAHMEN =======
    Func _FrameAroundCtrl_Create($hWnd, $ID) ; roten Rahmen um Control zeichnen
    _FrameAroundCtrl_Delete()
    Local $aSize[4]
    If $hWnd = $h10YearView Then ; VonJahr-BisJahr als ein Ctrl berechnen
    Local $ID_start, $ID_end
    If StringRight(GUICtrlRead($ID), 1) = 0 Then
    $ID_start = $ID
    ElseIf StringRight(GUICtrlRead($ID), 1) = 9 Then
    $ID_start = $ID -1
    EndIf
    Local $aPos = ControlGetPos($hWnd, '', $ID_start)
    $aSize[0] = $aPos[0]
    $aSize[1] = $aPos[1]
    $aSize[2] = $aPos[2]
    $aSize[3] = 2 *$aPos[3]
    Else
    $aSize = ControlGetPos($hWnd, '', $ID)
    EndIf
    Local $aFrame[4] = [ _
    GUICtrlCreateLabel('', $aSize[0] -1, $aSize[1] -1, $aSize[2] +2, 1), _ ; top
    GUICtrlCreateLabel('', $aSize[0] -1, $aSize[1] +$aSize[3], $aSize[2] +2, 1), _ ; bottom
    GUICtrlCreateLabel('', $aSize[0] -1, $aSize[1], 1, $aSize[3]), _ ; left
    GUICtrlCreateLabel('', $aSize[0] +$aSize[2], $aSize[1], 1, $aSize[3])] ; right
    For $i = 0 To 3
    GUICtrlSetBkColor($aFrame[$i], 0xFF0000)
    Next
    Return $aFrame
    EndFunc

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

    Func _FrameAroundCtrl_Delete() ; Rahmen löschen
    If Not IsArray($aCtrlFrame) Then Return
    GUISetState(@SW_LOCK, WinGetHandle('[ACTIVE]'))
    For $i = 0 To 3
    GUICtrlDelete($aCtrlFrame[$i])
    Next
    GUISetState(@SW_UNLOCK, WinGetHandle('[ACTIVE]'))
    $aCtrlFrame = 0
    EndFunc
    ;======================

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

    Func _WM_MOVE($hWnd)
    Local $pos = WinGetPos($hWnd)
    Switch $hWnd
    Case $h10YearView
    WinMove($h10YearCal, '', $pos[0], $pos[1])
    WinMove($hYearCal, '', $pos[0], $pos[1])
    WinMove($hMonthCal, '', $pos[0], $pos[1])
    Case $h10YearCal
    WinMove($h10YearView, '', $pos[0], $pos[1])
    WinMove($hYearCal, '', $pos[0], $pos[1])
    WinMove($hMonthCal, '', $pos[0], $pos[1])
    Case $hYearCal
    WinMove($h10YearView, '', $pos[0], $pos[1])
    WinMove($h10YearCal, '', $pos[0], $pos[1])
    WinMove($hMonthCal, '', $pos[0], $pos[1])
    Case $hMonthCal
    WinMove($h10YearView, '', $pos[0], $pos[1])
    WinMove($h10YearCal, '', $pos[0], $pos[1])
    WinMove($hYearCal, '', $pos[0], $pos[1])
    EndSwitch
    Return $GUI_RUNDEFMSG
    EndFunc

    [/autoit]


    So sieht es jetzt aus:
    [Blockierte Grafik: http://www.imgbox.de/users/BugFix/Cal_Mon.png][Blockierte Grafik: http://www.imgbox.de/users/BugFix/Cal_Year.png][Blockierte Grafik: http://www.imgbox.de/users/BugFix/Cal_10Year.png][Blockierte Grafik: http://www.imgbox.de/users/BugFix/Cal_10YearView.png][Blockierte Grafik: http://www.imgbox.de/users/BugFix/Cal_Category.png]

    DL v1.0, v1.1: 37

    Dateien

    myCalendar[1.2].au3 17,48 kB – 390 Downloads myCalendar[1.3].au3 21,87 kB – 387 Downloads myCalendar[1.4].au3 26,08 kB – 487 Downloads
  • Must Have Programme auf dem Rechner

    • BugFix
    • 5. Juni 2011 um 10:00

    2 nützliche Helferlein, die noch nicht genannt wurden:
    - Winspector Spy, ein Tool, das uns mehr verrät als das AutoIt-Window-Info-Tool (Protokollieren von Messages in Fenstern etc.)
    - WinMerge, zum Vergleichen und Aufspüren/Darstellen von Änderungen in unterschiedlichen Versionen einer Datei. Nicht nur für pure Textdateien, sondern auch mit Excel- und Worddokumenten möglich.

  • Komplette Fileliste eines Ordners samt Unterordnr erstellen

    • BugFix
    • 5. Juni 2011 um 09:43

    Nutze die Suchfunktion und such mal mit dem Stichwort "rekursiv" - da findest du einige fertige Funktionen dazu.

  • Osys15 - das ASM OS | Jetzt als Gast-OS für Windows HIER zum Download verfügbar! SDK nun auch verfügbar!

    • BugFix
    • 5. Juni 2011 um 00:46
    Zitat von campweb

    Naja, um des Guten Willen willen schreib ich mal die Herkunft mit rein.


    Das sollte man auch erwarten können. Ich habe auch nichts dagegen, wenn Code von mir anderswo Verwendung findet, schließlich befürworte ich den Open-Source Gedanken. Aber es ist ein Mindestmaß an Anstand, dass man Quellen angibt (auch wenn man keine Doktorarbeit schreibt).
    Es ist der einzige Dank, den ein Open-Source Programmierer erhält, dass sein Name in den Credits auftaucht. Das sollte man immer berücksichtigen.

  • Osys15 - das ASM OS | Jetzt als Gast-OS für Windows HIER zum Download verfügbar! SDK nun auch verfügbar!

    • BugFix
    • 4. Juni 2011 um 17:12
    Zitat von Dopefish

    vergleicht mal den source der ersten seite mit den seiten:


    LOL - Ein Schelm, wer Böses dabei denkt.

    @campweb: Ich bitte um einen Nachweis, dass auch der (ja wohl übereinstimmende) Code der geposteten Links von dir stammt. Anderenfalls Ist das hier ein Plagiat und wir müssen davon ausgehen, dass du dich mit fremden Federn schmücken willst. :wacko:

  • Exceldatei an vorherige Instanz anhängen

    • BugFix
    • 4. Juni 2011 um 09:33

    So, als alter Excel-Fummler hab ich mal geschaut, wie du das verknüpfen kannst. Du mußt nicht die Workbooks in einer Instanz haben - du mußt die anderen Workbooks nicht mal öffnen! Das übernimmt Excel für dich mit den entsprechenden Verweisen.

    Bsp.:
    - du hast ein Workbook "C:\test1.xls" (Tabellenblatt 1) und eines "C:\test2.xls" (Tabellenblatt 1)
    - in "C:\test2.xls" möchtest du auf die Zelle "H33" aus "C:\test1.xls" verweisen
    - dann sieht das so aus: ='C:\[test1.xls]Tabelle1'!$H$33

    Damit deine Formeln halbwegs übersichtlich bleiben, empfiehlt es sich Referenzzellen zu führen, also z.B. in "A1" schreibst du den Verweis "='C:\[test1.xls]Tabelle1'!$H$33" und kannst dich dann in deinem Arbeitsblatt auf "A1" beziehen, statt jedesmal den langen Verweis zu nutzen.

  • Exceldatei an vorherige Instanz anhängen

    • BugFix
    • 3. Juni 2011 um 17:53
    Zitat von Tweaky

    In einer Datei sind Summewenn-Formeln zur anderen Datei hinterlegt.


    Dann füge diese doch als Tabellenblatt in das andere Workbook ein - dürfte der einfachste Weg sein.

  • Liestview Formatierung...

    • BugFix
    • 2. Juni 2011 um 22:54

    Kann es sein, dass du Groups meinst? Schau dir mal das Bsp. zu "_GUICtrlListView_InsertGroup" an.

  • Exceldatei an vorherige Instanz anhängen

    • BugFix
    • 2. Juni 2011 um 21:06

    Meines Wissens öffnet Excel mit jeder Datei eine eigene Objektinstanz. Es wird aber nur ein Excel.exe - Prozeß verwendet.

    _ExcelBookAttach() dient dazu, gezielt die Objektreferenz auf ein offenes Excel-Workbook zu erhalten, das dazu NICHT das aktive Workbook sein muß. Mit ObjGet() würdest du die Referenz auf das aktive Workbook erhalten.
    Welche Notwendigkeit besteht denn, mit derselben Objektinstanz zu arbeiten? - Es sind doch verschiedene Objekte.

  • File-Store

    • BugFix
    • 2. Juni 2011 um 13:17

    Ich denke, man kann minimal erwarten, dass eine kurze Beschreibung des Skriptes mitgepostet wird. Wer hat schon Lust :wacko: Skripte zu starten um dann auf die vom Ersteller geplante Funktion zurückzuschließen.

  • Servus

    • BugFix
    • 2. Juni 2011 um 11:59

    Na dann Herzlich Willkommen im aktiven Skriptleben. ;)

Spenden

Jeder Euro hilft uns, Euch zu helfen.

Download

AutoIt Tutorial
AutoIt Buch
Onlinehilfe
AutoIt Entwickler
  1. Datenschutzerklärung
  2. Impressum
  3. Shoutbox-Archiv
Community-Software: WoltLab Suite™