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

  • WM_NOTIFY und WM_COMMAND hooken

    • BugFix
    • 27. Dezember 2016 um 22:36

    Das geht so:

    AutoIt
    #cs
    	WM_ -Message Hook
    	- Nachricht wird erst in einer eigenen Funktion ausgewertet
    	- dann an das System zurückgegeben (auswertbar mit GUIRegisterMsg)
    	- oder verworfen ("Return 0" nach Msg-Auswertung in _WinProc, s. Zeile 74)
    #ce
    
    
    #include <GuiImageList.au3>
    #include <GuiListView.au3>
    #include <ListViewConstants.au3>
    #include <StructureConstants.au3>
    #include <WinAPI.au3>
    #include <WindowsConstants.au3>
    
    
    ;~ Local Const $GWL_WNDPROC = -4
    
    
    $hGui = GUICreate("Test", 400, 400)
    $hListView = _GUICtrlListView_Create($hGui, "Listview", 10, 10, 380, 380)
    _GUICtrlListView_SetExtendedListViewStyle($hListView, BitOR($LVS_EX_GRIDLINES, $LVS_EX_FULLROWSELECT, $LVS_EX_SUBITEMIMAGES))
    
    
    ; Load images
    $hImage = _GUIImageList_Create()
    _GUIImageList_Add($hImage, _GUICtrlListView_CreateSolidBitMap($hListView, 0xFF0000, 16, 16))
    _GUIImageList_Add($hImage, _GUICtrlListView_CreateSolidBitMap($hListView, 0x00FF00, 16, 16))
    _GUIImageList_Add($hImage, _GUICtrlListView_CreateSolidBitMap($hListView, 0x0000FF, 16, 16))
    _GUICtrlListView_SetImageList($hListView, $hImage, 1)
    
    
    ; Add columns
    _GUICtrlListView_InsertColumn($hListView, 0, "Column 1", 100)
    _GUICtrlListView_InsertColumn($hListView, 1, "Column 2", 100)
    _GUICtrlListView_InsertColumn($hListView, 2, "Column 3", 100)
    
    
    ; Add items
    _GUICtrlListView_AddItem($hListView, "Row 1: Col 1", 0)
    _GUICtrlListView_AddSubItem($hListView, 0, "Row 1: Col 2", 1)
    _GUICtrlListView_AddSubItem($hListView, 0, "Row 1: Col 3", 2)
    _GUICtrlListView_AddItem($hListView, "Row 2: Col 1", 1)
    _GUICtrlListView_AddSubItem($hListView, 1, "Row 2: Col 2", 1)
    _GUICtrlListView_AddItem($hListView, "Row 3: Col 1", 2)
    GUISetState()
    
    
    ;
    $hProc = DllCallbackRegister('_WinProc', 'ptr', 'hwnd;uint;wparam;lparam')         ; == hier registriere ich die Funktion "_WinProc" als Callback, Returntype ist "ptr", Parametertypen
    $hHook = _WinAPI_SetWindowLong($hGui, $GWL_WNDPROC, DllCallbackGetPtr($hProc))     ; == hier wird dem Fenster die Adresse der Callback-Prozedur übergeben, diese ersetzt jetzt die Standard-Window-Prozedur
    
    
    GUIRegisterMsg($WM_NOTIFY, 'WM_NOTIFY')
    
    
    
    
    While GUIGetMsg() <> -3
        Sleep(10)
    WEnd
    
    
    _WinAPI_SetWindowLong($hGui, $GWL_WNDPROC, $hHook)                                 ; == nach Programmende: originale WinProc wiederherstellen
    DllCallbackFree($hProc)
    
    
    Func _WinProc($hWnd, $iMsg, $iwParam, $ilParam)                                    ; == die Prozedur soll ausschließlich WM_NOTIFY auswerten
    	; wenn nicht die gewünschte Msg kommt - Rückgabe an System                     ; == andere Messages werden gleich durchgereicht ans System zur Auswertung
        If $iMsg <> $WM_NOTIFY Then Return _WinAPI_CallWindowProc($hHook, $hWnd, $iMsg, $iwParam, $ilParam)
    
    
        Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $hWndListView, $tInfo
        $hWndListView = $hListView
        If Not IsHWnd($hListView) Then $hWndListView = GUICtrlGetHandle($hListView)
    
    
        $tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
        $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
        $iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
        $iCode = DllStructGetData($tNMHDR, "Code")
        Switch $hWndFrom
            Case $hWndListView
                Switch $iCode
                    Case $LVN_COLUMNCLICK ; A column was clicked                       ; == Ich möchte nicht, dass diese Msg verwertet werden kann und verwerfe sie
                        $tInfo = DllStructCreate($tagNMLISTVIEW, $ilParam)
    					ConsoleWrite('MyProc: $LVN_COLUMNCLICK -->Column: ' & DllStructGetData($tInfo, "SubItem") & @CRLF)
    					Return 0 ; <== Nachricht wird jetzt verworfen und kann über GUIRegisterMsg nicht verwertet werden
    
    
                    Case $NM_CLICK                                                     ; == Diese Msg lasse ich durch ans System
                        $tInfo = DllStructCreate($tagNMITEMACTIVATE, $ilParam)
    					ConsoleWrite("MyProc: $NM_CLICK " & "-->Index: " & DllStructGetData($tInfo, "Index") & _
    											"  -->SubItem: " & DllStructGetData($tInfo, "SubItem") & @CRLF)
                EndSwitch
        EndSwitch
    	; jetzt wird die normale WinProc aufgerufen, die man mit GuiRegisterMsg auswerten kann
        Return _WinAPI_CallWindowProc($hHook, $hWnd, $iMsg, $iwParam, $ilParam)
    EndFunc   ;==>_WinProc
    
    
    
    
    Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
    	Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $hWndListView
    	$hWndListView = $hListView
    	If Not IsHWnd($hListView) Then $hWndListView = GUICtrlGetHandle($hListView)
    	$tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
    	$hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
    	$iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
    	$iCode = DllStructGetData($tNMHDR, "Code")
    	Switch $hWndFrom
    		Case $hWndListView
    			Switch $iCode
    				Case $LVN_COLUMNCLICK ; A column was clicked <== Diese Nachricht erreicht die Funktion nicht mehr
    					Local $tInfo = DllStructCreate($tagNMLISTVIEW, $ilParam)
    					ConsoleWrite('GUIRegisterMsg: $LVN_COLUMNCLICK -->Column: ' & DllStructGetData($tInfo, "SubItem") & @CRLF)
    				Case $NM_CLICK ; Sent by a list-view control when the user clicks an item with the left mouse button
    					Local $tInfo = DllStructCreate($tagNMITEMACTIVATE, $ilParam)
    					ConsoleWrite("GUIRegisterMsg: $NM_CLICK " & "-->Index: " & DllStructGetData($tInfo, "Index") & _
    											"  -->SubItem: " & DllStructGetData($tInfo, "SubItem") & @CRLF)
    			EndSwitch
    	EndSwitch
    	Return 0
    EndFunc   ;==>WM_NOTIFY
    Alles anzeigen


    Edit:

    Und hier findest du das Prinzip in einer UDF angewendet: https://autoit.de/index.php/Thre…8292#post258292

  • GuiTreeview2Style

    • BugFix
    • 27. Dezember 2016 um 16:11

    Das Problem des Änderns eines Treeview-Styles On-The-Fly hatte ich in diesem Thread behandelt.
    Meine Lösung habe ich nun UDF-gerecht aufgearbeitet und stelle sie euch hiermit zur Verfügung.
    Es werden 2 Treeview an derselben Position erstellt mit unterschiedlichen Styles. Das Treeview mit Style_2 ist beim Start versteckt. Mit der Swap-Funktion kann zwischen den Styles hin- und hergeschaltet werden. Dabei werden die Inhalte aus dem zuletzt angezeigten Treeview ausgelesen und in das anzuzeigende Treeview übertragen. Somit ist gesichert, dass im Einsatz stattfindende Änderungen des Treeview-Inhalts auch erhalten bleiben beim Wechsel des Styles.

    Beim Erstellen des (bzw. der) Treeview wird ein Array zurückgegeben. An Array[0] ist immer die ID des gerade sichtbaren Treeview. Die Arrayvariable [0] sollte nicht in einer Einzelvariable geführt werden, da die Zuordnung nur bis zum Swap stimmt (oder es wird auch jedesmal die Variable neu zugewiesen).

    GuiTreeview2Style.au3
    AutoIt
    ;-- TIME_STAMP   2016-12-27 14:39:10   v 0.1
    
    
    #include-once
    #include <GUIConstantsEx.au3>
    #include <GuiTreeView.au3>
    
    
    
    
    ; #FUNCTION# ====================================================================================================================
    ; Name ..........: _GUICtrl_TreeView2Style_Create
    ; Description ...: Creates 2 treeview with different styles at the same position, to swap the style on-the-fly
    ; Syntax ........: _GUICtrl_TreeView2Style_Create($x, $y, $w, $h, $iStyle_1, $iStyle_2[, $iStyleEx_1=-1[, $iStyleEx_2=-1]])
    ; Parameters ....: $x           x-Position
    ; ...............: $y           y-Position
    ; ...............: $w           width
    ; ...............: $h           height
    ; ...............: $iStyle_1    1st style
    ; ...............: $iStyle_2    2nd style
    ; ...............: $iStyleEx_1  1st extended style
    ; ...............: $iStyleEx_2  2nd extended style
    ; Return values .: Array [current ID, ID ctrl style_1, ID ctrl style_2, index current ID]
    ; Author ........: BugFix ( AutoIt@bug-fix.info )
    ;================================================================================================================================
    Func _GUICtrl_TreeView2Style_Create($x, $y, $w, $h, $iStyle_1, $iStyle_2, $iStyleEx_1=-1, $iStyleEx_2=-1)
    	Local $aID[4] = [ _
    	0, _                                                             ; current Ctrl ID
    	GUICtrlCreateTreeView($x, $y, $w, $h, $iStyle_1, $iStyleEx_1), _ ; with Style 1
    	GUICtrlCreateTreeView($x, $y, $w, $h, $iStyle_2, $iStyleEx_2), _ ; with Style 2
    	1]                                                               ; current Ctrl Index
    	GUICtrlSetState($aID[2], 32)                                     ; $GUI_HIDE Style 2
    	$aID[0] = $aID[1]                                                ; assign current Ctrl ID
    	Return $aID
    EndFunc  ;==>_GUICtrl_TreeView2Style_Create
    
    
    ; #FUNCTION# ====================================================================================================================
    ; Name ..........: _GUICtrl_TreeView2Style_Swap
    ; Description ...: Swaps between the two treeview created with _GUICtrl_TreeView2Style_Create()
    ; Syntax ........: _GUICtrl_TreeView2Style_Swap($aID[, $fReFill=True])
    ; Parameters ....: $aID         Returned array from _GUICtrl_TreeView2Style_Create()
    ; ...............: $fReFill     True (Default): copy all item from last active to current active treeview
    ; Return values .: none
    ; Author ........: BugFix ( AutoIt@bug-fix.info )
    ;================================================================================================================================
    Func _GUICtrl_TreeView2Style_Swap(ByRef $aID, $fReFill=True)
    	Local $fromIndex = $aID[3]
    	Local $fromID = $aID[$fromIndex]
    	Local $toID = ($fromIndex = 1) ? $aID[2] : $aID[1]
    	If $fReFill Then
    		Local $aItemOrder = _GUICtrlTreeView_GetItemOrder($fromID, False)
    		If Not @error Then
    			_GUICtrlTreeView_FillFromOrderArray($toID, $aItemOrder)
    		EndIf
    	EndIf
    	GUICtrlSetState($aID[0], $GUI_HIDE)
    	$aID[0] = $aID[(($aID[3] = 1) ? 2 : 1)]
    	GUICtrlSetState($aID[0], $GUI_SHOW)
    	$aID[3] = ($aID[3] = 1) ? 2 : 1
    EndFunc  ;==>_GUICtrl_TreeView2Style_Swap
    
    
    
    
    ; #FUNCTION# ====================================================================================================================
    ; Name ..........: _GUICtrlTreeView_GetItemOrder
    ; Description ...: Reads all treeview item with a related order-string into a string (Default) or array
    ; ...............: The order string corresponds to the number of item occurrences in its level
    ; ...............: The first item in level 1 gets "1" (the root), its siblings gets "2", "3" and so on
    ; ...............: Children from item "1" gets "1.1", "1.2" ... "1.n"
    ; ...............: Children from item "2" gets "2.n+1", "2.n+2" ... and so also for all level
    ; Syntax ........: _GUICtrlTreeView_GetItemOrder($_hWnd[, $_bString = True[, $_sDelim = -1]])
    ; Parameters ....: $_hWnd       Treeview handle
    ; ...............: $_bString    1 (Default): Output as string "order-number DELIMITER item-text CRLF", 0 returns an array
    ; ...............: $_sDelim     -1 (Default): Char from Opt(GUIDataSeparatorChar)
    ; Return values .: Success      String to store item with their order to file or
    ; ...............:              Array [[item-handle, order-number, item-text]]
    ; Author ........: BugFix ( AutoIt@bug-fix.info )
    ;================================================================================================================================
    Func _GUICtrlTreeView_GetItemOrder($_hWnd, $_bString=True, $_sDelim=-1)
    	If $_sDelim = -1 Then $_sDelim = Opt("GUIDataSeparatorChar")
    	Local $iCount = _GUICtrlTreeView_GetCount($_hWnd)
    	If $iCount = 0 Then Return SetError(1,0,0)
    	Local $hItem = _GUICtrlTreeView_GetFirstItem($_hWnd)
    	Local $aItem[$iCount][3] = [[$hItem, '1', _GUICtrlTreeView_GetText($_hWnd, $hItem)]]
    	__GetItemArray($_hWnd, $hItem, $aItem)
    	If Not $_bString Then Return $aItem
    	Local $sRet = ''
    	For $i = 0 To UBound($aItem) -1
    		$sRet &= $aItem[$i][1] & $_sDelim & $aItem[$i][2] & @CRLF
    	Next
    	Return $sRet
    EndFunc  ;==>_GUICtrlTreeView_GetItemOrder
    
    
    ; #FUNCTION# ====================================================================================================================
    ; Name ..........: _GUICtrlTreeView_FillFromOrderArray
    ; Description ...: Creates treeview item related to the stored order
    ; ...............: The order string corresponds to the number of item occurrences in its level
    ; ...............: The first item in level 1 has "1" (the root), its siblings has "2", "3" and so on
    ; ...............: Children from item "1" has "1.1", "1.2" ... "1.n"
    ; ...............: Children from item "2" has "2.n+1", "2.n+2" ... and so also for all level
    ; Syntax ........: _GUICtrlTreeView_FillFromOrderArray($_hWnd, $_aItem, [$_fDelete=True])
    ; Parameters ....: $_hWnd       Treeview handle
    ; ...............: $_aItem      Return from _GUICtrlTreeView_GetItemOrder()
    ; ...............: $_fDelete    True (Default): Deletes all Item before filling
    ; Return values .: none
    ; Author ........: BugFix ( AutoIt@bug-fix.info )
    ;================================================================================================================================
    Func _GUICtrlTreeView_FillFromOrderArray($_hWnd, $_aItem, $_fDelete=True)
    	Local $n = 1, $aTree[UBound($_aItem)+1][2] = [[UBound($_aItem)]]  ; == [[Handle-Item, sOrder]]
    	Local $sOrderParent
    	_GUICtrlTreeView_BeginUpdate($_hWnd)
    	If $_fDelete Then _GUICtrlTreeView_DeleteAll($_hWnd)
    	For $i = 0 To UBound($_aItem) -1
    		$sOrderParent = __GetParentOrderNumber($_aItem[$i][1])
    		Switch $sOrderParent
    			Case ''
    				$aTree[$n][0] = _GUICtrlTreeView_Add($_hWnd, 0, $_aItem[$i][2])
    			Case Else
    				For $j = 1 To $n -1
    					If $aTree[$j][1] = $sOrderParent Then
    						$aTree[$n][0] = _GUICtrlTreeView_AddChild($_hWnd, $aTree[$j][0], $_aItem[$i][2])
    						ExitLoop
    					EndIf
    				Next
    		EndSwitch
    		$aTree[$n][1] = $_aItem[$i][1]     ; == sOrder
    		$n += 1
    	Next
    	_GUICtrlTreeView_EndUpdate($_hWnd)
    EndFunc  ;==>_GUICtrlTreeView_FillFromOrderArray
    
    
    Func __GetItemArray($_hWnd, $_hParent, ByRef $_aItem)
    	Local $aLevel[256] = [1], $iIndex = 1
    	Local $hItem = _GUICtrlTreeView_GetNext($_hWnd, $_hParent)
    	While $hItem <> 0
    		$_aItem[$iIndex][0] = $hItem
    		$_aItem[$iIndex][1] = __OrderNumber($aLevel, _GUICtrlTreeView_Level($_hWnd, $hItem))
    		$_aItem[$iIndex][2] = _GUICtrlTreeView_GetText($_hWnd, $hItem)
    		$iIndex += 1
    		$hItem = _GUICtrlTreeView_GetNext($_hWnd, $hItem)
    	WEnd
    EndFunc  ;==>__GetItemArray
    
    
    Func __OrderNumber(ByRef $_aLevel, $_iLevel)
    	$_aLevel[$_iLevel] += 1
    	Local $sOrder = ''
    	For $i = 0 To $_iLevel
    		$sOrder &= $_aLevel[$i] & '.'
    	Next
    	Return StringTrimRight($sOrder, 1)
    EndFunc  ;==>__OrderNumber
    
    
    Func __GetParentOrderNumber($_sOrder)
    	If $_sOrder = '1' Then Return ''
    	Local $iPos = StringInStr($_sOrder, '.', 1, -1)
    	Return StringLeft($_sOrder, $iPos -1)
    EndFunc  ;==>__GetParentOrderNumber
    Alles anzeigen
    GuiTreeview2Style_Bsp.au3
    AutoIt
    ;-- TIME_STAMP   2016-12-27 15:34:55
    
    
    #include <GuiTreeview2Style.au3>
    #include <WindowsConstants.au3>
    
    
    Global $iStyle = BitOR($TVS_EDITLABELS, $TVS_HASBUTTONS, $TVS_HASLINES, $TVS_LINESATROOT, $TVS_DISABLEDRAGDROP, $TVS_SHOWSELALWAYS)
    Global $iStyleCheck = BitOR($iStyle, $TVS_CHECKBOXES)
    Global $iStyleEx = BitOR($WS_EX_COMPOSITED, $WS_EX_CLIENTEDGE)
    
    
    $hGui = GUICreate('')
    $aID = _GUICtrl_TreeView2Style_Create(10, 10, 200, 350, $iStyle, $iStyleCheck, $iStyleEx, $iStyleEx)
    #cs
    Sollen weitere Settings für das Treeview erforderlich sein (Color, Backcolor etc.) sind diese
    bei beiden Treeview ($aID[1], $aID[2]) vorzunehmen.
    $aID[0] enthält immer die ID des gerade verwendeten Treeview.
    #ce
    $cSwap = GUICtrlCreateButton('SwapStyle', 10, 370, 100, 20)
    
    
    GUISetState()
    
    
    _FillTreeview($aID[0])
    
    
    While 1
    	Switch GUIGetMsg()
    		Case -3
    			Exit
    		Case $cSwap
    			_GUICtrl_TreeView2Style_Swap($aID)
    			_Expand_Show1st($aID[0])
    	EndSwitch
    WEnd
    
    
    Func _FillTreeview($Ctrl)
    	Local $hParent, $hChild
    	For $i = 1 To Random(15, 25, 1)
    		$hParent = _GUICtrlTreeView_Add($Ctrl, 0, $i)
    		For $j = 1 To Random(3, 5, 1)
    			$hChild = _GUICtrlTreeView_AddChild($Ctrl, $hParent, $i & '_' & $j)
    			For $k = 1 To Random(1, 3, 1)
    				_GUICtrlTreeView_AddChild($Ctrl, $hChild, $i & '_' & $j & '_' & $k)
    			Next
    		Next
    	Next
    	_Expand_Show1st($Ctrl)
    EndFunc  ;==>_FillTreeview
    
    
    Func _Expand_Show1st($_hWnd)
    	_GUICtrlTreeView_Expand($_hWnd)
    	_GUICtrlTreeView_SelectItem($_hWnd, _GUICtrlTreeView_GetFirstItem($_hWnd))
    EndFunc
    Alles anzeigen

    Dateien

    GuiTreeview2Style.au3 7,91 kB – 265 Downloads GuiTreeview2Style_Bsp.au3 1,5 kB – 279 Downloads
  • Treeview Style wechseln

    • BugFix
    • 25. Dezember 2016 um 17:52

    Habe jetzt eine On-The-Fly-Lösung gebastelt. Ich erstelle zwei Treeview mit den Styles und blende bei Stylewechsel das andere Treeview ein und fülle es mit den Item, die ich in einem Array vorhalte.

    AutoIt
    #include <WinAPI.au3>
    #include <WindowsConstants.au3>
    #include <GuiTreeView.au3>
    
    
    Global $iStyle = BitOR($TVS_EDITLABELS, $TVS_HASBUTTONS, $TVS_HASLINES, $TVS_LINESATROOT, $TVS_DISABLEDRAGDROP, $TVS_SHOWSELALWAYS)
    Global $iStyleCheck = BitOR($iStyle, $TVS_CHECKBOXES)
    Global $iStyleEx = BitOR($WS_EX_COMPOSITED, $WS_EX_CLIENTEDGE)
    Global $fSwapped = False, $Ctrl
    Global $aValues = _CreateValueArray()
    
    
    $hGui = GUICreate('')
    $cTreeview1 = GUICtrlCreateTreeView(10, 10, 200, 200, $iStyle, $iStyleEx)
    $cTreeview2 = GUICtrlCreateTreeView(10, 10, 200, 200, $iStyleCheck, $iStyleEx)
    GUICtrlSetState(-1, $GUI_HIDE)
    $cSwap = GUICtrlCreateButton('SwapStyle', 10, 230, 100, 20)
    $Ctrl = $cTreeview1
    
    
    GUISetState()
    
    
    _FillTreeview($Ctrl)
    
    
    While 1
    	Switch GUIGetMsg()
    		Case -3
    			Exit
    		Case $cSwap
    			GUICtrlSetState($Ctrl, $GUI_HIDE)
    			If Not $fSwapped Then
    				$Ctrl = $cTreeview2
    			Else
    				$Ctrl = $cTreeview1
    			EndIf
    			_FillTreeview($Ctrl)
    			GUICtrlSetState($Ctrl, $GUI_SHOW)
    			$fSwapped = Not $fSwapped
    	EndSwitch
    WEnd
    
    
    Func _FillTreeview($Ctrl)
    	_GUICtrlTreeView_DeleteAll($Ctrl)
    	For $i = 0 To UBound($aValues) -1
    		$r = GUICtrlCreateTreeViewItem($aValues[$i], $Ctrl)
    	Next
    EndFunc
    
    
    Func _CreateValueArray()
    	Local $a[20]
    	For $i = 0 To 19
    		$a[$i] = 'Item ' & $i+1
    	Next
    	Return $a
    EndFunc
    Alles anzeigen
  • Treeview Style wechseln

    • BugFix
    • 23. Dezember 2016 um 16:27

    Ich steh gerade auf dem Schlauch. Eigentlich sollte der folgende Code beim Treeview umschalten zwischen Ansicht mit und ohne Checkbox-Style.
    Aber das Treeview "friert" ein statt den Style zu ändern. Wo liegt der Hase im Pfeffer?

    AutoIt
    #include <WinAPI.au3>
    #include <TreeViewConstants.au3>
    
    
    Global $iStyle = BitOR($TVS_EDITLABELS, $TVS_HASBUTTONS, $TVS_HASLINES, $TVS_LINESATROOT, $TVS_DISABLEDRAGDROP, $TVS_SHOWSELALWAYS)
    Global $iStyleEx = BitOR($WS_EX_COMPOSITED, $WS_EX_CLIENTEDGE)
    Global $fSwapped = False
    
    
    $hGui = GUICreate('')
    $cTreeview = GUICtrlCreateTreeView(10, 10, 200, 200, $iStyle, $iStyleEx)
    $hTreeview = GUICtrlGetHandle($cTreeview)
    $cSwap = GUICtrlCreateButton('SwapStyle', 10, 230, 100, 20)
    
    
    GUISetState()
    
    
    For $i = 1 To 20
    	GUICtrlCreateTreeViewItem('Item ' & $i, $cTreeview)
    Next
    
    
    While 1
    	Switch GUIGetMsg()
    		Case -3
    			Exit
    		Case $cSwap
    			If Not $fSwapped Then
    				$iStyle = BitOR($iStyle, $TVS_CHECKBOXES)
    			Else
    				$iStyle = BitXOR($iStyle, $TVS_CHECKBOXES)
    			EndIf
    			_WinAPI_SetWindowLong($hTreeview, $GWL_STYLE, $iStyle)
    			_WinAPI_RedrawWindow($hTreeview)
    			$fSwapped = Not $fSwapped
    	EndSwitch
    WEnd
    Alles anzeigen
  • SciTE - Variablen- und Funktions- Tipp (CallTipp oder Konsolenausgabe) per HotKey od. Kontextmenü, Suche nach Variable [v0.11]

    • BugFix
    • 20. Dezember 2016 um 19:47
    Zitat von Bitnugger

    Den Fehler, wenn das Caret am Ende einer Zeile steht, hast du aber immer noch drin...

    Ich muss ja auch noch was für Weihnachten übrig lassen... :rofl:

  • SciTE - Variablen- und Funktions- Tipp (CallTipp oder Konsolenausgabe) per HotKey od. Kontextmenü, Suche nach Variable [v0.11]

    • BugFix
    • 18. Dezember 2016 um 11:14

    Eine kleine Änderung, die die Funktionen in ein extra Skript auslagert: TipTools.lua v0.1 v0.2

    Das Skript muss in der SciTEStartup.lua geladen werden (wie das geht, steht im Startpost) und stellt folgende Funktionen bereit:
    VarGetTip() [Aufruf von VariableGetTip('v') ]
    VarByTip() [Aufruf von VariableGetTip('s') ]

    Somit ändert sich der Aufruf bei Euren Hotkeys zu:
    command.39.*.au3=dostring TipTools:VarGetTip()
    bzw.
    command.40.*.au3=dostring TipTools:VarByTip()

    Die command-Nummern sind natürlich anzupassen.

    Ergänzt wurde in der Version, dass der ToolTip geschlossen werden kann mit:
    - allen Pfeiltasten
    - Leertaste
    - Enter
    - Esc
    die Cursorposition ändert sich dabei nicht.
    Wer nicht all die Tasten dafür nutzen möchte, kann das entsprechende Table anpassen:
    tEscEquivalent = {[13]=true, [27]=true, [32]=true, [37]=true, [38]=true, [39]=true, [40]=true} -- Enter, Esc, Space, Arrows: left, up, right, down
    Wobei Esc generell gültig ist und ebenso wie Pfeil auf/ab nicht entfernt werden darf.

    EDIT 2017-01-17:
    GEFIXED - Fehler bei Cursorposition am Zeilenende
    NEU - Erkennung mehrere Funktionen in einer Zeile ( z.B. If _UserFunc_A() = _UserFunc_B() Then MsgBox(0, '', 'Bla') )

    Und hier das Skript:

    TipTools v0.2
    Code
    -- TIME_STAMP   2017-01-17 12:34:43   v 0.2
    
    
    ----------------------------------------------------------------------------------------------------
    TipTools = {}
    fCallTipShow = false
    
    
    EvtUserlistTip = EventClass:new(Common)
    EvtKeyWhileTipShow = EventClass:new(Common)
    
    
    -- alternative <Esc> key-code definition for closing Tip
    -- <Esc> needs to be declared too, for resetting the variable "fCallTipShow"
    -- default key processing is avoiding
    tEscEquivalent = {[13]=true, [27]=true, [32]=true, [37]=true, [38]=true, [39]=true, [40]=true}  -- Enter, Esc, Space, Arrows: left, up, right, down
    ----------------------------------------------------------------------------------------------------
    
    
    -- Event Select Userlist (Search Variable by Tip)
    function EvtUserlistTip:OnUserListSelection(_id, _str)
    	if _id ~= 99 then return false end
    	local iFirst = _str:find('[\.\.\.]') +3
    	local iLast = _str:find('[\.\.\.]', iFirst +1) -1
    	local var = _str:sub(iFirst,iLast)
    	editor:ReplaceSel(var)
    	return false
    end
    
    
    -- Event Key while CallTip is shown
    function EvtKeyWhileTipShow:OnKey(_keycode, _shift, _ctrl, _alt)
    	if fCallTipShow then
    		if tEscEquivalent[_keycode] then   -- one of the alternative key code
    			fCallTipShow = false
    			scite.SendEditor(SCI_CANCEL)   -- send <Esc>
    			return true                    -- avoids default processing
    		end
    	end
    end
    ----------------------------------------------------------------------------------------------------
    
    
    do
    	----------------------------------------------------------------------------------------------------
    	local VariableGetTip = function(_param)
    		if props['FileExt']:upper() ~= 'AU3' then return end
    		local GetVarFromCursor = function()
    			local caret = editor.CurrentPos
    			if editor.StyleAt[caret] ~= 9 then if editor.StyleAt[caret-1] ~= 9 then return '', caret end end
    			local iStart, iEnd, iPos, iEnd2, fBrace, sDebugAU3 = caret, caret, nil, nil, false, ''
    			local iLine = editor:LineFromPosition(iStart)
    			local iZero = editor:PositionFromLine(iLine)
    			local iCol = iStart - iZero
    			local sLine = editor:GetLine(iLine)
    			local sRight = Trim(sLine, iCol)
    			iStart = iCol
    			while sLine:sub(iStart,iStart):find('[$a-zA-Z0-9_]') do iStart = iStart -1 end
    			iEnd = iStart +1
    			iStart = iStart +1
    			while sLine:sub(iEnd,iEnd):find('[$a-zA-Z0-9_]') do sDebugAU3 = sDebugAU3..sLine:sub(iEnd,iEnd) iEnd = iEnd +1 end
    			return sDebugAU3, caret
    		end -- GetVarFromCursor()
    
    
    		local GetFuncFromCursor = function()
    			local iCaret = editor.CurrentPos
    			local sFunc
    			local sLine = editor:GetLine(editor:LineFromPosition(iCaret))
    
    
    			local tLineFunc = {}
    			for s, func, _, e in sLine:gmatch('()([%w_]+)()%s*%b()()') do
    				table.insert(tLineFunc, {['s']=s,['e']=e,['func']=func})
    			end
    			if #tLineFunc == 0 then return '' end
    			local iCol = editor.Column[iCaret] +1
    			for i=1, #tLineFunc do
    				if iCol >= tLineFunc[i]['s'] and iCol <= tLineFunc[i]['e'] then return tLineFunc[i]['func'], iCaret end
    			end
    			return ''
    		end -- GetFuncFromCursor()
    
    
    		local Output = function(sText1, sText2)
    			if tonumber(props['Variable.Tipp.CallTip.*.au3']) == 1 then
    				if sText2 ~= nil then sText1 = sText1..'\n'..sText2:gsub('\\n', '\n') end
    				fCallTipShow = true
    				editor:CallTipShow(editor.CurrentPos, sText1)
    			else
    				print('!> '..sText1)
    				if sText2 ~= nil then print('>> '..sText2:gsub('\\n', '\n>> ')) end
    			end
    		end -- Output
    
    
    		local GetAllTip = function(_param)
    			local tTip = {}
    			local s = editor:GetText()
    			-- in vorhergehender Zeile deklariert
    			for p, tip in s:gmatch('()\n[\t%s]*;%-1%s*([^\r\n]+)') do
    				local _, _, var = editor:GetLine(editor:LineFromPosition(p) -1):find('(%$[%w_]+)')
    				table.insert(tTip, {var,tip,p,'global'})
    			end
    			-- mit "at"-Tag gesetzter Tipp
    			for p, var, tip in s:gmatch('()\n[\t%s]*;@%s-(%$[%w_]+)%s([^\r\n]+)') do
    				table.insert(tTip, {var,tip,p,'global'})
    			end
    			-- in Region gesetzte Tipps
    			local tReg = {}
    			for p in s:gmatch("()#[Rr]egion %- [Vv]ariablen%-[Tt]ipp") do
    				table.insert(tReg, p)
    			end
    			if table.getn(tReg) > 0 then
    				for i=1,table.getn(tReg) do
    					local line = editor:LineFromPosition(tReg[i])
    					while not editor:GetLine(line):find('#[Ee]nd[Rr]egion') do
    						line = line +1
    						local _, _, var, tip = editor:GetLine(line):find(';%s-(%$[%w_]+)%s([^\r\n]+)')
    						if var then table.insert(tTip, {var,tip,tReg[i],'global'}) end
    					end
    				end
    			end
    			if _param == 'v' then
    				-- Funktionstipps, nur bei Aufruf mit Parameter 'v'
    				for p, tip in s:gmatch('()\n[\t%s]*;%-f%s*([^\r\n]+)') do
    					local _, _, sFunc = editor:GetLine(editor:LineFromPosition(p) -1):find('([%w_]+)%s*%b()')
    					table.insert(tTip, {sFunc,tip,p,sFunc})
    				end
    			end
    			return tTip
    		end -- GetAllTip
    
    
    		local GetFuncs = function()  -- Ermitteln aller Funktionsdeklarationen (Startpos, Endpos, Funktionsname)
    			local tFuncs = {}
    			for iStart, sFunc in editor:GetText():gmatch('()[Ff][Uu][Nn][Cc]%s+([%w_]+)%s*%b()') do
    				local iLine, iEnd = editor:LineFromPosition(iStart)
    				while true do
    					iLine = iLine +1
    					iEnd = editor:GetLine(iLine):find('[Ee][Nn][Dd][Ff][Uu][Nn][Cc]')
    					if iEnd ~= nil then break end
    				end
    				table.insert(tFuncs, {iStart, editor:PositionFromLine(iLine), sFunc})
    			end
    			return tFuncs
    		end -- GetFuncs
    
    
    		if _param == 'v' then
    			local varCurr, varPos = GetVarFromCursor()
    			local fIsFuncTip = false
    			if varCurr == '' then
    				varCurr, varPos = GetFuncFromCursor()
    				if varCurr ~= '' then fIsFuncTip = true end
    			end
    			local tFuncs, tTip, fMatch, fMatchFunc, fInFunc, sFunc, sTip = GetFuncs(), GetAllTip(_param), false, false, false
    
    
    			local GetTip = function(_var, _scope)
    				_scope = _scope or 'global'
    				for i=1,table.getn(tTip) do
    					if tTip[i][1]:lower() == _var:lower() and tTip[i][4] == _scope then return tTip[i][2] end
    				end
    				return nil
    			end -- GetTip
    
    
    			if table.getn(tTip) > 0 and table.getn(tFuncs) > 0 then  -- den Tipps die Funktionen zuordnen
    				for i=1,table.getn(tTip) do
    					for j=1,table.getn(tFuncs) do
    						if tTip[i][3] >= tFuncs[j][1] and tTip[i][3] <= tFuncs[j][2] then
    							tTip[i][4] = tFuncs[j][3]
    							break
    						end
    					end
    				end
    			end
    
    
    			local IsVarInFunc = function(_var, _pos)
    				if table.getn(tFuncs) == 0 then return false, nil end
    				for i=1,table.getn(tFuncs) do
    					if _pos >= tFuncs[i][1] and _pos <= tFuncs[i][2] then
    						return true, tFuncs[i][3]  -- Return: True/False, Funktionsname
    					end
    				end
    				return false, nil
    			end -- IsVarInFunc
    
    
    			if table.getn(tTip) == 0 then
    				Output('Keine Tipps hinterlegt!')
    			else
    				if varCurr == '' then
    					Output('Cursor steht nicht auf einer Variablen\noder einem Funktionsaufruf!')
    				else
    					if not fIsFuncTip then fInFunc, sFunc = IsVarInFunc(varCurr, varPos) end
    					if fInFunc then
    						sTip =  GetTip(varCurr, sFunc)
    						if sTip ~= nil then
    							Output(varCurr..'  [ Local: Func '..sFunc..'() ]', sTip)
    						else
    							sTip =  GetTip(varCurr, 'global')
    							if sTip ~= nil then
    								Output(varCurr..'  [ Global ]', sTip)
    							else
    								Output(varCurr, 'Es ist kein Tipp hinterlegt!')
    							end
    						end
    					elseif fIsFuncTip then
    						sTip =  GetTip(varCurr, varCurr)
    						if sTip ~= nil then
    							Output(varCurr..'( )', sTip)
    						else
    							Output(varCurr..'( )', 'Es ist kein Tipp hinterlegt!')
    						end
    					else
    						sTip =  GetTip(varCurr, 'global')
    						if sTip ~= nil then
    							Output(varCurr..'  [ Global ]', sTip)
    						else
    							Output(varCurr, 'Es ist kein Tipp hinterlegt!')
    						end
    					end
    				end
    			end
    
    
    		elseif _param == 's' then
    			local tTip = GetAllTip(_param)  -- {variable, tipp, position, scope}
    			local sWord = AutoItTools:GetWord()
    			local tFound, sFound, sep, iS, sTipN = {}, '', ';'
    			if sWord:gsub('[%s]+', '') == '' or table.getn(tTip) == 0 then return end
    			local fList = false
    			if props['Userlist.VarGetTip'] == '1' then fList = true end
    			local OutputGrouped = function(_fList)
    				local iMax, sOut, sLineEnd = 0, '', '\n'
    				if _fList then sLineEnd = sep end
    				for i=1,table.getn(tFound) do if tFound[i][2]:len() > iMax then iMax = tFound[i][2]:len() end end
    				for i=1,table.getn(tFound) do sOut = sOut..tFound[i][1]..'...'..tFound[i][2]..('.'):rep(iMax-tFound[i][2]:len()+3)..tFound[i][3]..sLineEnd end
    				return sOut
    			end
    			local SelectCurrentWord = function()
    				local iCaret = editor.CurrentPos
    				local iLine = editor:LineFromPosition(iCaret)
    				local iLine1stPos = editor:PositionFromLine(iLine)
    				local iDiffPos = iCaret - iLine1stPos +1
    				local sLine = editor:GetLine(iLine)
    				local sWord = props["CurrentWord"]
    				if sWord == '' then return end
    				local s, p = sLine:find(sWord)
    				local tMatch = {}
    				while s ~= nil do
    					table.insert(tMatch, {s,p})
    					s, p = sLine:find(sWord, s+1)
    				end
    				if table.getn(tMatch) > 0 then
    					for i=1, table.getn(tMatch) do
    						if iDiffPos >= tMatch[i][1] and iDiffPos <= tMatch[i][2] then
    							editor:SetSel(iLine1stPos-1 +tMatch[i][1], iLine1stPos +tMatch[i][2])
    							break
    						end
    					end
    				end
    			end
    			for i=1,table.getn(tTip) do
    				iS = tTip[i][2]:lower():find(sWord:lower())
    				if iS then
    					sTipN = tTip[i][2]:gsub('\\n', ' \[LINEBREAK\] ')
    					table.insert(tFound, {tTip[i][4], tTip[i][1], sTipN})
    				end
    			end
    			if table.getn(tFound) > 0 then sFound = OutputGrouped(fList) else sFound = 'Kein Tipp mit diesem Begriff vorhanden.' end
    			SelectCurrentWord()
    			if not fList then print(sFound) editor:ReplaceSel('') return end
    			editor.AutoCSeparator = string.byte(sep)
    			editor:UserListShow(99, sFound)
    			editor.AutoCSeparator = string.byte(' ')
    		end
    	end --> VariableGetTip
    	----------------------------------------------------------------------------------------------------
    
    
    	----------------------------------------------------------------------------------------------------
    	local VarGetTip = function() VariableGetTip('v') end
    	local VarByTip  = function() VariableGetTip('s') end
    	----------------------------------------------------------------------------------------------------
    
    
    	----------------------------------------------------------------------------------------------------
    										-- SYNTAX
    	TipTools.VarGetTip = VarGetTip      -- Modul.VarGetTip() or Modul:VarGetTip()
    	TipTools.VarByTip  = VarByTip       -- Modul.VarByTip()  or Modul:VarByTip()
    	----------------------------------------------------------------------------------------------------
    end
    Alles anzeigen

    EDIT:
    Falls ihr bereits die VarGetTip_ListEvent.lua in der Startup-Lua aktiviert habt: BITTE AUFRUF ENTFERNEN! Das ist jetzt im Skript eingebunden.

    Dateien

    TipTools.lua 10,76 kB – 312 Downloads
  • StringRegExp Richtig suchen

    • BugFix
    • 15. Dezember 2016 um 10:31

    Ich vermute, du möchtest Herstellername und den ZUGEHÖRIGEN Herstellernamen in einem Rutsch auslesen.
    Dann poste mal nicht Einzelabschnitte der html, sondern einen/mehrere Blöcke, wo Name und Nummer im Kontext erscheinen. Kannst die Inhalte ja gerne verfremden.

  • Scite für Autoit

    • BugFix
    • 15. Dezember 2016 um 10:19

    Oops - da habe ich mich vertan.

    Du deaktivierst dauerhaft mit fold.margin.width=0.

    Im Gegensatz zu den meisten Properties, wird diese aber erst nach Neustart wirksam!
    Da war ich etwas verpeilt, weil ich meist nur die Startup Lua neu lade. ^^

  • Scite für Autoit

    • BugFix
    • 14. Dezember 2016 um 19:31

    Dann deaktiviere doch das Folding ganz: fold=0

    Parallel habe ich aber mal im SciTE-Forum angefragt, ob das Problem lösbar ist. Mal sehen, was bei raus kommt.

  • Scite für Autoit

    • BugFix
    • 14. Dezember 2016 um 18:35
    Zitat von chip

    Wenn unter "View" den Punkt "Fold Margin" deaktivierst.

    OK, musste erst mal auf englisch umstellen um das zu finden. Eine Property dafür habe ich nicht gefunden. Wenn aber grundsätzlich kein Interesse an Folding besteht, kann ich die Anzeigebreite auf 1 (nicht 0!) setzen und erreiche einen ähnlichen Effekt. - Umschalten auf normal geht dann aber nur, wenn ich die Property händisch zurücksetze.

    fold.margin.width=1
    Standardwert ist: 16

  • Scite für Autoit

    • BugFix
    • 14. Dezember 2016 um 13:08

    Ich verstehe nicht ganz, was du meinst. Das ist ein Switch (Faltung an/aus).
    Möchtest du beim Öffnen einer Datei alle Codefalten eingeklappt haben? Standardmäßig sind alle ausgeklappt.


    Edit:

    Falls beim Öffnen einer Datei diese sofort gefaltet sein sollen, kannst du Folgendes tun:

    Edit2 -- DAS geht einfacher: In die User properties eintragen fold.on.open=1 :D

    - Erstelle die Datei "Toggle.lua" mit folgendem Inhalt


    Code
    Toggle = EventClass:new(Common)
    
    
    function Toggle:OnOpen()
    	scite.MenuCommand(IDM_TOGGLE_FOLDALL)
    end


    Nun musst du diese Datei in der Startup-Lua-Datei ( SciTEStartup.lua ) laden:


    Am Ende eintragen:
    LoadLuaFile("Toggle.lua", "Pfad\\zum\\Ordner-der-Datei\\")
    Wichtig: Backslash im Pfad müssen doppelt sein und der Pfad muss damit abschliessen.


    Nach dem Neustart von SciTE werden Dateien beim Öffnen automatisch gefaltet.

  • Frames per Second richtig messen (Verständnisproblem)

    • BugFix
    • 13. Dezember 2016 um 14:38

    Ihr wißt sicher, dass Grafik nicht meine Hauptkompetenz ist. Aber vom schnöden Verständnis her, ist die Ermittlung der FramesPerSecond doch:
    - Zähle, wie oft meine Oberfläche pro Sekunde neu gezeichnet wird.
    Nun, da Windows uns mit einer Paint-Message beglückt nach jedem Neuzeichnen, würde ich diese Message registrieren und Auswerten.

  • Macro

    • BugFix
    • 12. Dezember 2016 um 19:59

    Was meinst du mit dem Makro? Das Makro (also das, was es tut) oder dessen Ergebnis? Und was soll das im Excel?
    Erkläre mal. - Vielleicht kannst du die MakroBox gebrauchen.

  • Update autoit.de Forum

    • BugFix
    • 11. Dezember 2016 um 11:12

    Wenn es Sicherheitsaspekte erfordern, bleibt wohl keine Wahl.
    Aber bisher führte jede neue Version der Forumssoftware zu einer Verschlechterung des Forums. Sei es durch Nihilation von Daten, der kpl. Zerstörung der PN's beim letzten Update etc. etc.

    Daher: Wenn nicht unbedingt erforderlich, sollten wir die Finger davon lassen - denn: Geköpftes Kind scheut das Fallbeil. :P

  • Maximieren Button "missbrauchen"?

    • BugFix
    • 29. November 2016 um 13:46

    Hier mal ein Bsp. wie man WM per Hook auswertet oder verwirft:

    AutoIt
    ;-- TIME_STAMP   2014-07-30 17:37:42
    
    
    #cs
    	WM_ -Message Hook
    	- Nachricht wird erst in einer eigenen Funktion ausgewertet
    	- dann an das System zurückgegeben (auswertbar mit GUIRegisterMsg)
    	- oder verworfen ("Return 0" nach Msg-Auswertung in _WinProc, s. Zeile 76)
    #ce
    
    
    #include <GuiImageList.au3>
    #include <GuiListView.au3>
    #include <ListViewConstants.au3>
    #include <StructureConstants.au3>
    #include <WinAPI.au3>
    #include <WindowsConstants.au3>
    
    
    ;~ Local Const $GWL_WNDPROC = -4
    
    
    $hGui = GUICreate("Test", 400, 400)
    $hListView = _GUICtrlListView_Create($hGui, "Listview", 10, 10, 380, 380)
    _GUICtrlListView_SetExtendedListViewStyle($hListView, BitOR($LVS_EX_GRIDLINES, $LVS_EX_FULLROWSELECT, $LVS_EX_SUBITEMIMAGES))
    
    
    ; Load images
    $hImage = _GUIImageList_Create()
    _GUIImageList_Add($hImage, _GUICtrlListView_CreateSolidBitMap($hListView, 0xFF0000, 16, 16))
    _GUIImageList_Add($hImage, _GUICtrlListView_CreateSolidBitMap($hListView, 0x00FF00, 16, 16))
    _GUIImageList_Add($hImage, _GUICtrlListView_CreateSolidBitMap($hListView, 0x0000FF, 16, 16))
    _GUICtrlListView_SetImageList($hListView, $hImage, 1)
    
    
    ; Add columns
    _GUICtrlListView_InsertColumn($hListView, 0, "Column 1", 100)
    _GUICtrlListView_InsertColumn($hListView, 1, "Column 2", 100)
    _GUICtrlListView_InsertColumn($hListView, 2, "Column 3", 100)
    
    
    ; Add items
    _GUICtrlListView_AddItem($hListView, "Row 1: Col 1", 0)
    _GUICtrlListView_AddSubItem($hListView, 0, "Row 1: Col 2", 1)
    _GUICtrlListView_AddSubItem($hListView, 0, "Row 1: Col 3", 2)
    _GUICtrlListView_AddItem($hListView, "Row 2: Col 1", 1)
    _GUICtrlListView_AddSubItem($hListView, 1, "Row 2: Col 2", 1)
    _GUICtrlListView_AddItem($hListView, "Row 3: Col 1", 2)
    GUISetState()
    
    
    ;
    $hProc = DllCallbackRegister('_WinProc', 'ptr', 'hwnd;uint;wparam;lparam')         ; == hier registriere ich die Funktion "_WinProc" als Callback, Returntype ist "ptr", Parametertypen
    $hHook = _WinAPI_SetWindowLong($hGui, $GWL_WNDPROC, DllCallbackGetPtr($hProc))     ; == hier wird dem Fenster die Adresse der Callback-Prozedur übergeben, diese ersetzt jetzt die Standard-Window-Prozedur
    
    
    GUIRegisterMsg($WM_NOTIFY, 'WM_NOTIFY')
    
    
    
    
    While GUIGetMsg() <> -3
        Sleep(10)
    WEnd
    
    
    _WinAPI_SetWindowLong($hGui, $GWL_WNDPROC, $hHook)                                 ; == nach Programmende: originale WinProc wiederherstellen
    DllCallbackFree($hProc)
    
    
    Func _WinProc($hWnd, $iMsg, $iwParam, $ilParam)                                    ; == die Prozedur soll ausschlieࠬich WM_NOTIFY auswerten
    	; wenn nicht die gewünschte Msg kommt - Rückgabe an System                     ; == andere Messages werden gleich durchgereicht ans System zur Auswertung
        If $iMsg <> $WM_NOTIFY Then Return _WinAPI_CallWindowProc($hHook, $hWnd, $iMsg, $iwParam, $ilParam)
    
    
        Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $hWndListView, $tInfo
        $hWndListView = $hListView
        If Not IsHWnd($hListView) Then $hWndListView = GUICtrlGetHandle($hListView)
    
    
        $tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
        $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
        $iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
        $iCode = DllStructGetData($tNMHDR, "Code")
        Switch $hWndFrom
            Case $hWndListView
                Switch $iCode
                    Case $LVN_COLUMNCLICK ; A column was clicked                       ; == Ich möchte nicht, dass diese Msg verwertet werden kann und verwerfe sie
                        $tInfo = DllStructCreate($tagNMLISTVIEW, $ilParam)
    					ConsoleWrite('MyProc: $LVN_COLUMNCLICK -->Column: ' & DllStructGetData($tInfo, "SubItem") & @CRLF)
    					Return 0 ; <== Nachricht wird jetzt verworfen und kann über GUIRegisterMsg nicht verwertet werden
    
    
                    Case $NM_CLICK                                                     ; == Diese Msg lasse ich durch ans System
                        $tInfo = DllStructCreate($tagNMITEMACTIVATE, $ilParam)
    					ConsoleWrite("MyProc: $NM_CLICK " & "-->Index: " & DllStructGetData($tInfo, "Index") & _
    											"  -->SubItem: " & DllStructGetData($tInfo, "SubItem") & @CRLF)
                EndSwitch
        EndSwitch
    	; jetzt wird die normale WinProc aufgerufen, die man mit GuiRegisterMsg auswerten kann
        Return _WinAPI_CallWindowProc($hHook, $hWnd, $iMsg, $iwParam, $ilParam)
    EndFunc   ;==>_WinProc
    
    
    
    
    Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
    	Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $hWndListView
    	$hWndListView = $hListView
    	If Not IsHWnd($hListView) Then $hWndListView = GUICtrlGetHandle($hListView)
    	$tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
    	$hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
    	$iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
    	$iCode = DllStructGetData($tNMHDR, "Code")
    	Switch $hWndFrom
    		Case $hWndListView
    			Switch $iCode
    				Case $LVN_COLUMNCLICK ; A column was clicked <== Diese Nachricht erreicht die Funktion nicht mehr
    					Local $tInfo = DllStructCreate($tagNMLISTVIEW, $ilParam)
    					ConsoleWrite('GUIRegisterMsg: $LVN_COLUMNCLICK -->Column: ' & DllStructGetData($tInfo, "SubItem") & @CRLF)
    				Case $NM_CLICK ; Sent by a list-view control when the user clicks an item with the left mouse button
    					Local $tInfo = DllStructCreate($tagNMITEMACTIVATE, $ilParam)
    					ConsoleWrite("GUIRegisterMsg: $NM_CLICK " & "-->Index: " & DllStructGetData($tInfo, "Index") & _
    											"  -->SubItem: " & DllStructGetData($tInfo, "SubItem") & @CRLF)
    			EndSwitch
    	EndSwitch
    	Return 0
    EndFunc   ;==>WM_NOTIFY
    Alles anzeigen
  • Maximieren Button "missbrauchen"?

    • BugFix
    • 29. November 2016 um 13:10

    Du kannst per Hook die Msg abfangen und verwerfen und stattdessen etwas anderes ausführen lassen.
    Einfacher ist es aber ein Popup Window zu nutzen und eine eigene Titelleiste zu gestalten.

  • Besitzt die For-In-Schleife nativ eine Indexvariable analog wie bei For-To?

    • BugFix
    • 28. November 2016 um 08:20

    Man oh man, da bin ich mal ne Woche weg und schon brennt der Baum. :whistling:

    @hevilp
    Die ganze Misere hätte man sich mit der richtigen Frage sparen können. Und Deine Frage war eigentlich:
    Besitzt die For-In-Schleife nativ eine Indexvariable analog wie bei For-To?

    Richtig zu Fragen ist nicht immer einfach, weil man sein Problem auf das Wesentliche herunterbrechen muss. Aber es hilft oft sogar selbst, weil man plötzlich einen anderen Blick auf das Problem erlangt und selbst neue Lösungswege findet.

  • SciTE-AddOn: OwnHotKeys (inkl. Installer) EDIT: neu "DebugAU3.lua"

    • BugFix
    • 15. November 2016 um 17:11

    Änderung für OHKfuncs.lua - bitte selbst einpflegen.

    Eigene Makros anstatt SciTE-Variablen, da diese den Backslash in Pfadangaben nicht escapen.

  • Fenster ohne Titel aber mit bestimmten Text 'abfragen'?

    • BugFix
    • 14. November 2016 um 12:09

    Deine Angaben von Windows Info sind die Zusammenfassung, poste bitte mal ausschliesslich das, was im Suchergebnis für Fenster erscheint.
    Mit der Class läßt sich leider nichts anfangen, das ist die ganz allgemeine Windows-Fenster-Klasse. Also jedes Fenster, das nicht speziell anders zugeordnet wurde, ist Angehöriger dieser Klasse.

    Ein Umweg wäre noch:
    - den Prozeß der Installation verwenden
    - die Fenster, die zu diesem Prozeß gehören ermitteln
    - Texte der Fenster auslesen und mit gesuchtem Text abgleichen
    - wenn gefunden: mit diesem Handle den ControlClick ausführen

  • Fenster ohne Titel aber mit bestimmten Text 'abfragen'?

    • BugFix
    • 14. November 2016 um 10:49

    Probier mal hiermit. Der Suchtext wird als Bestandteil des gesamten im Fenster zu findenden Textes verwendet. Du brauchst also nicht den vollen Text eingeben, sondern nur den relevanten SubText.

    AutoIt
    $hWnd = WinWaitActive('', 'Setup is complete')
    If IsHWnd($hWnd) Then ControlClick($hWnd, '', '[CLASS:Button; INSTANCE:1]')

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™