Imports DevExpress.XtraGrid Imports DevExpress.XtraGrid.Views.Grid Module ModuleHelperMethods Public Enum EnumFormatOptions [String] = 0 Currency = 1 [Decimal] = 2 End Enum Public Enum EnumDateTimePickerDefaultValueOptions CurrentDate = 0 Empty = 1 End Enum Public Function NotNull(Of T)(ByVal value As T, ByVal defaultValue As T) As T If IsNothing(value) OrElse String.IsNullOrEmpty(value.ToString) OrElse IsDBNull(value) Then Return defaultValue Else Return value End If End Function Public Function NotNullInt(ByVal value As Integer, ByVal defaultValue As Integer) As Integer If IsNothing(value) OrElse IsDBNull(value) OrElse value = 0 Then Return defaultValue Else Return value End If End Function Public Function NotNull(ByVal value As String, ByVal defaultValue As String) As String If IsNothing(value) OrElse IsDBNull(value) OrElse String.IsNullOrEmpty(value) Then Return defaultValue Else Return value End If End Function Public Function BoolToInt(bool As Boolean) As Integer ' Wandelt einen Boolean Wert in einen Int um Return IIf(bool, 1, 0) End Function Public Function IntToBool(int As Integer) As Boolean If int = 0 Then Return False ElseIf int = 1 Then Return True Else Throw New Exception("IntToBool expects an Integer value that is either 0 or 1") End If End Function Public Function ColorToInt(color As Color) As Integer Return System.Drawing.ColorTranslator.ToWin32(color) End Function Public Function IntToColor(int As Integer) As Color Return System.Drawing.ColorTranslator.FromWin32(int) End Function Public Function StrToBool(str As Object) As Boolean Dim result As Boolean = False str = TryCast(str, String) Try result = Convert.ToBoolean(str) Catch ex As Exception result = False End Try Return result End Function Public Function ByteArrayToBitmap(bytearray() As Byte) As Bitmap Return New Bitmap(New System.IO.MemoryStream(bytearray)) End Function Public Function StringToByteArray(ByVal hex As String) As Byte() Dim NumberChars As Integer = hex.Length Dim bytes(NumberChars / 2) As Byte For i As Integer = 0 To NumberChars - 1 Step 2 bytes(i / 2) = Convert.ToByte(hex.Substring(i, 2), 16) Next Return bytes End Function Public Function BitmapToByteArray(bitmap As Bitmap) As Byte() Dim bytearray As Byte() Using stream As New System.IO.MemoryStream bitmap.Save(stream, bitmap.RawFormat) bytearray = stream.ToArray() End Using Return bytearray End Function Public Function IsGroupBox(c As Control) Return c.GetType().Name = "GroupBox" End Function Public Function ParentIsGroupBox(c As Control) Return c.Parent.GetType().Name = "GroupBox" End Function ''' ''' Checks if a property exists on an object ''' ''' The Object to check ''' The Property to check for ''' True, if prop exists Public Function propExists(ByVal obj As Object, ByVal prop As String) As Boolean Dim type As Type = obj.GetType Return type.GetProperty(prop) IsNot Nothing End Function Public Function propExistsWithType(ByVal obj As Object, ByVal prop As String, returnType As System.Type) Dim type As Type = obj.GetType Return type.GetProperty(prop, returnType) IsNot Nothing End Function ''' ''' Gets a ControlID from Control Name ''' ''' Control Name ''' Current Form ID ''' Control ID Public Function GetControlID_for_Name(name As String, formid As Integer) As Integer Try Dim SQL = "SELECT GUID FROM TBPMO_CONTROL WHERE FORM_ID = " & formid & " and NAME = '" & name & "'" Dim ID As Integer = ClassDatabase.Execute_Scalar(SQL) If ID > 0 Then Return ID Else Return -1 End If Catch ex As Exception MsgBox("Error in GetControlID_for_Name:" & vbNewLine & ex.Message, MsgBoxStyle.Critical) End Try End Function Public Function GetControlID_for_RecordID(name As String, recID As Integer) As Integer Try Dim SQL = "SELECT CONTROL_ID FROM VWPMO_VALUES WHERE RECORD_ID = " & recID & " and CONTROL_NAME = '" & name & "'" Dim ID As Integer = ClassDatabase.Execute_Scalar(SQL, True) If ID > 0 Then Return ID Else If LogErrorsOnly = False Then ClassLogger.Add(" >> es konnte keine ID für name geholt werden: " & SQL, False) Return -1 End If Catch ex As Exception MsgBox("Error in GetControlID:" & vbNewLine & ex.Message, MsgBoxStyle.Critical) End Try End Function ''' ''' Gets a Control Name from ControlID ''' ''' ControlID ''' Current Form ID ''' Control Name Public Function Get_Name_for_ControlID(Id As Integer, formid As Integer) As String Try Dim SQL = "SELECT NAME FROM TBPMO_CONTROL WHERE FORM_ID = " & formid & " AND GUID = " & Id Dim Name = ClassDatabase.Execute_Scalar(SQL) Return Name Catch ex As Exception MsgBox("Error in GetName_for_ControlID:" & vbNewLine & ex.Message, MsgBoxStyle.Critical) Return False End Try End Function Public Sub OpenFormCalendar() Dim frm As New frmCalendar frm = frmCalendar.Instance() If My.Settings.User_Calendar_isChild = True Then frm.MdiParent = MAIN_FORM End If frm.Show() End Sub Public Sub OpenViewsUser() Dim frm As New frmViewsUser frm = frmViewsUser frm.MdiParent = MAIN_FORM frm.Show() End Sub Public Sub OpenSearchAllOVer() Dim frm As New frmGlobalSearch frm = frmGlobalSearch frm.MdiParent = MAIN_FORM frm.Show() End Sub Public Sub OpenStatisticsADDI() Dim frm As New frmStatistiscsADDI frm = frmStatistiscsADDI frm.MdiParent = MAIN_FORM frm.Show() End Sub Public Sub Close_Maximized_Forms() For i = System.Windows.Forms.Application.OpenForms.Count - 1 To 1 Step -1 Dim form As Form = System.Windows.Forms.Application.OpenForms(i) form.WindowState = FormWindowState.Normal Next i End Sub Public Sub OpenFormOverview() Close_Maximized_Forms() Dim frm As New frmEntities frm = frmEntities.Instance() frm.MdiParent = MAIN_FORM frm.Show() End Sub Public Sub OpenFormLevelDesigner() For i = System.Windows.Forms.Application.OpenForms.Count - 1 To 1 Step -1 Dim form As Form = System.Windows.Forms.Application.OpenForms(i) form.WindowState = FormWindowState.Normal Next i Dim frm As New frmLevel_Designer frm = frmLevel_Designer.Instance frm.MdiParent = MAIN_FORM frm.Show() 'Dim frm2 As New frmTool_ControlDesigner 'frm2 = frmTool_ControlDesigner.Instance 'If My.Settings.User_DesignPanels_areChild = True Then ' frm2.MdiParent = MAIN_FORM 'End If 'frm2.Show() 'Dim frm3 As New frmTool_ControlProperties 'frm3 = frmTool_ControlProperties.Instance 'If My.Settings.User_DesignPanels_areChild = True Then ' frm3.MdiParent = MAIN_FORM 'End If 'frm3.Show() End Sub Public Sub OpenRecordView(recordId) Try JUMP_RECORD_ID = recordId Dim frm As New frmRecordView() 'frm.MdiParent = MAIN_FORM frm.Show() Catch ex As Exception MsgBox(ex.Message, MsgBoxStyle.Critical) End Try End Sub Public Sub OpenFormConstructor(id As Integer, Optional recordId As Integer = -1) Try CURRENT_CONSTRUCTOR_ID = id Dim frm As New frmConstructor_Main() ' frm = frmForm_Constructor.Instance() Dim activeChild As Form = MAIN_FORM.ActiveMdiChild If activeChild IsNot Nothing Then activeChild.WindowState = FormWindowState.Normal End If If recordId <> -1 Then ' Wenn JUMP_RECORD_ID gesetzt wurde, wird zu diesem Record gesprungen JUMP_RECORD_ID = recordId End If frm.MdiParent = MAIN_FORM frm.Show() Catch ex As Exception ClassLogger.Add("Error in OpenFormConstructor: " & ex.Message) MsgBox("Error in OpenFormConstructor: " & vbNewLine & ex.Message, MsgBoxStyle.Critical) End Try End Sub Public Sub OpenTaskmanagement() Dim frm As New frmTask_Management frm = frmTask_Management.Instance() frm.MdiParent = MAIN_FORM Dim activeChild As Form = MAIN_FORM.ActiveMdiChild If activeChild IsNot Nothing Then activeChild.WindowState = FormWindowState.Normal End If frm.Show() End Sub Public Sub OpenDokumentartt() Dim frm As New frmWM_Dokumentart_Konfig frm = frmWM_Dokumentart_Konfig.Instance() frm.MdiParent = MAIN_FORM Dim activeChild As Form = MAIN_FORM.ActiveMdiChild If activeChild IsNot Nothing Then activeChild.WindowState = FormWindowState.Normal End If frm.Show() End Sub Public Sub OpenMenuDesigner() Dim frm As New frmMenuDesigner frm.MdiParent = MAIN_FORM Dim activeChild As Form = MAIN_FORM.ActiveMdiChild If activeChild IsNot Nothing Then activeChild.WindowState = FormWindowState.Normal End If frm.Show() End Sub Public Sub OpenUserKonfig() Dim frm As New frmUserKonfig frm = frmUserKonfig.Instance() frm.MdiParent = MAIN_FORM Dim activeChild As Form = MAIN_FORM.ActiveMdiChild If activeChild IsNot Nothing Then activeChild.WindowState = FormWindowState.Normal End If frm.Show() End Sub Public Sub OpenImageManager() Dim frm As New frmQuickStart_Images 'frm = frmImageManager.Instance() frm.MdiParent = MAIN_FORM Dim activeChild As Form = MAIN_FORM.ActiveMdiChild If activeChild IsNot Nothing Then activeChild.WindowState = FormWindowState.Normal End If frm.Show() End Sub Public Sub OpenObjecttypeConfig() Dim frm As New frmWM_ObjecttypeConfig frm = frmWM_ObjecttypeConfig.Instance() frm.MdiParent = MAIN_FORM Dim activeChild As Form = MAIN_FORM.ActiveMdiChild If activeChild IsNot Nothing Then activeChild.WindowState = FormWindowState.Normal End If frm.Show() End Sub Public Sub OpenRightsmanager() 'Dim path As String = ClassDatabase.Execute_Scalar("SELECT PATH_ADDONS FROm TBPMO_KONFIGURATION WHERE GUID = 1") Try Dim ProductionPath As String = System.IO.Path.Combine(MY_ADDON_PATH, "RightManager", "RecordOrganizer_RightManager.exe") Dim DevelPath As String = System.IO.Path.Combine(MY_ADDON_PATH, "RecordOrganizer_RightManager\bin\Debug", "RecordOrganizer_RightManager.exe") Dim startInfo As New ProcessStartInfo() startInfo.Arguments = """" & MyConnectionString & """" If System.IO.File.Exists(ProductionPath) Then startInfo.FileName = ProductionPath Else startInfo.FileName = DevelPath End If Process.Start(startInfo) Catch ex As Exception MsgBox("Could not find Right manager: " & ex.Message, MsgBoxStyle.Critical) End Try End Sub Public Sub OpenWindream_Files() Dim frm As New frmWM_Import_Doc_Record frm.MdiParent = MAIN_FORM Dim activeChild As Form = MAIN_FORM.ActiveMdiChild If activeChild IsNot Nothing Then activeChild.WindowState = FormWindowState.Normal End If frm.Show() End Sub Public Sub OpenWiedervorlage() Dim frm As New frmFollowUp frm.MdiParent = MAIN_FORM Dim activeChild As Form = MAIN_FORM.ActiveMdiChild If activeChild IsNot Nothing Then activeChild.WindowState = FormWindowState.Normal End If frm.Show() End Sub Public Sub OpenLogRecord() Dim frm As New frmLogRecord frm = frmLogRecord.Instance() frm.MdiParent = MAIN_FORM Dim activeChild As Form = MAIN_FORM.ActiveMdiChild If activeChild IsNot Nothing Then activeChild.WindowState = FormWindowState.Normal End If frm.Show() End Sub Public Sub OpenTemplatemanagement() Dim frm As New frmTemplates frm.MdiParent = MAIN_FORM Dim activeChild As Form = MAIN_FORM.ActiveMdiChild If activeChild IsNot Nothing Then activeChild.WindowState = FormWindowState.Normal End If frm.Show() End Sub Public Sub OpenFormCockpit() Close_Maximized_Forms() Dim frm As New frmCockpit frm = frmCockpit.Instance() frm.MdiParent = MAIN_FORM frm.Show() End Sub Public Function ShortGUID() As String Return Guid.NewGuid().ToString().GetHashCode().ToString("x") End Function Public Function Get_Grid_Sql(ConstructorId As Integer, FormId As Integer, ConstructorDetailID As Integer, ByRef GRID_TYPE As frmConstructor_Main.GridType, UserGuid As Integer, QUICK_VIEW_SQL As String, IS_SINGLE_RECORD As Boolean, FORM_TYPE As Integer, ByRef VIEW_ID As Integer, ByRef GridControlMain As GridControl, ByRef grvwGrid As GridView, Optional ByRef IS_GEOData As Boolean = False) Try Dim ViewName As String = "VWPMO_ENTITY_TABLE" & FormId.ToString CURRENT_VIEWNAME = ViewName Dim EntitySQL As String If GRID_TYPE = frmConstructor_Main.GridType.Grid Then If LogErrorsOnly = False Then ClassLogger.Add(" >> GridType = Grid", False) EntitySQL = "SELECT T.* FROM " & ViewName & " T" If IS_GEOData = True Then EntitySQL &= " LEFT OUTER JOIN TBPMO_RECORD_GEODATA T1 ON T.[Record-ID] = T1.RECORD_ID" EntitySQL = EntitySQL.Replace("T.*", "T.*, T1.LATITUDE,T1.LONGITUDE,T1.LOCATION") End If Else 'Tiles und Carousel bekommen Quick View EntitySQL = QUICK_VIEW_SQL If EntitySQL = String.Empty Then EntitySQL = "SELECT T.* FROM VWPMO_ENTITY_TABLE" & FormId.ToString & " T" If IS_SINGLE_RECORD = True Or FORM_TYPE = 5 Then Else GRID_TYPE = frmConstructor_Main.GridType.Grid GridControlMain.MainView = grvwGrid VIEW_ID = 3 End If ' GridControlMain.MainView = grvwGrid Else If LogErrorsOnly = False Then ClassLogger.Add(" >> Quick-View is configured", False) End If End If Try Dim sql = String.Format("SELECT COUNT(*) FROM TBPMO_CONSTRUCTOR_USER_SQL WHERE USER_ID = {0} AND CONSTR_DET_ID = {1} AND SQL_COMMAND IS NOT NULL AND SQL_COMMAND <> ''", USER_GUID, ConstructorDetailID) Dim exists = ClassDatabase.Execute_Scalar(sql) If exists = 1 Then sql = String.Format("SELECT SQL_COMMAND FROM TBPMO_CONSTRUCTOR_USER_SQL WHERE USER_ID = {0} AND CONSTR_DET_ID = {1}", USER_GUID, ConstructorDetailID) Dim result = ClassDatabase.Execute_Scalar(sql) If Not IsNothing(result) Then ' result = result.ToUpper.Replace("@RECORDID", RECORD_ID) result = result.ToUpper.Replace("@USER_ID", UserGuid) EntitySQL = EntitySQL & " " & result.ToString CURRENT_ENTITYSQL_WHERE = result Else CURRENT_ENTITYSQL_WHERE = "" End If Else CURRENT_ENTITYSQL_WHERE = "" End If Catch ex As Exception ClassLogger.Add("Error in Get Entity SQL for User: " & vbNewLine & ex.Message, True) MsgBox("Error in Get Entity SQL for User: " & vbNewLine & ex.Message) End Try Return EntitySQL Catch ex As Exception ClassLogger.Add("Error in Get_Grid_Sql: " & vbNewLine & ex.Message, True) MsgBox("Error in Get_Grid_Sql: " & vbNewLine & ex.Message) Return Nothing End Try End Function Public Class SW Public label As String Public stopwatch As Stopwatch Public Sub New(label As String) Me.label = label stopwatch = New Stopwatch() stopwatch.Start() End Sub Public Function Done() As Long If LogErrorsOnly = True Then Return 0 stopwatch.Stop() Dim ts As TimeSpan = stopwatch.Elapsed Dim timespan_ = String.Format("{0:00}:{1:00}.{2:00}", ts.Minutes, ts.Seconds, ts.Milliseconds / 10) If ts.Minutes > 0 Then timespan_ = String.Format("{0:00}:{1:00}.{2:00}", ts.Minutes, ts.Seconds, ts.Milliseconds / 10) ElseIf ts.Seconds > 0 And (ts.Minutes > 0) = False Then timespan_ = String.Format("{0:00}.{1:00} seconds", ts.Seconds, ts.Milliseconds / 10) ElseIf (ts.Seconds > 0) = False And ts.Milliseconds > 0 Then timespan_ = String.Format("{0:00}.{1:00} seconds", ts.Seconds, ts.Milliseconds / 10) End If If timespan_ <> "00:00.00" Then Dim message = String.Format("{0} || {1}", timespan_, label) Console.WriteLine(message) If LogErrorsOnly = False Then ClassLogger.Add(message, False) End If Return stopwatch.ElapsedMilliseconds End Function End Class Public Class PerfomanceHelper _ Public Shared Function SendMessage(hWnd As IntPtr, msg As Int32, wParam As Boolean, lParam As Int32) As Integer End Function Private Const WM_SETREDRAW As Int32 = &HB ''' ''' Verhindert Draw-Events. Am Ende sollte ResumeDraw `aufgerufen` werden. ''' ''' ''' Public Shared Sub SuspendDraw(c As Control) SendMessage(c.Handle, WM_SETREDRAW, False, 0) End Sub ''' ''' Lässt die Draw-Events wieder zu. Davor sollte `SuspendDraw` aufgerufen werden ''' ''' ''' Public Shared Sub ResumeDraw(c As Control) SendMessage(c.Handle, WM_SETREDRAW, True, 0) c.Refresh() End Sub End Class End Module