- Timestamp:
- Apr 18, 2015, 2:28:02 PM (10 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
Common/UPersistentForm.pas
r463 r475 3 3 {$mode delphi} 4 4 5 // Date: 201 0-06-015 // Date: 2015-04-18 6 6 7 7 interface … … 20 20 FRegistryContext: TRegistryContext; 21 21 public 22 FormNormalSize: TRect; 23 FormRestoredSize: TRect; 24 FormWindowState: TWindowState; 25 Form: TForm; 26 procedure LoadFromRegistry(RegistryContext: TRegistryContext); 27 procedure SaveToRegistry(RegistryContext: TRegistryContext); 22 28 function CheckEntireVisible(Rect: TRect): TRect; 23 29 function CheckPartVisible(Rect: TRect; Part: Integer): TRect; … … 40 46 begin 41 47 RegisterComponents('Common', [TPersistentForm]); 48 Screen.Desk; 42 49 end; 43 50 44 51 { TPersistentForm } 52 53 procedure TPersistentForm.LoadFromRegistry(RegistryContext: TRegistryContext); 54 begin 55 with TRegistryEx.Create do 56 try 57 RootKey := RegistryContext.RootKey; 58 OpenKey(RegistryContext.Key + '\Forms\' + Form.Name, True); 59 // Normal size 60 FormNormalSize.Left := ReadIntegerWithDefault('NormalLeft', FormNormalSize.Left); 61 FormNormalSize.Top := ReadIntegerWithDefault('NormalTop', FormNormalSize.Top); 62 FormNormalSize.Right := ReadIntegerWithDefault('NormalWidth', FormNormalSize.Right - FormNormalSize.Left) 63 + FormNormalSize.Left; 64 FormNormalSize.Bottom := ReadIntegerWithDefault('NormalHeight', FormNormalSize.Bottom - FormNormalSize.Top) 65 + FormNormalSize.Top; 66 // Restored size 67 FormRestoredSize.Left := ReadIntegerWithDefault('RestoredLeft', FormRestoredSize.Left); 68 FormRestoredSize.Top := ReadIntegerWithDefault('RestoredTop', FormRestoredSize.Top); 69 FormRestoredSize.Right := ReadIntegerWithDefault('RestoredWidth', FormRestoredSize.Right - FormRestoredSize.Left) 70 + FormRestoredSize.Left; 71 FormRestoredSize.Bottom := ReadIntegerWithDefault('RestoredHeight', FormRestoredSize.Bottom - FormRestoredSize.Top) 72 + FormRestoredSize.Top; 73 // Other state 74 FormWindowState := TWindowState(ReadIntegerWithDefault('WindowState', Integer(wsNormal))); 75 finally 76 Free; 77 end; 78 end; 79 80 procedure TPersistentForm.SaveToRegistry(RegistryContext: TRegistryContext); 81 begin 82 with Form, TRegistryEx.Create do 83 try 84 RootKey := RegistryContext.RootKey; 85 OpenKey(RegistryContext.Key + '\Forms\' + Form.Name, True); 86 // Normal state 87 WriteInteger('NormalWidth', FormNormalSize.Right - FormNormalSize.Left); 88 WriteInteger('NormalHeight', FormNormalSize.Bottom - FormNormalSize.Top); 89 WriteInteger('NormalTop', FormNormalSize.Top); 90 WriteInteger('NormalLeft', FormNormalSize.Left); 91 // Restored state 92 WriteInteger('RestoredWidth', FormRestoredSize.Right - FormRestoredSize.Left); 93 WriteInteger('RestoredHeight', FormRestoredSize.Bottom - FormRestoredSize.Top); 94 WriteInteger('RestoredTop', FormRestoredSize.Top); 95 WriteInteger('RestoredLeft', FormRestoredSize.Left); 96 // Other state 97 WriteInteger('WindowState', Integer(FormWindowState)); 98 finally 99 Free; 100 end; 101 end; 45 102 46 103 function TPersistentForm.CheckEntireVisible(Rect: TRect): TRect; … … 98 155 procedure TPersistentForm.Load(Form: TForm; DefaultMaximized: Boolean = False); 99 156 var 100 Normal: TRect;101 Restored: TRect;102 157 LoadDefaults: Boolean; 103 158 begin 104 with TRegistryEx.Create do 105 try 106 RootKey := RegistryContext.RootKey; 107 OpenKey(RegistryContext.Key + '\Forms\' + Form.Name, True); 108 109 //RestoredWindowState := TWindowState(ReadIntegerWithDefault('WindowState', Integer(Form.WindowState))); 110 //if RestoredWindowState = wsMinimized then 111 // RestoredWindowState := wsNormal; 112 //Form.WindowState := RestoredWindowState; 113 LoadDefaults := not ValueExists('NormalLeft'); 114 Normal := Bounds(ReadIntegerWithDefault('NormalLeft', (Screen.Width - Form.Width) div 2), 115 ReadIntegerWithDefault('NormalTop', (Screen.Height - Form.Height) div 2), 116 ReadIntegerWithDefault('NormalWidth', Form.Width), 117 ReadIntegerWithDefault('NormalHeight', Form.Height)); 118 Restored := Bounds(ReadIntegerWithDefault('RestoredLeft', (Screen.Width - Form.Width) div 2), 119 ReadIntegerWithDefault('RestoredTop', (Screen.Height - Form.Height) div 2), 120 ReadIntegerWithDefault('RestoredWidth', Form.Width), 121 ReadIntegerWithDefault('RestoredHeight', Form.Height)); 122 123 if not EqualRect(Normal, Restored) or 124 (LoadDefaults and DefaultMaximized) then begin 125 // Restore to maximized state 126 Form.WindowState := wsNormal; 127 if not EqualRect(Restored, Form.BoundsRect) then 128 Form.BoundsRect := Restored; 129 Form.WindowState := wsMaximized; 130 end else begin 131 // Restore to normal state 132 Form.WindowState := wsNormal; 133 if FEntireVisible then Normal := CheckEntireVisible(Normal) 134 else if FMinVisiblePart > 0 then 135 Normal := CheckPartVisible(Normal, FMinVisiblePart); 136 if not EqualRect(Normal, Form.BoundsRect) then 137 Form.BoundsRect := Normal; 138 end; 139 140 //if ReadBoolWithDefault('Visible', False) then Form.Show; 141 finally 142 Free; 143 end; 159 Self.Form := Form; 160 // Set default 161 FormNormalSize := Bounds((Screen.Width - Form.Width) div 2, 162 (Screen.Height - Form.Height) div 2, Form.Width, Form.Height); 163 FormRestoredSize := Bounds((Screen.Width - Form.Width) div 2, 164 (Screen.Height - Form.Height) div 2, Form.Width, Form.Height); 165 166 LoadFromRegistry(RegistryContext); 167 168 if not EqualRect(FormNormalSize, FormRestoredSize) or 169 (LoadDefaults and DefaultMaximized) then begin 170 // Restore to maximized state 171 Form.WindowState := wsNormal; 172 if not EqualRect(FormRestoredSize, Form.BoundsRect) then 173 Form.BoundsRect := FormRestoredSize; 174 Form.WindowState := wsMaximized; 175 end else begin 176 // Restore to normal state 177 Form.WindowState := wsNormal; 178 if FEntireVisible then FormNormalSize := CheckEntireVisible(FormNormalSize) 179 else if FMinVisiblePart > 0 then 180 FormNormalSize := CheckPartVisible(FormNormalSize, FMinVisiblePart); 181 if not EqualRect(FormNormalSize, Form.BoundsRect) then 182 Form.BoundsRect := FormNormalSize; 183 end; 144 184 end; 145 185 146 186 procedure TPersistentForm.Save(Form: TForm); 147 187 begin 148 with Form, TRegistryEx.Create do 149 try 150 RootKey := RegistryContext.RootKey; 151 OpenKey(RegistryContext.Key + '\Forms\' + Form.Name, True); 152 WriteInteger('NormalWidth', Form.Width); 153 WriteInteger('NormalHeight', Form.Height); 154 WriteInteger('NormalTop', Form.Top); 155 WriteInteger('NormalLeft', Form.Left); 156 WriteInteger('RestoredWidth', Form.RestoredWidth); 157 WriteInteger('RestoredHeight', Form.RestoredHeight); 158 WriteInteger('RestoredTop', Form.RestoredTop); 159 WriteInteger('RestoredLeft', Form.RestoredLeft); 160 //WriteInteger('WindowState', Integer(Form.WindowState)); 161 //WriteBool('Visible', Form.Visible); 162 finally 163 Free; 164 end; 188 Self.Form := Form; 189 FormNormalSize := Bounds(Form.Left, Form.Top, Form.Width, Form.Height); 190 FormRestoredSize := Bounds(Form.RestoredLeft, Form.RestoredTop, Form.RestoredWidth, 191 Form.RestoredHeight); 192 FormWindowState := Form.WindowState; 193 SaveToRegistry(RegistryContext); 165 194 end; 166 195 … … 168 197 begin 169 198 inherited; 199 if AOwner is TForm then Form := TForm(AOwner) 200 else Form := nil; 170 201 FMinVisiblePart := 50; 171 202 FRegistryContext.RootKey := HKEY_CURRENT_USER;
Note:
See TracChangeset
for help on using the changeset viewer.