From e48cbffa6b5b8534d7854ce5905d5801bee5200c Mon Sep 17 00:00:00 2001 From: Demetrio Cassarino Date: Thu, 26 Mar 2026 15:17:46 +0100 Subject: [PATCH] -aggiunto modifica per salvare dimensioni finestra ExecuteWindow --- Constants/ConstIni.vb | 5 +++ EgtCAM5.vbproj | 1 + ExecuteWindow/ExecuteWindowV.xaml | 1 + Utility/WindowStateBehavior.vb | 74 +++++++++++++++++++++++++++++++ 4 files changed, 81 insertions(+) create mode 100644 Utility/WindowStateBehavior.vb diff --git a/Constants/ConstIni.vb b/Constants/ConstIni.vb index 15f71fa..f7b162a 100644 --- a/Constants/ConstIni.vb +++ b/Constants/ConstIni.vb @@ -223,4 +223,9 @@ Module ConstIni Public Const S_MRUGUNSTOCKPEZ As String = "MruGunStockPez" Public Const K_FILE As String = "File" + Public Const S_EXECUTEWINDOW As String = "ExecuteWindow" + Public Const K_LEFT As String = "Left" + Public Const K_TOP As String = "Top" + Public Const K_WIDTH As String = "Width" + Public Const K_HEIGHT As String = "Height" End Module diff --git a/EgtCAM5.vbproj b/EgtCAM5.vbproj index 7fb7837..8e28c56 100644 --- a/EgtCAM5.vbproj +++ b/EgtCAM5.vbproj @@ -402,6 +402,7 @@ + ViewPanelV.xaml diff --git a/ExecuteWindow/ExecuteWindowV.xaml b/ExecuteWindow/ExecuteWindowV.xaml index ce1435d..a7a93ae 100644 --- a/ExecuteWindow/ExecuteWindowV.xaml +++ b/ExecuteWindow/ExecuteWindowV.xaml @@ -11,6 +11,7 @@ ShowInTaskbar="False" TitleBarHeight="32" PreviewKeyDown="EgtCustomWindow_PreviewKeyDown" + EgtCAM5:WindowStateIniBehavior.PersistenceKey="Dimension" CloseCommand="{Binding Close_Command,Mode=OneWay,UpdateSourceTrigger=PropertyChanged}"> diff --git a/Utility/WindowStateBehavior.vb b/Utility/WindowStateBehavior.vb new file mode 100644 index 0000000..c369878 --- /dev/null +++ b/Utility/WindowStateBehavior.vb @@ -0,0 +1,74 @@ +Public Class WindowStateIniBehavior + + Private Shared ReadOnly IsReady As New Dictionary(Of Window, Boolean) + + Public Shared Function GetPersistenceKey(obj As DependencyObject) As String + Return CStr(obj.GetValue(PersistenceKeyProperty)) + End Function + + Public Shared Sub SetPersistenceKey(obj As DependencyObject, value As String) + obj.SetValue(PersistenceKeyProperty, value) + End Sub + + Public Shared ReadOnly PersistenceKeyProperty As DependencyProperty = + DependencyProperty.RegisterAttached( + "PersistenceKey", + GetType(String), + GetType(WindowStateIniBehavior), + New PropertyMetadata(Nothing, AddressOf OnKeyChanged) + ) + + Private Shared Sub OnKeyChanged(d As DependencyObject, e As DependencyPropertyChangedEventArgs) + Dim Window = TryCast(d, Window) + If IsNothing(Window) Then Return + + IsReady(Window) = False + + AddHandler Window.Loaded, Sub() LoadState(Window) + + AddHandler Window.ContentRendered, + Sub() + IsReady(Window) = True + End Sub + + AddHandler Window.LocationChanged, Sub() SaveState(Window) + AddHandler Window.SizeChanged, Sub() SaveState(Window) + End Sub + + Private Shared Sub SaveState(Window As Window) + If Not IsReady(Window) Then Return + + EgtUILib.WritePrivateProfileString(S_EXECUTEWINDOW, K_LEFT, Window.Left.ToString(), Map.refMainWindowVM.DimensionDir) + EgtUILib.WritePrivateProfileString(S_EXECUTEWINDOW, K_TOP, Window.Top.ToString(), Map.refMainWindowVM.DimensionDir) + EgtUILib.WritePrivateProfileString(S_EXECUTEWINDOW, K_WIDTH, Window.Width.ToString(), Map.refMainWindowVM.DimensionDir) + EgtUILib.WritePrivateProfileString(S_EXECUTEWINDOW, K_HEIGHT, Window.Height.ToString(), Map.refMainWindowVM.DimensionDir) + End Sub + + Private Shared Sub LoadState(Window As Window) + Dim sLeft As String = String.Empty + Dim dLeft As Double = 0 + EgtUILib.GetPrivateProfileString(S_EXECUTEWINDOW, K_LEFT, String.Empty, sLeft, Map.refMainWindowVM.DimensionDir) + If sLeft IsNot String.Empty Then StringToDouble(sLeft, dLeft) + + Dim sTopD As String = String.Empty + Dim dTop As Double = 0.0 + EgtUILib.GetPrivateProfileString(S_EXECUTEWINDOW, K_TOP, String.Empty, sTopD, Map.refMainWindowVM.DimensionDir) + If sTopD IsNot String.Empty Then StringToDouble(sTopD, dTop) + + Dim sWidth As String = String.Empty + Dim dWidth As Double = 0.0 + EgtUILib.GetPrivateProfileString(S_EXECUTEWINDOW, K_WIDTH, String.Empty, sWidth, Map.refMainWindowVM.DimensionDir) + If sWidth IsNot String.Empty Then StringToDouble(sWidth, dWidth) + + Dim sHeight As String = String.Empty + Dim dHeight As Double = 0.0 + EgtUILib.GetPrivateProfileString(S_EXECUTEWINDOW, K_HEIGHT, String.Empty, sHeight, Map.refMainWindowVM.DimensionDir) + If sWidth IsNot String.Empty Then StringToDouble(sHeight, dHeight) + + If dLeft > 0 Then Window.Left = dLeft + If dTop > 0 Then Window.Top = dTop + If dWidth > 0 Then Window.Width = dWidth + If dHeight > 0 Then Window.Height = dHeight + End Sub + +End Class