NEU: Version 1.4 in Post #1
Beiträge von BugFix
-
-
bei denen man iPhones & pads & hasteNichtGesehen gewinnen kann
Nun, ich bin der Meinung: Jeder der auf einen Link klickt, der ihm ohne Einsatz Gewinne verspricht, soll sich nicht wundern, wenn er hinterher Probleme hat. NIEMAND hat etwas zu verschenken, NICHTS gibt es gratis, auch nicht als Dank für eine Umfragebeteiligung o.ä.
Gesunder Menschenverstand schützt einen vor der Mehrzahl der Bedrohungen am Besten. -
Hi UEZ,
das Hauptproblem ist eigentlich, dass es keinen definierten Zustand für das Ende der Farbwahl gibt (und somit den Zeitpunkt zum Wechsel des Fokus).
Du hast mehrere Möglichkeiten die Auswahl zu treffen:
1. Klick auf Combo-Button zum Ausklappen der Auswahlliste
- a) mit Mausklick Farbeintrag wählen
- b) mit Pfeiltasten auf/ab bewegen und mit Enter übernehmen
2. Fokus auf Combo ohne dass die LIste ausgeklappt ist
- a) mit Pfeiltasten ändert sich der Eintrag im sichtbaren Bereich - Übernahme mit Enter
- b) mit Scrollen des Mausrades ändert sich der Eintrag im sichtbaren Bereich - Übernahme mit EnterDie einzig klare Form der Wahl ist: Ausklappen, mit Mausklick wählen.
Aber der Nutzer hat ja durchaus die Möglichkeit anders vorzugehen. Deshalb denke ich, dass das Standard Combo-Ctrl hier nicht geeignet ist. Ich würde hier ein eigenes Ctrl erstellen, dem du nur die gewollten Eigenschaften zuordnen kannst.
Unabhängig davon, werde ich mich mal an der Variante: "Ausklappen, mit Mausklick wählen, Fokus auf Button" probieren.Edit:
Du hattest "WM_NOTIFY" statt "WM_COMMAND" ausgewertet.
So geht es per Auswahl mit Mausklick:Spoiler anzeigen
[autoit]#include <Array.au3>
[/autoit] [autoit][/autoit] [autoit]
#include <ComboConstants.au3>
#include <Constants.au3>
#include <EditConstants.au3>
#include <GuiComboBoxEx.au3>
#include <GUIConstantsEx.au3>
#include <GuiImageList.au3>
#include <Misc.au3>
#include <SliderConstants.au3>
#include <StructureConstants.au3>
#include <WinAPI.au3>
#include <WindowsConstants.au3>Global $hGUI = GUICreate("")
[/autoit] [autoit][/autoit] [autoit]
GUISetState()
Global $load_auto = ""
Global $load_auto, $GUI_Bg_Color = 0xB9D1EA, $ping_to = 500
Global Const $ini_file = @ScriptDir & "\Check Online Status.ini"Global $bSet, $hComboColor, $hGUI_Settings, $hProc, $hHook
[/autoit] [autoit][/autoit] [autoit]
Settings()Exit
[/autoit] [autoit][/autoit] [autoit]Func Settings()
[/autoit] [autoit][/autoit] [autoit]
GUISetState(@SW_DISABLE, $hGUI)
$hGUI_Settings = GUICreate("Settings", 612, 229, -1, -1, $GUI_SS_DEFAULT_GUI, Default, $hGUI)
Local Const $iAutoLoadFile = GUICtrlCreateInput($load_auto, 152, 16, 369, 22)
GUICtrlSetFont(-1, 9, 400, 0, "Arial")
Local Const $lLoadAuto = GUICtrlCreateLabel("Load List Automatically", 8, 18, 140, 20)
GUICtrlSetFont(-1, 10, 400, 0, "Arial")
GUICtrlSetTip(-1, "Select a file which will be loaded to the program automatically")
Local Const $bBrowse = GUICtrlCreateButton("&Browse", 528, 14, 75, 25)
GUICtrlSetFont(-1, 10, 400, 0, "Arial")
Local Const $lBgColor = GUICtrlCreateLabel("Change GUI background color", 6, 58, 177, 20)
GUICtrlSetFont(-1, 10, 400, 0, "Arial")
;~ Local Const $lBgColorAdd = GUICtrlCreateLabel("Add new color", 6, 97, 97, 20)
;~ GUICtrlSetFont(-1, 10, 400, 0, "Arial")
;~ Local Const $bAddColor = GUICtrlCreateButton("Add &Color", 105, 94, 75, 25)
;~ GUICtrlSetFont(-1, 10, 400, 0, "Arial")
$hComboColor = _GUICtrlComboBoxEx_Create($hGUI_Settings, "", 192, 56, 329, 200, BitOR($CBS_DROPDOWNLIST, $CBS_DISABLENOSCROLL))
;~ $hComboColor = GUICtrlCreateCombo("", 192, 56, 329, 200, BitOR($CBS_DROPDOWNLIST, $CBS_DISABLENOSCROLL))
ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $hComboColor = ' & $hComboColor & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console
GUICtrlSetData(-1, "item2|item3", "item3")
GUICtrlSetFont(-1, 10, 400, 0, "Arial")
$bSet = GUICtrlCreateButton("&Set", 528, 55, 75, 64) ;#############################
GUICtrlSetFont(-1, 10, 400, 0, "Arial")
Local Const $bApply = GUICtrlCreateButton("&Apply", 528, 180, 75, 40)
GUICtrlSetFont(-1, 10, 400, 0, "Arial")
Local Const $bExit_Setting = GUICtrlCreateButton("E&xit", 438, 180, 75, 40)
GUICtrlSetFont(-1, 10, 400, 0, "Arial")
Local Const $cSlider = GUICtrlCreateSlider(88, 138, 440, 30, BitOR($TBS_BOTH,$TBS_NOTICKS, $TBS_ENABLESELRANGE, $TBS_FIXEDLENGTH, $WS_TABSTOP))
GUICtrlSetLimit(-1, 5000, 100)
GUICtrlSetData(-1, 500)
GUICtrlSetCursor (-1, 0)
Local Const $lSlider = GUICtrlCreateLabel("Ping Timeout", 8, 141, 80, 20)
GUICtrlSetFont(-1, 10, 400, 0, "Arial")
GUICtrlSetTip(-1, "Default is 500 ms")
Local Const $iPing = GUICtrlCreateInput($ping_to, 528, 140, 74, 21, BitOR($ES_CENTER, $ES_NUMBER))
GUICtrlSetFont(-1, 10, 400, 0, "Arial")GUISetState(@SW_SHOW, $hGUI_Settings)
[/autoit] [autoit][/autoit] [autoit]
ControlFocus($hGUI_Settings, "", $bExit_Setting)
GUISetIcon(@SystemDir & "\Shell32.dll", 14, $hGUI_Settings)
Local $nMsg, $i, $file, $cindex, $em, $p, $newcolorLocal $aColors[7] = [0xB9D1EA, 0xC0DCC0, 0xD7E4F2, 0xFFFFE1, 0xA6CAF0, 0xFFFBF0, 0xFECFF4]
[/autoit] [autoit][/autoit] [autoit]Local Const $hImage = _GUIImageList_Create(256, 56, 5, 3)
[/autoit] [autoit][/autoit] [autoit]
For $i = 0 To 6
_GUIImageList_Add($hImage, _GUICtrlComboBoxEx_CreateSolidBitMap($hComboColor, $aColors[$i], 256, 56))
Next
_GUICtrlComboBoxEx_SetImageList($hComboColor, $hImage)_GUICtrlComboBoxEx_BeginUpdate($hComboColor)
[/autoit] [autoit][/autoit] [autoit]
For $i = 0 To 6
_GUICtrlComboBoxEx_AddString($hComboColor, "Color " & $i + 1, $i, $i)
Next
_GUICtrlComboBoxEx_EndUpdate($hComboColor)$cindex = _ArraySearch($aColors, $GUI_Bg_Color)
[/autoit] [autoit][/autoit] [autoit]
If Not @error Then
_GUICtrlComboBoxEx_SetCurSel($hComboColor, $cindex)
Else
_GUICtrlComboBoxEx_SetCurSel($hComboColor, 0)
EndIf;~ GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")
[/autoit] [autoit][/autoit] [autoit]
GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")While 1
[/autoit] [autoit][/autoit] [autoit]
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE, $bExit_Setting
GUISetState(@SW_ENABLE, $hGUI)
GUIDelete($hGUI_Settings)
Return 1
Case $cSlider
GUICtrlSetData($iPing, GUICtrlRead($cSlider))
Case $iPing
$p = GUICtrlRead($iPing)
If $p > 5000 Then
$p = 500
ElseIf $p < 100 Then
$p = 100
EndIf
GUICtrlSetData($cSlider, $p)
Case $bBrowse
$file = FileOpenDialog("File Selection", "", "Text Files (*.txt;*.csv)")
If Not @error Then GUICtrlSetData($iAutoLoadFile, $file)
Case $bSet
$GUI_Bg_Color = "0x" & Hex($aColors[_GUICtrlComboBoxEx_GetCurSel($hComboColor)], 6)
GUISetBkColor($GUI_Bg_Color, $hGUI)
Case $bApply
$GUI_Bg_Color = "0x" & Hex($aColors[_GUICtrlComboBoxEx_GetCurSel($hComboColor)], 6)
GUISetBkColor($GUI_Bg_Color, $hGUI)
IniWrite($ini_file, "Bg-Color", "Color", "0x" & Hex($aColors[_GUICtrlComboBoxEx_GetCurSel($hComboColor)], 6))
$em = @error
IniWrite($ini_file, "Auto-Load", "Load", GUICtrlRead($iAutoLoadFile))
$em = @error
IniWrite($ini_file, "Ping-Timeout", "Ping", GUICtrlRead($iPing))
$em = @error
If $em Then
MsgBox(16, "Error", "Unable to save one or more settings to ini file!", 10)
Else
MsgBox(64, "Information", "Settings were save to " & $ini_file & " successfully", 10)
EndIf
;~ Case $bAddColor
;~ $newcolor = _ChooseColor(2, 0, 2, $hGUI_Settings)
;~ If Not @error Then
;~ ConsoleWrite($newcolor & @CRLF)
;~ EndIf
EndSwitch
WEnd
EndFuncFunc WM_COMMAND($hWnd, $iMsg, $iwParam, $ilParam)
[/autoit]
#forceref $hWnd, $iMsg
Local $hWndFrom, $iIDFrom, $iCode
$hWndFrom = $ilParam
$iIDFrom = BitAND($iwParam, 0xFFFF)
$iCode = BitShift($iwParam, 16)
Switch $hWndFrom
Case $hComboColor
Switch $iCode
Case $CBN_SELENDOK
ControlFocus($hGUI_Settings, '', $bSet)
EndSwitch
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_COMMAND -
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>
[/autoit] [autoit][/autoit] [autoit]
#include <GUIConstantsEx.au3>
#include <GuiTab.au3>
#include <StaticConstants.au3>
#include <StructureConstants.au3>
#include <TabConstants.au3>
#include <WinAPI.au3>Global $btCloseTABItem, $iTabItem, $tTabItem, $iItemCount, $tmpItem, $fIsButton = False
[/autoit] [autoit][/autoit] [autoit]#region ### START Koda GUI section ### Form=
[/autoit] [autoit][/autoit] [autoit]
$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 ###While 1
[/autoit] [autoit][/autoit] [autoit]
$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
WEndFunc _ShowCloseButtonOnTabItem($GUI, $TabID, $iTabItem)
[/autoit] [autoit][/autoit] [autoit]
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
EndFuncFunc _MouseOverTabItem($GUI, $TabID, $iTabItem)
[/autoit] [autoit][/autoit] [autoit]
If Not BitAND(WinGetState($GUI),
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]
; 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 -
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.
-
Und zum 2.ten mal heute: NEU - Version 1.3 in Post #1
-
[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...
[/OT] -
NEU: Version 1.2 in Post #1
-
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

-
;KLAPPT NICHT $section.Add("test" = "bla")
[autoit]
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:$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).
-
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.
-
Verwende den Objekt-Errorhandler.
[autoit]
Am Skriptanfang initialisieren:Global $oMyError = ObjEvent("AutoIt.Error","MyErrFunc")
[/autoit][autoit]Func MyErrFunc()
[/autoit]
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 -
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 KalenderwocheEdit 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öschtEdit 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 geladenSpoiler anzeigen
[autoit]#Region - TimeStamp
[/autoit] [autoit][/autoit] [autoit]
; 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>
; BugFixOpt('GUIOnEventMode', 1)
[/autoit] [autoit][/autoit] [autoit]Global $h10YearView, $h10YearCal, $hYearCal, $hMonthCal, $hComment, $hEdit, $sDateComment, $hCategory
[/autoit] [autoit][/autoit] [autoit]
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; beim Start Markierungen/Kommentare aus INI laden
[/autoit] [autoit][/autoit] [autoit]
Local $sINI = @ScriptDir & '\myCal.INI'
_ReadMarkedDaysFromINI($oMarkedDays, $sINI, 'marked')
_ReadMarkedDaysFromINI($oComment, $sINI, 'comment')#region - Funktionen zu markierten Datumswerten
[/autoit] [autoit][/autoit] [autoit]
; 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]
EndFuncFunc _ReadCategoryFromINI($sINI)
[/autoit] [autoit][/autoit] [autoit]
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; Schreiben in INI
[/autoit] [autoit][/autoit] [autoit]
; 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#region - Jahrzehnt Übersicht
[/autoit] [autoit][/autoit] [autoit]
$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#region - Jahrzehntkalender
[/autoit] [autoit][/autoit] [autoit]
$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#region - Jahreskalender
[/autoit] [autoit][/autoit] [autoit]
$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#region - Kategorie Marker
[/autoit] [autoit][/autoit] [autoit]
$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#region - Kommentarfenster
[/autoit] [autoit][/autoit] [autoit]
$hComment = GUICreate('Kommentar', 300, 250, -1, -1, -1, $WS_EX_TOOLWINDOW)
GUISetOnEvent($GUI_EVENT_CLOSE, '_CloseComment', $hComment)
$hEdit = GUICtrlCreateEdit('', 5, 5, 290, 240)
#endregion#region - Monatskalender
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
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 - MonatskalenderGUIRegisterMsg($WM_MOVE, "_WM_MOVE")
[/autoit] [autoit][/autoit] [autoit]
GUISetState(@SW_SHOW, $hMonthCal)While 1
[/autoit] [autoit][/autoit] [autoit]
Sleep(10)
WEndFunc _end()
[/autoit] [autoit][/autoit] [autoit]
; 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
EndFuncFunc _CloseComment()
[/autoit] [autoit][/autoit] [autoit]
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)
EndFuncFunc _DeleteUnusedComments()
[/autoit] [autoit][/autoit] [autoit]
Local $strKey, $colKeys = $oComment.Keys
For $strKey In $colKeys
If Not $oMarkedDays.Exists($strKey) Then
$oComment.Remove($strKey)
EndIf
Next
EndFunc;======= ANZEIGEN =====
[/autoit] [autoit][/autoit] [autoit]
Func _show10YearView() ; wechselt von 10-Jahreskalender zu 10-Jahres-Übersicht
GUISetState(@SW_SHOW, $h10YearView)
_set10YearView()
GUISetState(@SW_HIDE, $h10YearCal)
EndFuncFunc _show10YearCal($hWndFrom) ; wechselt von Jahreskalender/10-Jahres-Übersicht zu 10-Jahreskalender
[/autoit] [autoit][/autoit] [autoit]
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)
EndFuncFunc _showYearCal($hWndFrom) ; wechselt von Monatskalender/10-Jahreskalender zu Jahreskalender
[/autoit] [autoit][/autoit] [autoit]
GUICtrlSetData($lbYear, $iCurrYear)
GUISetState(@SW_SHOW, $hYearCal)
_setYear()
GUISetState(@SW_HIDE, $hWndFrom)
EndFuncFunc _showMonthCal() ; wechselt von Jahreskalender zu Monatskalender
[/autoit] [autoit][/autoit] [autoit]
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
;======================;======= ÜBERSICHT ====
[/autoit] [autoit][/autoit] [autoit]
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)
EndFuncFunc _10YearEvent() ; Klick auf 10-Jahresbereich in 10-Jahres-Übersicht
[/autoit] [autoit][/autoit] [autoit]
_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)
EndFuncFunc _set10YearView() ; setze Daten in 10-Jahres-Übersicht
[/autoit] [autoit][/autoit] [autoit]
_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
;======================;======= 10 JAHR ======
[/autoit] [autoit][/autoit] [autoit]
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)
EndFuncFunc _YearEvent() ; Klick auf Jahr im 10-Jahreskalender
[/autoit] [autoit][/autoit] [autoit]
$iCurrYear = GUICtrlRead(@GUI_CtrlId)
$iCurr10Year = StringLeft($iCurrYear, 3)
GUICtrlSetData($lbYear, $iCurrYear)
_showYearCal($h10YearCal)
EndFuncFunc _set10Year()
[/autoit] [autoit][/autoit] [autoit]
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
;======================;======= JAHR =========
[/autoit] [autoit][/autoit] [autoit]
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)
EndFuncFunc _MonthEvent() ; Klick auf Monat im Jahreskalender
[/autoit] [autoit][/autoit] [autoit]
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()
EndFuncFunc _setYear()
[/autoit] [autoit][/autoit] [autoit]
$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
;======================;======= MONAT ========
[/autoit] [autoit][/autoit] [autoit]
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)
EndFuncFunc _DayEvent() ; Klick auf Tag im Monatskalender
[/autoit] [autoit][/autoit] [autoit]
$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
EndFuncFunc _setMonthView($iYear=-1, $iMonth=-1) ; setzt Monatskalender für aktuellen Monat/Jahr
[/autoit] [autoit][/autoit] [autoit]
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()
EndIfEndFunc
[/autoit] [autoit][/autoit] [autoit]Func _CalcDayArray() ; im Monatskalender Tageswerte (+ Farben, falls gesetzt) eintragen
[/autoit] [autoit][/autoit] [autoit]
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
;======================;======= KATEGORIE ====
[/autoit] [autoit][/autoit] [autoit]
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
EndFuncFunc _CatNew()
[/autoit] [autoit][/autoit] [autoit]
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)
EndFuncFunc _CatCtrlCreate($sName, $iBkCol)
[/autoit] [autoit][/autoit] [autoit]
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()
EndFuncFunc _CatDel()
[/autoit] [autoit][/autoit] [autoit]
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()
EndFuncFunc _CatSel()
[/autoit] [autoit][/autoit] [autoit]
$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()
EndFuncFunc _CloseCategory()
[/autoit] [autoit][/autoit] [autoit]
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
;======================;======= KOMMENTAR ====
[/autoit] [autoit][/autoit] [autoit]
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)
EndFuncFunc _GetCtrlUnderMouse()
[/autoit] [autoit][/autoit] [autoit]
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
;======================;======= RAHMEN =======
[/autoit] [autoit][/autoit] [autoit]
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
EndFuncFunc _FrameAroundCtrl_Delete() ; Rahmen löschen
[/autoit] [autoit][/autoit] [autoit]
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
;======================Func _WM_MOVE($hWnd)
[/autoit]
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
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
-
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. -
Nutze die Suchfunktion und such mal mit dem Stichwort "rekursiv" - da findest du einige fertige Funktionen dazu.
-
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. -
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:
-
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$33Damit 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.
-
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. -
Kann es sein, dass du Groups meinst? Schau dir mal das Bsp. zu "_GUICtrlListView_InsertGroup" an.