home *** CD-ROM | disk | FTP | other *** search
/ Planet Source Code Jumbo …e CD Visual Basic 1 to 7 / 1_2002.ISO / Data / Zips / CODE_UPLOAD1306512262000.psc / Controls / FormDragger.ctl (.txt) < prev    next >
Encoding:
Visual Basic Form  |  2000-11-08  |  13.9 KB  |  317 lines

  1. VERSION 5.00
  2. Begin VB.UserControl FormDragger 
  3.    Alignable       =   -1  'True
  4.    Appearance      =   0  'Flat
  5.    CanGetFocus     =   0   'False
  6.    ClientHeight    =   165
  7.    ClientLeft      =   0
  8.    ClientTop       =   0
  9.    ClientWidth     =   4800
  10.    ScaleHeight     =   165
  11.    ScaleWidth      =   4800
  12.    ToolboxBitmap   =   "FormDragger.ctx":0000
  13.    Begin VB.Line Line4 
  14.       BorderColor     =   &H00808080&
  15.       X1              =   30
  16.       X2              =   4320
  17.       Y1              =   120
  18.       Y2              =   120
  19.    End
  20.    Begin VB.Line Line3 
  21.       BorderColor     =   &H00FFFFFF&
  22.       X1              =   30
  23.       X2              =   4320
  24.       Y1              =   90
  25.       Y2              =   90
  26.    End
  27.    Begin VB.Line Line2 
  28.       BorderColor     =   &H00808080&
  29.       X1              =   30
  30.       X2              =   4320
  31.       Y1              =   60
  32.       Y2              =   60
  33.    End
  34.    Begin VB.Line Line1 
  35.       BorderColor     =   &H00FFFFFF&
  36.       X1              =   30
  37.       X2              =   4320
  38.       Y1              =   30
  39.       Y2              =   30
  40.    End
  41. Attribute VB_Name = "FormDragger"
  42. Attribute VB_GlobalNameSpace = False
  43. Attribute VB_Creatable = True
  44. Attribute VB_PredeclaredId = False
  45. Attribute VB_Exposed = False
  46. 'API Types
  47. Private Type RECT
  48.     Left As Long
  49.     Top As Long
  50.     Right As Long
  51.     Bottom As Long
  52. End Type
  53. Private Type POINTAPI
  54.         X As Long
  55.         Y As Long
  56. End Type
  57. 'API Constants
  58. Private Const BDR_SUNKENINNER = &H8
  59. Private Const BF_LEFT As Long = &H1
  60. Private Const BF_TOP As Long = &H2
  61. Private Const BF_RIGHT As Long = &H4
  62. Private Const BF_BOTTOM As Long = &H8
  63. Private Const BF_RECT As Long = (BF_LEFT Or BF_TOP Or BF_RIGHT Or BF_BOTTOM)
  64. Private Const BDR_RAISED = &H5
  65. Private Const GWL_EXSTYLE = (-20)
  66. Private Const WS_EX_TOOLWINDOW = &H80
  67. Private Const VK_LBUTTON = &H1
  68. Private Const PS_SOLID = 0
  69. Private Const R2_NOTXORPEN = 10
  70. Private Const BLACK_PEN = 7
  71. Private Const SM_CYCAPTION = 4
  72. 'API Declares
  73. Private Declare Function ReleaseDC Lib "user32" (ByVal hwnd As Long, ByVal hdc As Long) As Long
  74. Private Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long
  75. Private Declare Function GetStockObject Lib "gdi32" (ByVal nIndex As Long) As Long
  76. Private Declare Function Rectangle Lib "gdi32" (ByVal hdc As Long, ByVal x1 As Long, ByVal y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long
  77. Private Declare Function SetROP2 Lib "gdi32" (ByVal hdc As Long, ByVal nDrawMode As Long) As Long
  78. Private Declare Function SelectObject Lib "gdi32" (ByVal hdc As Long, ByVal hObject As Long) As Long
  79. Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long
  80. Private Declare Function CreatePen Lib "gdi32" (ByVal nPenStyle As Long, ByVal nWidth As Long, ByVal crColor As Long) As Long
  81. Private Declare Function GetParent Lib "user32" (ByVal hwnd As Long) As Long
  82. Private Declare Function GetCapture Lib "user32" () As Long
  83. Private Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As Integer
  84. Private Declare Function ClientToScreen Lib "user32" (ByVal hwnd As Long, lpPoint As POINTAPI) As Long
  85. Private Declare Function MoveWindow Lib "user32" (ByVal hwnd As Long, ByVal X As Long, ByVal Y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal bRepaint As Long) As Long
  86. Private Declare Function WindowFromPoint Lib "user32" (ByVal xPoint As Long, ByVal yPoint As Long) As Long
  87. Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
  88. Private Declare Function DrawEdge Lib "user32" (ByVal hdc As Long, qrc As RECT, ByVal edge As Long, ByVal grfFlags As Long) As Long
  89. Private Declare Function SetCapture Lib "user32" (ByVal hwnd As Long) As Long
  90. Private Declare Function ReleaseCapture Lib "user32" () As Long
  91. Private Declare Function GetWindowRect Lib "user32" (ByVal hwnd As Long, lpRect As Any) As Long
  92. Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
  93. Private Declare Function SetParent Lib "user32" (ByVal HwndChild As Long, ByVal hWndNewParent As Long) As Long
  94. Private Declare Function GetClientRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT) As Long
  95. Private Declare Function GetSystemMetrics Lib "user32" (ByVal nIndex As Long) As Long
  96. Private Declare Function GetActiveWindow Lib "user32" () As Long
  97. 'Event Declarations:
  98. Event Click() 'MappingInfo=UserControl,UserControl,-1,Click
  99. Attribute Click.VB_Description = "Occurs when the user presses and then releases a mouse button over an object."
  100. Attribute Click.VB_MemberFlags = "200"
  101. Event DblClick() 'MappingInfo=UserControl,UserControl,-1,DblClick
  102. Attribute DblClick.VB_Description = "Occurs when the user presses and releases a mouse button and then presses and releases it again over an object."
  103. Event MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) 'MappingInfo=UserControl,UserControl,-1,MouseDown
  104. Attribute MouseDown.VB_Description = "Occurs when the user presses the mouse button while an object has the focus."
  105. Event MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) 'MappingInfo=UserControl,UserControl,-1,MouseMove
  106. Attribute MouseMove.VB_Description = "Occurs when the user moves the mouse."
  107. Event MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single) 'MappingInfo=UserControl,UserControl,-1,MouseUp
  108. Attribute MouseUp.VB_Description = "Occurs when the user releases the mouse button while an object has the focus."
  109. Event FormDropped(FormLeft As Long, FormTop As Long, formWidth As Long, formHeight As Long)
  110. Event FormMoved(FormLeft As Long, FormTop As Long, formWidth As Long, formHeight As Long)
  111. 'Default Property Values:
  112. Const m_def_RepositionForm = True
  113. Const m_def_Caption = ""
  114. 'Property Variables:
  115. Dim m_RepositionForm As Boolean
  116. Dim m_Caption As String
  117. Private Sub UserControl_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
  118.     Dim na As Long
  119.     Dim pt As POINTAPI
  120.     Dim frmHwnd As Long
  121.     UserControl_Paint
  122.     frmHwnd = UserControl.Extender.Parent.hwnd
  123.     'start 'dragging' the form
  124.     If Button = vbLeftButton And X >= 0 And X <= UserControl.ScaleWidth And Y >= 0 And Y <= UserControl.ScaleHeight Then
  125.         ReleaseCapture
  126.         DragObject frmHwnd
  127.     End If
  128.     RaiseEvent MouseDown(Button, Shift, X, Y)
  129. End Sub
  130. Private Sub DragObject(ByVal hwnd As Long)
  131.     'Procedure which simulates windows dragging of an object.
  132.     Dim pt As POINTAPI
  133.     Dim ptPrev As POINTAPI
  134.     Dim objRect As RECT
  135.     Dim DragRect As RECT
  136.     Dim na As Long
  137.     Dim lBorderWidth As Long
  138.     Dim lObjWidth As Long
  139.     Dim lObjHeight As Long
  140.     Dim lXOffset As Long
  141.     Dim lYOffset As Long
  142.     Dim bMoved As Boolean
  143.     ReleaseCapture
  144.     GetWindowRect hwnd, objRect
  145.     lObjWidth = objRect.Right - objRect.Left
  146.     lObjHeight = objRect.Bottom - objRect.Top
  147.     GetCursorPos pt
  148.     'Store the initial cursor position
  149.     ptPrev.X = pt.X
  150.     ptPrev.Y = pt.Y
  151.     'Set the initial rectangle, and draw it to show the user that
  152.     'the object can be moved
  153.     lXOffset = pt.X - objRect.Left
  154.     lYOffset = pt.Y - objRect.Top
  155.     With DragRect
  156.         .Left = pt.X - lXOffset
  157.         .Top = pt.Y - lYOffset
  158.         .Right = .Left + lObjWidth
  159.         .Bottom = .Top + lObjHeight
  160.     End With
  161.     'use form border width highlighting
  162.     lBorderWidth = 3
  163.     DrawDragRectangle DragRect.Left, DragRect.Top, DragRect.Right, DragRect.Bottom, lBorderWidth
  164.     'Move the object
  165.     Do While GetKeyState(VK_LBUTTON) < 0
  166.         GetCursorPos pt
  167.         If pt.X <> ptPrev.X Or pt.Y <> ptPrev.Y Then
  168.             ptPrev.X = pt.X
  169.             ptPrev.Y = pt.Y
  170.             'erase the previous drag rectangle if any
  171.             DrawDragRectangle DragRect.Left, DragRect.Top, DragRect.Right, DragRect.Bottom, lBorderWidth
  172.             'Tell the user we've moved
  173.             RaiseEvent FormMoved(pt.X - lXOffset, pt.Y - lYOffset, lObjWidth, lObjHeight)
  174.             'Adjust the height/width
  175.             With DragRect
  176.                 .Left = pt.X - lXOffset
  177.                 .Top = pt.Y - lYOffset
  178.                 .Right = .Left + lObjWidth
  179.                 .Bottom = .Top + lObjHeight
  180.             End With
  181.             DrawDragRectangle DragRect.Left, DragRect.Top, DragRect.Right, DragRect.Bottom, lBorderWidth
  182.             bMoved = True
  183.         End If
  184.         DoEvents
  185.     Loop
  186.     'erase the previous drag rectangle if any
  187.     DrawDragRectangle DragRect.Left, DragRect.Top, DragRect.Right, DragRect.Bottom, lBorderWidth
  188.     'move and repaint the window
  189.     If bMoved Then
  190.         If m_RepositionForm Then
  191.             MoveWindow hwnd, DragRect.Left, DragRect.Top, DragRect.Right - DragRect.Left, DragRect.Bottom - DragRect.Top, True
  192.         End If
  193.         'tell the user we've dropped the form
  194.         RaiseEvent FormDropped(DragRect.Left, DragRect.Top, DragRect.Right - DragRect.Left, DragRect.Bottom - DragRect.Top)
  195.     End If
  196. End Sub
  197. Private Sub DrawDragRectangle(ByVal X As Long, ByVal Y As Long, ByVal x1 As Long, ByVal y1 As Long, ByVal lWidth As Long)
  198.     'Draw a rectangle using the Win32 API
  199.     Dim hdc As Long
  200.     Dim hPen As Long
  201.     hPen = CreatePen(PS_SOLID, lWidth, &HE0E0E0)
  202.     hdc = GetDC(0)
  203.     Call SelectObject(hdc, hPen)
  204.     Call SetROP2(hdc, R2_NOTXORPEN)
  205.     Call Rectangle(hdc, X, Y, x1, y1)
  206.     Call SelectObject(hdc, GetStockObject(BLACK_PEN))
  207.     Call DeleteObject(hPen)
  208.     Call SelectObject(hdc, hPen)
  209.     Call ReleaseDC(0, hdc)
  210. End Sub
  211. 'Initialize Properties for User Control
  212. Private Sub UserControl_InitProperties()
  213.     m_Caption = m_def_Caption
  214.     m_Caption = m_def_Caption
  215.     m_RepositionForm = m_def_RepositionForm
  216. End Sub
  217. Private Sub UserControl_Paint()
  218.     Dim lBackColor As Long
  219.     Dim sCaption As String
  220.     'size, position, print caption etc.
  221.     With UserControl
  222.         .Cls
  223.         .Extender.Align = vbAlignTop
  224.         .Extender.Top = 0
  225.         '.Height = GetSystemMetrics(SM_CYCAPTION) * Screen.TwipsPerPixelY - 1
  226.         .Height = 170
  227.         Line1.X2 = UserControl.Width - 50
  228.         Line2.X2 = UserControl.Width - 50
  229.         Line3.X2 = UserControl.Width - 50
  230.         Line4.X2 = UserControl.Width - 50
  231.         'draw the caption
  232.         If GetActiveWindow = UserControl.Extender.Parent.hwnd Then
  233.             .ForeColor = vbTitleBarText
  234.             'lBackColor = vbActiveTitleBar
  235.             lBackColor = UserControl.BackColor
  236.         Else
  237.             .ForeColor = vbInactiveTitleBarText
  238.             'lBackColor = vbInactiveTitleBar
  239.             lBackColor = UserControl.BackColor
  240.         End If
  241.         
  242.         'UserControl.Line (Screen.TwipsPerPixelX, Screen.TwipsPerPixelY)-(UserControl.ScaleWidth - (2 * Screen.TwipsPerPixelX), UserControl.ScaleHeight - Screen.TwipsPerPixelY), lBackColor, BF
  243.         .CurrentX = 4 * Screen.TwipsPerPixelX
  244.         .CurrentY = 3 * Screen.TwipsPerPixelY
  245.         .Font.Name = "MS Sans Serif"
  246.         .Font.Bold = True
  247.         'Check width
  248.         sCaption = m_Caption
  249.         If UserControl.TextWidth(sCaption) > (UserControl.ScaleWidth - (4 * Screen.TwipsPerPixelX)) Then
  250.             Do While UserControl.TextWidth(sCaption & "...") > (UserControl.ScaleWidth - (4 * Screen.TwipsPerPixelX)) And Len(sCaption) > 0
  251.                 sCaption = Trim$(Left$(sCaption, Len(sCaption) - 1))
  252.             Loop
  253.             sCaption = sCaption & "..."
  254.         End If
  255.         UserControl.Print sCaption;
  256.     End With
  257. End Sub
  258. 'Load property values from storage
  259. Private Sub UserControl_ReadProperties(PropBag As PropertyBag)
  260.     m_Caption = PropBag.ReadProperty("Caption", m_def_Caption)
  261.     m_RepositionForm = PropBag.ReadProperty("RepositionForm", m_def_RepositionForm)
  262.     UserControl_Paint
  263. End Sub
  264. Private Sub UserControl_Resize()
  265.     UserControl_Paint
  266. End Sub
  267. 'Write property values to storage
  268. Private Sub UserControl_WriteProperties(PropBag As PropertyBag)
  269.     Call PropBag.WriteProperty("Caption", m_Caption, m_def_Caption)
  270.     Call PropBag.WriteProperty("RepositionForm", m_RepositionForm, m_def_RepositionForm)
  271. End Sub
  272. 'WARNING! DO NOT REMOVE OR MODIFY THE FOLLOWING COMMENTED LINES!
  273. 'MemberInfo=13,0,0,0
  274. Public Property Get Caption() As String
  275. Attribute Caption.VB_Description = "Sets/Returns the caption of the control."
  276.     Caption = m_Caption
  277. End Property
  278. Public Property Let Caption(ByVal New_Caption As String)
  279.     m_Caption = New_Caption
  280.     PropertyChanged "Caption"
  281.     UserControl_Paint
  282. End Property
  283. 'WARNING! DO NOT REMOVE OR MODIFY THE FOLLOWING COMMENTED LINES!
  284. 'MemberInfo=0,0,0,true
  285. Public Property Get RepositionForm() As Boolean
  286. Attribute RepositionForm.VB_Description = "Specifies whether the control should move the form to it's new location."
  287.     RepositionForm = m_RepositionForm
  288. End Property
  289. Public Property Let RepositionForm(ByVal New_RepositionForm As Boolean)
  290.     m_RepositionForm = New_RepositionForm
  291.     PropertyChanged "RepositionForm"
  292. End Property
  293. Private Sub UserControl_Click()
  294.     RaiseEvent Click
  295. End Sub
  296. Private Sub UserControl_DblClick()
  297.     RaiseEvent DblClick
  298. End Sub
  299. 'WARNING! DO NOT REMOVE OR MODIFY THE FOLLOWING COMMENTED LINES!
  300. 'MappingInfo=UserControl,UserControl,-1,hWnd
  301. Public Property Get hwnd() As Long
  302. Attribute hwnd.VB_Description = "Returns a handle (from Microsoft Windows) to an object's window."
  303.     hwnd = UserControl.hwnd
  304. End Property
  305. Private Sub UserControl_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
  306.     RaiseEvent MouseMove(Button, Shift, X, Y)
  307. End Sub
  308. Private Sub UserControl_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
  309.     RaiseEvent MouseUp(Button, Shift, X, Y)
  310. End Sub
  311. 'WARNING! DO NOT REMOVE OR MODIFY THE FOLLOWING COMMENTED LINES!
  312. 'MappingInfo=UserControl,UserControl,-1,Refresh
  313. Public Sub Refresh()
  314. Attribute Refresh.VB_Description = "Forces a complete repaint of a object."
  315.     UserControl.Refresh
  316. End Sub
  317.