Imports System.Collections.ObjectModel Imports System.Windows.Forms Imports EgtUILib Imports EgtWPFLib5 Public Class OptionWindowVM Inherits VMBase #Region "FIELDS & PROPERTIES" Private m_LanguageList As New List(Of Language) Public ReadOnly Property LanguageList As List(Of Language) Get Return m_LanguageList End Get End Property Private m_SelLanguage As Language Public Property SelLanguage As Language Get Return m_SelLanguage End Get Set(value As Language) If value IsNot m_SelLanguage Then m_SelLanguage = value WriteMainPrivateProfileString(S_GENERAL, K_MESSAGES, m_SelLanguage.Name) End If End Set End Property Private m_MeasureUnitList As New List(Of String)({"inch", "mm"}) Public ReadOnly Property MeasureUnitList As List(Of String) Get Return m_MeasureUnitList End Get End Property Private m_SideModeList As List(Of String) Public ReadOnly Property SideModeList As List(Of String) Get Return m_SideModeList End Get End Property Private m_SelSideModeIndex As Integer Public Property SelSideModeIndex As Integer Get Return m_SelSideModeIndex End Get Set(value As Integer) If value <> m_SelSideModeIndex Then m_SelSideModeIndex = value WriteMainPrivateProfileString(S_COMPO, K_SIDEMODE, m_SelSideModeIndex.ToString()) End If End Set End Property Public Property SelMeasureUnit As Integer Get Return If(EgtUiUnitsAreMM(), MeasureUnitOpt.MM, MeasureUnitOpt.INCH) End Get Set(value As Integer) ' salvo unità di misura precedente Dim PrevMeasureUnit As MeasureUnitOpt = If(EgtUiUnitsAreMM(), MeasureUnitOpt.MM, MeasureUnitOpt.INCH) If value <> PrevMeasureUnit Then ' cambio unità di misura EgtSetUiUnits(DirectCast(value, MeasureUnitOpt) = MeasureUnitOpt.MM) OmagOFFICEMap.refStatusBarVM.SetMeasureUnit(value) WriteMainPrivateProfileString(S_GENERAL, K_MMUNITS, value.ToString()) ' aggiorno le unità di misura nelle Tab OmagOFFICEMap.refRawPartTabVM.Refresh(PrevMeasureUnit) OmagOFFICEMap.refNestingTabVM.Refresh(PrevMeasureUnit) OmagOFFICEMap.refMoveRawModeVM.Refresh(PrevMeasureUnit) If Not IsNothing(OmagOFFICEMap.refSimulTabVM.MySimul) Then OmagOFFICEMap.refSimulTabVM.MySimul.Refresh(PrevMeasureUnit) End If End Set End Property Public Property DIGeneral As Boolean Get Return (GetMainPrivateProfileInt(S_NEST, K_DIRECT, 0) <> 0) End Get Set(value As Boolean) WriteMainPrivateProfileString(S_NEST, K_DIRECT, If(value, "1", "0")) End Set End Property Public Property DICsv As Boolean Get Return GetMainPrivateProfileInt(S_CSV, K_CSVDIRECT, 1) <> 0 End Get Set(value As Boolean) WriteMainPrivateProfileString(S_CSV, K_CSVDIRECT, If(value, "1", "0")) End Set End Property ' lista dei colori per SideAngle Private m_ColorItemList As New ObservableCollection(Of ColorLsBxItem) Public ReadOnly Property ColorItemList As ObservableCollection(Of ColorLsBxItem) Get Return m_ColorItemList End Get End Property 'lista dei colori per Engrave Private m_ColorEngraveItemList As New ObservableCollection(Of ColorLsEngraveBxItem) Public ReadOnly Property ColorEngraveItemList As ObservableCollection(Of ColorLsEngraveBxItem) Get Return m_ColorEngraveItemList End Get End Property Private Property m_TextColorBackground As Color3d Public ReadOnly Property TextColorBackground As Brush Get Dim x = New SolidColorBrush( Color.FromArgb( CByte( m_TextColorBackground.A / 100 * 255), CByte( m_TextColorBackground.R), CByte( m_TextColorBackground.G), CByte( m_TextColorBackground.B))) Return x End Get 'Set(value As Brush) ' If Not value.Equals(m_TextColorBackground) Then ' m_TextColorBackground = value ' NotifyPropertyChanged("TextColorBackground") ' End If 'End Set End Property #Region "Messages" Public ReadOnly Property Title As String Get Return EgtMsg(MSG_OPTIONSPAGEUC + 1) End Get End Property Public ReadOnly Property CurrentLanguageMsg As String Get Return EgtMsg(MSG_OPTIONSPAGEUC + 1) End Get End Property Public ReadOnly Property LanguageAdvertMsg As String Get Return EgtMsg(MSG_OPTIONSPAGEUC + 2) End Get End Property Public ReadOnly Property MeasureUnitMsg As String Get Return EgtMsg(MSG_OPTIONSPAGEUC + 3) End Get End Property Public ReadOnly Property TextColorMsg As String Get Return EgtMsg(MSG_OPTIONSPAGEUC + 13) End Get End Property Public ReadOnly Property ColorToSideAngMsg As String Get Return EgtMsg(MSG_OPTIONSPAGEUC + 19) End Get End Property Public ReadOnly Property CTSAboxEnableMsg As String Get Return EgtMsg(MSG_OPTIONSPAGEUC + 20) End Get End Property Public ReadOnly Property ToleranceMsg As String Get Return EgtMsg(MSG_OPTIONSPAGEUC + 21) End Get End Property Public ReadOnly Property TalloneMsg As String Get Return EgtMsg(MSG_OPTIONSPAGEUC + 22) End Get End Property Public ReadOnly Property InclinazioneMsg As String Get Return EgtMsg(MSG_OPTIONSPAGEUC + 23) End Get End Property Public ReadOnly Property SideAngleHdr As String Get Return EgtMsg(MSG_OPTIONSPAGEUC + 5) End Get End Property Public ReadOnly Property DirectInsertHdr As String Get Return EgtMsg(MSG_OPTIONSPAGEUC + 8) End Get End Property Public ReadOnly Property DIGeneralMsg As String Get Return EgtMsg(MSG_OPTIONSPAGEUC + 9) End Get End Property Public ReadOnly Property DICsvMsg As String Get Return EgtMsg(MSG_OPTIONSPAGEUC + 10) End Get End Property ' Engrave from color Public ReadOnly Property ColorToEngraveMsg As String Get Return EgtMsg(MSG_OPTIONSPAGEUC + 26) End Get End Property Public ReadOnly Property CTEboxEnableMsg As String Get Return EgtMsg(MSG_OPTIONSPAGEUC + 20) End Get End Property Public ReadOnly Property ToleranceEMsg As String Get Return EgtMsg(MSG_OPTIONSPAGEUC + 21) End Get End Property Public ReadOnly Property AffondamentoMsg As String Get Return EgtMsg(MSG_OPTIONSPAGEUC + 27) End Get End Property Public ReadOnly Property LarghezzaMsg As String Get Return EgtMsg(MSG_OPTIONSPAGEUC + 28) End Get End Property 'Definizione comandi Private m_cmdChangeColor As ICommand #End Region #End Region ' FIELDS & PROPERTIES #Region "CONSTRUCTOR" Sub New() ' Leggo nome lingua corrente Dim sLanguage As String = String.Empty GetMainPrivateProfileString(S_GENERAL, K_MESSAGES, "", sLanguage) ' Leggo elenco lingue disponibili da file ini e imposto lingua corrente Dim nIndex As Integer = 1 While True Dim ReadLanguage As Language = GetMainPrivateProfileLanguage(S_LANGUAGES, K_LANGUAGE & nIndex) If IsNothing(ReadLanguage) Then Exit While m_LanguageList.Add(ReadLanguage) If String.Compare(ReadLanguage.Name, sLanguage, True) = 0 Then m_SelLanguage = ReadLanguage End If nIndex += 1 End While ' Carico messaggi per lista tipologie di definizione angolo d'inclinazione m_SideModeList = New List(Of String)({EgtMsg(MSG_OPTIONSPAGEUC + 6), EgtMsg(MSG_OPTIONSPAGEUC + 7)}) ' Carico valore da file ini m_SelSideModeIndex = GetMainPrivateProfileInt(S_COMPO, K_SIDEMODE, 0) Dim m_OptionWindowV As OptionWindowV = DirectCast(Application.Current.Windows.OfType(Of OptionWindowV)().SingleOrDefault(), OptionWindowV) ' I parametri di TextColor presenti nell'INI vengono caricati Dim sTextColor As String = " " If GetPrivateProfileString(S_NEST, K_TEXTCOLOR, " ", sTextColor, m_sIniFile) <> 0 Then Dim sTextColorArray() As String = sTextColor.Split(","c) If sTextColorArray.Count() >= 3 Then Dim nRed As Integer = 0 : StringToInt( sTextColorArray(0), nRed) Dim nGreen As Integer = 0 : StringToInt( sTextColorArray(1), nGreen) Dim nBlue As Integer = 0 : StringToInt( sTextColorArray(2), nBlue) m_TextColorBackground = New Color3d( nRed, nGreen, nBlue) Else m_TextColorBackground = New Color3d( 0, 0, 0) End If End If ' Leggo se la modalità ColorToSideAng è abilitata If GetPrivateProfileInt(S_COLORTOSIDEANG, K_CTSA_ENABLE, 0, m_sIniFile) <> 0 Then CTSAChecked = True Else CTSAChecked = False End If ' I parametri di ColorSideToAng presenti nell'INI vengono caricati a prescindere dall'abilitazione Dim nVal As Integer nVal = GetPrivateProfileInt(S_COLORTOSIDEANG, K_CTSA_TOLERANCE, nVal, m_sIniFile) m_sToleranceTxBx = nVal.ToString() ' Nel caso dei colori singoli viene verificata la presenza della Key corrispondente a ciascuno dei ' 10 singoli colori (CTSAindex) e il Valore associato viene splittato in un array di stringhe For index As Integer = 1 To 10 Dim sColor As String = " " Dim sArray() As String If GetPrivateProfileString(S_COLORTOSIDEANG, K_CTSA & index, " ", sColor, m_sIniFile) <> 0 Then sArray = sColor.Split(","c) Dim bIsActive As Boolean = If(sArray.Length >= 6, sArray(5).Equals("1"), True) Dim nRed As Integer = 0 : StringToInt(If(sArray.Length >= 1, sArray(0), "0"), nRed) Dim nGreen As Integer = 0 : StringToInt(If(sArray.Length >= 2, sArray(1), "0"), nGreen) Dim nBlue As Integer = 0 : StringToInt(If(sArray.Length >= 3, sArray(2), "0"), nBlue) Dim dSlant As Double = 0 : StringToDouble(If(sArray.Length >= 4, sArray(3), "0"), dSlant) Dim dHeel As Double = 0 : StringToDouble(If(sArray.Length >= 5, sArray(4), "0"), dHeel) ' Leggo elenco colori disponibili da file ini Dim ReadColor As ColorLsBxItem = New ColorLsBxItem(index, bIsActive, New Color3d(nRed, nGreen, nBlue, 100), dSlant, dHeel) m_ColorItemList.Add(ReadColor) Else ' Se CTSA di indice index non esiste nell'INI lo scrivo con dei valori di default e aggiungo ReadColor ' creato con i valori di default e indice index alla lista di colori WritePrivateProfileString(S_COLORTOSIDEANG, K_CTSA & index, "255,255,255,0,0,0", m_sIniFile) Dim ReadColor As ColorLsBxItem = New ColorLsBxItem(index, False, New Color3d(255, 255, 255, 100), 0, 0) m_ColorItemList.Add(ReadColor) End If Next ' Leggo se la modalità ColorToEngrave è abilitata If GetPrivateProfileInt(S_COLORTOENGRAVE, K_CTE_ENABLE, 0, m_sIniFile) <> 0 Then CTEChecked = True Else CTEChecked = False End If ' I parametri di ColorSideToAng presenti nell'INI vengono caricati a prescindere dall'abilitazione nVal = GetPrivateProfileInt(S_COLORTOENGRAVE, K_CTE_TOLERANCE, nVal, m_sIniFile) m_sToleranceETxBx = nVal.ToString() ' Nel caso dei colori singoli viene verificata la presenza della Key corrispondente a ciascuno dei ' 10 singoli colori (CTSAindex) e il Valore associato viene splittato in un array di stringhe For index As Integer = 1 To 10 Dim sColor As String = " " Dim sArray() As String If GetPrivateProfileString(S_COLORTOENGRAVE, K_CTE & index, " ", sColor, m_sIniFile) <> 0 Then sArray = sColor.Split(","c) Dim bIsActive As Boolean = If(sArray.Length >= 6, sArray(5).Equals("1"), True) Dim nRed As Integer = 0 : StringToInt(If(sArray.Length >= 1, sArray(0), "0"), nRed) Dim nGreen As Integer = 0 : StringToInt(If(sArray.Length >= 2, sArray(1), "0"), nGreen) Dim nBlue As Integer = 0 : StringToInt(If(sArray.Length >= 3, sArray(2), "0"), nBlue) Dim dAff As Double = 0 : StringToDouble(If(sArray.Length >= 4, sArray(3), "0"), dAff) Dim dLar As Double = 0 : StringToDouble(If(sArray.Length >= 5, sArray(4), "0"), dLar) ' Leggo elenco colori disponibili da file ini Dim ReadColor As ColorLsEngraveBxItem = New ColorLsEngraveBxItem(index, bIsActive, New Color3d(nRed, nGreen, nBlue, 100), dAff, dLar) m_ColorEngraveItemList.Add(ReadColor) Else ' Se CTSA di indice index non esiste nell'INI lo scrivo con dei valori di default e aggiungo ReadColor ' creato con i valori di default e indice index alla lista di colori WritePrivateProfileString(S_COLORTOENGRAVE, K_CTE & index, "255,255,255,0,0,0", m_sIniFile) Dim ReadColor As ColorLsEngraveBxItem = New ColorLsEngraveBxItem(index, False, New Color3d(255, 255, 255, 100), 0, 0) m_ColorEngraveItemList.Add(ReadColor) End If Next End Sub #End Region ' CONSTRUCTOR #Region "COMMANDS" #Region "ChangeColorCommand" ''' ''' Returns a command that do ChangeColor. ''' Public ReadOnly Property ChangeColorCommand As ICommand Get If m_cmdChangeColor Is Nothing Then m_cmdChangeColor = New Command(AddressOf ChangeColor) End If Return m_cmdChangeColor End Get End Property ''' ''' Execute the ChangeColor. This method is invoked by the ChangeColorCommand. ''' Public Sub ChangeColor(ByVal param As Object) '' Recupero colore da Ini 'Dim TextColor As New Color3d(192, 192, 192) 'Dim NewCol As New Color3d(192, 192, 192) 'GetPrivateProfileColor(S_NEST, K_TEXTCOLOR, TextColor, m_sIniFile) '' Creo dialogo colori 'Dim ColorDlg As New System.Windows.Forms.ColorDialog 'ColorDlg.FullOpen = True 'ColorDlg.Color = TextColor.ToColor() '' Visualizzo dialogo 'ColorDlg.ShowDialog() 'NewCol.FromColor(ColorDlg.Color) '' Salvo eventuali modifiche al colore scelto 'Dim sColor As String = NewCol.R & "," & NewCol.G & "," & NewCol.B 'WritePrivateProfileString(S_NEST, K_TEXTCOLOR, sColor, m_sIniFile) '' Imposto il colore scelto sul pulsante 'TextColorBackground = New SolidColorBrush(Color.FromRgb(NewCol.R, NewCol.G, NewCol.B)) ' Recupero colore da Ini Dim NewCol As New Color3d(192, 192, 192, 100) ' Creo dialogo colori Dim ColorDlg As New System.Windows.Forms.ColorDialog ColorDlg.FullOpen = True ColorDlg.Color = m_TextColorBackground.ToColor() ' Visualizzo dialogo If ColorDlg.ShowDialog() <> DialogResult.OK Then Return NewCol.FromColor(ColorDlg.Color) ' Salvo eventuali modifiche al colore scelto Dim sColor As String = NewCol.R & "," & NewCol.G & "," & NewCol.B WritePrivateProfileString(S_NEST, K_TEXTCOLOR, sColor, m_sIniFile) ' Imposto il colore scelto sul pulsante m_TextColorBackground = NewCol NotifyPropertyChanged("TextColorBackground") End Sub #End Region ' ChangeColorCommand #Region "Checked" ' SideAngle Private Property m_CTSAChecked As Boolean Public Property CTSAChecked As Boolean Get Return m_CTSAChecked End Get Set(value As Boolean) If value <> m_CTSAChecked Then m_CTSAChecked = value If CTSAChecked = True Then WritePrivateProfileString(S_COLORTOSIDEANG, K_CTSA_ENABLE, "1", m_sIniFile) ElseIf CTSAChecked = False Then WritePrivateProfileString(S_COLORTOSIDEANG, K_CTSA_ENABLE, "0", m_sIniFile) End If End If End Set End Property ' Engrave Private Property m_CTEChecked As Boolean Public Property CTEChecked As Boolean Get Return m_CTEChecked End Get Set(value As Boolean) If value <> m_CTEChecked Then m_CTEChecked = value If CTEChecked = True Then WritePrivateProfileString(S_COLORTOENGRAVE, K_CTE_ENABLE, "1", m_sIniFile) ElseIf CTEChecked = False Then WritePrivateProfileString(S_COLORTOENGRAVE, K_CTE_ENABLE, "0", m_sIniFile) End If End If End Set End Property #End Region ' Checked #Region "Tolerance" Private Property m_sToleranceTxBx As String Public Property sToleranceTxBx As String Get Return m_sToleranceTxBx End Get Set(value As String) If value <> m_sToleranceTxBx Then m_sToleranceTxBx = value Dim i As Integer = 0 Try i = Integer.Parse(m_sToleranceTxBx, Globalization.NumberStyles.Any) If i < 0 Then m_sToleranceTxBx = "0" ElseIf i > 50 Then m_sToleranceTxBx = "50" End If Catch ex As Exception m_sToleranceTxBx = "" End Try WritePrivateProfileString(S_COLORTOSIDEANG, K_CTSA_TOLERANCE, If(String.IsNullOrWhiteSpace(m_sToleranceTxBx) OrElse m_sToleranceTxBx.Equals("-"), "0", m_sToleranceTxBx), m_sIniFile) NotifyPropertyChanged("sToleranceTxBx") End If End Set End Property Private Property m_sToleranceETxBx As String Public Property sToleranceETxBx As String Get Return m_sToleranceETxBx End Get Set(value As String) If value <> m_sToleranceETxBx Then m_sToleranceETxBx = value Dim i As Integer = 0 Try i = Integer.Parse(m_sToleranceETxBx, Globalization.NumberStyles.Any) If i < 0 Then m_sToleranceETxBx = "0" ElseIf i > 50 Then m_sToleranceETxBx = "50" End If Catch ex As Exception m_sToleranceETxBx = "" End Try WritePrivateProfileString(S_COLORTOENGRAVE, K_CTE_TOLERANCE, If(String.IsNullOrWhiteSpace(m_sToleranceETxBx) OrElse m_sToleranceETxBx.Equals("-"), "0", m_sToleranceETxBx), m_sIniFile) NotifyPropertyChanged("sToleranceETxBx") End If End Set End Property #End Region ' Tolerance #End Region ' COMMANDS" '------------------------------------SideAngle---------------------------------------- Public Class ColorLsBxItem Inherits VMBase #Region "FIELDS & PROPERTIES" Private Property m_nCTSAIndex As Integer Public Property nCTSAIndex As Integer Get Return m_nCTSAIndex End Get Set(value As Integer) If value <> m_nCTSAIndex Then m_nCTSAIndex = value End If End Set End Property Private Property m_CTSAiChecked As Boolean Public Property CTSAiChecked As Boolean Get Return m_CTSAiChecked End Get Set(value As Boolean) If value <> m_CTSAiChecked Then m_CTSAiChecked = value CTSAiWriteString() End If End Set End Property Private Property m_CTSAiBackground As Color3d Public ReadOnly Property CTSAiBackground As Brush Get Dim x = New SolidColorBrush( Color.FromArgb( CByte( m_CTSAiBackground.A / 100 * 255), CByte( m_CTSAiBackground.R), CByte( m_CTSAiBackground.G), CByte( m_CTSAiBackground.B))) Return x End Get End Property Private Property m_sCTSAiInclinazioneText As String Public Property sCTSAiInclinazioneText As String Get Return m_sCTSAiInclinazioneText End Get Set(value As String) If value <> m_sCTSAiInclinazioneText Then Dim dVal As Double If StringToDouble( value, dVal) Then m_sCTSAiInclinazioneText = value CTSAiWriteString() else m_sCTSAiInclinazioneText = "" End If End If End Set End Property Private Property m_sCTSAiTalloneText As String Public Property sCTSAiTalloneText As String Get Return m_sCTSAiTalloneText End Get Set(value As String) If value <> m_sCTSAiTalloneText Then Dim dVal As Double If StringToLen( value, dVal) Then m_sCTSAiTalloneText = value CTSAiWriteString() else m_sCTSAiTalloneText = "" End If End If End Set End Property ' Definizione comandi Private m_cmdChangeCTSAiColor As ICommand #End Region ' FIELDS & PROPERTIES #Region "CONSTRUCTOR" Sub New(Index As Integer, IsActive As Boolean, Color As Color3d, Inclinazione As Double, Tallone As Double) Me.m_nCTSAIndex = Index Me.m_CTSAiChecked = IsActive Me.m_CTSAiBackground = Color Me.m_sCTSAiInclinazioneText = DoubleToString( Inclinazione, 3) Me.m_sCTSAiTalloneText = LenToString( Tallone, 3) End Sub #End Region ' CONSTRUCTOR #Region "COMMANDS" #Region "ChangeCTSAiColorCommand" Public ReadOnly Property ChangeCTSAiColorCommand As ICommand Get If m_cmdChangeCTSAiColor Is Nothing Then m_cmdChangeCTSAiColor = New Command(AddressOf ChangeCTSAiColor) End If Return m_cmdChangeCTSAiColor End Get End Property Public Sub ChangeCTSAiColor(ByVal param As Object) ' Creo dialogo colori Dim ColorDlg As New System.Windows.Forms.ColorDialog ColorDlg.FullOpen = True ColorDlg.Color = m_CTSAiBackground.ToColor() ' Visualizzo dialogo If ColorDlg.ShowDialog() <> DialogResult.OK Then Return ' Se ok, aggiorno Dim NewCol As New Color3d(192, 192, 192, 100) NewCol.FromColor(ColorDlg.Color) ' Imposto il colore scelto sul pulsante m_CTSAiBackground = NewCol CTSAiWriteString() NotifyPropertyChanged("CTSAiBackground") End Sub #End Region ' ChangeCTSAiColorCommand #End Region ' COMMANDS #Region "METHODS" Private Sub CTSAiWriteString() ' Sistemo i parametri double Dim dSlant As Double = 0 : StringToDouble( sCTSAiInclinazioneText, dSlant) Dim sSlant As String = DoubleToString( dSlant, 3) Dim dHeel As Double = 0 : StringToLen( sCTSAiTalloneText, dHeel) Dim sHeel As String = DoubleToString( dHeel, 3) ' Costruisco la stringa da mettere nell'INI Dim sData As String = m_CTSAiBackground.R.ToString() & "," & m_CTSAiBackground.G.ToString() & "," & m_CTSAiBackground.B.ToString() & "," & sSlant & "," & sHeel & "," & If( CTSAiChecked, "1", "0") WritePrivateProfileString( S_COLORTOSIDEANG, K_CTSA & nCTSAIndex.ToString(), sData, m_sIniFile) End Sub #End Region End Class '-------------------------------------Engrave----------------------------------------- Public Class ColorLsEngraveBxItem Inherits VMBase #Region "FIELDS & PROPERTIES" Private Property m_nCTEIndex As Integer Public Property nCTEIndex As Integer Get Return m_nCTEIndex End Get Set(value As Integer) If value <> m_nCTEIndex Then m_nCTEIndex = value End If End Set End Property Private Property m_CTEiChecked As Boolean Public Property CTEiChecked As Boolean Get Return m_CTEiChecked End Get Set(value As Boolean) If value <> m_CTEiChecked Then m_CTEiChecked = value CTEiWriteString() End If End Set End Property Private Property m_CTEiBackground As Color3d Public ReadOnly Property CTEiBackground As Brush Get Dim x = New SolidColorBrush(Color.FromArgb(CByte(m_CTEiBackground.A / 100 * 255), CByte(m_CTEiBackground.R), CByte(m_CTEiBackground.G), CByte(m_CTEiBackground.B))) Return x End Get End Property Private Property m_sCTEiAffondamentoText As String Public Property sCTEiAffondamentoText As String Get Return m_sCTEiAffondamentoText End Get Set(value As String) If value <> m_sCTEiAffondamentoText Then Dim dVal As Double If StringToDouble(value, dVal) Then m_sCTEiAffondamentoText = value CTEiWriteString() Else m_sCTEiAffondamentoText = "" End If End If End Set End Property Private Property m_sCTEiLarghezzaText As String Public Property sCTEiLarghezzaText As String Get Return m_sCTEiLarghezzaText End Get Set(value As String) If value <> m_sCTEiLarghezzaText Then Dim dVal As Double If StringToLen(value, dVal) Then m_sCTEiLarghezzaText = value CTEiWriteString() Else m_sCTEiLarghezzaText = "" End If End If End Set End Property ' Definizione comandi Private m_cmdChangeCTEiColor As ICommand #End Region ' FIELDS & PROPERTIES #Region "CONSTRUCTOR" Sub New(Index As Integer, IsActive As Boolean, Color As Color3d, Affondamento As Double, Larghezza As Double) Me.m_nCTEIndex = Index Me.m_CTEiChecked = IsActive Me.m_CTEiBackground = Color Me.m_sCTEiAffondamentoText = DoubleToString(Affondamento, 3) Me.m_sCTEiLarghezzaText = LenToString(Larghezza, 3) End Sub #End Region ' CONSTRUCTOR #Region "COMMANDS" #Region "ChangeCTSAiColorCommand" Public ReadOnly Property ChangeCTEiColorCommand As ICommand Get If m_cmdChangeCTEiColor Is Nothing Then m_cmdChangeCTEiColor = New Command(AddressOf ChangeCTEiColor) End If Return m_cmdChangeCTEiColor End Get End Property Public Sub ChangeCTEiColor(ByVal param As Object) ' Creo dialogo colori Dim ColorDlg As New System.Windows.Forms.ColorDialog ColorDlg.FullOpen = True ColorDlg.Color = m_CTEiBackground.ToColor() ' Visualizzo dialogo If ColorDlg.ShowDialog() <> DialogResult.OK Then Return ' Se ok, aggiorno Dim NewCol As New Color3d(192, 192, 192, 100) NewCol.FromColor(ColorDlg.Color) ' Imposto il colore scelto sul pulsante m_CTEiBackground = NewCol CTEiWriteString() NotifyPropertyChanged("CTEiBackground") End Sub #End Region ' ChangeCTSAiColorCommand #End Region ' COMMANDS #Region "METHODS" Private Sub CTEiWriteString() ' Sistemo i parametri double Dim dAff As Double = 0 : StringToDouble(sCTEiAffondamentoText, dAff) Dim sAff As String = DoubleToString(dAff, 3) Dim dLar As Double = 0 : StringToLen(sCTEiLarghezzaText, dLar) Dim sLar As String = DoubleToString(dLar, 3) ' Costruisco la stringa da mettere nell'INI Dim sData As String = m_CTEiBackground.R.ToString() & "," & m_CTEiBackground.G.ToString() & "," & m_CTEiBackground.B.ToString() & "," & sAff & "," & sLar & "," & If(CTEiChecked, "1", "0") WritePrivateProfileString(S_COLORTOENGRAVE, K_CTE & nCTEIndex.ToString(), sData, m_sIniFile) End Sub #End Region End Class End Class