![]() Home |
![]() Add |
![]() Edit |
![]() With Linenumbers |
![]() Code in Textfield |
![]() Download |
'############################################################################################################## Dim Shared G_Screen_ReDraw As Ubyte '-------------------------------------------------------------------------------------------------------------- Type Vektor_2D_Type X As Integer Y As Integer End Type '-------------------------------------------------------------------------------------------------------------- Type Debug_Type V_FPS_Calc As Integer V_FPS_Draw As Integer End Type '-------------------------------------------------------------------------------------------------------------- Type Form_Mouse_Type V_BV As Integer V_X As Integer V_Y As Integer V_Z As Integer V_Button As Integer End Type '-------------------------------------------------------------------------------------------------------------- Type Form_Control_Type V_InUse As Ubyte V_Type As Uinteger V_Pos As Vektor_2D_Type V_Dimension As Vektor_2D_Type V_Visible As Ubyte V_Enable As Ubyte T_DrawMem As Any Ptr T_Redraw As Ubyte End Type '-------------------------------------------------------------------------------------------------------------- Type Form_Color_Type V_Back As Uinteger V_Border As Uinteger V_BorderFill As Uinteger V_Text As Uinteger V_BarBack As Uinteger V_BarText As Uinteger End Type Type Form_Style_Type V_Bar As Ubyte V_Border As Ubyte V_ButtonMax As Ubyte V_ButtonMin As Ubyte V_ButtonExit As Ubyte End Type Type Form_Type V_InUse As Ubyte V_FID As Uinteger V_Pos As Vektor_2D_Type V_Dimension As Vektor_2D_Type V_Visible As Ubyte V_Enable As Ubyte V_Color As Form_Color_Type V_Style As Form_Style_Type V_Caption As String V_Sizeable As Ubyte T_DrawMem As Any Ptr T_Redraw As Ubyte V_ControlD As Form_Control_Type Ptr V_ControlC As Uinteger End Type '-------------------------------------------------------------------------------------------------------------- Dim Shared G_FormD() As Form_Type Dim Shared G_FormZ() As Uinteger Dim Shared G_FormC As Uinteger Dim Shared G_FormIDC As Uinteger '-------------------------------------------------------------------------------------------------------------- Dim Shared G_FormMutex As Any Ptr '-------------------------------------------------------------------------------------------------------------- Dim Shared G_FormDefauld_Color As Form_Color_Type Dim Shared G_Form_Bar_Size As Uinteger: G_Form_Bar_Size = 14 Dim Shared G_Form_Border_Size As Uinteger: G_Form_Border_Size = 1 '-------------------------------------------------------------------------------------------------------------- Dim Shared G_Form_DebugSystem As Ubyte: G_Form_DebugSystem = 1 Dim Shared G_Form_Debug_Time As Double Dim Shared G_Form_Debug_Data As Debug_Type Dim Shared G_Form_Debug_Last As Debug_Type Dim Shared G_Form_Debug_Clear As Debug_Type '-------------------------------------------------------------------------------------------------------------- Dim Shared G_Form_Mouse_AK As Form_Mouse_Type Dim Shared G_Form_Mouse_Last As Form_Mouse_Type Dim Shared G_Form_Mouse_Drag As Vektor_2D_Type Dim Shared G_Form_Mouse_Size As Vektor_2D_Type Dim Shared G_Form_Mouse_Pos As Vektor_2D_Type Dim Shared G_Form_MoveID As Uinteger Dim Shared G_Form_DragID As Uinteger '############################################################################################################## Declare Function MKVektor2D (V_X As Integer, V_Y As Integer) As Vektor_2D_Type '-------------------------------------------------------------------------------------------------------------- Declare Function F_Form_Add (V_Position As Vektor_2D_Type, V_Dimension As Vektor_2D_Type, V_Caption As String, V_Visible As Ubyte = 1, V_Enable As Ubyte = 1, V_ShowBar As Ubyte = 1, V_Sizeable As Ubyte = 1, V_Border As Ubyte = 1, V_ButtonExit As Ubyte = 1, V_ButtonMax As Ubyte = 1, V_ButtonMin As Ubyte = 1) As Integer '-------------------------------------------------------------------------------------------------------------- Declare Function F_Form_SetFocus (V_FID As Uinteger) As Integer Declare Function F_Form_Move (V_FID As Uinteger, V_X As Integer, V_Y As Integer, V_MoveLock As Ubyte = 0) As Integer Declare Function F_Form_Resize (V_FID As Uinteger, V_Width As Integer, V_Height As Integer) As Integer '-------------------------------------------------------------------------------------------------------------- Declare Function F_Form_Redraw (V_FID As Uinteger) As Integer Declare Function F_Form_Refresh () As Uinteger '-------------------------------------------------------------------------------------------------------------- Declare Function F_Form_CheckInput () As Integer Declare Function F_Form_GetFID_OnMouse (V_X As Integer, V_Y As Integer) As Uinteger Declare Function F_Form_CheckBorderDrag (V_FID As Uinteger, V_X As Integer, V_Y As Integer) As Uinteger '############################################################################################################## Function MKVektor2D(V_X As Integer, V_Y As Integer) As Vektor_2D_Type Dim T As Vektor_2D_Type T.X = V_X T.Y = V_Y Return T End Function '############################################################################################################## Function F_Form_Add(V_Position As Vektor_2D_Type, V_Dimension As Vektor_2D_Type, V_Caption As String, V_Visible As Ubyte = 1, V_Enable As Ubyte = 1, V_ShowBar As Ubyte = 1, V_Sizeable As Ubyte = 1, V_Border As Ubyte = 1, V_ButtonExit As Ubyte = 1, V_ButtonMax As Ubyte = 1, V_ButtonMin As Ubyte = 1) As Integer If V_Dimension.X < G_Form_Bar_Size Or V_Dimension.Y < G_Form_Bar_Size Then Return 0 Dim FID As Uinteger Mutexlock(G_FormMutex) For X As Uinteger = 1 To G_FormC If G_FormD(X).V_InUse = 0 Then FID = X: Exit For Next If FID = 0 Then G_FormC += 1 FID = G_FormC Redim Preserve G_FormD(G_FormC) As Form_Type Redim Preserve G_FormZ(G_FormC) As Uinteger End If Dim FOK As Ubyte Do FOK = 1 G_FormIDC += 1 If G_FormIDC = 0 Then G_FormIDC = 1 For X As Uinteger = 1 To G_FormC If G_FormD(X).V_InUse = 1 And G_FormD(X).V_FID = G_FormIDC Then FOK = 0: Exit For Next If FOK = 1 Then Exit Do Loop Dim XFIDC As Uinteger = G_FormIDC With G_FormD(FID) .V_InUse = 1 .V_FID = XFIDC .V_Enable = V_Enable .V_Visible = V_Visible .V_Pos = V_Position .V_Dimension = V_Dimension .V_Caption = V_Caption .T_Redraw = 1 .V_Color = G_FormDefauld_Color .V_Sizeable = V_Sizeable With .V_Style .V_Bar = V_ShowBar .V_Border = V_Border .V_ButtonMax = V_ButtonMax .V_ButtonMin = V_ButtonMin .V_ButtonExit = V_ButtonExit End With If .T_DrawMem <> 0 Then Imagedestroy(.T_DrawMem) .T_DrawMem = Imagecreate(.V_Dimension.X, .V_Dimension.Y, 24) End With Mutexunlock(G_FormMutex) F_Form_SetFocus(XFIDC) Return XFIDC End Function '-------------------------------------------------------------------------------------------------------------- Function F_Form_Del(V_FID As Uinteger) As Integer Mutexlock(G_FormMutex) For X As Uinteger = 1 To G_FormC If G_FormD(X).V_FID = V_FID Then If G_FormD(X).V_InUse = 1 Then With G_FormD(X) .V_InUse = 0 If .V_ControlC > 0 Then If .V_ControlD <> 0 Then Deallocate(.V_ControlD) .V_ControlD = 0 .V_ControlC = 0 End If If .T_DrawMem <> 0 Then Imagedestroy(.T_DrawMem) End With End If Mutexunlock(G_FormMutex) Return V_FID End If Next Mutexunlock(G_FormMutex) Return 0 End Function '-------------------------------------------------------------------------------------------------------------- Sub F_Form_Clear() Mutexlock(G_FormMutex) For X As Uinteger = 1 To G_FormC If G_FormD(X).V_InUse = 1 Then With G_FormD(X) .V_InUse = 0 If .V_ControlC > 0 Then If .V_ControlD <> 0 Then Deallocate(.V_ControlD) .V_ControlD = 0 .V_ControlC = 0 End If If .T_DrawMem <> 0 Then Imagedestroy(.T_DrawMem) End With End If Next Mutexunlock(G_FormMutex) End Sub '############################################################################################################## Function F_Form_SetFocus(V_FID As Uinteger) As Integer Mutexlock(G_FormMutex) Dim XSID As Uinteger = 0 Dim XFID As Uinteger = 0 For X As Uinteger = 1 To G_FormC If G_FormZ(X) > 0 Then If G_FormD(G_FormZ(X)).V_FID = V_FID Then XFID = X: Exit For Else: If XSID = 0 Then XSID = X End If Next If XFID = 0 Then XFID = XSID If XFID = 0 Then Mutexunlock(G_FormMutex): Return 0 If XFID = 1 And G_FormC > 1 Then Mutexunlock(G_FormMutex): Return V_FID For X As Uinteger = XFID - 1 To 1 Step -1 G_FormZ(X + 1) = G_FormZ(X) Next G_FormZ(1) = V_FID Mutexunlock(G_FormMutex) F_Form_Redraw(V_FID) Return V_FID End Function '-------------------------------------------------------------------------------------------------------------- Function F_Form_Move(V_FID As Uinteger, V_X As Integer, V_Y As Integer, V_MoveLock As Ubyte = 0) As Integer Mutexlock(G_FormMutex) Dim XFID As Uinteger = 0 For X As Uinteger = 1 To G_FormC If G_FormD(X).V_FID = V_FID Then XFID = X: Exit For Next If XFID = 0 Then Mutexunlock(G_FormMutex): Return 0 With G_FormD(XFID) If V_MoveLock <> 1 Then .V_Pos.X = V_X If V_MoveLock <> 2 Then .V_Pos.Y = V_Y End With G_Screen_ReDraw = 1 Mutexunlock(G_FormMutex) Return V_FID End Function '-------------------------------------------------------------------------------------------------------------- Function F_Form_Resize(V_FID As Uinteger, V_Width As Integer, V_Height As Integer) As Integer Mutexlock(G_FormMutex) Dim XFID As Uinteger = 0 For X As Uinteger = 1 To G_FormC If G_FormD(X).V_FID = V_FID Then XFID = X: Exit For Next If XFID = 0 Then Mutexunlock(G_FormMutex): Return 0 With G_FormD(XFID) If V_Width > 0 Then .V_Dimension.X = V_Width If V_Height > 0 Then .V_Dimension.Y = V_Height If .T_DrawMem <> 0 Then Imagedestroy(.T_DrawMem) .T_DrawMem = Imagecreate(.V_Dimension.X, .V_Dimension.Y, 24) .T_Redraw = 1 End With G_Screen_ReDraw = 1 Mutexunlock(G_FormMutex) Return V_FID End Function '############################################################################################################## Function F_Form_Control_Add(V_FID As Uinteger, V_Type As Uinteger, V_Position As Vektor_2D_Type, V_Dimension As Vektor_2D_Type, V_Visible As Ubyte = 1, V_Enable As Ubyte = 1) As Integer If V_Dimension.X < 1 Or V_Dimension.Y < 1 Then Return 0 Mutexlock(G_FormMutex) Dim XFID As Uinteger = 0 For X As Uinteger = 1 To G_FormC If G_FormD(X).V_FID = V_FID Then XFID = X: Exit For Next If XFID = 0 Then Mutexunlock(G_FormMutex): Return 0 Dim XCID As Uinteger With G_FormD(XFID) For X As Uinteger = 1 To .V_ControlC If .V_ControlD[X].V_InUse = 0 Then XCID = X: Exit For Next Dim XTCD As Form_Control_Type If XCID = 0 Then If .V_ControlC = 0 Then .V_ControlD = Allocate(Sizeof(Form_Control_Type) + 1) .V_ControlC += 1 XCID = .V_ControlC .V_ControlD = Reallocate(.V_ControlD, Sizeof(Form_Control_Type) + 1) End If Dim FOK As Ubyte With XTCD .V_InUse = 1 .V_Enable = V_Enable .V_Visible = V_Visible .V_Pos = V_Position .V_Dimension = V_Dimension .T_Redraw = 1 If .T_DrawMem <> 0 Then Imagedestroy(.T_DrawMem) .T_DrawMem = Imagecreate(.V_Dimension.X, .V_Dimension.Y, 24) End With .V_ControlD[XCID] = XTCD .T_Redraw = 1 End With Mutexunlock(G_FormMutex) G_Screen_ReDraw = 1 Return XCID End Function '############################################################################################################## Function F_Form_Redraw(V_FID As Uinteger) As Integer Mutexlock(G_FormMutex) Dim XFID As Uinteger = 0 For X As Uinteger = 1 To G_FormC If G_FormD(X).V_FID = V_FID Then XFID = X: Exit For Next If XFID = 0 Then Mutexunlock(G_FormMutex): Return 0 If G_FormD(XFID).V_InUse = 0 Or G_FormD(XFID).T_Redraw = 0 Then Mutexunlock(G_FormMutex): Return 0 With G_FormD(XFID) If .V_InUse = 1 And .T_Redraw = 1 Then For X As Uinteger = 1 To .V_ControlC If .V_ControlD[X].V_InUse = 1 And .V_ControlD[X].V_Visible = 1 Then If .V_ControlD[X].T_Redraw = 1 Then End If With .V_ControlD[X] Put G_FormD(XFID).T_DrawMem, (.V_Pos.X, .V_Pos.Y), .T_DrawMem, (0, 0)-(.V_Dimension.X, .V_Dimension.Y), Pset End With End If Next Line .T_DrawMem, (0, 0)-(.V_Dimension.X - 1, .V_Dimension.Y - 1), .V_Color.V_Back, BF If .V_Style.V_Bar = 1 Then Line .T_DrawMem, (0, 0)-(.V_Dimension.X - 1, G_Form_Bar_Size + G_Form_Border_Size * 2), .V_Color.V_BarBack, BF If .V_Style.V_ButtonExit = 1 Then Draw String .T_DrawMem, (G_Form_Bar_Size * 2 + 4 + G_Form_Border_Size + 4, G_Form_Border_Size + 5), .V_Caption, .V_Color.V_BarText Else: Draw String .T_DrawMem, (G_Form_Border_Size + 4, G_Form_Border_Size + 5), .V_Caption, .V_Color.V_BarText End If End If If .V_Style.V_Border = 1 Then Line .T_DrawMem, (0, 0)-(.V_Dimension.X - 1, .V_Dimension.Y - 1), .V_Color.V_Border, B For X As Uinteger = 1 To G_Form_Border_Size Line .T_DrawMem, (X, X)-(.V_Dimension.X - X - 1, .V_Dimension.Y - X - 1), .V_Color.V_BorderFill, B Next If .V_Style.V_Bar = 1 Then Line .T_DrawMem, (G_Form_Border_Size + 1, G_Form_Bar_Size + G_Form_Border_Size + 3)-(.V_Dimension.X - G_Form_Border_Size - 2, G_Form_Bar_Size + (G_Form_Border_Size * 2) + 2), .V_Color.V_BorderFill, BF Line .T_DrawMem, (G_Form_Border_Size + 1, G_Form_Border_Size + 1)-(.V_Dimension.X - G_Form_Border_Size - 2, G_Form_Bar_Size + G_Form_Border_Size + 2), .V_Color.V_Border, B Line .T_DrawMem, (G_Form_Border_Size + 1, G_Form_Bar_Size + (G_Form_Border_Size * 2) + 3)-(.V_Dimension.X - G_Form_Border_Size - 2, .V_Dimension.Y - G_Form_Border_Size - 2), .V_Color.V_Border, B If .V_Style.V_ButtonMax = 1 Then Line .T_DrawMem, (.V_Dimension.X - (G_Form_Border_Size + 2), G_Form_Border_Size + 2)-(.V_Dimension.X - (G_Form_Border_Size + G_Form_Bar_Size * 2 + 1), G_Form_Border_Size + G_Form_Bar_Size + 1), .V_Color.V_BorderFill, BF Line .T_DrawMem, (.V_Dimension.X - (G_Form_Border_Size + 2), G_Form_Border_Size + 2)-(.V_Dimension.X - (G_Form_Border_Size + G_Form_Bar_Size * 2 + 1), G_Form_Border_Size + G_Form_Bar_Size + 1), .V_Color.V_Border, B End If If .V_Style.V_ButtonExit = 1 Then Line .T_DrawMem, (G_Form_Border_Size + 2, G_Form_Border_Size + 2)-(G_Form_Border_Size + G_Form_Bar_Size * 2 + 1, G_Form_Border_Size + G_Form_Bar_Size + 1), .V_Color.V_BorderFill, BF Line .T_DrawMem, (G_Form_Border_Size + 2, G_Form_Border_Size + 2)-(G_Form_Border_Size + G_Form_Bar_Size * 2 + 1, G_Form_Border_Size + G_Form_Bar_Size + 1), .V_Color.V_Border, B Draw String .T_DrawMem, (G_Form_Bar_Size - (G_Form_Bar_Size / 2) + 2 + G_Form_Border_Size + 4, G_Form_Border_Size + 5), "X", .V_Color.V_BarText End If Else: Line .T_DrawMem, (G_Form_Border_Size + 1, G_Form_Border_Size + 1)-(.V_Dimension.X - G_Form_Border_Size - 2, .V_Dimension.Y - G_Form_Border_Size - 2), .V_Color.V_Border, B End If End If .T_Redraw = 0 End If End With Mutexunlock(G_FormMutex) G_Screen_ReDraw = 1 Return V_FID End Function '-------------------------------------------------------------------------------------------------------------- Function F_Form_Control_Redraw(V_FID As Uinteger) As Integer Mutexlock(G_FormMutex) Mutexunlock(G_FormMutex) Return V_FID End Function '############################################################################################################## Function F_Form_Refresh() As Uinteger If G_Screen_ReDraw = 0 Then Return 0 Dim FCR As Uinteger Dim XFID As Uinteger Mutexlock(G_FormMutex) For X As Uinteger = 1 To G_FormC If G_FormZ(X) > 0 Then With G_FormD(G_FormZ(X)) If .V_InUse = 1 And .T_Redraw = 1 Then XFID = G_FormZ(X) Mutexunlock(G_FormMutex) F_Form_Redraw(XFID) Mutexlock(G_FormMutex) FCR += 1 End If End With End If Next Screenlock Line (0, 0)-(1024, 768), 0, BF For X As Uinteger = G_FormC To 1 Step -1 If G_FormZ(X) > 0 Then With G_FormD(G_FormZ(X)) Put (.V_Pos.X, .V_Pos.Y), .T_DrawMem, (0, 0)-(.V_Dimension.X, .V_Dimension.Y), Pset End With End If Next If G_Form_DebugSystem = 1 Then With G_Form_Mouse_AK Locate 1, 1 Print "FPS_Calc: " & G_Form_Debug_Data.V_FPS_Calc Print "FPS_Draw: " & G_Form_Debug_Data.V_FPS_Draw Print "" Print "Maus_X:" & .V_X Print "Maus_Y:" & .V_Y Print "Maus_Z:" & .V_Z Print "Maus_B:" & .V_Button Print "" Print "FormC: " & G_FormC Print "FormZ: "; For X As Uinteger = 1 To G_FormC Print G_FormZ(X) & " "; Next Print "" Print "FID_Move: " & G_Form_MoveID Print "FID_Drag: " & G_Form_DragID End With End If Screenunlock If G_Form_DebugSystem = 1 Then G_Form_Debug_Last.V_FPS_Draw += 1 Mutexunlock(G_FormMutex) Return FCR End Function '############################################################################################################## Function F_Form_CheckInput() As Integer If G_Form_DebugSystem = 1 Then If G_Form_Debug_Time <= Timer Then G_Form_Debug_Data = G_Form_Debug_Last G_Form_Debug_Last = G_Form_Debug_Clear G_Form_Debug_Time = Timer + 1 End If End If Dim MX As Integer Dim MY As Integer Dim MZ As Integer Dim MB As Integer Dim BV As Integer If G_Form_DebugSystem = 1 Then G_Form_Mouse_Last = G_Form_Mouse_AK With G_Form_Mouse_AK .V_BV = Getmouse(.V_X, .V_Y, .V_Z, .V_Button) If .V_BV <> 0 Then If G_Form_DebugSystem = 1 Then F_Form_Refresh() Return -1 'unbekannter Fehler End If If .V_Button = -1 Then If G_Form_DebugSystem = 1 Then F_Form_Refresh() Return -2 'Keine Maus gefunden End If If .V_X = G_Form_Mouse_Last.V_X And G_Form_Mouse_Last.V_Y = .V_Y And G_Form_Mouse_Last.V_Z = .V_Z And G_Form_Mouse_Last.V_Button = .V_Button Then F_Form_Refresh(): Return 0 G_Form_Debug_Last.V_FPS_Calc += 1 Dim XFID As Uinteger If .V_Button = 1 Then If G_Form_MoveID = 0 Then XFID = F_Form_GetFID_OnMouse(.V_X, .V_Y) If XFID > 0 Then G_Form_DragID = F_Form_CheckBorderDrag(XFID, .V_X, .V_Y) If G_Form_Mouse_Last.V_Button = 0 Then G_Form_MoveID = XFID Mutexlock(G_FormMutex) If G_Form_DragID > 0 Then G_Form_Mouse_Drag.X = .V_X G_Form_Mouse_Drag.Y = .V_Y G_Form_Mouse_Size = G_FormD(XFID).V_Dimension End If G_Form_Mouse_Pos.X = G_FormD(XFID).V_Pos.X - .V_X G_Form_Mouse_Pos.Y = G_FormD(XFID).V_Pos.Y - .V_Y Mutexunlock(G_FormMutex) F_Form_SetFocus(XFID) End If Else: G_Form_DragID = 0 End If Else If G_Form_MoveID > 0 Then Select Case G_Form_DragID Case 0: If F_Form_Move(G_Form_MoveID, G_Form_Mouse_Pos.X + .V_X, G_Form_Mouse_Pos.Y + .V_Y) = 0 Then G_Form_MoveID = 0 Case 1 If F_Form_Resize(G_Form_MoveID, G_Form_Mouse_Size.X - .V_X + G_Form_Mouse_Drag.X, 0) = 0 Then G_Form_MoveID = 0 If F_Form_Move(G_Form_MoveID, G_Form_Mouse_Drag.X + .V_X - G_Form_Mouse_Drag.X + G_Form_Mouse_Pos.X, 0, 2) = 0 Then G_Form_MoveID = 0 Case 2: If F_Form_Resize(G_Form_MoveID, G_Form_Mouse_Size.X + .V_X - G_Form_Mouse_Drag.X, 0) = 0 Then G_Form_MoveID = 0 Case 4 If F_Form_Resize(G_Form_MoveID, 0, G_Form_Mouse_Size.Y - .V_Y + G_Form_Mouse_Drag.Y) = 0 Then G_Form_MoveID = 0 If F_Form_Move(G_Form_MoveID, 0, G_Form_Mouse_Drag.Y + .V_Y - G_Form_Mouse_Drag.Y + G_Form_Mouse_Pos.Y, 1) = 0 Then G_Form_MoveID = 0 Case 8: If F_Form_Resize(G_Form_MoveID, 0, G_Form_Mouse_Size.Y + .V_Y - G_Form_Mouse_Drag.Y) = 0 Then G_Form_MoveID = 0 Case 5 If F_Form_Resize(G_Form_MoveID, G_Form_Mouse_Size.X - .V_X + G_Form_Mouse_Drag.X, G_Form_Mouse_Size.Y - .V_Y + G_Form_Mouse_Drag.Y) = 0 Then G_Form_MoveID = 0 If F_Form_Move(G_Form_MoveID, G_Form_Mouse_Drag.X + .V_X - G_Form_Mouse_Drag.X + G_Form_Mouse_Pos.X, G_Form_Mouse_Drag.Y + .V_Y - G_Form_Mouse_Drag.Y + G_Form_Mouse_Pos.Y, 0) = 0 Then G_Form_MoveID = 0 Case 6 If F_Form_Resize(G_Form_MoveID, G_Form_Mouse_Size.X + .V_X - G_Form_Mouse_Drag.X, G_Form_Mouse_Size.Y - .V_Y + G_Form_Mouse_Drag.Y) = 0 Then G_Form_MoveID = 0 If F_Form_Move(G_Form_MoveID, 0, G_Form_Mouse_Drag.Y + .V_Y - G_Form_Mouse_Drag.Y + G_Form_Mouse_Pos.Y, 1) = 0 Then G_Form_MoveID = 0 Case 9 If F_Form_Resize(G_Form_MoveID, G_Form_Mouse_Size.X - .V_X + G_Form_Mouse_Drag.X, G_Form_Mouse_Size.Y + .V_Y - G_Form_Mouse_Drag.Y) = 0 Then G_Form_MoveID = 0 If F_Form_Move(G_Form_MoveID, G_Form_Mouse_Drag.X + .V_X - G_Form_Mouse_Drag.X + G_Form_Mouse_Pos.X, 0, 2) = 0 Then G_Form_MoveID = 0 Case 10: If F_Form_Resize(G_Form_MoveID, G_Form_Mouse_Size.X + .V_X - G_Form_Mouse_Drag.X, G_Form_Mouse_Size.Y + .V_Y - G_Form_Mouse_Drag.Y) = 0 Then G_Form_MoveID = 0 End Select End If End If Else G_Form_MoveID = 0 G_Form_DragID = 0 End If F_Form_Refresh() End With Return XFID End Function '-------------------------------------------------------------------------------------------------------------- Function F_Form_GetFID_OnMouse(V_X As Integer, V_Y As Integer) As Uinteger Mutexlock(G_FormMutex) For X As Uinteger = 1 To G_FormC With G_FormD(G_FormZ(X)) If .V_InUse = 1 And .V_Visible = 1 Then If V_X >= .V_Pos.X And V_X <= .V_Pos.X + .V_Dimension.X And V_Y >= .V_Pos.Y And V_Y <= .V_Pos.Y + .V_Dimension.Y Then Dim XFID As Uinteger = G_FormD(G_FormZ(X)).V_FID Mutexunlock(G_FormMutex) Return XFID End If End If End With Next Mutexunlock(G_FormMutex) Return 0 End Function '-------------------------------------------------------------------------------------------------------------- Function F_Form_CheckBorderDrag(V_FID As Uinteger, V_X As Integer, V_Y As Integer) As Uinteger Mutexlock(G_FormMutex) Dim XFID As Uinteger = 0 For X As Uinteger = 1 To G_FormC If G_FormD(X).V_FID = V_FID Then XFID = X: Exit For Next If XFID = 0 Then Mutexunlock(G_FormMutex): Return 0 If G_FormD(XFID).V_InUse = 0 Then Mutexunlock(G_FormMutex): Return 0 Dim XDID As Uinteger With G_FormD(XFID) If V_X >= .V_Pos.X And V_X <= .V_Pos.X + G_Form_Border_Size + 2 Then XDID = XDID Or 1 If V_X <= .V_Pos.X + .V_Dimension.X And V_X >= .V_Pos.X + .V_Dimension.X - G_Form_Border_Size - 2 Then XDID = XDID Or 2 If V_Y >= .V_Pos.Y And V_Y <= .V_Pos.Y + G_Form_Border_Size + 2 Then XDID = XDID Or 4 If V_Y <= .V_Pos.Y + .V_Dimension.Y And V_Y >= .V_Pos.Y + .V_Dimension.Y - G_Form_Border_Size - 2 Then XDID = XDID Or 8 End With Mutexunlock(G_FormMutex) Return XDID End Function |