Jump to content
Sign in to follow this  
JakeJohnson74

Feeling like I am doing this wrong...

Recommended Posts

Ok, so I feel as though I am programming myself into a corner here. 

The code is a mess currently (but it runs) 

First problem: my _ScreenOffset() is basically being call in line: 189 once. This takes one of my many listviews and establishes its position relative to the client. I then use $aLV_Offset in the message loop on the $GUI_EVENT_MOUSEMOVE in an if statement. 

This was the only way I could figure out how to make an imaginary boundary to capture the listview I was dragging from. (any advice here would be  much appreciated) 

Fixed Second related issue: If the user drags the whole GUI I need to update my $aLV_Offset positions and since its called once at the top - that isn't happening. I need a little nudge on how I would do this? Im thinking about registering WM_MOVE? and if the GUI moves - call my function and refresh its location. Just need a confirmation on that I suppose

Third Issue: I have the drag and drop working on the Listview to the Treeview - but if you look at my Drag and Drop functions (line:379  & 400) you'll see if VERY specific to dragging FROM a list view, TO a treeview. 

This is the biggest hurdle right now as I need dynamic Source and Target code. 

case 1: If source = listview  target = treeview

case 2: if source = treeview  target = listview 

There are 7 list views and 2 tree views. So its very important to me that I target the right listview and the right tree view while dragging and dropping both ways and the two controls don't handle drag and drop the same ways. 

So upon getting a successful drag and drop from the listviews to a treeview, I was happy! Then I thought - hmm, now... the treeview to the list view... CRAP! This is NOT written to handle it at all! 

I have used various examples to get this far. For example there is Treeview / Listview drag and drop code example here, but they are static. the example shows the drag and drop functions hard coded to look at one specific control and move data to another specific control. This is simple - I need something more complex. 

In summary - I would like some advice on best practice as I feel like I am getting into a little longer code here and at this point i feel like I put some time into going the wrong direction! haha. 

 

*Edit - Feel free to dump my include you don't have. LOL I removed the code - but didn't remove the include. DatabaseConnect.au3

#Region Includes
#include <winapi.au3>
#include <WinAPIEx.au3>
#include <GuiToolbar.au3>
#include <GuiImageList.au3>
#include <GUIConstants.au3>
#include <GuiConstantsEx.au3>
#include <WindowsConstants.au3>
#include <GUITab.au3>
#include <GuiTreeView.au3>
#include <Constants.au3>
#include <TabConstants.au3>
#include <WinAPIEx.au3>
#include <DatabaseConnect.au3>
#include <TreeViewConstants.au3>
#include <GuiListView.au3>
#include <ListViewConstants.au3>
#include <Misc.au3>
;todo - clean out includes no longer used / remove large includes i can just replace with Const values... 

#EndRegion

GUIRegisterMsg($WM_NOTIFY, "_WM_NOTIFY")

#Region URL ref
;This is a site I used to trial and error finding the Id's for the Icons I wanted.
;http://diymediahome.org/windows-icons-reference-list-with-details-locations-images/
#EndRegion

#Region Vars
;Only Tested on Win7 64 machine
Local $fIconsLoc1 = "imageres.dll"
Local $fIconsLoc2 = "Resources\Icons\Undo.ico"

Global $aStrings[12]
Local $iNew,$iBrowse,$iEdit,$iDelete,$iSave,$iPrint
Global Enum $e_new =1000, $e_edit, $e_delete, $e_save, $e_print, $e_undo
Global $iItem, $cTreeView1, $cTreeView2,$hDll, $pDll, $hProc
Global $hTab1, $hTab2, $hTab3
Global $hItemHover
Global $aHwndFrom, $aHwndTo
Global $hTvItemHover,$hLvItemHover
Global $Debugmode = True
Global $aLV_Offset,$aForm_Offset,$aWin1,$aWin2


; Icon Index from DLL
$iNew = 2
;$iBrowse = 202
$iEdit = 111
$iDelete = 84
$iSave = 23
$iPrint = 46

$iGuiWidth = 1024
$iGUIHeight = 768
$BkColor = 0xf0f0f0

#EndRegion Vars

;Create Form, Toobar and ImageList
$hGui = GUICreate("EDM and CNC Schedule",$iGuiWidth,$iGUIHeight,-1,-1)
GUISetState()

Global $hToolbar1 = _GUICtrlToolbar_Create($hGui)
$imgs = _GUIImageList_Create(32,32,5) ; change first 2 params to Size the icons accordingly.

#Region Toolbar
;Populate Image List
_GUIImageList_AddIcon($imgs, $fIconsLoc1,$iNew,True)
_GUIImageList_AddIcon($imgs, $fIconsLoc1,$iEdit,True)
_GUIImageList_AddIcon($imgs, $fIconsLoc1,$iDelete,True)
_GUIImageList_AddIcon($imgs, $fIconsLoc1,$iSave,True)
_GUIImageList_AddIcon($imgs, $fIconsLoc1,$iPrint,True)
_GUIImageList_AddIcon($imgs, $fIconsLoc2,0,True)

;Add Text to Buttons in Toolbar
$aStrings[0] = _GUICtrlToolbar_AddString($hToolbar1, "&New")
$aStrings[1] = _GUICtrlToolbar_AddString($hToolbar1, "&Edit")
$aStrings[2] = _GUICtrlToolbar_AddString($hToolbar1, "&Delete")
$aStrings[3] = _GUICtrlToolbar_AddString($hToolbar1, "&Save")
$aStrings[4] = _GUICtrlToolbar_AddString($hToolbar1, "&Print")
$aStrings[5] = _GUICtrlToolbar_AddString($hToolbar1, "&Undo")

;Set Imagelist of Toolbar to my ImageList
$t = _GUICtrlToolbar_SetImageList($hToolbar1, $imgs)

;Add buttons to toolbar
$cBtn_New = _GUICtrlToolbar_AddButton($hToolbar1, $e_new, 0,$aStrings[0])
$cBtn_Edit =_GUICtrlToolbar_AddButton($hToolbar1, $e_edit, 1,$aStrings[1])
$cBtn_Delete =_GUICtrlToolbar_AddButton($hToolbar1, $e_delete, 2,$aStrings[2])
$cBtn_Save =_GUICtrlToolbar_AddButton($hToolbar1, $e_save, 3,$aStrings[3])
$cBtn_Print =_GUICtrlToolbar_AddButton($hToolbar1, $e_print, 4,$aStrings[4])
$cBtn_Undo =_GUICtrlToolbar_AddButton($hToolbar1, $e_undo, 5,$aStrings[5])
GUISetState()

#EndRegion Toolbar


#Region Create Tabs
$hGui1 = GUICreate("",$iGuiWidth-8,$iGUIHeight-65,5,60, $WS_POPUP, $WS_EX_MDICHILD,$hgui)
;~ GUISetBkColor(0x00FF00,$hGui1)
; Create top level Tab Items
$hTab1 = GUICtrlCreateTab(0,1,$iGuiWidth-8,$iGUIHeight-65)
$hTab1_0 = GUICtrlCreateTabItem("EDM Schedule")

;cTreeView 1
$cTreeView1  = GUICtrlCreateTreeView(0, 25, 175, 678, BitOR($TVS_HASBUTTONS,  $TVS_HASLINES, $TVS_LINESATROOT, $TVS_SHOWSELALWAYS), $WS_EX_CLIENTEDGE)
GUICtrlSetState(-1, $GUI_DROPACCEPTED)
;Set TreeView Data
$generalitem = GUICtrlCreateTreeViewItem("16012", $cTreeView1)
GUICtrlSetColor(-1, 0x0000C0)
$displayitem = GUICtrlCreateTreeViewItem("16187", $cTreeView1)
GUICtrlSetColor(-1, 0x0000C0)
GUICtrlCreateTreeViewItem("Stripper", $generalitem)
GUICtrlCreateTreeViewItem("Die Plate", $generalitem)
GUICtrlCreateTreeViewItem("Punch String", $generalitem)
GUICtrlCreateTreeViewItem("Die Insert String", $displayitem)
GUICtrlCreateTreeViewItem("Punch Plate", $displayitem)
GUICtrlSetState($generalitem, BitOR($GUI_EXPAND, $GUI_DEFBUTTON)) ; Expand the "General"-item and paint in bold
GUICtrlSetState($displayitem, BitOR($GUI_EXPAND, $GUI_DEFBUTTON)) ; Expand the "Display"-item and paint in bold


;~ GUISetState()
$hTab1_1 = GUICtrlCreateTabItem("CNC Schedule ")


;cTreeView 2
$cTreeView2  = GUICtrlCreateTreeView(0, 25, 175, 678, BitOR($TVS_HASBUTTONS,  $TVS_HASLINES, $TVS_LINESATROOT, $TVS_SHOWSELALWAYS),$WS_EX_CLIENTEDGE)
GUICtrlSetState(-1, $GUI_DROPACCEPTED)
$generalitem = GUICtrlCreateTreeViewItem("15874", $cTreeView2)
GUICtrlSetColor(-1, 0x0000C0)
$displayitem = GUICtrlCreateTreeViewItem("16183", $cTreeView2)
GUICtrlSetColor(-1, 0x0000C0)
GUICtrlCreateTreeViewItem("Punch Plate", $generalitem)
GUICtrlCreateTreeViewItem("Die Plate", $generalitem)
GUICtrlCreateTreeViewItem("Stripper", $generalitem)
GUICtrlCreateTreeViewItem("Die Shoe", $displayitem)
GUICtrlCreateTreeViewItem("Punch Holder", $displayitem)
GUICtrlSetState($generalitem, BitOR($GUI_EXPAND, $GUI_DEFBUTTON)) ; Expand the "General"-item and paint in bold
GUICtrlSetState($displayitem, BitOR($GUI_EXPAND, $GUI_DEFBUTTON)) ; Expand the "Display"-item and paint in bold.

GUICtrlCreateTabItem("")

GUISetState()

;Create Inner GUI to hold the listviews for first tab
$hGuiInner1 = GUICreate("",  834,679, 182,28, $WS_POPUP,$WS_EX_MDICHILD, $hgui1)
$hLabelMask1 = GUICtrlCreateLabel("",89 ,0, 760, 21, BitOR($SS_NOTIFY, $SS_CENTER))
GUICtrlsetBkColor ($hLabelMask1,0xffffff )
$hTab2 = GUICtrlCreateTab(0,0,834,679)
$hTab2_0 = GUICtrlCreateTabItem("Fryer ")
$ListView5 = GUICtrlCreateListView("col1|col2|col3",  0, 20, 833, 658)
$ListView5_0 = GUICtrlCreateListViewItem("Item1", $ListView5)
$ListView5_1 = GUICtrlCreateListViewItem("Item2", $ListView5)
$ListView5_2 = GUICtrlCreateListViewItem("Item3", $ListView5)
$ListView5_3 = GUICtrlCreateListViewItem("Item4", $ListView5)
$hTab2_1 = GUICtrlCreateTabItem("Micron")
$ListView6 = GUICtrlCreateListView("col1|col2|col3",  0, 20, 833, 658)
$ListView6_0 = GUICtrlCreateListViewItem("Item1", $ListView6)
$ListView6_1 = GUICtrlCreateListViewItem("Item2", $ListView6)
$ListView6_2 = GUICtrlCreateListViewItem("Item3", $ListView6)
$ListView6_3 = GUICtrlCreateListViewItem("Item4", $ListView6)
GUICtrlCreateTabItem("")
GUISetState()

;Create Inner GUI to hold the listviews for second tab
$hGuiInner2 = GUICreate("",  834,679, 182,28, $WS_POPUP,$WS_EX_MDICHILD, $hgui1)
$hLabelMask2 = GUICtrlCreateLabel("",264 , 0, 750, 21, BitOR($SS_NOTIFY, $SS_CENTER))
GUICtrlsetBkColor ($hLabelMask2,0xffffff )
$hTab3 = GUICtrlCreateTab(0,0,834,679)
$hTab3_0 = GUICtrlCreateTabItem("Agie V3")
$ListView7 = GUICtrlCreateListView("col1|col2|col3",  0, 20, 833, 658)
$ListView7_0 = GUICtrlCreateListViewItem("Item1", $ListView7)
$ListView7_1 = GUICtrlCreateListViewItem("Item2", $ListView7)
$ListView7_2 = GUICtrlCreateListViewItem("Item3", $ListView7)
$ListView7_3 = GUICtrlCreateListViewItem("Item4", $ListView7)
$hTab3_1 = GUICtrlCreateTabItem("Agie V2")
$ListView8 = GUICtrlCreateListView("col1|col2|col3",  0, 20, 833, 658)
$hTab3_2 = GUICtrlCreateTabItem("Agie V22")
$ListView9 = GUICtrlCreateListView("col1|col2|col3",  0, 20, 833, 658)
$hTab3_3 = GUICtrlCreateTabItem("Agie VP2")
$ListView10 = GUICtrlCreateListView("col1|col2|col3",  0, 20, 833, 658)
$hTab3_4 = GUICtrlCreateTabItem("Progress")
$ListView11 = GUICtrlCreateListView("col1|col2|col3",  0, 20, 833, 658)
GUICtrlCreateTabItem("")
GUISetState()

$aLV_Offset= _ScreenOffset(ControlGetHandle($hGuiInner1,"",$ListView5)) ; just to get the location of all listview (left top width hieght)

#EndRegion End tabs

#Region GUI Message Loop

While 1
    $idMsg = GUIGetMsg()
    Switch $idMsg
        Case $GUI_EVENT_MOUSEMOVE
            if _IsPressed("01") Then
                $aHwndTo = DllCall("user32.dll", "hwnd", "WindowFromPoint", "uint", MouseGetPos(0), "uint", MouseGetPos(1))
                _Drag($aHwndTo[0])
                if MouseGetPos(0) > $aLV_Offset[0] and MouseGetPos(1) > $aLV_Offset[1] and MouseGetPos(0) < $aLV_Offset[2] and MouseGetPos(1) < $aLV_Offset[3] then
                    $aHwndFrom = DllCall("user32.dll", "hwnd", "WindowFromPoint", "uint", MouseGetPos(0), "uint", MouseGetPos(1))
                endif
            endif
        Case $GUI_EVENT_DROPPED
            $aHwndTo = DllCall("user32.dll", "hwnd", "WindowFromPoint", "uint", MouseGetPos(0), "uint", MouseGetPos(1))
            _Drop($aHwndTo[0],$aHwndFrom[0])
        Case $GUI_EVENT_CLOSE
            Exit
        Case $htab1
            Switch GUICtrlRead($htab1)
                Case 0
                    ; Adjust child GUIs accordingly
                    GUISetState(@SW_HIDE, $hGuiInner1)
                    GUISetState(@SW_SHOW, $hGuiInner2)
                Case 1
                    GUISetState(@SW_HIDE, $hGuiInner2)
                    GUISetState(@SW_SHOW, $hGuiInner1)
            EndSwitch
    EndSwitch
WEnd
#EndRegion GUI Message Loop

#Region Functions

; WM_NOTIFY event handler
Func _WM_NOTIFY($hWndGUI, $MsgID, $wParam, $lParam)
    #forceref $hWndGUI, $MsgID, $wParam
    Local $tNMHDR, $event, $hwndFrom, $icode, $i_idNew, $dwFlags, $lResult, $idFrom, $i_idOld, $sButtonName, $hTreeView1, $hTreeView2
    Local $tNMTOOLBAR, $tNMTBHOTITEM
    $tNMHDR = DllStructCreate($tagNMHDR, $lParam)
    $hwndFrom = DllStructGetData($tNMHDR, "hWndFrom")
    $idFrom = DllStructGetData($tNMHDR, "IDFrom")
    $icode = DllStructGetData($tNMHDR, "Code")
    $hTreeview1 = $cTreeView1
    $hTreeview2 = $cTreeView2
    If Not IsHWnd($cTreeView1) Then $hTreeview1 = GUICtrlGetHandle($cTreeView1)
    If Not IsHWnd($cTreeView2) Then $hTreeview2 = GUICtrlGetHandle($cTreeView2)
    Switch $hwndFrom
        Case $hToolbar1
            Switch $icode
                Case $NM_LDOWN
                    ;case for which button was clicked
                    Switch $iItem
                        Case $e_new
                            _button_Click($e_new)
                        Case $e_edit
                            _button_Click($e_edit)
                        Case $e_save
                            _button_Click($e_save)
                        Case $e_delete
                            _button_Click($e_delete)
                        Case $e_print
                            _button_Click($e_print)
                        Case $e_undo
                            _button_Click($e_undo)
                    EndSwitch
                Case $TBN_HOTITEMCHANGE
                    $tNMTBHOTITEM = DllStructCreate($tagNMTBHOTITEM, $lParam)
                    $i_idOld = DllStructGetData($tNMTBHOTITEM, "idOld")
                    $i_idNew = DllStructGetData($tNMTBHOTITEM, "idNew")
                    $iItem = $i_idNew
                    $dwFlags = DllStructGetData($tNMTBHOTITEM, "dwFlags")
            EndSwitch
        Case $hTreeView1, $hTreeView2
;~          Switch $icode
;~              Case $NM_CLICK ; The user has clicked the left mouse button within the control
;~                  _DebugPrint("$NM_CLICK" & @CRLF & "--> hWndFrom:" & @TAB & $hWndFrom & @CRLF & _
;~                          "-->IDFrom:" & @TAB & $iDFrom & @CRLF & _
;~                          "-->Code:" & @TAB & $iCode, $Debugmode)
;~                  ; Return 1 ; nonzero to not allow the default processing
;~                  Return 0 ; zero to allow the default processing
;~              Case $NM_DBLCLK ; The user has double-clicked the left mouse button within the control
;~                  _DebugPrint("$NM_DBLCLK" & @CRLF & "--> hWndFrom:" & @TAB & $hWndFrom & @CRLF & _
;~                          "-->IDFrom:" & @TAB & $iDFrom & @CRLF & _
;~                          "-->Code:" & @TAB & $iCode, $Debugmode)
;~                  ; Return 1 ; nonzero to not allow the default processing
;~                  Return 0 ; zero to allow the default processing
;~              Case $NM_RCLICK ; The user has clicked the right mouse button within the control
;~                  _DebugPrint("$NM_RCLICK" & @CRLF & "--> hWndFrom:" & @TAB & $hWndFrom & @CRLF & _
;~                          "-->IDFrom:" & @TAB & $iDFrom & @CRLF & _
;~                          "-->Code:" & @TAB & $iCode, $Debugmode)
;~                  ; Return 1 ; nonzero to not allow the default processing
;~                  Return 0 ; zero to allow the default processing
;~              Case $NM_RDBLCLK ; The user has double-clicked the right mouse button within the control
;~                  _DebugPrint("$NM_RDBLCLK" & @CRLF & "--> hWndFrom:" & @TAB & $hWndFrom & @CRLF & _
;~                          "-->IDFrom:" & @TAB & $iDFrom & @CRLF & _
;~                          "-->Code:" & @TAB & $iCode, $Debugmode)
;~                  ; Return 1 ; nonzero to not allow the default processing
;~                  Return 0 ; zero to allow the default processing
;~              Case $NM_KILLFOCUS ; control has lost the input focus
;~                  _DebugPrint("$NM_KILLFOCUS" & @CRLF & "--> hWndFrom:" & @TAB & $hWndFrom & @CRLF & _
;~                          "-->IDFrom:" & @TAB & $iDFrom & @CRLF & _
;~                          "-->Code:" & @TAB & $iCode, $Debugmode)
;~                  ; No return value
;~              Case $NM_RETURN ; control has the input focus and that the user has pressed the key
;~                  _DebugPrint("$NM_RETURN" & @CRLF & "--> hWndFrom:" & @TAB & $hWndFrom & @CRLF & _
;~                          "-->IDFrom:" & @TAB & $iDFrom & @CRLF & _
;~                          "-->Code:" & @TAB & $iCode, $Debugmode)
;~                  ; Return 1 ; nonzero to not allow the default processing
;~                  Return 0 ; zero to allow the default processing
;~                  ; Case $NM_SETCURSOR ; control is setting the cursor in response to a WM_SETCURSOR message
;~                  ; Local $tInfo = DllStructCreate($tagNMMOUSE, $lParam)
;~                  ; $hWndFrom = HWnd(DllStructGetData($tInfo, "hWndFrom"))
;~                  ; $iIDFrom = DllStructGetData($tInfo, "IDFrom")
;~                  ; $iCode = DllStructGetData($tInfo, "Code")
;~                  ; _DebugPrint("$NM_SETCURSOR" & @CRLF & "--> hWndFrom:" & @TAB & $hWndFrom & @CRLF & _
;~                  ; "-->IDFrom:" & @TAB & $iIDFrom & @CRLF & _
;~                  ; "-->Code:" & @TAB & $iCode & @CRLF & _
;~                  ; "-->ItemSpec:" & @TAB & DllStructGetData($tInfo, "ItemSpec") & @CRLF & _
;~                  ; "-->ItemData:" & @TAB & DllStructGetData($tInfo, "ItemData") & @CRLF & _
;~                  ; "-->X:" & @TAB & DllStructGetData($tInfo, "X") & @CRLF & _
;~                  ; "-->Y:" & @TAB & DllStructGetData($tInfo, "Y") & @CRLF & _
;~                  ; "-->HitInfo:" & @TAB & DllStructGetData($tInfo, "HitInfo"))
;~                  ; Return 0 ; to enable the control to set the cursor
;~                  ; Return 1 ; nonzero to prevent the control from setting the cursor
;~              Case $NM_SETFOCUS ; control has received the input focus
;~                  _DebugPrint("$NM_SETFOCUS" & @CRLF & "--> hWndFrom:" & @TAB & $hWndFrom & @CRLF & _
;~                          "-->IDFrom:" & @TAB & $iDFrom & @CRLF & _
;~                          "-->Code:" & @TAB & $iCode, $Debugmode)
;~                  ; No return value
;~              Case $TVN_BEGINDRAGA, $TVN_BEGINDRAGW
;~                  _DebugPrint("$TVN_BEGINDRAG", $Debugmode)
;~              Case $TVN_BEGINLABELEDITA, $TVN_BEGINLABELEDITW
;~                  _DebugPrint("$TVN_BEGINLABELEDIT", $Debugmode)
;~              Case $TVN_BEGINRDRAGA, $TVN_BEGINRDRAGW
;~                  _DebugPrint("$TVN_BEGINRDRAG", $Debugmode)
;~              Case $TVN_DELETEITEMA, $TVN_DELETEITEMW
;~                  _DebugPrint("$TVN_DELETEITEM", $Debugmode)
;~              Case $TVN_ENDLABELEDITA, $TVN_ENDLABELEDITW
;~                  _DebugPrint("$TVN_ENDLABELEDIT", $Debugmode)
;~              Case $TVN_GETDISPINFOA, $TVN_GETDISPINFOW
;~                  _DebugPrint("$TVN_GETDISPINFO", $Debugmode)
;~              Case $TVN_GETINFOTIPA, $TVN_GETINFOTIPW
;~                  _DebugPrint("$TVN_GETINFOTIP", $Debugmode)
;~              Case $TVN_ITEMEXPANDEDA, $TVN_ITEMEXPANDEDW
;~                  _DebugPrint("$TVN_ITEMEXPANDED", $Debugmode)
;~              Case $TVN_ITEMEXPANDINGA, $TVN_ITEMEXPANDINGW
;~                  _DebugPrint("$TVN_ITEMEXPANDING", $Debugmode)
;~              Case $TVN_KEYDOWN
;~                  _DebugPrint("$TVN_KEYDOWN", $Debugmode)
;~              Case $TVN_SELCHANGEDA, $TVN_SELCHANGEDW
;~                  _DebugPrint("$TVN_SELCHANGED", $Debugmode)
;~              Case $TVN_SELCHANGINGA, $TVN_SELCHANGINGW
;~                  _DebugPrint("$TVN_SELCHANGING", $Debugmode)
;~              Case $TVN_SETDISPINFOA, $TVN_SETDISPINFOW
;~                  _DebugPrint("$TVN_SETDISPINFO", $Debugmode)
;~              Case $TVN_SINGLEEXPAND
;~                  _DebugPrint("$TVN_SINGLEEXPAND", $Debugmode)
;~          EndSwitch

    EndSwitch
    Return $GUI_RUNDEFMSG
    EndFunc

func _button_Click($btn_ID)
    Switch $btn_ID
        Case $e_new
            _DebugPrint("Clicked New button" & @LF, $Debugmode)
        case $e_edit
            _DebugPrint("Clicked Edit button" & @LF, $Debugmode)
        Case $e_save
            _DebugPrint("Clicked Save button" & @LF, $Debugmode)
        Case $e_delete
            _DebugPrint("Clicked Delete button" & @LF, $Debugmode)
        Case $e_print
            _DebugPrint("Clicked Print button" & @LF, $Debugmode)
        Case $e_undo
            _DebugPrint("Clicked Undo button" & @LF, $Debugmode)
    EndSwitch
endfunc  ;==>_button_Click

Func _TreeItemFromPoint($hWnd)
    Local $tMPos = _WinAPI_GetMousePos(True, $hWnd)
    Return _GUICtrlTreeView_HitTestItem($hWnd, DllStructGetData($tMPos, 1), DllStructGetData($tMPos, 2))
EndFunc ;==>_TreeItemFromPoint

Func _Drag($hWnd)
    $hTvItemHover = _TreeItemFromPoint($hWnd)
    If $hTvItemHover = 0 Then

    Else ;Entered the Treeview
        $aRect = _GUICtrlTreeView_DisplayRect($hWnd, $hTvItemHover)
        $iTreeY = _WinAPI_GetMousePosY(True, $hWnd)
        Switch $iTreeY
            Case $aRect[1] To $aRect[1]+Int(($aRect[3]-$aRect[1])/4)
                _SendMessage($hWnd, $TVM_SELECTITEM, $TVGN_DROPHILITE, 0) ;remove DropTarget
                $fWhere = -1
            Case 1+$aRect[1]+Int(($aRect[3]-$aRect[1])/3) To $aRect[1]+Int(($aRect[3]-$aRect[1])*2/3)
                _SendMessage($hWnd, $TVM_SELECTITEM, $TVGN_DROPHILITE, $hTvItemHover) ;add DropTarget
                $fWhere = 0
            Case 1+$aRect[1]+Int(($aRect[3]-$aRect[1])*2/3) To $aRect[3]
                _SendMessage($hWnd, $TVM_SELECTITEM, $TVGN_DROPHILITE, 0) ;remove DropTarget
                $fWhere = 1
        EndSwitch
    EndIf
EndFunc ;==>_Drag

Func _Drop($hWndTo, $hWndFrom)
    If $hTvItemHover <> 0 Then
        if _WinAPI_GetClassName($hWndFrom) = "SysListView32" then
            ; Get selected item in the listview
            $tmpItemArr = _GUICtrlListView_GetSelectedIndices($hWndFrom, TRUE)
            $tmpItem = _GUICtrlListView_GetItemText($hWndFrom, $tmpItemArr[1])

            ; Get the selected item in the treeview
            $hSelected_Item = _GUICtrlTreeView_GetSelection($hWndTo)

            $myMSG = "Dragged: " & $tmpItem & @CRLF _
            & "Dropped On: " & _GUICtrlTreeView_GetText($hWndTo, $hTvItemHover)
            _DebugPrint(@CRLF & $myMsg,$Debugmode)
            ; Reset drop target
            _SendMessage(GUICtrlGetHandle($hWndTo), $TVM_SELECTITEM, $TVGN_DROPHILITE, 0) ;remove DropTarget
        EndIf
    Else
        MsgBox(0, "", "No drop target")
    EndIf
EndFunc ;==>_Drop

Func _ScreenOffset($hWnd)
    $aWin1 = WinGetPos($hGuiInner1)
    $aWin2 = WinGetPos($hWnd)
    Local $tPoint = DllStructCreate("int X;int Y")
    local $aCoords[4]
    DllStructSetData($tPoint, "X", 0)
    DllStructSetData($tPoint, "Y", 0)
    _WinAPI_ClientToScreen($hWnd, $tPoint)
    DllStructGetData($tPoint, "X")
    DllStructGetData($tPoint, "Y")

    $aCoords[0] = $awin2[0];Left
    $aCoords[1] = $awin2[1];Top
    $aCoords[2] = $awin2[2]+$aCoords[0];Width + left
    $aCoords[3] = $awin2[3]+$aCoords[1];Height + Top

    return $aCoords
EndFunc   ;==>_ScreenOffset

Func _DebugPrint($sText, $isEnabled, $sLine = @ScriptLineNumber)
    if $isenabled then
        ConsoleWrite(">--------------------------------" & @CRLF & _
        "-->Line(" & StringFormat("%04d", $sLine) & "):" & @TAB & $sText & @CRLF & _
        ">--------------------------------" & @CRLF)
    EndIf
EndFunc ;==>_DebugPrint


#EndRegion functions
Edited by JakeJohnson74

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

  • Similar Content

    • By Miliardsto
      I have the following code. You can see there are $color_normal and $color_trans
      In my case normal is too dark . And color trans is to much violet.
      If you run it you will see how its looks. I want gui with listView have the same color like taskbar in windows 10.
      How to achieve that?
       
       
      #include <Date.au3> #include <MsgBoxConstants.au3> #include <GuiListBox.au3> #include <WindowsConstants.au3> #include <GUIConstantsEx.au3> #include <GuiListView.au3> HotKeySet("{ESC}", "Terminate") $color_normal = "0x" & StringLeft(StringRight(RegRead("HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Accent", "AccentPalette"), 24), 6) $color_trans = "0x" & StringLeft(StringRight(RegRead("HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Accent", "AccentPalette"), 16), 6) $trans = RegRead("HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Themes\Personalize", "EnableTransparency") ConsoleWrite("Transpart = " & $trans & @CRLF) ConsoleWrite("Color normal = " & $color_normal & @CRLF) ConsoleWrite("Color trans = " & $color_trans & @CRLF) ConsoleWrite(_Get_taskbar_color()); It return AARRGGBB $taskbarColor = _Get_taskbar_color() Global $gui = GUICreate("Test", 150, 58,@DesktopWidth-300,@DesktopHeight-58,$WS_POPUP,BitOR($WS_EX_TOPMOST, $WS_EX_TOOLWINDOW)) Global $idListview = GUICtrlCreateListView("", 0, 0, 150, 58,BitOR($LBS_NOTIFY,$LBS_SORT), 0) ;_GuiCtrlMakeTrans(-1,100) ; Add column _GUICtrlListView_AddColumn($idListview, "Msgs", 100) GUICtrlSetFont(-1, 7, 400, 0, "Segoe UI") GUICtrlSetColor(-1, 0x470C4F) GUICtrlSetBkColor($idListview, 0x310638) GUISetState() While 1 Switch GUIGetMsg() Case $GUI_EVENT_CLOSE Exit EndSwitch WEnd Func Terminate() Exit EndFunc Func _Get_taskbar_color() If RegRead("HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Themes\Personalize", "ColorPrevalence") Then If RegRead("HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Themes\Personalize", "EnableTransparency") Then Return "0xD9" & StringLeft(StringRight(RegRead("HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Accent", "AccentPalette"), 16), 6) Else Return "0xFF" & StringLeft(StringRight(RegRead("HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Accent", "AccentPalette"), 24), 6) EndIf Else If RegRead("HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Themes\Personalize", "EnableTransparency") Then Return "0xD9000000" Else Return "0xFF000000" EndIf EndIf EndFunc  
    • By Slipk
      Hello everybody,
      #include <GUIConstantsEx.au3> #include <ListViewConstants.au3> #include <WindowsConstants.au3> #include <GUIListViewEx.au3> $Form1 = GUICreate("Form1", 539, 350, 192, 124) $ListView1 = GUICtrlCreateListView("CLM1|CLM2", 0, 0, 538, 326) GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 0, 150) GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 1, 150) Local $dynamic = GUICtrlCreateListViewItem("Example1|Example2", $ListView1) $SubMenu = GUICtrlCreateContextMenu($dynamic) $Run = GUICtrlCreateMenuItem("Run", $SubMenu) $Edit = GUICtrlCreateMenuItem("Edit", $SubMenu) $Delete = GUICtrlCreateMenuItem("Delete", $SubMenu) Local $dynamic2 = GUICtrlCreateListViewItem("Example3|Example6", $ListView1) $SubMenu = GUICtrlCreateContextMenu($dynamic2) $Run = GUICtrlCreateMenuItem("Run", $SubMenu) $Edit = GUICtrlCreateMenuItem("Edit", $SubMenu) $Delete = GUICtrlCreateMenuItem("Delete", $SubMenu) _GUIListViewEx_Init($ListView1, "", 0, 0, True, 64) _GUIListViewEx_MsgRegister() GUISetState(@SW_SHOW) While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE Exit EndSwitch WEnd I use GUIListViewEx.au3 for position of items in listview but when I move one the context menu disappear. Any solution of this?
      Any method than array it is possible?
      Thank you, appreciate it.
       
       
    • By Slipk
      Hello everybody,
      I download the GUIListViewEx.au3 by Melba23 in order to move up or down my items from a listview.
      Everything it's looking good in script but when I move an item it will crash.
      Any suggestions?
      Thank you! 

    • By Burgs
      Hello,
        I am having great difficulty with something I would have thought to be fairly easy.  I have an array containing (military) organization strings, similar to this:
      42nd Battalion
       Company A
        1st Platoon
         1st Squad
         2nd Squad
         3rd Squad
        2nd Platoon
         ...1st, 2nd, 3rd Squad
        3rd Platoon
        ...1st, 2nd, 3rd Squad
       Company B
        ...etc...
      I also have an associated array that contains the 'hierarchy' information associated with each string..."0", "1","2", etc   ...therefore using example above the "0" would associate with "42nd Battalion", while "1" would be "Company A", "2" is "1st Platoon", etc.  Each sequential number is a 'child' of the preceding number.  Therefore the information above would appear in the array as "0", "1", "2", "3", "3", "3", "2", "3", "3", "3", "2", "3", "3", "3", "1", etc...
        My issue is that I'm having great difficulty creating a 'Treeview' control using this information.  Mainly due to the fact that entries can, and will...repeat (for example multiple entries for "Company A", "Company B", "1st Platoon", "1st Squad", etc, etc).  The following code is operative, however it does not create the treeview items as 'child' entries of one another...it simply lists each item as a separate entity.
      For $_populate = 0 to Ubound($_HIERARCHY) - 1 _GUICtrlTreeView_BeginUpdate($idTreeView) _GUICtrlTreeView_Add($idTreeView, $_HIERARCHY[$_populate], String($_STRUCTURES[$_populate])) _GUICtrlTreeView_EndUpdate($idTreeView) Next ;Next $_populate, cycle thru '$_HIERARCHY' array to build 'TREEVIEW' Controls As I mentioned earlier I thought I could manage this...however i'm pulling out quite a bit of my hair trying to get this working properly...any help would be appreciated.  I thank you in advance. 
       
    • By Slipk
      Hello everybody,
      Sorry for my bad english.
       
      I try to figure out if I have a dynamic listview with as many items as I want, how to save to a text file all the data listview contains in the same form that you put when you create a listviewitem. I will give you an example.
      When the script is running it will show you the listview and some items. How to take the items data "Data1|Data1_Sub1|Data1_Sub2" in this format and paste into a text file? All of them.
      I tried to explain as good as I can.
      Thank you for your attention!
      #include <GUIConstantsEx.au3> #include <ListViewConstants.au3> #include <WindowsConstants.au3> $Form_Menu = GUICreate("Form Example", 351, 234, -1, -1) $Form_Menu_ListView1 = GUICtrlCreateListView("Column #1|Column #2|Column #3", 0, 0, 346, 230) GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 0, 75) GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 1, 75) GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 2, 75) GUICtrlCreateListViewItem("Data1|Data1_Sub1|Data1_Sub2", $Form_Menu_ListView1) GUICtrlCreateListViewItem("Data2|Data2_Sub1|Data2_Sub2", $Form_Menu_ListView1) GUICtrlCreateListViewItem("DataN|DataN_SubN|DataN_SubN", $Form_Menu_ListView1) ;The data that appear in the listview be saved in a file like that : #cs Data1|Data1_Sub1|Data1_Sub2 Data2|Data2_Sub1|Data2_Sub2 DataN|DataN_SubN|DataN_SubN #ce GUISetState(@SW_SHOW, $Form_Menu) While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE Exit EndSwitch WEnd
×
×
  • Create New...