diff --git a/G940LEDControl/Forms/ButtonAssignmentFrm.dfm b/G940LEDControl/Forms/ButtonAssignmentFrm.dfm
deleted file mode 100644
index 15f4d67..0000000
--- a/G940LEDControl/Forms/ButtonAssignmentFrm.dfm
+++ /dev/null
@@ -1,45 +0,0 @@
-object ButtonAssignmentFrame: TButtonAssignmentFrame
- Left = 0
- Top = 0
- Width = 261
- Height = 41
- TabOrder = 0
- DesignSize = (
- 261
- 41)
- object lblFunction: TLabel
- Left = 53
- Top = 6
- Width = 208
- Height = 13
- Anchors = [akLeft, akTop, akRight]
- AutoSize = False
- Caption = '[runtime: function]'
- EllipsisPosition = epEndEllipsis
- Font.Charset = DEFAULT_CHARSET
- Font.Color = clWindowText
- Font.Height = -11
- Font.Name = 'Tahoma'
- Font.Style = [fsBold]
- ParentFont = False
- end
- object lblCategory: TLabel
- Left = 53
- Top = 22
- Width = 208
- Height = 13
- Anchors = [akLeft, akTop, akRight]
- AutoSize = False
- Caption = '[runtime: category]'
- EllipsisPosition = epEndEllipsis
- end
- object btnConfiguration: TButton
- Left = 0
- Top = 0
- Width = 41
- Height = 41
- Caption = 'P&?'
- TabOrder = 0
- OnClick = btnConfigurationClick
- end
-end
diff --git a/G940LEDControl/Forms/ButtonAssignmentFrm.pas b/G940LEDControl/Forms/ButtonAssignmentFrm.pas
deleted file mode 100644
index 123cdb3..0000000
--- a/G940LEDControl/Forms/ButtonAssignmentFrm.pas
+++ /dev/null
@@ -1,87 +0,0 @@
-unit ButtonAssignmentFrm;
-
-interface
-uses
- System.Classes,
- Vcl.Controls,
- Vcl.Forms,
- Vcl.StdCtrls;
-
-
-type
- TButtonAssignmentFrame = class(TFrame)
- btnConfiguration: TButton;
- lblFunction: TLabel;
- lblCategory: TLabel;
-
- procedure btnConfigurationClick(Sender: TObject);
- private
- FLEDIndex: Integer;
- FOnConfigurationClick: TNotifyEvent;
-
- function GetCategoryName: string;
- function GetFunctionName: string;
- procedure SetCategoryName(const Value: string);
- procedure SetFunctionName(const Value: string);
- public
- constructor Create(AOwner: TComponent); override;
-
- property LEDIndex: Integer read FLEDIndex write FLEDIndex;
- property CategoryName: string read GetCategoryName write SetCategoryName;
- property FunctionName: string read GetFunctionName write SetFunctionName;
-
- property OnConfigurationClick: TNotifyEvent read FOnConfigurationClick write FOnConfigurationClick;
- end;
-
-
-implementation
-uses
- Graphics;
-
-
-{$R *.dfm}
-
-
-{ TButtonAssignmentFrame }
-constructor TButtonAssignmentFrame.Create(AOwner: TComponent);
-begin
- inherited Create(AOwner);
-
- lblCategory.Font.Color := clGrayText;
-
- SetCategoryName('');
- SetFunctionName('');
-end;
-
-
-function TButtonAssignmentFrame.GetCategoryName: string;
-begin
- Result := lblCategory.Caption;
-end;
-
-
-function TButtonAssignmentFrame.GetFunctionName: string;
-begin
- Result := lblFunction.Caption;
-end;
-
-
-procedure TButtonAssignmentFrame.SetCategoryName(const Value: string);
-begin
- lblCategory.Caption := Value;
-end;
-
-
-procedure TButtonAssignmentFrame.SetFunctionName(const Value: string);
-begin
- lblFunction.Caption := Value;
-end;
-
-
-procedure TButtonAssignmentFrame.btnConfigurationClick(Sender: TObject);
-begin
- if Assigned(FOnConfigurationClick) then
- FOnConfigurationClick(Self);
-end;
-
-end.
diff --git a/G940LEDControl/Forms/MainFrm.dfm b/G940LEDControl/Forms/MainFrm.dfm
index 55079fe..c2798a3 100644
--- a/G940LEDControl/Forms/MainFrm.dfm
+++ b/G940LEDControl/Forms/MainFrm.dfm
@@ -1,11 +1,12 @@
object MainForm: TMainForm
Left = 0
Top = 0
+ ActiveControl = cbProfileMenu
BorderIcons = [biSystemMenu, biMinimize]
BorderStyle = bsSingle
Caption = 'G940 LED Control'
- ClientHeight = 609
- ClientWidth = 598
+ ClientHeight = 548
+ ClientWidth = 466
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
@@ -22,740 +23,360 @@ object MainForm: TMainForm
AlignWithMargins = True
Left = 8
Top = 60
- Width = 582
- Height = 541
+ Width = 450
+ Height = 480
Margins.Left = 8
Margins.Top = 8
Margins.Right = 8
Margins.Bottom = 8
- ActivePage = tsButtons
+ ActivePage = tsConfiguration
Align = alClient
TabOrder = 0
- ExplicitHeight = 436
object tsButtons: TTabSheet
Caption = ' Button assignment '
- ExplicitHeight = 408
- inline bafP1: TButtonAssignmentFrame
- Left = 267
- Top = 134
- Width = 261
- Height = 41
- TabOrder = 0
- ExplicitLeft = 267
- ExplicitTop = 134
- inherited btnConfiguration: TButton
- Caption = 'P&1'
- end
+ DesignSize = (
+ 442
+ 452)
+ object lblP1Function: TLabel
+ Left = 64
+ Top = 73
+ Width = 365
+ Height = 13
+ Anchors = [akLeft, akTop, akRight]
+ AutoSize = False
+ Caption = '[runtime: function]'
+ EllipsisPosition = epEndEllipsis
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = [fsBold]
+ ParentFont = False
+ ExplicitWidth = 364
end
- inline bafP2: TButtonAssignmentFrame
- Left = 267
- Top = 181
- Width = 261
- Height = 41
- TabOrder = 1
- ExplicitLeft = 267
- ExplicitTop = 181
- inherited btnConfiguration: TButton
- Caption = 'P&2'
- end
+ object lblP1Category: TLabel
+ Left = 64
+ Top = 89
+ Width = 365
+ Height = 13
+ Anchors = [akLeft, akTop, akRight]
+ AutoSize = False
+ Caption = '[runtime: category]'
+ EllipsisPosition = epEndEllipsis
+ ExplicitWidth = 364
end
- inline bafP3: TButtonAssignmentFrame
- Left = 267
- Top = 228
- Width = 261
- Height = 41
- TabOrder = 2
- ExplicitLeft = 267
- ExplicitTop = 228
- inherited btnConfiguration: TButton
- Caption = 'P&3'
- end
+ object lblP2Function: TLabel
+ Left = 64
+ Top = 120
+ Width = 365
+ Height = 13
+ Anchors = [akLeft, akTop, akRight]
+ AutoSize = False
+ Caption = '[runtime: function]'
+ EllipsisPosition = epEndEllipsis
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = [fsBold]
+ ParentFont = False
+ ExplicitWidth = 364
end
- inline bafP4: TButtonAssignmentFrame
- Left = 267
- Top = 275
- Width = 261
+ object lblP2Category: TLabel
+ Left = 64
+ Top = 136
+ Width = 365
+ Height = 13
+ Anchors = [akLeft, akTop, akRight]
+ AutoSize = False
+ Caption = '[runtime: category]'
+ EllipsisPosition = epEndEllipsis
+ ExplicitWidth = 364
+ end
+ object lblP3Function: TLabel
+ Left = 64
+ Top = 167
+ Width = 365
+ Height = 13
+ Anchors = [akLeft, akTop, akRight]
+ AutoSize = False
+ Caption = '[runtime: function]'
+ EllipsisPosition = epEndEllipsis
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = [fsBold]
+ ParentFont = False
+ ExplicitWidth = 364
+ end
+ object lblP3Category: TLabel
+ Left = 64
+ Top = 183
+ Width = 365
+ Height = 13
+ Anchors = [akLeft, akTop, akRight]
+ AutoSize = False
+ Caption = '[runtime: category]'
+ EllipsisPosition = epEndEllipsis
+ ExplicitWidth = 364
+ end
+ object lblP4Function: TLabel
+ Left = 64
+ Top = 214
+ Width = 365
+ Height = 13
+ Anchors = [akLeft, akTop, akRight]
+ AutoSize = False
+ Caption = '[runtime: function]'
+ EllipsisPosition = epEndEllipsis
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = [fsBold]
+ ParentFont = False
+ ExplicitWidth = 364
+ end
+ object lblP4Category: TLabel
+ Left = 64
+ Top = 230
+ Width = 365
+ Height = 13
+ Anchors = [akLeft, akTop, akRight]
+ AutoSize = False
+ Caption = '[runtime: category]'
+ EllipsisPosition = epEndEllipsis
+ ExplicitWidth = 364
+ end
+ object lblP5Function: TLabel
+ Left = 64
+ Top = 261
+ Width = 365
+ Height = 13
+ Anchors = [akLeft, akTop, akRight]
+ AutoSize = False
+ Caption = '[runtime: function]'
+ EllipsisPosition = epEndEllipsis
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = [fsBold]
+ ParentFont = False
+ ExplicitWidth = 364
+ end
+ object lblP5Category: TLabel
+ Left = 64
+ Top = 277
+ Width = 365
+ Height = 13
+ Anchors = [akLeft, akTop, akRight]
+ AutoSize = False
+ Caption = '[runtime: category]'
+ EllipsisPosition = epEndEllipsis
+ ExplicitWidth = 364
+ end
+ object lblP6Function: TLabel
+ Left = 64
+ Top = 308
+ Width = 365
+ Height = 13
+ Anchors = [akLeft, akTop, akRight]
+ AutoSize = False
+ Caption = '[runtime: function]'
+ EllipsisPosition = epEndEllipsis
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = [fsBold]
+ ParentFont = False
+ ExplicitWidth = 364
+ end
+ object lblP6Category: TLabel
+ Left = 64
+ Top = 324
+ Width = 365
+ Height = 13
+ Anchors = [akLeft, akTop, akRight]
+ AutoSize = False
+ Caption = '[runtime: category]'
+ EllipsisPosition = epEndEllipsis
+ ExplicitWidth = 364
+ end
+ object lblP7Function: TLabel
+ Left = 64
+ Top = 355
+ Width = 365
+ Height = 13
+ Anchors = [akLeft, akTop, akRight]
+ AutoSize = False
+ Caption = '[runtime: function]'
+ EllipsisPosition = epEndEllipsis
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = [fsBold]
+ ParentFont = False
+ ExplicitWidth = 364
+ end
+ object lblP7Category: TLabel
+ Left = 64
+ Top = 371
+ Width = 365
+ Height = 13
+ Anchors = [akLeft, akTop, akRight]
+ AutoSize = False
+ Caption = '[runtime: category]'
+ EllipsisPosition = epEndEllipsis
+ ExplicitWidth = 364
+ end
+ object lblP8Function: TLabel
+ Left = 64
+ Top = 402
+ Width = 365
+ Height = 13
+ Anchors = [akLeft, akTop, akRight]
+ AutoSize = False
+ Caption = '[runtime: function]'
+ EllipsisPosition = epEndEllipsis
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = [fsBold]
+ ParentFont = False
+ ExplicitWidth = 364
+ end
+ object lblP8Category: TLabel
+ Left = 64
+ Top = 418
+ Width = 365
+ Height = 13
+ Anchors = [akLeft, akTop, akRight]
+ AutoSize = False
+ Caption = '[runtime: category]'
+ EllipsisPosition = epEndEllipsis
+ ExplicitWidth = 364
+ end
+ object lblProfile: TLabel
+ Left = 11
+ Top = 19
+ Width = 30
+ Height = 13
+ Caption = 'Profile'
+ end
+ object bvlProfiles: TBevel
+ Left = 11
+ Top = 52
+ Width = 418
+ Height = 13
+ Shape = bsTopLine
+ end
+ object btnP1: TButton
+ Left = 11
+ Top = 67
+ Width = 41
Height = 41
+ Caption = 'P&1'
TabOrder = 3
- ExplicitLeft = 267
- ExplicitTop = 275
- inherited btnConfiguration: TButton
- Caption = 'P&4'
- end
end
- inline bafP5: TButtonAssignmentFrame
- Left = 267
- Top = 322
- Width = 261
+ object btnP2: TButton
+ Left = 11
+ Top = 114
+ Width = 41
Height = 41
+ Caption = 'P&2'
TabOrder = 4
- ExplicitLeft = 267
- ExplicitTop = 322
- inherited btnConfiguration: TButton
- Caption = 'P&5'
- end
end
- inline bafP6: TButtonAssignmentFrame
- Left = 267
- Top = 369
- Width = 261
+ object btnP3: TButton
+ Left = 11
+ Top = 161
+ Width = 41
Height = 41
+ Caption = 'P&3'
TabOrder = 5
- ExplicitLeft = 267
- ExplicitTop = 369
- inherited btnConfiguration: TButton
- Caption = 'P&6'
- end
end
- inline bafP7: TButtonAssignmentFrame
- Left = 267
- Top = 416
- Width = 261
+ object btnP4: TButton
+ Left = 11
+ Top = 208
+ Width = 41
Height = 41
+ Caption = 'P&4'
TabOrder = 6
- ExplicitLeft = 267
- ExplicitTop = 416
- inherited btnConfiguration: TButton
- Caption = 'P&7'
- end
end
- inline bafP8: TButtonAssignmentFrame
- Left = 267
- Top = 463
- Width = 261
+ object btnP5: TButton
+ Left = 11
+ Top = 255
+ Width = 41
Height = 41
+ Caption = 'P&5'
TabOrder = 7
- ExplicitLeft = 267
- ExplicitTop = 463
- inherited btnConfiguration: TButton
- Caption = 'P&8'
- end
end
- object pnlProfiles: TPanel
- AlignWithMargins = True
- Left = 8
- Top = 8
- Width = 245
- Height = 497
- Margins.Left = 8
- Margins.Top = 8
- Margins.Right = 8
- Margins.Bottom = 8
- Align = alLeft
- BevelOuter = bvNone
+ object btnP6: TButton
+ Left = 11
+ Top = 302
+ Width = 41
+ Height = 41
+ Caption = 'P&6'
TabOrder = 8
- ExplicitHeight = 392
- object vstProfile: TVirtualStringTree
- Left = 0
- Top = 22
- Width = 245
- Height = 475
- Align = alClient
- Header.AutoSizeIndex = 0
- Header.Font.Charset = DEFAULT_CHARSET
- Header.Font.Color = clWindowText
- Header.Font.Height = -11
- Header.Font.Name = 'Tahoma'
- Header.Font.Style = []
- Header.Options = [hoAutoResize, hoColumnResize, hoDrag, hoShowSortGlyphs, hoVisible]
- PopupMenu = pmnProfiles
- TabOrder = 0
- ExplicitHeight = 370
- Columns = <
- item
- Position = 0
- Width = 241
- WideText = 'Profile'
- end>
- end
- object tbProfiles: TToolBar
- Left = 0
- Top = 0
- Width = 245
- Height = 22
- AutoSize = True
- ButtonWidth = 60
- Images = ImageList
- List = True
- ParentShowHint = False
- AllowTextButtons = True
- ShowHint = True
- TabOrder = 1
- object tbNewProfile: TToolButton
- Left = 0
- Top = 0
- Action = actNewProfile
- AutoSize = True
- end
- object tbRenameProfile: TToolButton
- Left = 24
- Top = 0
- Action = actRenameProfile
- AutoSize = True
- end
- object tbSaveProfile: TToolButton
- Left = 48
- Top = 0
- Action = actSaveProfile
- AutoSize = True
- Style = tbsTextButton
- end
- object tbRevertProfile: TToolButton
- Left = 103
- Top = 0
- Action = actRevertProfile
- AutoSize = True
- Style = tbsTextButton
- end
- object tbDeleteProfile: TToolButton
- Left = 167
- Top = 0
- Action = actDeleteProfile
- AutoSize = True
- end
- object ToolButton1: TToolButton
- Left = 191
- Top = 0
- Width = 8
- Caption = 'ToolButton1'
- ImageIndex = 4
- Style = tbsSeparator
- end
- object tbSetActiveProfile: TToolButton
- Left = 199
- Top = 0
- Action = actSetActiveProfile
- end
- end
end
- object pnlG940: TPanel
- AlignWithMargins = True
- Left = 267
- Top = 26
- Width = 205
- Height = 40
- BevelOuter = bvNone
+ object btnP7: TButton
+ Left = 11
+ Top = 349
+ Width = 41
+ Height = 41
+ Caption = 'P&7'
TabOrder = 9
- object imgStateFound: TImage
- Left = 4
- Top = 4
- Width = 32
- Height = 32
- AutoSize = True
- Picture.Data = {
- 0954506E67496D61676589504E470D0A1A0A0000000D49484452000000200000
- 00200806000000737A7AF4000000097048597300000B1300000B1301009A9C18
- 00000A4F6943435050686F746F73686F70204943432070726F66696C65000078
- DA9D53675453E9163DF7DEF4424B8880944B6F5215082052428B801491262A21
- 09104A8821A1D91551C1114545041BC8A088038E8E808C15512C0C8A0AD807E4
- 21A28E83A3888ACAFBE17BA36BD6BCF7E6CDFEB5D73EE7ACF39DB3CF07C0080C
- 9648335135800CA9421E11E083C7C4C6E1E42E40810A2470001008B3642173FD
- 230100F87E3C3C2B22C007BE000178D30B0800C04D9BC0301C87FF0FEA42995C
- 01808401C07491384B08801400407A8E42A600404601809D98265300A0040060
- CB6362E300502D0060277FE6D300809DF8997B01005B94211501A09100201365
- 884400683B00ACCF568A450058300014664BC43900D82D00304957664800B0B7
- 00C0CE100BB200080C00305188852900047B0060C8232378008499001446F257
- 3CF12BAE10E72A00007899B23CB9243945815B082D710757572E1E28CE49172B
- 14366102619A402EC27999193281340FE0F3CC0000A0911511E083F3FD78CE0E
- AECECE368EB60E5F2DEABF06FF226262E3FEE5CFAB70400000E1747ED1FE2C2F
- B31A803B06806DFEA225EE04685E0BA075F78B66B20F40B500A0E9DA57F370F8
- 7E3C3C45A190B9D9D9E5E4E4D84AC4425B61CA577DFE67C25FC057FD6CF97E3C
- FCF7F5E0BEE22481325D814704F8E0C2CCF44CA51CCF92098462DCE68F47FCB7
- 0BFFFC1DD322C44962B9582A14E35112718E449A8CF332A52289429229C525D2
- FF64E2DF2CFB033EDF3500B06A3E017B912DA85D6303F64B27105874C0E2F700
- 00F2BB6FC1D4280803806883E1CF77FFEF3FFD47A02500806649927100005E44
- 242E54CAB33FC708000044A0812AB0411BF4C1182CC0061CC105DCC10BFC6036
- 844224C4C24210420A64801C726029AC82422886CDB01D2A602FD4401D34C051
- 688693700E2EC255B80E3D700FFA61089EC128BC81090441C808136121DA8801
- 628A58238E08179985F821C14804128B2420C9881451224B91354831528A5420
- 55481DF23D720239875C46BA913BC8003282FC86BC47319481B2513DD40CB543
- B9A8371A8446A20BD06474319A8F16A09BD072B41A3D8C36A1E7D0AB680FDA8F
- 3E43C730C0E8180733C46C302EC6C342B1382C099363CBB122AC0CABC61AB056
- AC03BB89F563CFB17704128145C0093604774220611E4148584C584ED848A820
- 1C243411DA093709038451C2272293A84BB426BA11F9C4186232318758482C23
- D6128F132F107B8843C437241289433227B9900249B1A454D212D246D26E5223
- E92CA99B34481A2393C9DA646BB20739942C202BC885E49DE4C3E433E41BE421
- F25B0A9D624071A4F853E22852CA6A4A19E510E534E5066598324155A39A52DD
- A8A15411358F5A42ADA1B652AF5187A81334759A39CD8316494BA5ADA295D31A
- 681768F769AFE874BA11DD951E4E97D057D2CBE947E897E803F4770C0D861583
- C7886728199B18071867197718AF984CA619D38B19C754303731EB98E7990F99
- 6F55582AB62A7C1591CA0A954A9526951B2A2F54A9AAA6AADEAA0B55F355CB54
- 8FA95E537DAE46553353E3A909D496AB55AA9D50EB531B5367A93BA887AA67A8
- 6F543FA47E59FD890659C34CC34F43A451A0B15FE3BCC6200B6319B3782C216B
- 0DAB86758135C426B1CDD97C762ABB98FD1DBB8B3DAAA9A13943334A3357B352
- F394663F07E39871F89C744E09E728A797F37E8ADE14EF29E2291BA6344CB931
- 655C6BAA96979658AB48AB51AB47EBBD36AEEDA79DA6BD45BB59FB810E41C74A
- 275C2747678FCE059DE753D953DDA70AA7164D3D3AF5AE2EAA6BA51BA1BB4477
- BF6EA7EE989EBE5E809E4C6FA7DE79BDE7FA1C7D2FFD54FD6DFAA7F5470C5806
- B30C2406DB0CCE183CC535716F3C1D2FC7DBF151435DC34043A561956197E184
- 91B9D13CA3D5468D460F8C69C65CE324E36DC66DC6A326062621264B4DEA4DEE
- 9A524DB9A629A63B4C3B4CC7CDCCCDA2CDD699359B3D31D732E79BE79BD79BDF
- B7605A785A2CB6A8B6B86549B2E45AA659EEB6BC6E855A3959A558555A5DB346
- AD9DAD25D6BBADBBA711A7B94E934EAB9ED667C3B0F1B6C9B6A9B719B0E5D806
- DBAEB66DB67D6167621767B7C5AEC3EE93BD937DBA7D8DFD3D070D87D90EAB1D
- 5A1D7E73B472143A563ADE9ACE9CEE3F7DC5F496E92F6758CF10CFD833E3B613
- CB29C4699D539BD347671767B97383F3888B894B82CB2E973E2E9B1BC6DDC8BD
- E44A74F5715DE17AD2F59D9BB39BC2EDA8DBAFEE36EE69EE87DC9FCC349F299E
- 593373D0C3C843E051E5D13F0B9F95306BDFAC7E4F434F8167B5E7232F632F91
- 57ADD7B0B7A577AAF761EF173EF63E729FE33EE33C37DE32DE595FCC37C0B7C8
- B7CB4FC36F9E5F85DF437F23FF64FF7AFFD100A78025016703898141815B02FB
- F87A7C21BF8E3F3ADB65F6B2D9ED418CA0B94115418F82AD82E5C1AD2168C8EC
- 90AD21F7E798CE91CE690E85507EE8D6D00761E6618BC37E0C2785878557863F
- 8E7088581AD131973577D1DC4373DF44FA449644DE9B67314F39AF2D4A352A3E
- AA2E6A3CDA37BA34BA3FC62E6659CCD5589D58496C4B1C392E2AAE366E6CBEDF
- FCEDF387E29DE20BE37B17982FC85D7079A1CEC2F485A716A92E122C3A96404C
- 884E3894F041102AA8168C25F21377258E0A79C21DC267222FD136D188D8435C
- 2A1E4EF2482A4D7A92EC91BC357924C533A52CE5B98427A990BC4C0D4CDD9B3A
- 9E169A76206D323D3ABD31839291907142AA214D93B667EA67E66676CBAC6585
- B2FEC56E8BB72F1E9507C96BB390AC05592D0AB642A6E8545A28D72A07B26765
- 5766BFCD89CA3996AB9E2BCDEDCCB3CADB90379CEF9FFFED12C212E192B6A586
- 4B572D1D58E6BDAC6A39B23C7179DB0AE315052B865606AC3CB88AB62A6DD54F
- ABED5797AE7EBD267A4D6B815EC1CA82C1B5016BEB0B550AE5857DEBDCD7ED5D
- 4F582F59DFB561FA869D1B3E15898AAE14DB1797157FD828DC78E51B876FCABF
- 99DC94B4A9ABC4B964CF66D266E9E6DE2D9E5B0E96AA97E6970E6E0DD9DAB40D
- DF56B4EDF5F645DB2F97CD28DBBB83B643B9A3BF3CB8BC65A7C9CECD3B3F54A4
- 54F454FA5436EED2DDB561D7F86ED1EE1B7BBCF634ECD5DB5BBCF7FD3EC9BEDB
- 5501554DD566D565FB49FBB3F73FAE89AAE9F896FB6D5DAD4E6D71EDC703D203
- FD07230EB6D7B9D4D51DD23D54528FD62BEB470EC71FBEFE9DEF772D0D360D55
- 8D9CC6E223704479E4E9F709DFF71E0D3ADA768C7BACE107D31F761D671D2F6A
- 429AF29A469B539AFB5B625BBA4FCC3ED1D6EADE7AFC47DB1F0F9C343C59794A
- F354C969DAE982D39367F2CF8C9D959D7D7E2EF9DC60DBA2B67BE763CEDF6A0F
- 6FEFBA1074E1D245FF8BE73BBC3BCE5CF2B874F2B2DBE51357B8579AAF3A5F6D
- EA74EA3CFE93D34FC7BB9CBB9AAEB95C6BB9EE7ABDB57B66F7E91B9E37CEDDF4
- BD79F116FFD6D59E393DDDBDF37A6FF7C5F7F5DF16DD7E7227FDCECBBBD97727
- EEADBC4FBC5FF440ED41D943DD87D53F5BFEDCD8EFDC7F6AC077A0F3D1DC47F7
- 068583CFFE91F58F0F43058F998FCB860D86EB9E383E3939E23F72FDE9FCA743
- CF64CF269E17FEA2FECBAE17162F7EF8D5EBD7CED198D1A197F29793BF6D7CA5
- FDEAC0EB19AFDBC6C2C61EBEC97833315EF456FBEDC177DC771DEFA3DF0F4FE4
- 7C207F28FF68F9B1F553D0A7FB93199393FF040398F3FC63332DDB000009C549
- 44415478DA9D570B5094D7153EFB7EF0581658965704410444855D23D030680D
- AD428805634631C6689B264ECD74DA344D26D3C9A4292A1AED34613A7D68673A
- 93345640DB8ACA43790A62001D231A890875C37B9FB00FD85DF6D9732E6068C5
- 84E69FF9877F97FFDEF3DD73BEEF3B67397EBF5F06002EF816977FF6C207FCC0
- 01E072B91C9FCF37FBDDDCC5E170E8A66BB12D841C7C598C0FCE2507F5F961C6
- 3D03629118EC763B381C0E70D81DE072B920441E42A0606A6A8AFDE5F3F92010
- 08402E978350285C6C3B310190E0836329C1BD5E2FDBD86C3607F5F6F6FEC462
- B6C4210091D566155A262DD3098909D78D46E37AAD56CB9B99992150BE808000
- 6FEE86DCBE8D1B37FE01B3E3C52C018FC79BDF52B2240014D4E3F13C4CDBFB47
- DF3FD570B9E179A140083EBF0FA6A7A76164640456AE5C097A9D1E2626275876
- 444211A8D7A961F5EAD570E0A7AF6585CAE5DDB4974C2683B9927C33005A305F
- 5342DFD6D6B6FDF59FBD7E363030909D846ECD971AC60379881CEC0E3B389D4E
- 569A0D1B363070898989B07BCFEE8308E45DB7DB0D4141414B0380A966279FE7
- 8F542A858AD395C72B4F57FE325C11CEEA4BE0EA2FD7436A4A2A848785B3FAD3
- E969DD9A356BE0CEE7774095A1F2BDF3EE3B7961A1A1AD7494057C581C00D60A
- 060606C03C39C94EFDF06D0470BEFAFCC74D8D4D7B140A050344EFD6D6D55210
- 080D0D6527260074D2F4F47470CE38619D7A9D6573FEE60C2CD997A496A8A8A8
- AFCF002D6E6C68983BFD57F2914824505B5BF7AFABED578BC3C3C31900AFCF0B
- 1DD73A20636D06FB3CAF0C7AA6F531B131F0E65B6FDE5F959696C1998BB360CF
- C50190A42A4E57B05A2ECC80582C063C7D437777F7F7C2C2C2182002DBFB452F
- A4A4A4009FC767C14901243D2AC7C4C4041C3B7EEC4F45C545AFC1AC632CBC16
- 07401B9C3C7102377B0400A7B1A1B1FDC68D1B39048000D12989842B56AC60DB
- D35ABA294309090960301A61FFFE575F2E78A6E0AFC3C3C30C2071E36B0178F0
- 5475F5F5E0240094AEB99449F1C435B5351FFDE3EC3F5FC4DA734522113324AD
- 410BB1D1B12CB51EB7075C6E17E343F2CA6410880490979757A052A9EAABABAB
- 19A81776BFF0CD3E407AD66834CCCD18A8391F085728A4D7AE5E5523BBD7F4DF
- EFDFD9D2DABAD1ED71832C58F690C06E2CA15C1E0ACB972FA74C18DFFED5DB45
- 28D7818ABF574CA8D42A4FF1B6E279337A3C00EDB81686068700DD0D7A6EF580
- 3252C96A2A100A20521909C343C311353535151F967FB889C7E7416C4C2C8C8C
- 8E62C03058BB7A2D984C266BF677B21B91271359D959EDE81B3DB77B6E8F2237
- 2C3B4B76BA29068278BC0AEA6AEB41815A4F4A4E82D6E656C8CECE86F1F17198
- 9A9E02A53272737767E789F3E7CFC7373537B3D344474503DA30E4E4E4C08E9D
- 3B08A00BDFB7194D46C7B265CBDA51B6F7925352EA313BD7456211646565F983
- 838317073089FA3FF5C9697C29139627C443DB9536C8CCCC648CBEDFDFFFF33B
- 3D3D472E5CB820B6DA6C603018180065849249502215435C5C3CE3008FCB636B
- F47A3D58AD36282ADE3651B26B47AEE6C183DEA7729E82E8E8E84701500DC7C6
- C6A0E6621DA8D52A06A0E36A07F9B9E4E6CD9BBFC5BA1FB872A515B45A3DD639
- 84F9BE6BC60564CD1488144046430A898989C1F7B4C82321AC7BF249DC771CB6
- 3F5FFCD6F6E7B61D2762A3C21E05A0D3E9989B353634013217525293A1A9A929
- AEE7B39E13B76FDFDE4206333434C42C988212E3490944565AC7E57001BB2393
- 266545817766661666C00AED6DEDF04C61FEA9575EF9F18BC4AD4748481A45A2
- 40547414D4D75D6275777A3D595567CE7E14201024BB313BF7BEB8079A7FF723
- D3DD730D8A03429463705030604D190FFA07FA41887D4219198D010BC186C1BB
- BBAF83C56281F8F8B85B9F9CFA58856D9A7AC97F03C01483C968825569AB3003
- CDB8B1748FAEB9A63CD2E7941B57A9818BF380116B3A643083CBE98269EC7CE6
- 491398903333F8ECC2F493F78B44124C7F2C6CC9DF02668B15BA3A3B1F3A247A
- 87FD771F1CDF849ED19D9B9BFBD540423AAF3E57CD1C2C353515FE7CF28FBFFE
- FCC167EFE561870B98E2825EA104B5A91F46BC4268E109C0E21A04B9301A7C76
- 1198274C3089249B0DE284106CCB79DFCFC393DBE0DAB54EF61D05273BE360C6
- F47AAD75DFDEBD1F1C2A3B7CF021007AA1E6620D2E0E096969BC523E6CBCF392
- 275407324E1280800F2EEF08240B5240333E090EB1199CBC29F05815F0DD2917
- 4458F4501310099A491B08D1BA373DBD114821D73A3EC57E3283B276314BF7E3
- F0A2D58D3362BEF1C62F4E1E3B76EC000380A396834CA6B9A939AEB6A6EE6F23
- 23A3B951514A6432F56D1EF0653670FB1DE0B7CBC01EA4C1FAFB20DABA02126D
- 3AE0E13B7D76005B5018F3FDF5EBD781C3E940C275B066469E32DBFFFD30AE1D
- 431E98A1A4A4E46CE9C1D21F29C2154E9A62258383830E742C41E97BA52DCDCD
- CD39D4EB674925C3B62A41B2883009B809D78B785C30E57081C2CF851CAF1EFA
- 3181B778A13085C155EA74B46C37FA463B7A8283D937C9917A84C1A0071BAA03
- BBE299D2D2DFEC93C982ED229158C2C1BAF1D15223AE775DFFFDC58B179F1B78
- 30C0BC801A4D803480313B147D9D8C854629A9241019CE071FC70F765402FE01
- 271AD0EA356934BF416B6B1B3B39A9C0472A4159EA745AB0A3833EBBB5F0CCC1
- C387F622204708CE85CC8AD1F514BB76EE6AE9EBEB4B9BB64F831E9152BDA412
- 2926CDCF864E1AC5E93BD23B699F864AEAF7418134DB71616D463A8825626869
- 6A65FD22292991AD19191D63B29C98304251D10FAA0E971DDE477C1361568270
- 1FE60338F729F7BFBABF4AA7D5255BAC16331A8B0F3921460B8DC5FF09580D45
- 421020F389C6349A538628AD64C14FC43EC18CC66030B11932252589B88E9D74
- 900537998C74F2AA2347CAF6E1791C344191D2E6E60C2C81DD211A1C1AF44644
- 44C8912CD3B8A91F83F2CF9D3B977CF7EE5D3576B59CEEAE6E954EAF4BC26C89
- 695AA2F290F3111802B12A358DD9AD103BE5F2F87874CA6130A15F188C06282C
- 2CA83A7A148303C741F3852C440664420FE7012221DE0EB2548958C2BE259BAD
- ACAC64A9A61B1B8E082D38A9ABAB8B0065B7B7B7AB474747D330DD812CE5892B
- 90230ADC5C0E5E2421353322DD96822D678E1E3D82C1FD76370E2A544202B0E8
- 4C480E26E00B586AE864980136F3CD8F5D3482D3C2B8B838282F2FE7171414C4
- 5FBA74291D3DFE6994EF4B9111518162EC131ACD005B9F9F9F5F5576A4EC87B8
- 9F9DCC27501AC84AB9A499707E26989F6029232855068ED2D7D383038A520997
- 2F5F86AD5BB7C2D8E8584ED9E1B2BFE0049532E39AF1173E5B5879E8D0A19711
- BC833C804AF6984BF27FFF385DD8B6890F6C644380F7FAFA649D9F76AAB83CAE
- A7A46457874824F42FF80DF8B88BF5826FFDF3FC7F2EAC94C73DA70E3A327709
- 6B84FF0180E96622F4B22C130000000049454E44AE426082}
- Visible = False
- end
- object imgStateNotFound: TImage
- Left = 4
- Top = 4
- Width = 32
- Height = 32
- AutoSize = True
- Picture.Data = {
- 0954506E67496D61676589504E470D0A1A0A0000000D49484452000000200000
- 00200806000000737A7AF4000000097048597300000B1300000B1301009A9C18
- 00000A4F6943435050686F746F73686F70204943432070726F66696C65000078
- DA9D53675453E9163DF7DEF4424B8880944B6F5215082052428B801491262A21
- 09104A8821A1D91551C1114545041BC8A088038E8E808C15512C0C8A0AD807E4
- 21A28E83A3888ACAFBE17BA36BD6BCF7E6CDFEB5D73EE7ACF39DB3CF07C0080C
- 9648335135800CA9421E11E083C7C4C6E1E42E40810A2470001008B3642173FD
- 230100F87E3C3C2B22C007BE000178D30B0800C04D9BC0301C87FF0FEA42995C
- 01808401C07491384B08801400407A8E42A600404601809D98265300A0040060
- CB6362E300502D0060277FE6D300809DF8997B01005B94211501A09100201365
- 884400683B00ACCF568A450058300014664BC43900D82D00304957664800B0B7
- 00C0CE100BB200080C00305188852900047B0060C8232378008499001446F257
- 3CF12BAE10E72A00007899B23CB9243945815B082D710757572E1E28CE49172B
- 14366102619A402EC27999193281340FE0F3CC0000A0911511E083F3FD78CE0E
- AECECE368EB60E5F2DEABF06FF226262E3FEE5CFAB70400000E1747ED1FE2C2F
- B31A803B06806DFEA225EE04685E0BA075F78B66B20F40B500A0E9DA57F370F8
- 7E3C3C45A190B9D9D9E5E4E4D84AC4425B61CA577DFE67C25FC057FD6CF97E3C
- FCF7F5E0BEE22481325D814704F8E0C2CCF44CA51CCF92098462DCE68F47FCB7
- 0BFFFC1DD322C44962B9582A14E35112718E449A8CF332A52289429229C525D2
- FF64E2DF2CFB033EDF3500B06A3E017B912DA85D6303F64B27105874C0E2F700
- 00F2BB6FC1D4280803806883E1CF77FFEF3FFD47A02500806649927100005E44
- 242E54CAB33FC708000044A0812AB0411BF4C1182CC0061CC105DCC10BFC6036
- 844224C4C24210420A64801C726029AC82422886CDB01D2A602FD4401D34C051
- 688693700E2EC255B80E3D700FFA61089EC128BC81090441C808136121DA8801
- 628A58238E08179985F821C14804128B2420C9881451224B91354831528A5420
- 55481DF23D720239875C46BA913BC8003282FC86BC47319481B2513DD40CB543
- B9A8371A8446A20BD06474319A8F16A09BD072B41A3D8C36A1E7D0AB680FDA8F
- 3E43C730C0E8180733C46C302EC6C342B1382C099363CBB122AC0CABC61AB056
- AC03BB89F563CFB17704128145C0093604774220611E4148584C584ED848A820
- 1C243411DA093709038451C2272293A84BB426BA11F9C4186232318758482C23
- D6128F132F107B8843C437241289433227B9900249B1A454D212D246D26E5223
- E92CA99B34481A2393C9DA646BB20739942C202BC885E49DE4C3E433E41BE421
- F25B0A9D624071A4F853E22852CA6A4A19E510E534E5066598324155A39A52DD
- A8A15411358F5A42ADA1B652AF5187A81334759A39CD8316494BA5ADA295D31A
- 681768F769AFE874BA11DD951E4E97D057D2CBE947E897E803F4770C0D861583
- C7886728199B18071867197718AF984CA619D38B19C754303731EB98E7990F99
- 6F55582AB62A7C1591CA0A954A9526951B2A2F54A9AAA6AADEAA0B55F355CB54
- 8FA95E537DAE46553353E3A909D496AB55AA9D50EB531B5367A93BA887AA67A8
- 6F543FA47E59FD890659C34CC34F43A451A0B15FE3BCC6200B6319B3782C216B
- 0DAB86758135C426B1CDD97C762ABB98FD1DBB8B3DAAA9A13943334A3357B352
- F394663F07E39871F89C744E09E728A797F37E8ADE14EF29E2291BA6344CB931
- 655C6BAA96979658AB48AB51AB47EBBD36AEEDA79DA6BD45BB59FB810E41C74A
- 275C2747678FCE059DE753D953DDA70AA7164D3D3AF5AE2EAA6BA51BA1BB4477
- BF6EA7EE989EBE5E809E4C6FA7DE79BDE7FA1C7D2FFD54FD6DFAA7F5470C5806
- B30C2406DB0CCE183CC535716F3C1D2FC7DBF151435DC34043A561956197E184
- 91B9D13CA3D5468D460F8C69C65CE324E36DC66DC6A326062621264B4DEA4DEE
- 9A524DB9A629A63B4C3B4CC7CDCCCDA2CDD699359B3D31D732E79BE79BD79BDF
- B7605A785A2CB6A8B6B86549B2E45AA659EEB6BC6E855A3959A558555A5DB346
- AD9DAD25D6BBADBBA711A7B94E934EAB9ED667C3B0F1B6C9B6A9B719B0E5D806
- DBAEB66DB67D6167621767B7C5AEC3EE93BD937DBA7D8DFD3D070D87D90EAB1D
- 5A1D7E73B472143A563ADE9ACE9CEE3F7DC5F496E92F6758CF10CFD833E3B613
- CB29C4699D539BD347671767B97383F3888B894B82CB2E973E2E9B1BC6DDC8BD
- E44A74F5715DE17AD2F59D9BB39BC2EDA8DBAFEE36EE69EE87DC9FCC349F299E
- 593373D0C3C843E051E5D13F0B9F95306BDFAC7E4F434F8167B5E7232F632F91
- 57ADD7B0B7A577AAF761EF173EF63E729FE33EE33C37DE32DE595FCC37C0B7C8
- B7CB4FC36F9E5F85DF437F23FF64FF7AFFD100A78025016703898141815B02FB
- F87A7C21BF8E3F3ADB65F6B2D9ED418CA0B94115418F82AD82E5C1AD2168C8EC
- 90AD21F7E798CE91CE690E85507EE8D6D00761E6618BC37E0C2785878557863F
- 8E7088581AD131973577D1DC4373DF44FA449644DE9B67314F39AF2D4A352A3E
- AA2E6A3CDA37BA34BA3FC62E6659CCD5589D58496C4B1C392E2AAE366E6CBEDF
- FCEDF387E29DE20BE37B17982FC85D7079A1CEC2F485A716A92E122C3A96404C
- 884E3894F041102AA8168C25F21377258E0A79C21DC267222FD136D188D8435C
- 2A1E4EF2482A4D7A92EC91BC357924C533A52CE5B98427A990BC4C0D4CDD9B3A
- 9E169A76206D323D3ABD31839291907142AA214D93B667EA67E66676CBAC6585
- B2FEC56E8BB72F1E9507C96BB390AC05592D0AB642A6E8545A28D72A07B26765
- 5766BFCD89CA3996AB9E2BCDEDCCB3CADB90379CEF9FFFED12C212E192B6A586
- 4B572D1D58E6BDAC6A39B23C7179DB0AE315052B865606AC3CB88AB62A6DD54F
- ABED5797AE7EBD267A4D6B815EC1CA82C1B5016BEB0B550AE5857DEBDCD7ED5D
- 4F582F59DFB561FA869D1B3E15898AAE14DB1797157FD828DC78E51B876FCABF
- 99DC94B4A9ABC4B964CF66D266E9E6DE2D9E5B0E96AA97E6970E6E0DD9DAB40D
- DF56B4EDF5F645DB2F97CD28DBBB83B643B9A3BF3CB8BC65A7C9CECD3B3F54A4
- 54F454FA5436EED2DDB561D7F86ED1EE1B7BBCF634ECD5DB5BBCF7FD3EC9BEDB
- 5501554DD566D565FB49FBB3F73FAE89AAE9F896FB6D5DAD4E6D71EDC703D203
- FD07230EB6D7B9D4D51DD23D54528FD62BEB470EC71FBEFE9DEF772D0D360D55
- 8D9CC6E223704479E4E9F709DFF71E0D3ADA768C7BACE107D31F761D671D2F6A
- 429AF29A469B539AFB5B625BBA4FCC3ED1D6EADE7AFC47DB1F0F9C343C59794A
- F354C969DAE982D39367F2CF8C9D959D7D7E2EF9DC60DBA2B67BE763CEDF6A0F
- 6FEFBA1074E1D245FF8BE73BBC3BCE5CF2B874F2B2DBE51357B8579AAF3A5F6D
- EA74EA3CFE93D34FC7BB9CBB9AAEB95C6BB9EE7ABDB57B66F7E91B9E37CEDDF4
- BD79F116FFD6D59E393DDDBDF37A6FF7C5F7F5DF16DD7E7227FDCECBBBD97727
- EEADBC4FBC5FF440ED41D943DD87D53F5BFEDCD8EFDC7F6AC077A0F3D1DC47F7
- 068583CFFE91F58F0F43058F998FCB860D86EB9E383E3939E23F72FDE9FCA743
- CF64CF269E17FEA2FECBAE17162F7EF8D5EBD7CED198D1A197F29793BF6D7CA5
- FDEAC0EB19AFDBC6C2C61EBEC97833315EF456FBEDC177DC771DEFA3DF0F4FE4
- 7C207F28FF68F9B1F553D0A7FB93199393FF040398F3FC63332DDB000007EF49
- 44415478DAA557494C5459147D9FFA50C52020833289322B4A83A248DA38A431
- 22A24C894A42ECD00BDDB831313171E1C279484C74D5B8E9EE841834B62DA0E0
- 80A222600403E21845914150041151849AFB9C177E350A38F54F7EA07EFDF7EE
- B9E79E73EF2BC56EB71B841016F10317D63A6E455184939393B0D96CF2B376F1
- B9768F73A90A5E56BF070003984C26613018C4C78F1FC5D0D090FCCB6793274F
- 96C13F7CF820FFAAAA2A9C9D9DE573171797FF0FC06AB5CA8DFBFBFBF50F1F3E
- 5CF0EEDD3B2F00500706067478660A0F0FEFECEDED0DEEEEEE5686878709CAEE
- EEEE6E5FB26449EFD2A54BEB00DE4E96743ADDF70160508BC5F18AEEE0C18339
- 972E5D5A80EC6CF8CE3E3838285EBC78618F8E8EB622B8FAF6ED5BC90AB34E4C
- 4C749A33678E69F3E6CD053E3E3E9DDCCBCBCB4B2BC9D7016835E645F4555555
- B15BB66CC9F3F0F0B020133BB379FEFCB9FC1E542B086C67F62C0D3217040766
- F41B366CA800904AB3D92C264D9AF46D0040EBE8CC859B9B9B3871E2C40ADCBF
- F8FBFB0FB3BE0477F1E2453173E64CE1E7E727EBCFECB92E2E2E4EDCBB774F99
- 3B77AE7DC78E1D7F818156EE334A0FE303A0D09E3E7D2A4825B31E0DA0A4A424
- FBCA952B490060E467BE5B5E5E2E10442080CC980098697C7CBC001B3A946130
- 3535B50080FB99796060E09719E0E28A8A0A99C568FBB8BABA32586E7575F54F
- C8D6440014666D6DAD0CC6CF9A33F83FD7070707ABDBB66DEB9E3D7BF6EF5A9C
- 517B8E0F80962A2A2A22FA4F18A0F590FDAF75757531BEBEBE660222583842CC
- 9A354BAA9BC18D46A3B41ECBD1D7D7E772E8D0A19AACACAC724AEA9B6CC80D8E
- 1D3B2637FB0C8072F9F2E5DF6EDFBE1D0900260262961461545494D403D7F2A6
- 1E203E015B3A6FDAB4E9EF55AB5635767474C83DA98D2F026056172E5C180380
- B4969595659F3E7D3A11B577D2EBF53680B0C07AA45A52CBB5BCA907D85281E0
- 949494944268A419FA91A0F2F2F2BEDE07B829336337E3A5B901E273AEA9A909
- 82BAFD9F3C791277EDDAB5307C67A3B7C900454900B4645858980E4C0C6CDFBE
- BD08E5E943598700C4969D9DAD35A38901BC7AF54AB4B5B549C477EEDC110101
- 01B2A6B4D0D4A95305E874071B6B8F1C391201905632D0D9D929A907C5CA9B37
- 6F869393935BA09321FC6D43DFE86E6A6A1A0033C3EBD7AFB7C98EA6D34D5C82
- F3E7CFCBCD626262446565A5C026E2E5CB97D26600107EEBD6ADACD2D2523F88
- D2C46C828282586FB168D122B16EDD3A02B4E27D239E59A64F9FDE0EE67AB157
- 3304DE492D2D5CB8D0EEE9E9393E00FAFFF8F1E3022F09D028AE5FBF2E929292
- A868D1DCDC9C7CF7EEDD1567CF9ED5BF7FFFDEFCFAF56B492759A105E90C0494
- 1AC073056B14BC23E705A8EFCBCDCDFDE3D9B3673D040AD06301B0865D5D5D14
- 9B98376F9E0400DF0BB451B5A1A12115007E06201B4A64A5D5088AB605C58260
- E800361A3A84656129D931E7CF9FAF605F7D4E4E4E29EEDA91F13D1600C5479A
- 6137D9DDD86241B317749081CC63E104537B7B3B67900CAA8D668A95EBE81A64
- 2B054C56A64C992299E433CC117D5A5A5AFDC68D1BFF898888182B42DA0E4291
- F5A40D597704083975EA540E8204A2EB191F3D7A245A5A5A64A6DA41037614A8
- A7BCA903B024C54AE1A6A7A7CBE0F5F5F502E3DB79C68C191D8585850518D364
- E65300A0586E80B62919C0C6F100948EE0EEB099995943DD92256DE2B104D40C
- FF271B7C4E4021212102FD9F410504AB7548F60EE3E1C387FF04F0AEC58B17FF
- 07803E2F2E2EA6CF655B2D28285876FFFEFD94D8D85805F44A80DC7864F6CBA0
- DEDEDEB26C04C1405A1BE6F3E5CB97CBCC6FDEBCE9E88EBC502227E8C2949F9F
- 5FBD77EFDE2A0700BE70EEDC393610036C97D6DADABA00945BF0D9C6BA327068
- 68A8B422B3A4557951686486CFC90CB5B06CD9324770ED5DEEA1BD0700EE5BB7
- 6EADC28C28930018884D0662F3C6B4CB41438946FD8CC8D8AED559DB449BF5B4
- 19EB4C85B32CFC8EE583DA2513748E169CEF69C1799C83151B77EFDE5D02B62D
- 0A6CA7A2E359E05FDDCE9D3BF3917D140F1B9AA8D8FFB981D692695306A08830
- 9024F5CC9625A16B18F0C68D1B0EA0740813A045D137F49999998DBB76ED3A83
- BDCDF84E55B09902CF7B60C4A6A304716812161E1E596F06270866CB9B47290D
- 9036F934F750B8BCD8B4983999D1663F4B0386F5AB57AF6EDCB367CF193C3353
- 27B21503B91B28C97FFCF87118501B891474DAC1886D24633BB366B723287A9F
- 83874D888078252424C80E78F5EA55392F2223232540CE06960525D267646434
- ECDBB7AF989D9EFB8CAC5515D4C403F37A2D50FA81CE61506887265428DB93F5
- C26727646CE50998070A7C27013133829A366D9A6CD30CC4332467072F88D811
- 1CBDA061FFFEFD67008AECCA193332E6559E6275EC6CE858060432F3A48BA03A
- 58D2EFC1830701D82014E50984727D10C000AFEB780EE0042418BE0FAB4ACA79
- B375633F69CD9E9E1E47703A8DA522F5D48FE33C4011E2B6B08990465EA4EFE4
- C993926ADED84887DAFBA2A1040250084416047AFD41B72B6E15949BA1111B75
- 42116AC157AE5CD978E0C0817F189CCF493D018C7B26D484436A78D064532220
- EDD8C5EFB89093EEE8D1A34EE8E9DE388E07C00161B06F02FABE1B32B340C45C
- EFC2E0CC1CFB99B98EDA19E7E7D9C40712ADD1703119E1E184E0481FE705070D
- 7E1D89356BD6506CA1105826EAEE0F6728A0BD096A2F0178338332F309AEEFFF
- 713A7A6CB36CEC0F04081719D0F902A1091B5CD5CE2636EA37E01701FCF0CFF3
- CF31F16C38E20E4656BE618DFA2FD3308F8CBFBD23FB0000000049454E44AE42
- 6082}
- end
- object lblG940Throttle: TLabel
- Left = 42
- Top = 4
- Width = 114
- Height = 19
- Caption = 'G940 Throttle'
- Font.Charset = DEFAULT_CHARSET
- Font.Color = clWindowText
- Font.Height = -16
- Font.Name = 'Tahoma'
- Font.Style = [fsBold]
- ParentFont = False
- end
- object lblG940ThrottleState: TLabel
- Left = 42
- Top = 23
- Width = 59
- Height = 13
- Caption = 'Searching...'
- end
end
- object pnlFSX: TPanel
- AlignWithMargins = True
- Left = 267
- Top = 75
- Width = 221
- Height = 40
- BevelOuter = bvNone
+ object btnP8: TButton
+ Left = 11
+ Top = 396
+ Width = 41
+ Height = 41
+ Caption = 'P&8'
TabOrder = 10
- object imgFSXStateNotConnected: TImage
- Left = 4
- Top = 4
- Width = 32
- Height = 32
- AutoSize = True
- Picture.Data = {
- 0954506E67496D61676589504E470D0A1A0A0000000D49484452000000200000
- 00200806000000737A7AF40000001974455874536F6674776172650041646F62
- 6520496D616765526561647971C9653C000005774944415478DAC597C74B6C59
- 10C64F9B737A9815DA8839A388115C28032266915988CE6660FE9199EDB8706F
- C4D1850CA2A8288A2898338AA298033EF3336B4F7DA5E77A5B6DB5DF660E1CEE
- EDDBB74FFD4ED55755A7353A9D4EFC9F4303008D46A33C282E2E76373535B536
- 333313262626FC9DFC5EFDDE47436E0A57CCC7C747F1F0F08079DEDCDCFC5DFD
- 9E02505A5AEA78727252ECECECEC636969C9CF2480BC1A33A461F5F5EAEA4A77
- 7676B6E2E2E2D2DAD0D070AD07909D9DFD5B4040808F56AB153E3E3EC2C2C242
- D9BDDA0B3FE301CCDBDB5BB1B5B525565757C5FAFAFA7C4747C73F0A40414181
- 3BEDFAF798981891989868D0A8B121C0FBD8C8DDDD9DB8BFBFE7E7232323988F
- E6E6E67F3535355D33406161A1D6DEDEBE22232343F8FAFAEAC55E6DD41800D2
- 91080B0B131452717979294647471962737353747777E39DEAC6C6C6430620E1
- 31406666A6F0F0F07803606C0820E0F0F070E1E4E4A400F5F7F7731876777745
- 5757171E57D7D7D73F0194949430404A4A8AF0F2F262B7595959899B9B1B1690
- 3100F86D545494A0F594671473B1B4B4C46B6D6F6F8BDEDE5EAC575D5757F704
- 4019C000494949C2DFDF5F242424080707074E9DF3F37341CAE5EBE9E929EFC2
- 50ED00747474B4B0B5B5559EEDEDED89E9E969FE0DD6DBD9D9110303031C0205
- A0ACAC4C4B062BE2E3E35984212121BCD8EB5D630710D4F1F131C715D78B8B0B
- 7E6663632362636385B5B5B5F23EA5B5127B590B00303C3C8CCFD5B5B5B52F00
- 8E8E8E15701D42400A156E6E6E9C8E521386C4F69CDF1C77D40F39E0B5B1B131
- 0E230C030020D000A0E8D95B808888083688C5A062188627BCBDBD393BE0DAAF
- 68E1F0F0504C4D4D291A820D18070800262626DE07080D0D6500189710EA4A48
- 158C61E0194320070707627C7C9C8DBD2AC30C2135F1068052A622282848B8BB
- BB2BC6E57C5D8AE10D84EB3D0800A0D8C0B09CD238E6FEFEBE989B9BC3BDBE08
- 01E0E7E7A700A821A406A4417C4E4F4F17E4B53700D003F25C6D5CC61F6205C0
- E2E2E2FB00308E459182883DC408636A0FE01E9902B11A126667672767897AF7
- 00432A2373500DDF0580F26118C5048AC60484DA1B308E8605202CBEBCBC2C82
- 8383F53265707050ACADADB161D40D881113F7D7D7D75F07901E9061409141AE
- C338DC89F28A0E87D0A5A5A529109393932C44E901BCFB2900B2002130040081
- C2088C63319453C4530E9471BC8381546B6F6FFF10809EBDF482CF0002030305
- 1A15EE115B7433C4523D90BE3939397C0F4394624AFABD06D8D8D8600FE801A0
- 1463113A98700B45DC2500F21E5E4075EBE9E9E1EB7B83CE152C60ACD9DADA2A
- 8E8E8EBE0680662401D090D013E00DB5B0D088A4BA0D0DFC0EF501030DE739DD
- 18408A510D40C7B297760C0018453341083C3D3D051DD178413B3B3B313F3FCF
- 4DE4A381142E2A2A629D2C2C2C30C47B1E407B46257C73208107A406301182E4
- E4646ECFB3B3B39F0260E4E5E5B1F720508441ED017508004047B243BD23995A
- 84302EBB627979B9989999114343439F024446468AD4D454365C5353C3460120
- 21641600808EE84F00F9F9F90CE0EAEAAAE701D9942A2B2BF9348B02F3D9C0EF
- ABAAAAB8E1F4F5F5293D00531624D40E00B4B4B43C01E4E6E6B206D0EDD4BB97
- 15302E2E8EC5B7B2B2F22980AC0908973C0B604A4FE08A8645DFFDDDD6D6F69D
- 01B2B2B2BE11C01FD4EF35EA562CA7B187520CD98AD5FD40C250463D5028FEA4
- 7A72CB00546235B4E35F290401A09667007523FA993F261240FDEF08058E0EA6
- 13B4C97FE960A263003A649850A7FA4622FC853CA125A38A3575173466C0A01A
- E6F9D9239D1397E850D249E23EA386F50440954F432EB1A47B7BD2803DD1E164
- 699CCFBFE0188AFF0F0AC5396DE69CDAF3ADDE7F432A4026746F8ACD1A1B6F23
- 43F340000F246A1D3EFF0712759FFDF03F71A80000000049454E44AE426082}
- end
- object imgFSXStateConnected: TImage
- Left = 4
- Top = 4
- Width = 32
- Height = 32
- AutoSize = True
- Picture.Data = {
- 0954506E67496D61676589504E470D0A1A0A0000000D49484452000000200000
- 00200806000000737A7AF4000000097048597300000EC400000EC401952B0E1B
- 000008124944415478DAC5977B7054D51DC7BFF7B177DF9BCDE649221188840D
- 2492A243487C2C3E68476D29D599A2A53E3AAD5275A60FFFE91FDAD67F9CB68E
- 33AD558A05E91F75C4222DA2B49476B4DD100832986002C612A76D90B0E4BDBB
- D9DDECEE7DF677CEEE86242E26FCD53373F7DEB97BEEF97DCEF7F738E708F83F
- 3761FE8B8AF61DCD922405645986284AD4837511F37761EE975691D1F83BFAB1
- ACFCDD84699A300C9D2EF3D2E8F1C7078A0254DDBC73693A36F2A6ECAFDB20D8
- 7D648FFDC500A4FC5D2CC67B8596330C187437F8DD2220331DB5AC44E4AFAE40
- CDB648C7A3B13900BEA6674F3856843634D59761ED32179C6E0982457F8B22D9
- 16721D8BCDBA88A656BE8F65E4402CC1443A65A277701A670646A00F75BD19ED
- FDE9D61980D2F52F360B8AB7AFF9861B70FFCD15106DB9893315662BCFC558CC
- FCF5DC37C40D9743443A6342CD92021AF087E363E8EDEA3414C5563E7A6C7B2C
- 07D0FA7248F45487BFFAC5B568A1D98B9200E67E360087B06685C16200A8BF4C
- 1F6F5AEF476DB9827852C7BEF7C691552DF49E4FE1E0A11390856C70F4E863E7
- F890810D3B09A02AFC350268AC7390EA050001DCF382B068EFB3E650047CA9B5
- 04D565F63C90855D6F8F209535F1F1A7691CF8731714510B0E87BF9D0768FB6D
- 48745785EFDAD88CE6650E2E9BCF2B2291A6E8B5989A020B8585FD4FCD6517F1
- E5363FCA4B6C33EF7A0692F86777028669E1CC600687FFCE007402F856016037
- 77C11DB7AC41FB6A27B6DE164065A90D9A6E612CA66124AA632CAE2132AE619A
- 6434CDE2243E9784CDED2528F55E367E8E667CA82B46C6019DBEEBFB4F16EFBE
- F73E6C821A1CE978A400F02A01D4846F696BC44377FA70FB3A1FBC349830CFE9
- CC7046353134AA6272CAC0D0988AF1B8C1DFF93D12EE0DF9E173CB33FD2F4DA8
- 78E31F516435529226A3190C4045E7D15390580C743C9403286DDB13927CB5E1
- D61B1BD07CAD02874D44439D82B5F52EACBAC601492A1E013CB7498CA9940E85
- BE713B2EA7C96854C5BE700C094A3F9DFAE99A059520CE7EAAE2FD63DD145B99
- E058C7837980F6DF85244F6D78DD1756A2E95A1B6CB2489700990C7B9D228138
- D052EF44C0277F469562EDBF97B278AB33CE83CE20E306D5225537B94BCF0EAA
- E839D9531CA0B979255613804286D9251388C4B281152232BCAC4AC6F52B1C04
- E4BC22C8274359ECEB8843D7993ACCB8C59F5523A740FF7915677A7A28B5B3C1
- F18E6FCE06B8261C0CD623B89400949C028A4DE0F92C3100F1722AAE5B69C7E6
- 365F51884F2E66F1DABB711E2F2CEA59E06979F9558A958F2F6838D7779AFC97
- 094ECC075876DD0A342E5560B793719A3D73814D2A005CAEDB32A9F2E4E600AA
- 03B6CF004CA50CFCEC8D711EF50C4033732AB040CCE60106FB3FA4882680A3F3
- 00BC55CB515B21A3DA2FA1C42DC24E81C514281426BE3CD1F38377F8D0B4DC71
- C5C07C6EEF3826E239FFEBCC38F93F963431126399A32139D4474B442638391F
- C053B91C5E5A845831712B123C2E114E52C34EAEB0B18B201EBED38BD6602E06
- D8E01D7D296CBCDE3D27535EF94B0C5D1F65C8B085695A079254D05234FB74C6
- E00AA52E2E02C045000EBACBF96C60F7FBDA5DF8FAAD1E6E9C49FAAB8371F4FC
- 5BC54D8D763CF99512AE0E6BFB3B93D81B4E72E935EAC7EAC422006AC39E8A15
- F07A8A03DCBED6C18D30E3A9B481170EC4D07F419F99F5E3777B4909177FFEE8
- 7C16CFFC3EFA3900BDB4541340E74C1A5221721340657D518050B3033FBCD7CF
- 17A768C2C0CFF74731386ACCF13DAB1F3F7E20C09FD394FFDB9E1FE52E2A0A30
- F42129909D05C02A21956277E57578FA1B65A8ABB471BFB320B451656DA142C4
- 54189ED4F18B3FC61099348A06E0AFB797A1AA54E681F8BD9DE3383FA253F199
- 0540CA4D4D13C085D3D48701144AF186DD548A6BC2AE8A9578645309EEBFCD47
- 25D8CEA3BFD08627353CFB7A0C1309F38A1570DB4637B6B47BF8F3CBEFC4F0B7
- EE3434329CD17200D304902080E9A16E52400D4E1E7BB800B02B2479ABC38EF2
- 551484325F8ED7D4D9716B93135B6EF2A08C4AF0E15329EC3E92F8DC125C1B90
- F0D213E53C4E8E7C90C24B6FC7732EA04294CA92617241825C908E7C4031A006
- A3C7F3CBB1BFF595904C1B12A5BC91528F0148947E221C548C1EBDDB87074891
- 432793D87D38B1E0BEF485EF04D040EA9DBB90C5F77F33CE6B000348AB24FD34
- 2991D6908D9C2205B460B42BBF21F1AFDF41315019B60556C3E950E0A6FCB753
- 39E6AB62AD823D4F55E160570ABB0EC7B150DBD2EEC6F67BFCDCF7773D13E101
- 99290422D5836C3A03F51201587A307A22BF25F3DFF822015485E5400364C53D
- A3002B3EAC24EF7F7A098EF7A7B1F3D0C2003E82FFD34F96E0C0B1247EF9568C
- AF822A03C8B2A24467032D0575F8347741ECE41339005FCBF321D9571D964B96
- 43905D906C0E329E5F9629FAB76EF4F2F40B9FC92C08C0DA77EFF161CF91295E
- 01355A14748D4168B42BCED08E39096D7C809E93ABE2DD4F0D70006FE38F1A24
- F7927F89AE0A41A03DB9202AFC62FB7341620B4EFE847435DBE2FCC1C4A21311
- 4C95CD985E6BFC6E242EAAA63A5596E87F2EC94774D6DC2742741DB1F91B3699
- 6A32B7CC8A32372C08855391781507A3C2B18C00D8E9888E6630753AA0581015
- 0FD491D3AF0A8AE3B1F4D05E8B0F69F3B448E6F4708354B26687E45C12A2A54F
- E40315CE857C672C2ED27A9E814E43B95DB48999EDB4A9EB4672E81D3D71F607
- B26FD54535DE65720049AE132C7DCA473D6A04D1552B88F6001B220731F3931F
- 7901CBF3552A9CD30416F89951CBCA4428D022A635999CD35D14A88A5826399E
- 0E2D10AFE61CB27855F81656D0C8A5AA694DF092FA3F8CC8125D22B18C700000
- 000049454E44AE426082}
- Visible = False
- end
- object lblFSX: TLabel
- Left = 42
- Top = 4
- Width = 146
- Height = 19
- Caption = 'Flight Simulator X'
- Font.Charset = DEFAULT_CHARSET
- Font.Color = clWindowText
- Font.Height = -16
- Font.Name = 'Tahoma'
- Font.Style = [fsBold]
- ParentFont = False
- end
- object lblFSXState: TLabel
- Left = 42
- Top = 23
- Width = 70
- Height = 13
- Caption = 'Not connected'
- end
+ end
+ object cmbProfiles: TComboBox
+ Left = 64
+ Top = 16
+ Width = 208
+ Height = 21
+ Style = csDropDownList
+ Anchors = [akLeft, akTop, akRight]
+ Sorted = True
+ TabOrder = 0
+ OnClick = cmbProfilesClick
+ end
+ object btnSaveProfile: TButton
+ Left = 279
+ Top = 15
+ Width = 72
+ Height = 23
+ Anchors = [akTop, akRight]
+ Caption = 'Sa&ve As...'
+ TabOrder = 1
+ OnClick = btnSaveProfileClick
+ end
+ object btnDeleteProfile: TButton
+ Left = 357
+ Top = 15
+ Width = 72
+ Height = 23
+ Anchors = [akTop, akRight]
+ Caption = '&Delete'
+ TabOrder = 2
+ OnClick = btnDeleteProfileClick
end
end
object tsConfiguration: TTabSheet
Caption = ' Configuration '
ImageIndex = 2
object lblProfileSwitching: TLabel
- Left = 16
- Top = 16
+ Left = 11
+ Top = 19
Width = 92
Height = 13
Caption = 'Profile switching'
@@ -767,15 +388,15 @@ object MainForm: TMainForm
ParentFont = False
end
object bvlProfileSwitching: TBevel
- Left = 229
- Top = 23
- Width = 337
+ Left = 224
+ Top = 26
+ Width = 205
Height = 13
Shape = bsTopLine
end
object cbProfileMenu: TCheckBox
- Left = 16
- Top = 41
+ Left = 11
+ Top = 44
Width = 409
Height = 17
Caption = ' Add profile selection to FSX "Add-ons" menu'
@@ -785,8 +406,8 @@ object MainForm: TMainForm
OnClick = cbProfileMenuClick
end
object cbProfileMenuCascaded: TCheckBox
- Left = 36
- Top = 64
+ Left = 31
+ Top = 67
Width = 389
Height = 17
Caption = ' Cascaded menu (profiles in "G940 Profile" submenu)'
@@ -890,7 +511,7 @@ object MainForm: TMainForm
OnClick = cbCheckUpdatesClick
end
object btnCheckUpdates: TButton
- Left = 461
+ Left = 344
Top = 340
Width = 83
Height = 25
@@ -904,360 +525,533 @@ object MainForm: TMainForm
AlignWithMargins = True
Left = 3
Top = 3
- Width = 592
+ Width = 460
Height = 46
Align = alTop
BevelOuter = bvNone
TabOrder = 1
- end
- object TrayIcon: TTrayIcon
- Left = 120
- Top = 400
- end
- object ActionList: TActionList
- Images = ImageList
- Left = 48
- Top = 400
- object actNewProfile: TAction
- Caption = '&New'
- Hint = 'Create a new profile based on the currently selected profile'
- ImageIndex = 0
- ShortCut = 16462
- OnExecute = actNewProfileExecute
+ object pnlFSX: TPanel
+ AlignWithMargins = True
+ Left = 233
+ Top = 3
+ Width = 224
+ Height = 40
+ Align = alRight
+ BevelOuter = bvNone
+ TabOrder = 0
+ object imgFSXStateNotConnected: TImage
+ Left = 4
+ Top = 4
+ Width = 32
+ Height = 32
+ AutoSize = True
+ Picture.Data = {
+ 0954506E67496D61676589504E470D0A1A0A0000000D49484452000000200000
+ 00200806000000737A7AF40000001974455874536F6674776172650041646F62
+ 6520496D616765526561647971C9653C000005774944415478DAC597C74B6C59
+ 10C64F9B737A9815DA8839A388115C28032266915988CE6660FE9199EDB8706F
+ C4D1850CA2A8288A2898338AA298033EF3336B4F7DA5E77A5B6DB5DF660E1CEE
+ EDDBB74FFD4ED55755A7353A9D4EFC9F4303008D46A33C282E2E76373535B536
+ 333313262626FC9DFC5EFDDE47436E0A57CCC7C747F1F0F08079DEDCDCFC5DFD
+ 9E02505A5AEA78727252ECECECEC636969C9CF2480BC1A33A461F5F5EAEA4A77
+ 7676B6E2E2E2D2DAD0D070AD07909D9DFD5B4040808F56AB153E3E3EC2C2C242
+ D9BDDA0B3FE301CCDBDB5BB1B5B525565757C5FAFAFA7C4747C73F0A40414181
+ 3BEDFAF798981891989868D0A8B121C0FBD8C8DDDD9DB8BFBFE7E7232323988F
+ E6E6E67F3535355D33406161A1D6DEDEBE22232343F8FAFAEAC55E6DD41800D2
+ 91080B0B131452717979294647471962737353747777E39DEAC6C6C6430620E1
+ 31406666A6F0F0F07803606C0820E0F0F070E1E4E4A400F5F7F7731876777745
+ 5757171E57D7D7D73F0194949430404A4A8AF0F2F262B7595959899B9B1B1690
+ 3100F86D545494A0F594671473B1B4B4C46B6D6F6F8BDEDE5EAC575D5757F704
+ 4019C000494949C2DFDF5F242424080707074E9DF3F37341CAE5EBE9E929EFC2
+ 50ED00747474B4B0B5B5559EEDEDED89E9E969FE0DD6DBD9D9110303031C0205
+ A0ACAC4C4B062BE2E3E35984212121BCD8EB5D630710D4F1F131C715D78B8B0B
+ 7E6663632362636385B5B5B5F23EA5B5127B590B00303C3C8CCFD5B5B5B52F00
+ 8E8E8E15701D42400A156E6E6E9C8E521386C4F69CDF1C77D40F39E0B5B1B131
+ 0E230C030020D000A0E8D95B808888083688C5A062188627BCBDBD393BE0DAAF
+ 68E1F0F0504C4D4D291A820D18070800262626DE07080D0D6500189710EA4A48
+ 158C61E0194320070707627C7C9C8DBD2AC30C2135F1068052A622282848B8BB
+ BB2BC6E57C5D8AE10D84EB3D0800A0D8C0B09CD238E6FEFEBE989B9BC3BDBE08
+ 01E0E7E7A700A821A406A4417C4E4F4F17E4B53700D003F25C6D5CC61F6205C0
+ E2E2E2FB00308E459182883DC408636A0FE01E9902B11A126667672767897AF7
+ 00432A2373500DDF0580F26118C5048AC60484DA1B308E8605202CBEBCBC2C82
+ 8383F53265707050ACADADB161D40D881113F7D7D7D75F07901E9061409141AE
+ C338DC89F28A0E87D0A5A5A529109393932C44E901BCFB2900B2002130040081
+ C2088C63319453C4530E9471BC8381546B6F6FFF10809EBDF482CF0002030305
+ 1A15EE115B7433C4523D90BE3939397C0F4394624AFABD06D8D8D8600FE801A0
+ 1463113A98700B45DC2500F21E5E4075EBE9E9E1EB7B83CE152C60ACD9DADA2A
+ 8E8E8EBE0680662401D090D013E00DB5B0D088A4BA0D0DFC0EF501030DE739DD
+ 18408A510D40C7B297760C0018453341083C3D3D051DD178413B3B3B313F3FCF
+ 4DE4A381142E2A2A629D2C2C2C30C47B1E407B46257C73208107A406301182E4
+ E4646ECFB3B3B39F0260E4E5E5B1F720508441ED017508004047B243BD23995A
+ 84302EBB627979B9989999114343439F024446468AD4D454365C5353C3460120
+ 21641600808EE84F00F9F9F90CE0EAEAAAE701D9942A2B2BF9348B02F3D9C0EF
+ ABAAAAB8E1F4F5F5293D00531624D40E00B4B4B43C01E4E6E6B206D0EDD4BB97
+ 15302E2E8EC5B7B2B2F22980AC0908973C0B604A4FE08A8645DFFDDDD6D6F69D
+ 01B2B2B2BE11C01FD4EF35EA562CA7B187520CD98AD5FD40C250463D5028FEA4
+ 7A72CB00546235B4E35F290401A09667007523FA993F261240FDEF08058E0EA6
+ 13B4C97FE960A263003A649850A7FA4622FC853CA125A38A3575173466C0A01A
+ E6F9D9239D1397E850D249E23EA386F50440954F432EB1A47B7BD2803DD1E164
+ 699CCFBFE0188AFF0F0AC5396DE69CDAF3ADDE7F432A4026746F8ACD1A1B6F23
+ 43F340000F246A1D3EFF0712759FFDF03F71A80000000049454E44AE426082}
+ end
+ object imgFSXStateConnected: TImage
+ Left = 4
+ Top = 4
+ Width = 32
+ Height = 32
+ AutoSize = True
+ Picture.Data = {
+ 0954506E67496D61676589504E470D0A1A0A0000000D49484452000000200000
+ 00200806000000737A7AF4000000097048597300000EC400000EC401952B0E1B
+ 000008124944415478DAC5977B7054D51DC7BFF7B177DF9BCDE649221188840D
+ 2492A243487C2C3E68476D29D599A2A53E3AAD5275A60FFFE91FDAD67F9CB68E
+ 33AD558A05E91F75C4222DA2B49476B4DD100832986002C612A76D90B0E4BDBB
+ D9DDECEE7DF677CEEE86242E26FCD53373F7DEB97BEEF97DCEF7F738E708F83F
+ 3761FE8B8AF61DCD922405645986284AD4837511F37761EE975691D1F83BFAB1
+ ACFCDD84699A300C9D2EF3D2E8F1C7078A0254DDBC73693A36F2A6ECAFDB20D8
+ 7D648FFDC500A4FC5D2CC67B8596330C187437F8DD2220331DB5AC44E4AFAE40
+ CDB648C7A3B13900BEA6674F3856843634D59761ED32179C6E0982457F8B22D9
+ 16721D8BCDBA88A656BE8F65E4402CC1443A65A277701A670646A00F75BD19ED
+ FDE9D61980D2F52F360B8AB7AFF9861B70FFCD15106DB9893315662BCFC558CC
+ FCF5DC37C40D9743443A6342CD92021AF087E363E8EDEA3414C5563E7A6C7B2C
+ 07D0FA7248F45487BFFAC5B568A1D98B9200E67E360087B06685C16200A8BF4C
+ 1F6F5AEF476DB9827852C7BEF7C691552DF49E4FE1E0A11390856C70F4E863E7
+ F890810D3B09A02AFC350268AC7390EA050001DCF382B068EFB3E650047CA9B5
+ 04D565F63C90855D6F8F209535F1F1A7691CF8731714510B0E87BF9D0768FB6D
+ 48745785EFDAD88CE6650E2E9BCF2B2291A6E8B5989A020B8585FD4FCD6517F1
+ E5363FCA4B6C33EF7A0692F86777028669E1CC600687FFCE007402F856016037
+ 77C11DB7AC41FB6A27B6DE164065A90D9A6E612CA66124AA632CAE2132AE619A
+ 6434CDE2243E9784CDED2528F55E367E8E667CA82B46C6019DBEEBFB4F16EFBE
+ F73E6C821A1CE978A400F02A01D4846F696BC44377FA70FB3A1FBC349830CFE9
+ CC7046353134AA6272CAC0D0988AF1B8C1DFF93D12EE0DF9E173CB33FD2F4DA8
+ 78E31F516435529226A3190C4045E7D15390580C743C9403286DDB13927CB5E1
+ D61B1BD07CAD02874D44439D82B5F52EACBAC601492A1E013CB7498CA9940E85
+ BE713B2EA7C96854C5BE700C094A3F9DFAE99A059520CE7EAAE2FD63DD145B99
+ E058C7837980F6DF85244F6D78DD1756A2E95A1B6CB2489700990C7B9D228138
+ D052EF44C0277F469562EDBF97B278AB33CE83CE20E306D5225537B94BCF0EAA
+ E839D9531CA0B979255613804286D9251388C4B281152232BCAC4AC6F52B1C04
+ E4BC22C8274359ECEB8843D7993ACCB8C59F5523A740FF7915677A7A28B5B3C1
+ F18E6FCE06B8261C0CD623B89400949C028A4DE0F92C3100F1722AAE5B69C7E6
+ 365F51884F2E66F1DABB711E2F2CEA59E06979F9558A958F2F6838D7779AFC97
+ 094ECC075876DD0A342E5560B793719A3D73814D2A005CAEDB32A9F2E4E600AA
+ 03B6CF004CA50CFCEC8D711EF50C4033732AB040CCE60106FB3FA4882680A3F3
+ 00BC55CB515B21A3DA2FA1C42DC24E81C514281426BE3CD1F38377F8D0B4DC71
+ C5C07C6EEF3826E239FFEBCC38F93F963431126399A32139D4474B442638391F
+ C053B91C5E5A845831712B123C2E114E52C34EAEB0B18B201EBED38BD6602E06
+ D8E01D7D296CBCDE3D27535EF94B0C5D1F65C8B085695A079254D05234FB74C6
+ E00AA52E2E02C045000EBACBF96C60F7FBDA5DF8FAAD1E6E9C49FAAB8371F4FC
+ 5BC54D8D763CF99512AE0E6BFB3B93D81B4E72E935EAC7EAC422006AC39E8A15
+ F07A8A03DCBED6C18D30E3A9B481170EC4D07F419F99F5E3777B4909177FFEE8
+ 7C16CFFC3EFA3900BDB4541340E74C1A5221721340657D518050B3033FBCD7CF
+ 17A768C2C0CFF74731386ACCF13DAB1F3F7E20C09FD394FFDB9E1FE52E2A0A30
+ F42129909D05C02A21956277E57578FA1B65A8ABB471BFB320B451656DA142C4
+ 54189ED4F18B3FC61099348A06E0AFB797A1AA54E681F8BD9DE3383FA253F199
+ 0540CA4D4D13C085D3D48701144AF186DD548A6BC2AE8A9578645309EEBFCD47
+ 25D8CEA3BFD08627353CFB7A0C1309F38A1570DB4637B6B47BF8F3CBEFC4F0B7
+ EE3434329CD17200D304902080E9A16E52400D4E1E7BB800B02B2479ABC38EF2
+ 551484325F8ED7D4D9716B93135B6EF2A08C4AF0E15329EC3E92F8DC125C1B90
+ F0D213E53C4E8E7C90C24B6FC7732EA04294CA92617241825C908E7C4031A006
+ A3C7F3CBB1BFF595904C1B12A5BC91528F0148947E221C548C1EBDDB87074891
+ 432793D87D38B1E0BEF485EF04D040EA9DBB90C5F77F33CE6B000348AB24FD34
+ 2991D6908D9C2205B460B42BBF21F1AFDF41315019B60556C3E950E0A6FCB753
+ 39E6AB62AD823D4F55E160570ABB0EC7B150DBD2EEC6F67BFCDCF7773D13E101
+ 99290422D5836C3A03F51201587A307A22BF25F3DFF822015485E5400364C53D
+ A3002B3EAC24EF7F7A098EF7A7B1F3D0C2003E82FFD34F96E0C0B1247EF9568C
+ AF822A03C8B2A24467032D0575F8347741ECE41339005FCBF321D9571D964B96
+ 43905D906C0E329E5F9629FAB76EF4F2F40B9FC92C08C0DA77EFF161CF91295E
+ 01355A14748D4168B42BCED08E39096D7C809E93ABE2DD4F0D70006FE38F1A24
+ F7927F89AE0A41A03DB9202AFC62FB7341620B4EFE847435DBE2FCC1C4A21311
+ 4C95CD985E6BFC6E242EAAA63A5596E87F2EC94774D6DC2742741DB1F91B3699
+ 6A32B7CC8A32372C08855391781507A3C2B18C00D8E9888E6630753AA0581015
+ 0FD491D3AF0A8AE3B1F4D05E8B0F69F3B448E6F4708354B26687E45C12A2A54F
+ E40315CE857C672C2ED27A9E814E43B95DB48999EDB4A9EB4672E81D3D71F607
+ B26FD54535DE65720049AE132C7DCA473D6A04D1552B88F6001B220731F3931F
+ 7901CBF3552A9CD30416F89951CBCA4428D022A635999CD35D14A88A5826399E
+ 0E2D10AFE61CB27855F81656D0C8A5AA694DF092FA3F8CC8125D22B18C700000
+ 000049454E44AE426082}
+ Visible = False
+ end
+ object lblFSX: TLabel
+ Left = 42
+ Top = 4
+ Width = 146
+ Height = 19
+ Caption = 'Flight Simulator X'
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -16
+ Font.Name = 'Tahoma'
+ Font.Style = [fsBold]
+ ParentFont = False
+ end
+ object lblFSXState: TLabel
+ Left = 42
+ Top = 23
+ Width = 70
+ Height = 13
+ Caption = 'Not connected'
+ end
end
- object actSaveProfile: TAction
- Caption = '&Save'
- Hint = 'Save the changes to the profile'
- ImageIndex = 2
- ShortCut = 16467
- OnExecute = actSaveProfileExecute
- end
- object actRevertProfile: TAction
- Caption = '&Revert'
- Hint = 'Revert the changes to the profile since it was last saved'
- ImageIndex = 3
- ShortCut = 16466
- OnExecute = actRevertProfileExecute
- end
- object actRenameProfile: TAction
- Caption = '&Rename'
- Hint = 'Rename the selected profile'
- ImageIndex = 1
- ShortCut = 113
- OnExecute = actRenameProfileExecute
- end
- object actDeleteProfile: TAction
- Caption = '&Delete'
- Hint = 'Delete the selected profile'
- ImageIndex = 4
- ShortCut = 16430
- OnExecute = actDeleteProfileExecute
- end
- object actSetActiveProfile: TAction
- Caption = 'Set &active'
- Hint = 'Set the selected profile as the active profile'
- ImageIndex = 5
- ShortCut = 16397
- OnExecute = actSetActiveProfileExecute
- end
- end
- object ImageList: TImageList
- Left = 192
- Top = 400
- Bitmap = {
- 494C0101060009000C0010001000FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600
- 0000000000003600000028000000400000002000000001002000000000000020
- 0000000000000000000000000000000000000000000000000000000000000000
- 0000000000000000000000000000000000000000000000000000000000000000
- 0000000000000000000000000000000000000000000000000000000000000000
- 0000000000000000000000000000000000000000000000000000000000000000
- 0000000000000000000000000000000000000000000000000000000000000000
- 0000000000000000000000000000000000000000000000000000000000000000
- 0000000000000000000000000000000000000000000000000000000000000000
- 0000000000000000000000000000000000000000000000000000000000000000
- 00000000000000000000000000000000000000000000000000002427AE00161C
- AC005A5AA90000000000000000000000000000000000000000005353A9004F4F
- A200000000000000000000000000000000000000000000000000000000000000
- 0000000000005C8F5C002979270014700D0014700D00277525005C8F5C000000
- 0000000000000000000000000000000000000000000000000000000000000000
- 0000000000000000000000000000000000000000000000000000000000000000
- 0000000000000000000000000000000000000000000000000000000000000000
- 0000000000000000000000000000000000000000000000000000000000000000
- 000000000000000000000000000000000000000000004E4EAB001844F600194D
- F8001031D2002427AE000000000000000000000000004E4EAB000928D700092E
- D7000313B3004E4EAB0000000000000000000000000000000000000000000000
- 00000F7D0F00088800000888000013880000217D000032720000266D0000126D
- 0D00000000000000000000000000000000000000000000000000000000000000
- 0000000000000000000000000000000000000000000000000000000000000000
- 0000000000000000000000000000000000000000000000000000000000000000
- 0000000000000000000000000000000000000000000000000000000000000000
- 000000000000000000000000000000000000000000002022B1002451F9001F51
- FF00194DF8001744E8001017AF00000000004545AD00092ED7001142F9000D3D
- F5000D3DF500041ABC006F6FAA00000000000000000000000000000000000585
- 070004A00800009D010004A00800009D0100009D0100009500001E7E0000396B
- 0000106902000000000000000000000000000000000000000000000000000000
- 0000000000000000000000000000000000000000000000000000000000000000
- 0000000000000000000000000000000000000000000000000000000000000000
- 0000000000000000000000000000000000000000000000000000000000000000
- 00000000000000000000000000000000000000000000000000001832DB00285A
- FF002451F9002451F9001A4AF100060EAF000F30DD00164AFE001142F9001041
- F6000D3DF5000D3DF5002C2CA200000000000000000000000000158816000BA8
- 170004A0080036C15400DCF3E9007ADD9B00009D010000950000009D01001285
- 0000396B0000126D0D0000000000000000000000000000000000000000000000
- 0000000000000000000000000000000000000000000000000000000000000000
- 0000000000000000000000000000000000000000000000000000000000000000
- 0000000000000000000000000000000000000000000000000000000000000000
- 000000000000000000000000000000000000000000007777B3001832DB004170
- FF002D5DFF00285AFF00285AFF001F51FF00194DF800194DF8001142F9001142
- F9000F3DF200161CAC000000000000000000000000006097600024A82F0008A9
- 1B002BB43E00F6F0F500FCF6FA00FFFEFF007ADD9B00009E0700009D01000095
- 0000217D0000266D00005C8F5C00000000000000000000000000000000000000
- 0000000000000000000000000000000000000000000000000000000000000000
- 0000000000000000000000000000000000000000000000000000000000000000
- 0000000000000000000000000000000000000000000000000000000000000000
- 00000000000000000000000000000000000000000000000000006969B8001A25
- C5003A6DFF003668FF00285AFF00285AFF002451F900194DF8001F51FF00123D
- ED002427AE00000000000000000000000000000000002C8E2B0039BF4F0024A8
- 2F00ECE6EA00F5EEF400FCF6FA00FFFEFF00FFFEFF007ADD9B00009E0700009D
- 0100009500003671000027752500000000000000000000000000000000000000
- 0000000000000000000000000000000000000000000000000000000000000000
- 0000000000000000000000000000000000000000000000000000000000000000
- 0000000000000000000000000000000000000000000000000000000000000000
- 0000000000000000000000000000000000000000000000000000000000000000
- 00002F2FB3002E4EE7003668FF00285AFF00285AFF002451F900123DED002C2C
- A20000000000000000000000000000000000000000001E93220039BF4F00AAC9
- A700FAEAF900D1E1D1001EAF3300DAEEDD00FFFEFF00FFFEFF007ADD9B00009E
- 0700009D0100297C000014700D00000000000000000000000000000000000000
- 0000000000000000000000000000000000000000000000000000000000000000
- 0000000000000000000000000000000000000000000000000000000000000000
- 0000000000000000000000000000000000000000000000000000000000000000
- 0000000000000000000000000000000000000000000000000000000000000000
- 000000000000253FDF003A6DFF003668FF002D5DFF00285AFF001B46EA002427
- AE000000000000000000000000000000000000000000219624005DD27C0017A3
- 25008EBF880011AB24001BB940000BAC2600DAEEDD00FFFEFF00FFFEFF007ADD
- 9B00009D01001B86000014700D00000000000000000000000000000000000000
- 0000000000000000000000000000000000000000000000000000000000000000
- 0000000000000000000000000000000000000000000000000000000000000000
- 0000000000000000000000000000000000000000000000000000000000000000
- 0000000000000000000000000000000000000000000000000000000000000000
- 00002B2CC0004B7CFF004170FF003A6DFF003A6DFF00285AFF00285AFF001031
- D2004A4AB200000000000000000000000000000000002C922C0077DC95002CC5
- 59001BB940002CC5590026C04E0022BB45000BAC2600DAEEDD00FFFEFF00FFFE
- FF0078DB960013880000267D2600000000000000000000000000000000000000
- 0000000000000000000000000000000000000000000000000000000000000000
- 0000000000000000000000000000000000000000000000000000000000000000
- 0000000000000000000000000000000000000000000000000000000000000000
- 0000000000000000000000000000000000000000000000000000000000000000
- 0000253FDF00527CFA004170FF003668FF000C13C1003A6DFF00285AFF002451
- F9000B1DC20000000000000000000000000000000000629C620053C66C0061D8
- 890031CA630031CA63002CC5590026C04E0022BB45000BAC2600DAEEDD00FCF6
- FA00CAECD7000E8E08005C905C00000000000000000000000000000000000000
- 0000000000000000000000000000000000000000000000000000000000000000
- 0000000000000000000000000000000000000000000000000000000000000000
- 0000000000000000000000000000000000000000000000000000000000000000
- 0000000000000000000000000000000000000000000000000000000000004F4F
- BD00527CFA005080FF004B7CFF00181FC500000000001B22C4003A6DFF00285A
- FF001A4AF1001419B100000000000000000000000000000000001E9A230083E5
- A7004CD3790031CA630031CA630027C3530022BB45001CB53A000BA81F007ACC
- 850011AB24000F7D0F0000000000000000000000000000000000000000000000
- 0000000000000000000000000000000000000000000000000000000000000000
- 0000000000000000000000000000000000000000000000000000000000000000
- 0000000000000000000000000000000000000000000000000000000000000000
- 000000000000000000000000000000000000000000000000000000000000252D
- D6006A9CFF005788FF002E4EE7007070B90000000000000000001621C7002D5D
- FF002451F9001439DD004545AD000000000000000000000000000000000024A4
- 2D0081E3A6005ED8880031CA630027C3530022BB45001CB53A0016B02E000BAC
- 2600058A08000000000000000000000000000000000000000000000000000000
- 0000000000000000000000000000000000000000000000000000000000000000
- 0000000000000000000000000000000000000000000000000000000000000000
- 0000000000000000000000000000000000000000000000000000000000000000
- 0000000000000000000000000000000000000000000000000000000000004B4B
- C8003951E2005080FF002929C600000000000000000000000000000000001628
- D300285AFF000F2EE3002123B500000000000000000000000000000000000000
- 00001E9A230056CA730077E09C005DD27C0043C8660036C154001EAA2F001588
- 1600000000000000000000000000000000000000000000000000000000000000
- 0000000000000000000000000000000000000000000000000000000000000000
- 0000000000000000000000000000000000000000000000000000000000000000
- 0000000000000000000000000000000000000000000000000000000000000000
- 0000000000000000000000000000000000000000000000000000000000000000
- 0000000000003E3EB90000000000000000000000000000000000000000006B6B
- B6002E2EB5000000000000000000000000000000000000000000000000000000
- 000000000000629C62002C922C00229A28001E9322002C922C00609960000000
- 0000000000000000000000000000000000000000000000000000000000000000
- 0000000000000000000000000000000000000000000000000000000000000000
- 0000000000000000000000000000000000000000000000000000000000000000
- 0000000000000000000000000000000000000000000000000000000000000000
- 0000000000000000000000000000000000000000000000000000000000000000
- 0000000000000000000000000000000000000000000000000000000000000000
- 0000000000000000000000000000000000000000000000000000000000000000
- 0000000000000000000000000000000000000000000000000000000000000000
- 0000000000000000000000000000000000000000000000000000000000000000
- 0000000000000000000000000000000000000000000000000000000000000000
- 0000000000000000000000000000000000000000000000000000000000000000
- 0000000000000000000000000000000000000000000000000000000000000000
- 0000000000000000000000000000000000000000000000000000000000000000
- 0000000000000000000000000000000000000000000000000000000000000000
- 0000000000000000000000000000000000000000000000000000000000000000
- 0000000000000000000000000000000000000000000000000000000000000000
- 0000000000000000000000000000000000000000000000000000000000000000
- 0000000000000000000000000000000000000000000000000000000000000000
- 0000000000000000000000000000000000000000000000000000000000000000
- 0000000000000000000000000000000000000000000000000000000000000000
- 00000000000000000000000000000000000000000000000000009B7C6C009B7C
- 6C009B7C6C009B7C6C009B7C6C009B7C6C009B7C6C009B7C6C009B7C6C009B7C
- 6C00987A69009B7C6C00000000000000000000000000000000009A7C6A009A7C
- 6A009A7C6A009A7C6A009A7C6A009A7C6A009A7C6A009A7C6A009A7C6A009A7C
- 6A009A7C6A009A7C6A0000000000000000000000000000000000AF704E00A747
- 1100895E4600A7ABAB00B9B2AB00C8C7C300C9C9CC00AFAFAF0099A2A8008238
- 0D00A7471100A34B2100A4776300000000000000000000000000000000000000
- 0000000000000000000000000000000000000000000000000000000000000000
- 00000000000000000000000000000000000000000000000000009B7766000000
- 0000FAF4E900FAF4E900FAF4E900FAF4E900FAF3E800FAF3E800FAF3E800F9EF
- E000F9EFE00097796700000000000000000000000000000000009B7766000000
- 0000FAF4E900FAF4E900EEE9DE00EEE9DE00EEE9DE00FAF4E900FAF2E500F9EF
- E000F8EDDA0097796700000000000000000000000000BC764500BE631700CD78
- 25009E877000B9875900CE700D00DCAF7A00FEFFFF00FEFFFF00D9E2EA00AD70
- 2400DD943500ECBE7500A4440D00000000000000000000000000C5985E00D88D
- 2E00C2813000BC976D0000000000000000000000000000000000000000000000
- 0000000000000000000000000000000000000000000000000000A27F6F000000
- 0000FCF6EE00FCF6EE00FCF6EE00FAF4E900FAF4E900FAF4E900FAF3E800FAF3
- E800F8EDDA00987A690000000000000000000000000000000000A27F6F000000
- 0000DDC2B500DDC2B500B5A9A400B1A19A00DDC2B500DCBBA900DCBAA500DCBA
- A500FAF2E50097796700000000000000000000000000CA680C00C0702800C36C
- 1E00A7876B00AE7C5A00BA580800C69A6C00D9DFE500F9F9F900F9FFFF00A363
- 1D00D4852D00E5AF6900A4440D00000000000000000000000000DB963800FFE2
- C300F6C69400EAA04B00D8852500C28649000000000000000000000000000000
- 0000000000000000000000000000000000000000000000000000A38070000000
- 0000FCF8F100FCF8F100FCF8F100FCF8F100FAF4E900FAF4E900FAF4E900FAF4
- E900FAF3E8009B7C6C0000000000000000000000000000000000A38070000000
- 0000DDC2B500E9DDDA006F6D7100928B9600C3CDB900EAD8CC00DAB8A500DCBA
- A500FAF2E5009A7C6A00000000000000000000000000CA680C00BB682300BF66
- 1900B4906E00B37C6000AF490000B5875E00BFC6CD00D9DFE500FEFFFF00A363
- 1D00D4852D00E5AF6900A4440D00000000000000000000000000E4933600FFD9
- B200FFC79000FFC98E00FFC98E00EFA65800D4802600C7864400000000000000
- 000000000000B6886600B0825D00000000000000000000000000A98778000000
- 0000FCF8F100FCF8F100FCF8F100FCF8F100FCF8F100FCF8F100FAF4E900FAF4
- E900FAF4E9009B7C6C0000000000000000000000000000000000A98778000000
- 0000DECAC600E9DDDA00A8BBCE0034B356002CB4440071B46F00ECDBD200DCBA
- A500FAF4E9009A7C6A00000000000000000000000000CA680C00BF661900BF66
- 1900B07D5800C0BFBD00B0ACA80098918B009A8E8400A3978A00AEA79F009058
- 1F00A7672300DA954200A4440D000000000000000000BB926700E8A15000FFD5
- A900FFC48B00FFCD9900FFCD9900FFC58300FFCC8700DE862B00000000000000
- 000000000000B5886800AD683200000000000000000000000000AB897A000000
- 000000000000FCF8F10000000000FCF8F10000000000FCF8F100FCF8F100FAF4
- E900FAF4E9009B7C6C0000000000000000000000000000000000AB897A000000
- 0000DBC7C200E6D7D40099D0A70066FF98005AEC86002EAD460087BE8100EAD8
- CC00FAF4E9009A7C6A00000000000000000000000000C8660900B55D1B00B55D
- 1B00B85B0F00BA580800BA580800C2620E00C5671000C8691300C8691300CD78
- 2500D4852D00D3893200A4440D000000000000000000B88C5900FFCD9900FFC4
- 8B00FFC58300FFCD9900DE862B00B9733000C27D3800C0956D00000000000000
- 000000000000B5856200B55B1900000000000000000000000000AB897A000000
- 0000EDEEFB00F1F2FB0000000000FCF8F100FCF8F100FCF8F100FCF8F100FCF8
- F100FAF4E9009B7C6C0000000000000000000000000000000000AB897A000000
- 0000DBC7C200DECAC600DBE4D60056E17D006AFF9D0056E17D002AA43C009CC4
- 9400FCF8F2009A7C6A00000000000000000000000000C8680900B0551400B169
- 3300AE703F00AE703F00B1764100B1764100B1764100B1764100B1764100B47D
- 4600BD804100D4852D00A4440D000000000000000000BF813A00FFD9B200FFC5
- 8300FFC48B00FFC18000FEBB7500BF7F3E000000000000000000000000000000
- 000000000000B7754200CB661100000000000000000000000000A69DA900A7B3
- FF008391FE00A6CDFF00C7D1FD00F5F5FB000000000000000000FCF8F100FCF8
- F100FAF4E9009B7C6C0000000000000000000000000000000000B19080000000
- 0000000000000000000000000000D1F8DC0054EE83006AFF9D0050DC7700249E
- 3800B7DCB600B69F9400000000000000000000000000C2620E00AF490000B39D
- 8900E6F2FB00E4EDF300E4EDF300E4EDF300E4EDF300DDE5EC00D5DEE400D1DC
- E600AD9A8A00CD782500A74711000000000000000000CA873800FFD9B200D68B
- 3400D4882F00FFD9AE00FEBB7500DE8D3500B996750000000000000000000000
- 000000000000C56E2800CD660D000000000000000000000000007890CE005497
- FF005DB4FF004FA1FF006176FF00C7D1FD0000000000FCF8F100FCF8F100FCF8
- F100FCF8F1009B7C6C0000000000000000000000000000000000AF8F80000000
- 0000DFCDCB00DFCDCB00DECAC600ECDBD200ADEAB9005AF6880064FF970042DA
- 690034873E00C6BDB600000000000000000000000000C8660900A8430300B99A
- 8400F9FFFF00D5D3D000BDBDBC00C0BFBD00C0BFBD00C2C1C000C9C9CC00DFE3
- E600B19B8500CF7C2200A4440D000000000000000000D58D3D00FFCA9400B082
- 5D00B4835600FDCF9F00FFBF7A00FFB96C00C672240000000000000000000000
- 0000B5856200E87E1500C16115000000000000000000000000003653E20060E1
- FF001DE5FF0057EDFF005DB4FF00A1C0FE00F5F5FB0000000000FCF8F100FAF4
- E900F0E8E000A27F6F0000000000000000000000000000000000B19080000000
- 0000000000000000000000000000000000000000000091EFAC0055FC88009AC1
- A400CDBBB6006E6D8C00000000000000000000000000C8660900A23C0000B99A
- 8400FEFFFF00F1F1F100EDEDED00EDEDED00E9E9E900DFE3E600E1E1E100E9E9
- E900AD9A8A00CD792000A4440D000000000000000000C18E5800CE893F000000
- 000000000000C4772600FFE0B900FFB36200FFB15C00D0762100B9703400BA6B
- 2D00D9721200FFA22200A76135000000000000000000000000005997EE0057ED
- FF0000CDFF003CECFF003A82FF00899BFE00F1F2FB00FCF8F100A3807000A782
- 7000A7827000A380700000000000000000000000000000000000B19080000000
- 0000000000000000000000000000000000000000000000000000A5C5A6000000
- 00007892F500203DDC00292AA1000000000000000000C56206009E370000BD9C
- 8A00FEFFFF00DDDCDB00C1C0BF00C2C1C000C2C1C000C2C1C000C9C9CC00E9E9
- E900B39D8900CD792000A4440D00000000000000000000000000000000000000
- 00000000000000000000CD7A2900FFD9B200FFB15C00FFA94800FFA94800FFA1
- 3200FF9D2300E1730E00B58868000000000000000000000000004960DC00499E
- FF0063F8FF006DE2FF00437BFF00ADBDFE00FAF8FA0000000000A7827000F5E2
- D900B18E7E00AB9E980000000000000000000000000000000000B89888000000
- 000000000000000000000000000000000000FCF8F20000000000DECAC6008C99
- DE004277FF002D4AD8001F209F000000000000000000C56206009E370000BD9C
- 8A00FEFFFF00FEFFFF00EDEDED00F1F1F100EDEDED00DFE3E600E5E4E300E6EA
- ED00B5A08900C2701D00A9480D00000000000000000000000000000000000000
- 0000000000000000000000000000C6722400FFCA9400FFD09400FFC17500FFA9
- 3B00EA781100B5704900000000000000000000000000000000008E88BB00668D
- FF005D9BFF004E71FF00A6CDFF00E3E8FF000000000000000000A3807000B18E
- 7E00AB9E98000000000000000000000000000000000000000000B89888000000
- 0000000000000000000000000000000000000000000000000000B1908000C1B9
- D0003545C5002C30A700000000000000000000000000C260070093280000BD9C
- 8A00FEFFFF00DFE3E600D0CFCD00D0CFCD00C9C9CC00D0CFCD00D5D3D000F1F1
- F100B5A089008A4F1400B0551400000000000000000000000000000000000000
- 000000000000000000000000000000000000A8714D00B8652100BC621B00AC5D
- 2700B0825D000000000000000000000000000000000000000000C0A8A300ACAB
- B500958AB3009D91AF00B29B9F00C0A59700AC887700AC887700A7827000AB9E
- 9800000000000000000000000000000000000000000000000000B8988800B898
- 8800B1908000B1908000B1908000B1908000AC887700AC887700A3807000B5A9
- A4000000000000000000000000000000000000000000BF8D5800C0540200C8A4
- 8300D5D3D000D5D4D200D5D4D200D0CFCD00CCCAC800C8C7C300C0BFBD00BDBD
- BC00B1947B00C0580200B07D5800000000000000000000000000000000000000
- 0000000000000000000000000000000000000000000000000000000000000000
- 0000000000000000000000000000000000000000000000000000000000000000
- 0000000000000000000000000000000000000000000000000000000000000000
- 0000000000000000000000000000000000000000000000000000000000000000
- 0000000000000000000000000000000000000000000000000000000000000000
- 0000000000000000000000000000000000000000000000000000000000000000
- 0000000000000000000000000000000000000000000000000000000000000000
- 0000000000000000000000000000000000000000000000000000000000000000
- 0000000000000000000000000000000000000000000000000000000000000000
- 000000000000000000000000000000000000424D3E000000000000003E000000
- 2800000040000000200000000100010000000000000100000000000000000000
- 000000000000000000000000FFFFFF00FFFFFFFF00000000C7CFF81F00000000
- 8383F00F000000008101E00700000000C001C003000000008003800100000000
- C007800100000000F00F800100000000F80F800100000000F007800100000000
- F007800100000000E083C00300000000E0C1E00700000000E1E1F00F00000000
- FBE7F81F00000000FFFFFFFF00000000FFFFFFFFFFFFFFFFC003C003C001FFFF
- D003D0038001C3FFD003D0038001C0FFD003D0038001C039D003D00380018039
- DA83D00380018039D203D003800180F9C0C3DE0380018079C083D00380018071
- C043DF8380019801C003DFD18001FC01C043DF418001FE03C0C7DFC38001FF07
- C00FC00F8001FFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000
- 000000000000}
- end
- object pmnProfiles: TPopupMenu
- Images = ImageList
- Left = 48
- Top = 344
- object pmnProfilesSetActive: TMenuItem
- Action = actSetActiveProfile
- Default = True
- end
- object pmnProfilesSep1: TMenuItem
- Caption = '-'
- end
- object pmnProfilesNew: TMenuItem
- Action = actNewProfile
- end
- object pmnProfilesSave: TMenuItem
- Action = actSaveProfile
- end
- object pmnProfilesRevert: TMenuItem
- Action = actRevertProfile
- end
- object pmnProfilesDelete: TMenuItem
- Action = actDeleteProfile
+ object pnlG940: TPanel
+ AlignWithMargins = True
+ Left = 3
+ Top = 3
+ Width = 224
+ Height = 40
+ Align = alClient
+ BevelOuter = bvNone
+ TabOrder = 1
+ object imgStateFound: TImage
+ Left = 4
+ Top = 4
+ Width = 32
+ Height = 32
+ AutoSize = True
+ Picture.Data = {
+ 0954506E67496D61676589504E470D0A1A0A0000000D49484452000000200000
+ 00200806000000737A7AF4000000097048597300000B1300000B1301009A9C18
+ 00000A4F6943435050686F746F73686F70204943432070726F66696C65000078
+ DA9D53675453E9163DF7DEF4424B8880944B6F5215082052428B801491262A21
+ 09104A8821A1D91551C1114545041BC8A088038E8E808C15512C0C8A0AD807E4
+ 21A28E83A3888ACAFBE17BA36BD6BCF7E6CDFEB5D73EE7ACF39DB3CF07C0080C
+ 9648335135800CA9421E11E083C7C4C6E1E42E40810A2470001008B3642173FD
+ 230100F87E3C3C2B22C007BE000178D30B0800C04D9BC0301C87FF0FEA42995C
+ 01808401C07491384B08801400407A8E42A600404601809D98265300A0040060
+ CB6362E300502D0060277FE6D300809DF8997B01005B94211501A09100201365
+ 884400683B00ACCF568A450058300014664BC43900D82D00304957664800B0B7
+ 00C0CE100BB200080C00305188852900047B0060C8232378008499001446F257
+ 3CF12BAE10E72A00007899B23CB9243945815B082D710757572E1E28CE49172B
+ 14366102619A402EC27999193281340FE0F3CC0000A0911511E083F3FD78CE0E
+ AECECE368EB60E5F2DEABF06FF226262E3FEE5CFAB70400000E1747ED1FE2C2F
+ B31A803B06806DFEA225EE04685E0BA075F78B66B20F40B500A0E9DA57F370F8
+ 7E3C3C45A190B9D9D9E5E4E4D84AC4425B61CA577DFE67C25FC057FD6CF97E3C
+ FCF7F5E0BEE22481325D814704F8E0C2CCF44CA51CCF92098462DCE68F47FCB7
+ 0BFFFC1DD322C44962B9582A14E35112718E449A8CF332A52289429229C525D2
+ FF64E2DF2CFB033EDF3500B06A3E017B912DA85D6303F64B27105874C0E2F700
+ 00F2BB6FC1D4280803806883E1CF77FFEF3FFD47A02500806649927100005E44
+ 242E54CAB33FC708000044A0812AB0411BF4C1182CC0061CC105DCC10BFC6036
+ 844224C4C24210420A64801C726029AC82422886CDB01D2A602FD4401D34C051
+ 688693700E2EC255B80E3D700FFA61089EC128BC81090441C808136121DA8801
+ 628A58238E08179985F821C14804128B2420C9881451224B91354831528A5420
+ 55481DF23D720239875C46BA913BC8003282FC86BC47319481B2513DD40CB543
+ B9A8371A8446A20BD06474319A8F16A09BD072B41A3D8C36A1E7D0AB680FDA8F
+ 3E43C730C0E8180733C46C302EC6C342B1382C099363CBB122AC0CABC61AB056
+ AC03BB89F563CFB17704128145C0093604774220611E4148584C584ED848A820
+ 1C243411DA093709038451C2272293A84BB426BA11F9C4186232318758482C23
+ D6128F132F107B8843C437241289433227B9900249B1A454D212D246D26E5223
+ E92CA99B34481A2393C9DA646BB20739942C202BC885E49DE4C3E433E41BE421
+ F25B0A9D624071A4F853E22852CA6A4A19E510E534E5066598324155A39A52DD
+ A8A15411358F5A42ADA1B652AF5187A81334759A39CD8316494BA5ADA295D31A
+ 681768F769AFE874BA11DD951E4E97D057D2CBE947E897E803F4770C0D861583
+ C7886728199B18071867197718AF984CA619D38B19C754303731EB98E7990F99
+ 6F55582AB62A7C1591CA0A954A9526951B2A2F54A9AAA6AADEAA0B55F355CB54
+ 8FA95E537DAE46553353E3A909D496AB55AA9D50EB531B5367A93BA887AA67A8
+ 6F543FA47E59FD890659C34CC34F43A451A0B15FE3BCC6200B6319B3782C216B
+ 0DAB86758135C426B1CDD97C762ABB98FD1DBB8B3DAAA9A13943334A3357B352
+ F394663F07E39871F89C744E09E728A797F37E8ADE14EF29E2291BA6344CB931
+ 655C6BAA96979658AB48AB51AB47EBBD36AEEDA79DA6BD45BB59FB810E41C74A
+ 275C2747678FCE059DE753D953DDA70AA7164D3D3AF5AE2EAA6BA51BA1BB4477
+ BF6EA7EE989EBE5E809E4C6FA7DE79BDE7FA1C7D2FFD54FD6DFAA7F5470C5806
+ B30C2406DB0CCE183CC535716F3C1D2FC7DBF151435DC34043A561956197E184
+ 91B9D13CA3D5468D460F8C69C65CE324E36DC66DC6A326062621264B4DEA4DEE
+ 9A524DB9A629A63B4C3B4CC7CDCCCDA2CDD699359B3D31D732E79BE79BD79BDF
+ B7605A785A2CB6A8B6B86549B2E45AA659EEB6BC6E855A3959A558555A5DB346
+ AD9DAD25D6BBADBBA711A7B94E934EAB9ED667C3B0F1B6C9B6A9B719B0E5D806
+ DBAEB66DB67D6167621767B7C5AEC3EE93BD937DBA7D8DFD3D070D87D90EAB1D
+ 5A1D7E73B472143A563ADE9ACE9CEE3F7DC5F496E92F6758CF10CFD833E3B613
+ CB29C4699D539BD347671767B97383F3888B894B82CB2E973E2E9B1BC6DDC8BD
+ E44A74F5715DE17AD2F59D9BB39BC2EDA8DBAFEE36EE69EE87DC9FCC349F299E
+ 593373D0C3C843E051E5D13F0B9F95306BDFAC7E4F434F8167B5E7232F632F91
+ 57ADD7B0B7A577AAF761EF173EF63E729FE33EE33C37DE32DE595FCC37C0B7C8
+ B7CB4FC36F9E5F85DF437F23FF64FF7AFFD100A78025016703898141815B02FB
+ F87A7C21BF8E3F3ADB65F6B2D9ED418CA0B94115418F82AD82E5C1AD2168C8EC
+ 90AD21F7E798CE91CE690E85507EE8D6D00761E6618BC37E0C2785878557863F
+ 8E7088581AD131973577D1DC4373DF44FA449644DE9B67314F39AF2D4A352A3E
+ AA2E6A3CDA37BA34BA3FC62E6659CCD5589D58496C4B1C392E2AAE366E6CBEDF
+ FCEDF387E29DE20BE37B17982FC85D7079A1CEC2F485A716A92E122C3A96404C
+ 884E3894F041102AA8168C25F21377258E0A79C21DC267222FD136D188D8435C
+ 2A1E4EF2482A4D7A92EC91BC357924C533A52CE5B98427A990BC4C0D4CDD9B3A
+ 9E169A76206D323D3ABD31839291907142AA214D93B667EA67E66676CBAC6585
+ B2FEC56E8BB72F1E9507C96BB390AC05592D0AB642A6E8545A28D72A07B26765
+ 5766BFCD89CA3996AB9E2BCDEDCCB3CADB90379CEF9FFFED12C212E192B6A586
+ 4B572D1D58E6BDAC6A39B23C7179DB0AE315052B865606AC3CB88AB62A6DD54F
+ ABED5797AE7EBD267A4D6B815EC1CA82C1B5016BEB0B550AE5857DEBDCD7ED5D
+ 4F582F59DFB561FA869D1B3E15898AAE14DB1797157FD828DC78E51B876FCABF
+ 99DC94B4A9ABC4B964CF66D266E9E6DE2D9E5B0E96AA97E6970E6E0DD9DAB40D
+ DF56B4EDF5F645DB2F97CD28DBBB83B643B9A3BF3CB8BC65A7C9CECD3B3F54A4
+ 54F454FA5436EED2DDB561D7F86ED1EE1B7BBCF634ECD5DB5BBCF7FD3EC9BEDB
+ 5501554DD566D565FB49FBB3F73FAE89AAE9F896FB6D5DAD4E6D71EDC703D203
+ FD07230EB6D7B9D4D51DD23D54528FD62BEB470EC71FBEFE9DEF772D0D360D55
+ 8D9CC6E223704479E4E9F709DFF71E0D3ADA768C7BACE107D31F761D671D2F6A
+ 429AF29A469B539AFB5B625BBA4FCC3ED1D6EADE7AFC47DB1F0F9C343C59794A
+ F354C969DAE982D39367F2CF8C9D959D7D7E2EF9DC60DBA2B67BE763CEDF6A0F
+ 6FEFBA1074E1D245FF8BE73BBC3BCE5CF2B874F2B2DBE51357B8579AAF3A5F6D
+ EA74EA3CFE93D34FC7BB9CBB9AAEB95C6BB9EE7ABDB57B66F7E91B9E37CEDDF4
+ BD79F116FFD6D59E393DDDBDF37A6FF7C5F7F5DF16DD7E7227FDCECBBBD97727
+ EEADBC4FBC5FF440ED41D943DD87D53F5BFEDCD8EFDC7F6AC077A0F3D1DC47F7
+ 068583CFFE91F58F0F43058F998FCB860D86EB9E383E3939E23F72FDE9FCA743
+ CF64CF269E17FEA2FECBAE17162F7EF8D5EBD7CED198D1A197F29793BF6D7CA5
+ FDEAC0EB19AFDBC6C2C61EBEC97833315EF456FBEDC177DC771DEFA3DF0F4FE4
+ 7C207F28FF68F9B1F553D0A7FB93199393FF040398F3FC63332DDB000009C549
+ 44415478DA9D570B5094D7153EFB7EF0581658965704410444855D23D030680D
+ AD428805634631C6689B264ECD74DA344D26D3C9A4292A1AED34613A7D68673A
+ 93345640DB8ACA43790A62001D231A890875C37B9FB00FD85DF6D9732E6068C5
+ 84E69FF9877F97FFDEF3DD73BEEF3B67397EBF5F06002EF816977FF6C207FCC0
+ 01E072B91C9FCF37FBDDDCC5E170E8A66BB12D841C7C598C0FCE2507F5F961C6
+ 3D03629118EC763B381C0E70D81DE072B920441E42A0606A6A8AFDE5F3F92010
+ 08402E978350285C6C3B310190E0836329C1BD5E2FDBD86C3607F5F6F6FEC462
+ B6C4210091D566155A262DD3098909D78D46E37AAD56CB9B99992150BE808000
+ 6FEE86DCBE8D1B37FE01B3E3C52C018FC79BDF52B2240014D4E3F13C4CDBFB47
+ DF3FD570B9E179A140083EBF0FA6A7A76164640456AE5C097A9D1E2626275876
+ 444211A8D7A961F5EAD570E0A7AF6585CAE5DDB4974C2683B9927C33005A305F
+ 5342DFD6D6B6FDF59FBD7E363030909D846ECD971AC60379881CEC0E3B389D4E
+ 569A0D1B363070898989B07BCFEE8308E45DB7DB0D4141414B0380A966279FE7
+ 8F542A858AD395C72B4F57FE325C11CEEA4BE0EA2FD7436A4A2A848785B3FAD3
+ E969DD9A356BE0CEE7774095A1F2BDF3EE3B7961A1A1AD7494057C581C00D60A
+ 060606C03C39C94EFDF06D0470BEFAFCC74D8D4D7B140A050344EFD6D6D55210
+ 080D0D6527260074D2F4F47470CE38619D7A9D6573FEE60C2CD997A496A8A8A8
+ AFCF002D6E6C68983BFD57F2914824505B5BF7AFABED578BC3C3C31900AFCF0B
+ 1DD73A20636D06FB3CAF0C7AA6F531B131F0E65B6FDE5F959696C1998BB360CF
+ C50190A42A4E57B05A2ECC80582C063C7D437777F7F7C2C2C2182002DBFB452F
+ A4A4A4009FC767C14901243D2AC7C4C4041C3B7EEC4F45C545AFC1AC632CBC16
+ 07401B9C3C7102377B0400A7B1A1B1FDC68D1B39048000D12989842B56AC60DB
+ D35ABA294309090960301A61FFFE575F2E78A6E0AFC3C3C30C2071E36B0178F0
+ 5475F5F5E0240094AEB99449F1C435B5351FFDE3EC3F5FC4DA734522113324AD
+ 410BB1D1B12CB51EB7075C6E17E343F2CA6410880490979757A052A9EAABABAB
+ 19A81776BFF0CD3E407AD66834CCCD18A8391F085728A4D7AE5E5523BBD7F4DF
+ EFDFD9D2DABAD1ED71832C58F690C06E2CA15C1E0ACB972FA74C18DFFED5DB45
+ 28D7818ABF574CA8D42A4FF1B6E279337A3C00EDB81686068700DD0D7A6EF580
+ 3252C96A2A100A20521909C343C311353535151F967FB889C7E7416C4C2C8C8C
+ 8E62C03058BB7A2D984C266BF677B21B91271359D959EDE81B3DB77B6E8F2237
+ 2C3B4B76BA29068278BC0AEA6AEB41815A4F4A4E82D6E656C8CECE86F1F17198
+ 9A9E02A53272737767E789F3E7CFC7373537B3D344474503DA30E4E4E4C08E9D
+ 3B08A00BDFB7194D46C7B265CBDA51B6F7925352EA313BD7456211646565F983
+ 838317073089FA3FF5C9697C29139627C443DB9536C8CCCC648CBEDFDFFFF33B
+ 3D3D472E5CB820B6DA6C603018180065849249502215435C5C3CE3008FCB636B
+ F47A3D58AD36282ADE3651B26B47AEE6C183DEA7729E82E8E8E84701500DC7C6
+ C6A0E6621DA8D52A06A0E36A07F9B9E4E6CD9BBFC5BA1FB872A515B45A3DD639
+ 84F9BE6BC60564CD1488144046430A898989C1F7B4C82321AC7BF249DC771CB6
+ 3F5FFCD6F6E7B61D2762A3C21E05A0D3E9989B353634013217525293A1A9A929
+ AEE7B39E13B76FDFDE4206333434C42C988212E3490944565AC7E57001BB2393
+ 266545817766661666C00AED6DEDF04C61FEA9575EF9F18BC4AD4748481A45A2
+ 40547414D4D75D6275777A3D595567CE7E14201024BB313BF7BEB8079A7FF723
+ D3DD730D8A03429463705030604D190FFA07FA41887D4219198D010BC186C1BB
+ BBAF83C56281F8F8B85B9F9CFA58856D9A7AC97F03C01483C968825569AB3003
+ CDB8B1748FAEB9A63CD2E7941B57A9818BF380116B3A643083CBE98269EC7CE6
+ 491398903333F8ECC2F493F78B44124C7F2C6CC9DF02668B15BA3A3B1F3A247A
+ 87FD771F1CDF849ED19D9B9BFBD540423AAF3E57CD1C2C353515FE7CF28FBFFE
+ FCC167EFE561870B98E2825EA104B5A91F46BC4268E109C0E21A04B9301A7C76
+ 1198274C3089249B0DE284106CCB79DFCFC393DBE0DAB54EF61D05273BE360C6
+ F47AAD75DFDEBD1F1C2A3B7CF021007AA1E6620D2E0E096969BC523E6CBCF392
+ 275407324E1280800F2EEF08240B5240333E090EB1199CBC29F05815F0DD2917
+ 4458F4501310099A491B08D1BA373DBD114821D73A3EC57E3283B276314BF7E3
+ F0A2D58D3362BEF1C62F4E1E3B76EC000380A396834CA6B9A939AEB6A6EE6F23
+ 23A3B951514A6432F56D1EF0653670FB1DE0B7CBC01EA4C1FAFB20DABA02126D
+ 3AE0E13B7D76005B5018F3FDF5EBD781C3E940C275B066469E32DBFFFD30AE1D
+ 431E98A1A4A4E46CE9C1D21F29C2154E9A62258383830E742C41E97BA52DCDCD
+ CD39D4EB674925C3B62A41B2883009B809D78B785C30E57081C2CF851CAF1EFA
+ 3181B778A13085C155EA74B46C37FA463B7A8283D937C9917A84C1A0071BAA03
+ BBE299D2D2DFEC93C982ED229158C2C1BAF1D15223AE775DFFFDC58B179F1B78
+ 30C0BC801A4D803480313B147D9D8C854629A9241019CE071FC70F765402FE01
+ 271AD0EA356934BF416B6B1B3B39A9C0472A4159EA745AB0A3833EBBB5F0CCC1
+ C387F622204708CE85CC8AD1F514BB76EE6AE9EBEB4B9BB64F831E9152BDA412
+ 2926CDCF864E1AC5E93BD23B699F864AEAF7418134DB71616D463A8825626869
+ 6A65FD22292991AD19191D63B29C98304251D10FAA0E971DDE477C1361568270
+ 1FE60338F729F7BFBABF4AA7D5255BAC16331A8B0F3921460B8DC5FF09580D45
+ 421020F389C6349A538628AD64C14FC43EC18CC66030B11932252589B88E9D74
+ 900537998C74F2AA2347CAF6E1791C344191D2E6E60C2C81DD211A1C1AF44644
+ 44C8912CD3B8A91F83F2CF9D3B977CF7EE5D3576B59CEEAE6E954EAF4BC26C89
+ 695AA2F290F3111802B12A358DD9AD103BE5F2F87874CA6130A15F188C06282C
+ 2CA83A7A148303C741F3852C440664420FE7012221DE0EB2548958C2BE259BAD
+ ACAC64A9A61B1B8E082D38A9ABAB8B0065B7B7B7AB474747D330DD812CE5892B
+ 90230ADC5C0E5E2421353322DD96822D678E1E3D82C1FD76370E2A544202B0E8
+ 4C480E26E00B586AE864980136F3CD8F5D3482D3C2B8B838282F2FE7171414C4
+ 5FBA74291D3DFE6994EF4B9111518162EC131ACD005B9F9F9F5F5576A4EC87B8
+ 9F9DCC27501AC84AB9A499707E26989F6029232855068ED2D7D383038A520997
+ 2F5F86AD5BB7C2D8E8584ED9E1B2BFE0049532E39AF1173E5B5879E8D0A19711
+ BC833C804AF6984BF27FFF385DD8B6890F6C644380F7FAFA649D9F76AAB83CAE
+ A7A46457874824F42FF80DF8B88BF5826FFDF3FC7F2EAC94C73DA70E3A327709
+ 6B84FF0180E96622F4B22C130000000049454E44AE426082}
+ Visible = False
+ end
+ object imgStateNotFound: TImage
+ Left = 4
+ Top = 4
+ Width = 32
+ Height = 32
+ AutoSize = True
+ Picture.Data = {
+ 0954506E67496D61676589504E470D0A1A0A0000000D49484452000000200000
+ 00200806000000737A7AF4000000097048597300000B1300000B1301009A9C18
+ 00000A4F6943435050686F746F73686F70204943432070726F66696C65000078
+ DA9D53675453E9163DF7DEF4424B8880944B6F5215082052428B801491262A21
+ 09104A8821A1D91551C1114545041BC8A088038E8E808C15512C0C8A0AD807E4
+ 21A28E83A3888ACAFBE17BA36BD6BCF7E6CDFEB5D73EE7ACF39DB3CF07C0080C
+ 9648335135800CA9421E11E083C7C4C6E1E42E40810A2470001008B3642173FD
+ 230100F87E3C3C2B22C007BE000178D30B0800C04D9BC0301C87FF0FEA42995C
+ 01808401C07491384B08801400407A8E42A600404601809D98265300A0040060
+ CB6362E300502D0060277FE6D300809DF8997B01005B94211501A09100201365
+ 884400683B00ACCF568A450058300014664BC43900D82D00304957664800B0B7
+ 00C0CE100BB200080C00305188852900047B0060C8232378008499001446F257
+ 3CF12BAE10E72A00007899B23CB9243945815B082D710757572E1E28CE49172B
+ 14366102619A402EC27999193281340FE0F3CC0000A0911511E083F3FD78CE0E
+ AECECE368EB60E5F2DEABF06FF226262E3FEE5CFAB70400000E1747ED1FE2C2F
+ B31A803B06806DFEA225EE04685E0BA075F78B66B20F40B500A0E9DA57F370F8
+ 7E3C3C45A190B9D9D9E5E4E4D84AC4425B61CA577DFE67C25FC057FD6CF97E3C
+ FCF7F5E0BEE22481325D814704F8E0C2CCF44CA51CCF92098462DCE68F47FCB7
+ 0BFFFC1DD322C44962B9582A14E35112718E449A8CF332A52289429229C525D2
+ FF64E2DF2CFB033EDF3500B06A3E017B912DA85D6303F64B27105874C0E2F700
+ 00F2BB6FC1D4280803806883E1CF77FFEF3FFD47A02500806649927100005E44
+ 242E54CAB33FC708000044A0812AB0411BF4C1182CC0061CC105DCC10BFC6036
+ 844224C4C24210420A64801C726029AC82422886CDB01D2A602FD4401D34C051
+ 688693700E2EC255B80E3D700FFA61089EC128BC81090441C808136121DA8801
+ 628A58238E08179985F821C14804128B2420C9881451224B91354831528A5420
+ 55481DF23D720239875C46BA913BC8003282FC86BC47319481B2513DD40CB543
+ B9A8371A8446A20BD06474319A8F16A09BD072B41A3D8C36A1E7D0AB680FDA8F
+ 3E43C730C0E8180733C46C302EC6C342B1382C099363CBB122AC0CABC61AB056
+ AC03BB89F563CFB17704128145C0093604774220611E4148584C584ED848A820
+ 1C243411DA093709038451C2272293A84BB426BA11F9C4186232318758482C23
+ D6128F132F107B8843C437241289433227B9900249B1A454D212D246D26E5223
+ E92CA99B34481A2393C9DA646BB20739942C202BC885E49DE4C3E433E41BE421
+ F25B0A9D624071A4F853E22852CA6A4A19E510E534E5066598324155A39A52DD
+ A8A15411358F5A42ADA1B652AF5187A81334759A39CD8316494BA5ADA295D31A
+ 681768F769AFE874BA11DD951E4E97D057D2CBE947E897E803F4770C0D861583
+ C7886728199B18071867197718AF984CA619D38B19C754303731EB98E7990F99
+ 6F55582AB62A7C1591CA0A954A9526951B2A2F54A9AAA6AADEAA0B55F355CB54
+ 8FA95E537DAE46553353E3A909D496AB55AA9D50EB531B5367A93BA887AA67A8
+ 6F543FA47E59FD890659C34CC34F43A451A0B15FE3BCC6200B6319B3782C216B
+ 0DAB86758135C426B1CDD97C762ABB98FD1DBB8B3DAAA9A13943334A3357B352
+ F394663F07E39871F89C744E09E728A797F37E8ADE14EF29E2291BA6344CB931
+ 655C6BAA96979658AB48AB51AB47EBBD36AEEDA79DA6BD45BB59FB810E41C74A
+ 275C2747678FCE059DE753D953DDA70AA7164D3D3AF5AE2EAA6BA51BA1BB4477
+ BF6EA7EE989EBE5E809E4C6FA7DE79BDE7FA1C7D2FFD54FD6DFAA7F5470C5806
+ B30C2406DB0CCE183CC535716F3C1D2FC7DBF151435DC34043A561956197E184
+ 91B9D13CA3D5468D460F8C69C65CE324E36DC66DC6A326062621264B4DEA4DEE
+ 9A524DB9A629A63B4C3B4CC7CDCCCDA2CDD699359B3D31D732E79BE79BD79BDF
+ B7605A785A2CB6A8B6B86549B2E45AA659EEB6BC6E855A3959A558555A5DB346
+ AD9DAD25D6BBADBBA711A7B94E934EAB9ED667C3B0F1B6C9B6A9B719B0E5D806
+ DBAEB66DB67D6167621767B7C5AEC3EE93BD937DBA7D8DFD3D070D87D90EAB1D
+ 5A1D7E73B472143A563ADE9ACE9CEE3F7DC5F496E92F6758CF10CFD833E3B613
+ CB29C4699D539BD347671767B97383F3888B894B82CB2E973E2E9B1BC6DDC8BD
+ E44A74F5715DE17AD2F59D9BB39BC2EDA8DBAFEE36EE69EE87DC9FCC349F299E
+ 593373D0C3C843E051E5D13F0B9F95306BDFAC7E4F434F8167B5E7232F632F91
+ 57ADD7B0B7A577AAF761EF173EF63E729FE33EE33C37DE32DE595FCC37C0B7C8
+ B7CB4FC36F9E5F85DF437F23FF64FF7AFFD100A78025016703898141815B02FB
+ F87A7C21BF8E3F3ADB65F6B2D9ED418CA0B94115418F82AD82E5C1AD2168C8EC
+ 90AD21F7E798CE91CE690E85507EE8D6D00761E6618BC37E0C2785878557863F
+ 8E7088581AD131973577D1DC4373DF44FA449644DE9B67314F39AF2D4A352A3E
+ AA2E6A3CDA37BA34BA3FC62E6659CCD5589D58496C4B1C392E2AAE366E6CBEDF
+ FCEDF387E29DE20BE37B17982FC85D7079A1CEC2F485A716A92E122C3A96404C
+ 884E3894F041102AA8168C25F21377258E0A79C21DC267222FD136D188D8435C
+ 2A1E4EF2482A4D7A92EC91BC357924C533A52CE5B98427A990BC4C0D4CDD9B3A
+ 9E169A76206D323D3ABD31839291907142AA214D93B667EA67E66676CBAC6585
+ B2FEC56E8BB72F1E9507C96BB390AC05592D0AB642A6E8545A28D72A07B26765
+ 5766BFCD89CA3996AB9E2BCDEDCCB3CADB90379CEF9FFFED12C212E192B6A586
+ 4B572D1D58E6BDAC6A39B23C7179DB0AE315052B865606AC3CB88AB62A6DD54F
+ ABED5797AE7EBD267A4D6B815EC1CA82C1B5016BEB0B550AE5857DEBDCD7ED5D
+ 4F582F59DFB561FA869D1B3E15898AAE14DB1797157FD828DC78E51B876FCABF
+ 99DC94B4A9ABC4B964CF66D266E9E6DE2D9E5B0E96AA97E6970E6E0DD9DAB40D
+ DF56B4EDF5F645DB2F97CD28DBBB83B643B9A3BF3CB8BC65A7C9CECD3B3F54A4
+ 54F454FA5436EED2DDB561D7F86ED1EE1B7BBCF634ECD5DB5BBCF7FD3EC9BEDB
+ 5501554DD566D565FB49FBB3F73FAE89AAE9F896FB6D5DAD4E6D71EDC703D203
+ FD07230EB6D7B9D4D51DD23D54528FD62BEB470EC71FBEFE9DEF772D0D360D55
+ 8D9CC6E223704479E4E9F709DFF71E0D3ADA768C7BACE107D31F761D671D2F6A
+ 429AF29A469B539AFB5B625BBA4FCC3ED1D6EADE7AFC47DB1F0F9C343C59794A
+ F354C969DAE982D39367F2CF8C9D959D7D7E2EF9DC60DBA2B67BE763CEDF6A0F
+ 6FEFBA1074E1D245FF8BE73BBC3BCE5CF2B874F2B2DBE51357B8579AAF3A5F6D
+ EA74EA3CFE93D34FC7BB9CBB9AAEB95C6BB9EE7ABDB57B66F7E91B9E37CEDDF4
+ BD79F116FFD6D59E393DDDBDF37A6FF7C5F7F5DF16DD7E7227FDCECBBBD97727
+ EEADBC4FBC5FF440ED41D943DD87D53F5BFEDCD8EFDC7F6AC077A0F3D1DC47F7
+ 068583CFFE91F58F0F43058F998FCB860D86EB9E383E3939E23F72FDE9FCA743
+ CF64CF269E17FEA2FECBAE17162F7EF8D5EBD7CED198D1A197F29793BF6D7CA5
+ FDEAC0EB19AFDBC6C2C61EBEC97833315EF456FBEDC177DC771DEFA3DF0F4FE4
+ 7C207F28FF68F9B1F553D0A7FB93199393FF040398F3FC63332DDB000007EF49
+ 44415478DAA557494C5459147D9FFA50C52020833289322B4A83A248DA38A431
+ 22A24C894A42ECD00BDDB831313171E1C279484C74D5B8E9EE841834B62DA0E0
+ 80A222600403E21845914150041151849AFB9C177E350A38F54F7EA07EFDF7EE
+ B9E79E73EF2BC56EB71B841016F10317D63A6E455184939393B0D96CF2B376F1
+ B9768F73A90A5E56BF070003984C26613018C4C78F1FC5D0D090FCCB6793274F
+ 96C13F7CF820FFAAAA2A9C9D9DE573171797FF0FC06AB5CA8DFBFBFBF50F1F3E
+ 5CF0EEDD3B2F00500706067478660A0F0FEFECEDED0DEEEEEE5686878709CAEE
+ EEEE6E5FB26449EFD2A54BEB00DE4E96743ADDF70160508BC5F18AEEE0C18339
+ 972E5D5A80EC6CF8CE3E3838285EBC78618F8E8EB622B8FAF6ED5BC90AB34E4C
+ 4C749A33678E69F3E6CD053E3E3E9DDCCBCBCB4B2BC9D7016835E645F4555555
+ B15BB66CC9F3F0F0B020133BB379FEFCB9FC1E542B086C67F62C0D3217040766
+ F41B366CA800904AB3D92C264D9AF46D0040EBE8CC859B9B9B3871E2C40ADCBF
+ F8FBFB0FB3BE0477F1E2453173E64CE1E7E727EBCFECB92E2E2E4EDCBB774F99
+ 3B77AE7DC78E1D7F818156EE334A0FE303A0D09E3E7D2A4825B31E0DA0A4A424
+ FBCA952B490060E467BE5B5E5E2E10442080CC980098697C7CBC001B3A946130
+ 3535B50080FB99796060E09719E0E28A8A0A99C568FBB8BABA32586E7575F54F
+ C8D6440014666D6DAD0CC6CF9A33F83FD7070707ABDBB66DEB9E3D7BF6EF5A9C
+ 517B8E0F80962A2A2A22FA4F18A0F590FDAF75757531BEBEBE660222583842CC
+ 9A354BAA9BC18D46A3B41ECBD1D7D7E772E8D0A19AACACAC724AEA9B6CC80D8E
+ 1D3B2637FB0C8072F9F2E5DF6EDFBE1D0900260262961461545494D403D7F2A6
+ 1E203E015B3A6FDAB4E9EF55AB5635767474C83DA98D2F026056172E5C180380
+ B4969595659F3E7D3A11B577D2EBF53680B0C07AA45A52CBB5BCA907D85281E0
+ 949494944268A419FA91A0F2F2F2BEDE07B829336337E3A5B901E273AEA9A909
+ 82BAFD9F3C791277EDDAB5307C67A3B7C900454900B4645858980E4C0C6CDFBE
+ BD08E5E943598700C4969D9DAD35A38901BC7AF54AB4B5B549C477EEDC110101
+ 01B2A6B4D0D4A95305E874071B6B8F1C391201905632D0D9D929A907C5CA9B37
+ 6F869393935BA09321FC6D43DFE86E6A6A1A0033C3EBD7AFB7C98EA6D34D5C82
+ F3E7CFCBCD626262446565A5C026E2E5CB97D26600107EEBD6ADACD2D2523F88
+ D2C46C828282586FB168D122B16EDD3A02B4E27D239E59A64F9FDE0EE67AB157
+ 3304DE492D2D5CB8D0EEE9E9393E00FAFFF8F1E3022F09D028AE5FBF2E929292
+ A868D1DCDC9C7CF7EEDD1567CF9ED5BF7FFFDEFCFAF56B492759A105E90C0494
+ 1AC073056B14BC23E705A8EFCBCDCDFDE3D9B3673D040AD06301B0865D5D5D14
+ 9B98376F9E0400DF0BB451B5A1A12115007E06201B4A64A5D5088AB605C58260
+ E800361A3A84656129D931E7CF9FAF605F7D4E4E4E29EEDA91F13D1600C5479A
+ 6137D9DDD86241B317749081CC63E104537B7B3B67900CAA8D668A95EBE81A64
+ 2B054C56A64C992299E433CC117D5A5A5AFDC68D1BFF898888182B42DA0E4291
+ F5A40D597704083975EA540E8204A2EB191F3D7A245A5A5A64A6DA41037614A8
+ A7BCA903B024C54AE1A6A7A7CBE0F5F5F502E3DB79C68C191D8585850518D364
+ E65300A0586E80B62919C0C6F100948EE0EEB099995943DD92256DE2B104D40C
+ FF271B7C4E4021212102FD9F410504AB7548F60EE3E1C387FF04F0AEC58B17FF
+ 07803E2F2E2EA6CF655B2D28285876FFFEFD94D8D85805F44A80DC7864F6CBA0
+ DEDEDEB26C04C1405A1BE6F3E5CB97CBCC6FDEBCE9E88EBC502227E8C2949F9F
+ 5FBD77EFDE2A0700BE70EEDC393610036C97D6DADABA00945BF0D9C6BA327068
+ 68A8B422B3A4557951686486CFC90CB5B06CD9324770ED5DEEA1BD0700EE5BB7
+ 6EADC28C28930018884D0662F3C6B4CB41438946FD8CC8D8AED559DB449BF5B4
+ 19EB4C85B32CFC8EE583DA2513748E169CEF69C1799C83151B77EFDE5D02B62D
+ 0A6CA7A2E359E05FDDCE9D3BF3917D140F1B9AA8D8FFB981D692695306A08830
+ 9024F5CC9625A16B18F0C68D1B0EA0740813A045D137F49999998DBB76ED3A83
+ BDCDF84E55B09902CF7B60C4A6A304716812161E1E596F06270866CB9B47290D
+ 9036F934F750B8BCD8B4983999D1663F4B0386F5AB57AF6EDCB367CF193C3353
+ 27B21503B91B28C97FFCF87118501B891474DAC1886D24633BB366B723287A9F
+ 83874D888078252424C80E78F5EA55392F2223232540CE06960525D267646434
+ ECDBB7AF989D9EFB8CAC5515D4C403F37A2D50FA81CE61506887265428DB93F5
+ C26727646CE50998070A7C27013133829A366D9A6CD30CC4332467072F88D811
+ 1CBDA061FFFEFD67008AECCA193332E6559E6275EC6CE858060432F3A48BA03A
+ 58D2EFC1830701D82014E50984727D10C000AFEB780EE0042418BE0FAB4ACA79
+ B375633F69CD9E9E1E47703A8DA522F5D48FE33C4011E2B6B08990465EA4EFE4
+ C993926ADED84887DAFBA2A1040250084416047AFD41B72B6E15949BA1111B75
+ 42116AC157AE5CD978E0C0817F189CCF493D018C7B26D484436A78D064532220
+ EDD8C5EFB89093EEE8D1A34EE8E9DE388E07C00161B06F02FABE1B32B340C45C
+ EFC2E0CC1CFB99B98EDA19E7E7D9C40712ADD1703119E1E184E0481FE705070D
+ 7E1D89356BD6506CA1105826EAEE0F6728A0BD096A2F0178338332F309AEEFFF
+ 713A7A6CB36CEC0F04081719D0F902A1091B5CD5CE2636EA37E01701FCF0CFF3
+ CF31F16C38E20E4656BE618DFA2FD3308F8CBFBD23FB0000000049454E44AE42
+ 6082}
+ end
+ object lblG940Throttle: TLabel
+ Left = 42
+ Top = 4
+ Width = 114
+ Height = 19
+ Caption = 'G940 Throttle'
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -16
+ Font.Name = 'Tahoma'
+ Font.Style = [fsBold]
+ ParentFont = False
+ end
+ object lblG940ThrottleState: TLabel
+ Left = 42
+ Top = 23
+ Width = 59
+ Height = 13
+ Caption = 'Searching...'
+ end
end
end
end
diff --git a/G940LEDControl/Forms/MainFrm.pas b/G940LEDControl/Forms/MainFrm.pas
index 18f78fe..92b669b 100644
--- a/G940LEDControl/Forms/MainFrm.pas
+++ b/G940LEDControl/Forms/MainFrm.pas
@@ -1,5 +1,7 @@
unit MainFrm;
+// #ToDo1 -oMvR: 3-3-2013: trigger profile update when Save As only changes the name
+
interface
uses
System.Classes,
@@ -19,12 +21,11 @@ uses
pngimage,
X2UtPersistIntf,
- ButtonAssignmentFrm,
FSXSimConnectIntf,
LEDStateConsumer,
Profile,
ProfileManager,
- Settings, VirtualTrees, Vcl.ImgList, Vcl.ActnList, Vcl.ToolWin, Vcl.Menus;
+ Settings;
const
@@ -44,6 +45,13 @@ const
type
+ TLEDControls = record
+ ConfigureButton: TButton;
+ CategoryLabel: TLabel;
+ FunctionLabel: TLabel;
+ end;
+
+
TMainForm = class(TForm, IProfileObserver)
imgStateNotFound: TImage;
lblG940Throttle: TLabel;
@@ -64,6 +72,35 @@ type
btnCheckUpdates: TButton;
lblProxy: TLabel;
tsButtons: TTabSheet;
+ btnP1: TButton;
+ lblP1Function: TLabel;
+ lblP1Category: TLabel;
+ btnP2: TButton;
+ lblP2Function: TLabel;
+ lblP2Category: TLabel;
+ btnP3: TButton;
+ lblP3Function: TLabel;
+ lblP3Category: TLabel;
+ btnP4: TButton;
+ lblP4Function: TLabel;
+ lblP4Category: TLabel;
+ btnP5: TButton;
+ lblP5Function: TLabel;
+ lblP5Category: TLabel;
+ btnP6: TButton;
+ lblP6Function: TLabel;
+ lblP6Category: TLabel;
+ btnP7: TButton;
+ lblP7Function: TLabel;
+ lblP7Category: TLabel;
+ btnP8: TButton;
+ lblP8Function: TLabel;
+ lblP8Category: TLabel;
+ lblProfile: TLabel;
+ cmbProfiles: TComboBox;
+ btnSaveProfile: TButton;
+ btnDeleteProfile: TButton;
+ bvlProfiles: TBevel;
pnlFSX: TPanel;
imgFSXStateNotConnected: TImage;
imgFSXStateConnected: TImage;
@@ -75,44 +112,11 @@ type
cbProfileMenuCascaded: TCheckBox;
lblProfileSwitching: TLabel;
bvlProfileSwitching: TBevel;
- TrayIcon: TTrayIcon;
- bafP1: TButtonAssignmentFrame;
- bafP2: TButtonAssignmentFrame;
- bafP3: TButtonAssignmentFrame;
- bafP4: TButtonAssignmentFrame;
- bafP5: TButtonAssignmentFrame;
- bafP6: TButtonAssignmentFrame;
- bafP7: TButtonAssignmentFrame;
- bafP8: TButtonAssignmentFrame;
- vstProfile: TVirtualStringTree;
- pnlProfiles: TPanel;
- tbProfiles: TToolBar;
- tbNewProfile: TToolButton;
- tbSaveProfile: TToolButton;
- ActionList: TActionList;
- actNewProfile: TAction;
- actSaveProfile: TAction;
- actRevertProfile: TAction;
- tbRevertProfile: TToolButton;
- ImageList: TImageList;
- tbDeleteProfile: TToolButton;
- actDeleteProfile: TAction;
- ToolButton1: TToolButton;
- tbSetActiveProfile: TToolButton;
- actSetActiveProfile: TAction;
- pmnProfiles: TPopupMenu;
- pmnProfilesNew: TMenuItem;
- pmnProfilesSave: TMenuItem;
- pmnProfilesRevert: TMenuItem;
- pmnProfilesDelete: TMenuItem;
- pmnProfilesSetActive: TMenuItem;
- pmnProfilesSep1: TMenuItem;
- tbRenameProfile: TToolButton;
- actRenameProfile: TAction;
procedure FormCreate(Sender: TObject);
procedure lblLinkLinkClick(Sender: TObject; const Link: string; LinkType: TSysLinkType);
procedure btnCheckUpdatesClick(Sender: TObject);
+ procedure LEDButtonClick(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure cmbProfilesClick(Sender: TObject);
procedure cbCheckUpdatesClick(Sender: TObject);
@@ -120,14 +124,8 @@ type
procedure btnDeleteProfileClick(Sender: TObject);
procedure cbProfileMenuClick(Sender: TObject);
procedure cbProfileMenuCascadedClick(Sender: TObject);
- procedure actNewProfileExecute(Sender: TObject);
- procedure actSaveProfileExecute(Sender: TObject);
- procedure actRevertProfileExecute(Sender: TObject);
- procedure actSetActiveProfileExecute(Sender: TObject);
- procedure actDeleteProfileExecute(Sender: TObject);
- procedure actRenameProfileExecute(Sender: TObject);
private
- FLEDControls: array[0..LED_COUNT - 1] of TButtonAssignmentFrame;
+ FLEDControls: array[0..LED_COUNT - 1] of TLEDControls;
FEventMonitor: TOmniEventMonitor;
FProfilesFilename: string;
@@ -182,8 +180,6 @@ type
procedure HandleDeviceStateMessage(AMessage: TOmniMessage);
procedure HandleFSXStateMessage(AMessage: TOmniMessage);
- procedure LEDConfigurationClick(Sender: TObject);
-
procedure CMAskAutoUpdate(var Msg: TMessage); message CM_ASKAUTOUPDATE;
property EventMonitor: TOmniEventMonitor read FEventMonitor;
@@ -291,7 +287,7 @@ begin
worker := TFSXStateMonitorWorker.Create;
EventMonitor.Monitor(CreateTask(worker)).Run;
- Profiles.Attach(Self);
+ TProfileManager.Attach(Self);
FindLEDControls;
@@ -310,7 +306,7 @@ begin
FinalizeProfileMenu;
UnregisterDeviceArrival;
- Profiles.Detach(Self);
+ TProfileManager.Detach(Self);
end;
@@ -382,7 +378,7 @@ var
profile: TProfile;
begin
- profile := Profiles.ActiveProfile;
+ profile := TProfileManager.Instance.ActiveProfile;
if Settings.ActiveProfile <> profile.Name then
begin
@@ -390,13 +386,12 @@ begin
SaveSettings;
end;
- // #ToDo1 -oMvR: 21-4-2013: invalidate profile node
-// FLockChangeProfile := True;
-// try
-// cmbProfiles.ItemIndex := cmbProfiles.Items.IndexOfObject(profile);
-// finally
-// FLockChangeProfile := False;
-// end;
+ FLockChangeProfile := True;
+ try
+ cmbProfiles.ItemIndex := cmbProfiles.Items.IndexOfObject(profile);
+ finally
+ FLockChangeProfile := False;
+ end;
LoadActiveProfile;
end;
@@ -416,17 +411,20 @@ procedure TMainForm.FindLEDControls;
var
ledIndex: Integer;
ledNumber: string;
- buttonFrame: TButtonAssignmentFrame;
begin
for ledIndex := 0 to Pred(LED_COUNT) do
begin
ledNumber := IntToStr(Succ(ledIndex));
- buttonFrame := (ComponentByName('bafP' + ledNumber, ledIndex) as TButtonAssignmentFrame);
- buttonFrame.OnConfigurationClick := LEDConfigurationClick;
+ FLEDControls[ledIndex].ConfigureButton := (ComponentByName('btnP' + ledNumber, ledIndex) as TButton);
+ FLEDControls[ledIndex].CategoryLabel := (ComponentByName('lblP' + ledNumber + 'Category', ledIndex) as TLabel);
+ FLEDControls[ledIndex].FunctionLabel := (ComponentByName('lblP' + ledNumber + 'Function', ledIndex) as TLabel);
- FLEDControls[ledIndex] := buttonFrame;
+ FLEDControls[ledIndex].ConfigureButton.OnClick := LEDButtonClick;
+ FLEDControls[ledIndex].CategoryLabel.Caption := '';
+ FLEDControls[ledIndex].CategoryLabel.Font.Color := clGrayText;
+ FLEDControls[ledIndex].FunctionLabel.Caption := '';
end;
end;
@@ -456,43 +454,43 @@ begin
begin
Debug.Log('UI: Succesfully converted 0.x profile');
defaultProfile.Name := DefaultProfileName;
+ defaultProfile.IsTemporary := True;
end;
if Assigned(defaultProfile) then
- Profiles.Add(defaultProfile);
+ TProfileManager.Add(defaultProfile);
end else
begin
persistXML := TX2UtPersistXML.Create;
try
persistXML.FileName := FProfilesFilename;
- Profiles.Load(persistXML.CreateReader);
+ TProfileManager.Load(persistXML.CreateReader);
finally
FreeAndNil(persistXML);
end;
end;
{ Make sure we always have a profile }
- if Profiles.Count = 0 then
+ if TProfileManager.Instance.Count = 0 then
begin
Debug.Log('UI: No profiles found, creating default profile');
- Profiles.Add(CreateDefaultProfile);
+ TProfileManager.Add(CreateDefaultProfile);
end;
- // #ToDo1 -oMvR: 21-4-2013: load tree
-// FLockChangeProfile := True;
-// try
-// cmbProfiles.Items.BeginUpdate;
-// try
-// cmbProfiles.Items.Clear;
-//
-// for profile in TProfileManager.Instance do
-// cmbProfiles.Items.AddObject(profile.Name, profile);
-// finally
-// cmbProfiles.Items.EndUpdate;
-// end;
-// finally
-// FLockChangeProfile := False;
-// end;
+ FLockChangeProfile := True;
+ try
+ cmbProfiles.Items.BeginUpdate;
+ try
+ cmbProfiles.Items.Clear;
+
+ for profile in TProfileManager.Instance do
+ cmbProfiles.Items.AddObject(profile.Name, profile);
+ finally
+ cmbProfiles.Items.EndUpdate;
+ end;
+ finally
+ FLockChangeProfile := False;
+ end;
finally
Debug.UnIndent;
end;
@@ -509,7 +507,7 @@ begin
persistXML := TX2UtPersistXML.Create;
try
persistXML.FileName := FProfilesFilename;
- Profiles.Save(persistXML.CreateWriter);
+ TProfileManager.Instance.Save(persistXML.CreateWriter);
finally
FreeAndNil(persistXML);
end;
@@ -554,22 +552,13 @@ begin
{ Default profile }
profile := nil;
if Length(Settings.ActiveProfile) > 0 then
- begin
- { Version 0.2 used the profile name, not a UID }
- if Settings.ActiveProfile[1] <> '{' then
- begin
- profile := Profiles.FindByName(Settings.ActiveProfile);
- if Assigned(profile) then
- Settings.ActiveProfile := profile.UID;
- end else
- profile := Profiles.FindByUID(Settings.ActiveProfile);
- end;
+ profile := TProfileManager.Instance.Find(Settings.ActiveProfile);
{ LoadProfiles ensures there's always at least 1 profile }
- if (not Assigned(profile)) and (Profiles.Count > 0) then
- profile := Profiles[0];
+ if (not Assigned(profile)) and (TProfileManager.Instance.Count > 0) then
+ profile := TProfileManager.Instance[0];
- Profiles.ActiveProfile := profile;
+ TProfileManager.Instance.ActiveProfile := profile;
{ Auto-update }
cbCheckUpdates.Checked := Settings.CheckUpdates;
@@ -612,7 +601,7 @@ begin
{ Default button functions are assigned during UpdateButton }
Result := TProfile.Create;
Result.Name := DefaultProfileName;
-// Result.IsTemporary := True;
+ Result.IsTemporary := True;
end;
@@ -622,8 +611,7 @@ var
buttonIndex: Integer;
begin
- // #ToDo1 -oMvR: 21-4-2013: change to LoadSelectedProfile
- activeProfile := Profiles.ActiveProfile;
+ activeProfile := TProfileManager.Instance.ActiveProfile;
if not Assigned(activeProfile) then
exit;
@@ -664,52 +652,16 @@ begin
if Assigned(buttonFunction) then
begin
- FLEDControls[AButtonIndex].CategoryName := buttonFunction.GetCategoryName;
- FLEDControls[AButtonIndex].FunctionName := buttonFunction.GetDisplayName;
+ FLEDControls[AButtonIndex].CategoryLabel.Caption := buttonFunction.GetCategoryName;
+ FLEDControls[AButtonIndex].FunctionLabel.Caption := buttonFunction.GetDisplayName;
end;
end;
-procedure TMainForm.actDeleteProfileExecute(Sender: TObject);
-begin
-//
-end;
-
-
-procedure TMainForm.actNewProfileExecute(Sender: TObject);
-begin
- //
-end;
-
-
-procedure TMainForm.actRenameProfileExecute(Sender: TObject);
-begin
- //
-end;
-
-
-procedure TMainForm.actRevertProfileExecute(Sender: TObject);
-begin
- //
-end;
-
-
-procedure TMainForm.actSaveProfileExecute(Sender: TObject);
-begin
- //
-end;
-
-
-procedure TMainForm.actSetActiveProfileExecute(Sender: TObject);
-begin
- //
-end;
-
-
procedure TMainForm.AddProfile(AProfile: TProfile);
begin
-// cmbProfiles.Items.AddObject(AProfile.Name, AProfile);
- Profiles.Add(AProfile, True);
+ cmbProfiles.Items.AddObject(AProfile.Name, AProfile);
+ TProfileManager.Instance.Add(AProfile, True);
end;
@@ -719,18 +671,18 @@ var
oldItemIndex: Integer;
begin
-// itemIndex := cmbProfiles.Items.IndexOfObject(AProfile);
-// if itemIndex > -1 then
-// begin
-// oldItemIndex := cmbProfiles.ItemIndex;
-// FLockChangeProfile := True;
-// try
-// cmbProfiles.Items[itemIndex] := AProfile.Name;
-// cmbProfiles.ItemIndex := oldItemIndex;
-// finally
-// FLockChangeProfile := False;
-// end;
-// end;
+ itemIndex := cmbProfiles.Items.IndexOfObject(AProfile);
+ if itemIndex > -1 then
+ begin
+ oldItemIndex := cmbProfiles.ItemIndex;
+ FLockChangeProfile := True;
+ try
+ cmbProfiles.Items[itemIndex] := AProfile.Name;
+ cmbProfiles.ItemIndex := oldItemIndex;
+ finally
+ FLockChangeProfile := False;
+ end;
+ end;
end;
@@ -739,39 +691,39 @@ var
itemIndex: Integer;
begin
-// itemIndex := cmbProfiles.Items.IndexOfObject(AProfile);
-// if itemIndex > -1 then
-// begin
-// TProfileManager.Remove(AProfile);
-// cmbProfiles.Items.Delete(itemIndex);
-//
-// if TProfileManager.Instance.Count = 0 then
-// AddProfile(CreateDefaultProfile);
-//
-// if ASetActiveProfile then
-// begin
-// if itemIndex >= TProfileManager.Instance.Count then
-// itemIndex := Pred(TProfileManager.Instance.Count);
-//
-// FLockChangeProfile := True;
-// try
-// cmbProfiles.ItemIndex := itemIndex;
-// TProfileManager.Instance.ActiveProfile := TProfile(cmbProfiles.Items.Objects[itemIndex]);
-// finally
-// FLockChangeProfile := False;
-// end;
-// end;
-// end;
+ itemIndex := cmbProfiles.Items.IndexOfObject(AProfile);
+ if itemIndex > -1 then
+ begin
+ TProfileManager.Remove(AProfile);
+ cmbProfiles.Items.Delete(itemIndex);
+
+ if TProfileManager.Instance.Count = 0 then
+ AddProfile(CreateDefaultProfile);
+
+ if ASetActiveProfile then
+ begin
+ if itemIndex >= TProfileManager.Instance.Count then
+ itemIndex := Pred(TProfileManager.Instance.Count);
+
+ FLockChangeProfile := True;
+ try
+ cmbProfiles.ItemIndex := itemIndex;
+ TProfileManager.Instance.ActiveProfile := TProfile(cmbProfiles.Items.Objects[itemIndex]);
+ finally
+ FLockChangeProfile := False;
+ end;
+ end;
+ end;
end;
procedure TMainForm.cmbProfilesClick(Sender: TObject);
begin
-// if not FLockChangeProfile then
-// begin
-// if cmbProfiles.ItemIndex > -1 then
-// TProfileManager.Instance.ActiveProfile := TProfile(cmbProfiles.Items.Objects[cmbProfiles.ItemIndex]);
-// end;
+ if not FLockChangeProfile then
+ begin
+ if cmbProfiles.ItemIndex > -1 then
+ TProfileManager.Instance.ActiveProfile := TProfile(cmbProfiles.Items.Objects[cmbProfiles.ItemIndex]);
+ end;
end;
@@ -834,7 +786,7 @@ begin
end;
-procedure TMainForm.LEDConfigurationClick(Sender: TObject);
+procedure TMainForm.LEDButtonClick(Sender: TObject);
function GetUniqueProfileName(const AName: string): string;
var
@@ -844,15 +796,14 @@ procedure TMainForm.LEDConfigurationClick(Sender: TObject);
Result := AName;
counter := 0;
-// while Assigned(Profiles.Find(Result)) do
-// begin
-// Inc(counter);
-// Result := Format('%s (%d)', [AName, counter]);
-// end;
+ while Assigned(TProfileManager.Find(Result)) do
+ begin
+ Inc(counter);
+ Result := Format('%s (%d)', [AName, counter]);
+ end;
end;
- // #ToDo1 -oMvR: 6-5-2013: new style!
var
activeProfile: TProfile;
buttonIndex: NativeInt;
@@ -860,25 +811,25 @@ var
newProfile: Boolean;
begin
- activeProfile := Profiles.ActiveProfile;
+ activeProfile := TProfileManager.Instance.ActiveProfile;
if not Assigned(activeProfile) then
exit;
{ Behaviour similar to the Windows System Sounds control panel;
when a change occurs, create a temporary profile "(modified)"
so the original profile can still be selected }
-// if not activeProfile.IsTemporary then
-// begin
-// profile := TProfile.Create;
-// profile.Assign(activeProfile);
-// profile.Name := GetUniqueProfileName(profile.Name + ProfilePostfixModified);
-// profile.IsTemporary := True;
-// newProfile := True;
-// end else
-// begin
+ if not activeProfile.IsTemporary then
+ begin
+ profile := TProfile.Create;
+ profile.Assign(activeProfile);
+ profile.Name := GetUniqueProfileName(profile.Name + ProfilePostfixModified);
+ profile.IsTemporary := True;
+ newProfile := True;
+ end else
+ begin
profile := activeProfile;
newProfile := False;
-// end;
+ end;
buttonIndex := (Sender as TComponent).Tag;
if TButtonFunctionForm.Execute(profile, buttonIndex) then
@@ -1004,13 +955,13 @@ var
begin
name := '';
- profile := Profiles.ActiveProfile;
+ profile := TProfileManager.Instance.ActiveProfile;
existingProfile := nil;
repeat
if InputQuery('Save profile as', 'Save this profile as:', name) then
begin
- existingProfile := Profiles.FindByName(name);
+ existingProfile := TProfileManager.Find(name);
if existingProfile = profile then
existingProfile := nil;
@@ -1035,24 +986,24 @@ begin
existingProfile.Assign(profile);
existingProfile.Name := name;
UpdateProfile(existingProfile);
- Profiles.ActiveProfile := existingProfile;
+ TProfileManager.Instance.ActiveProfile := existingProfile;
-// if profile.IsTemporary then
-// DeleteProfile(profile, False);
+ if profile.IsTemporary then
+ DeleteProfile(profile, False);
end else
begin
-// if profile.IsTemporary then
-// begin
-// profile.Name := name;
-// profile.IsTemporary := False;
-// UpdateProfile(profile);
-// end else
-// begin
+ if profile.IsTemporary then
+ begin
+ profile.Name := name;
+ profile.IsTemporary := False;
+ UpdateProfile(profile);
+ end else
+ begin
newProfile := TProfile.Create;
newProfile.Assign(profile);
newProfile.Name := name;
AddProfile(newProfile);
-// end;
+ end;
end;
SaveProfiles;
@@ -1064,7 +1015,7 @@ var
activeProfile: TProfile;
begin
- activeProfile := Profiles.ActiveProfile;
+ activeProfile := TProfileManager.Instance.ActiveProfile;
if Assigned(activeProfile) then
begin
if MessageBox(Self.Handle, PChar(Format('Do you want to remove the profile named "%s"?', [activeProfile.Name])),
diff --git a/G940LEDControl/G940LEDControl.dpr b/G940LEDControl/G940LEDControl.dpr
index fb776b5..6b70f6e 100644
--- a/G940LEDControl/G940LEDControl.dpr
+++ b/G940LEDControl/G940LEDControl.dpr
@@ -1,8 +1,8 @@
program G940LEDControl;
uses
- System.SysUtils,
- Vcl.Forms,
+ Forms,
+ SysUtils,
MainFrm in 'Forms\MainFrm.pas' {MainForm},
LogiJoystickDLL in '..\Shared\LogiJoystickDLL.pas',
SimConnect in '..\Shared\SimConnect.pas',
@@ -36,8 +36,7 @@ uses
FSXLEDFunctionProviderIntf in 'Units\FSXLEDFunctionProviderIntf.pas',
GxDbugIntf in 'Units\GxDbugIntf.pas',
DebugLog in 'Units\DebugLog.pas',
- DebugLogGExperts in 'Units\DebugLogGExperts.pas',
- ButtonAssignmentFrm in 'Forms\ButtonAssignmentFrm.pas' {ButtonAssignmentFrame: TFrame};
+ DebugLogGExperts in 'Units\DebugLogGExperts.pas';
{$R *.res}
diff --git a/G940LEDControl/G940LEDControl.dproj b/G940LEDControl/G940LEDControl.dproj
index 79d86d8..c318d2e 100644
--- a/G940LEDControl/G940LEDControl.dproj
+++ b/G940LEDControl/G940LEDControl.dproj
@@ -8,7 +8,7 @@
VCL
13.4
True
- Debug
+ Release
Win32
1
Application
@@ -148,11 +148,6 @@
-
-
- dfm
- TFrame
-
Cfg_2
Base
diff --git a/G940LEDControl/G940LEDControl.res b/G940LEDControl/G940LEDControl.res
index d98ff0a..906ddee 100644
Binary files a/G940LEDControl/G940LEDControl.res and b/G940LEDControl/G940LEDControl.res differ
diff --git a/G940LEDControl/Resources/Icons/DeleteProfile.ico b/G940LEDControl/Resources/Icons/DeleteProfile.ico
deleted file mode 100644
index 7db8d4d..0000000
Binary files a/G940LEDControl/Resources/Icons/DeleteProfile.ico and /dev/null differ
diff --git a/G940LEDControl/Resources/Icons/NewProfile.ico b/G940LEDControl/Resources/Icons/NewProfile.ico
deleted file mode 100644
index 2896fe3..0000000
Binary files a/G940LEDControl/Resources/Icons/NewProfile.ico and /dev/null differ
diff --git a/G940LEDControl/Resources/Icons/RenameProfile.ico b/G940LEDControl/Resources/Icons/RenameProfile.ico
deleted file mode 100644
index 93dfa42..0000000
Binary files a/G940LEDControl/Resources/Icons/RenameProfile.ico and /dev/null differ
diff --git a/G940LEDControl/Resources/Icons/RevertProfile.ico b/G940LEDControl/Resources/Icons/RevertProfile.ico
deleted file mode 100644
index e757383..0000000
Binary files a/G940LEDControl/Resources/Icons/RevertProfile.ico and /dev/null differ
diff --git a/G940LEDControl/Resources/Icons/SaveProfile.ico b/G940LEDControl/Resources/Icons/SaveProfile.ico
deleted file mode 100644
index 749f6f2..0000000
Binary files a/G940LEDControl/Resources/Icons/SaveProfile.ico and /dev/null differ
diff --git a/G940LEDControl/Resources/Icons/SetActiveProfile.ico b/G940LEDControl/Resources/Icons/SetActiveProfile.ico
deleted file mode 100644
index 205922a..0000000
Binary files a/G940LEDControl/Resources/Icons/SetActiveProfile.ico and /dev/null differ
diff --git a/G940LEDControl/Units/FSXSimConnectClient.pas b/G940LEDControl/Units/FSXSimConnectClient.pas
index 0bf5e99..0299f1c 100644
--- a/G940LEDControl/Units/FSXSimConnectClient.pas
+++ b/G940LEDControl/Units/FSXSimConnectClient.pas
@@ -118,7 +118,6 @@ type
FProfileMenu: Boolean;
FProfileMenuCascaded: Boolean;
- // #ToDo1 -oMvR: 6-5-2013: change to object list
FMenuProfiles: TStringList;
FMenuWasCascaded: Boolean;
protected
@@ -312,9 +311,9 @@ begin
if AEnabled <> FObservingProfileManager then
begin
if AEnabled then
- Profiles.Attach(Self)
+ TProfileManager.Attach(Self)
else
- Profiles.Detach(Self);
+ TProfileManager.Detach(Self);
FObservingProfileManager := AEnabled;
end;
@@ -553,9 +552,9 @@ begin
exit;
profileName := FMenuProfiles[Pred(AEventID)];
- profile := Profiles.FindByUID(profileName);
+ profile := TProfileManager.Find(profileName);
if Assigned(profile) then
- Profiles.ActiveProfile := profile;
+ TProfileManager.Instance.ActiveProfile := profile;
end;
@@ -686,12 +685,8 @@ begin
if ProfileMenu then
begin
- try
- for profile in Profiles.LockList do
- FMenuProfiles.Add(profile.Name);
- finally
- Profiles.UnlockList;
- end;
+ for profile in TProfileManager.Instance do
+ FMenuProfiles.Add(profile.Name);
FMenuProfiles.Sort;
diff --git a/G940LEDControl/Units/Profile.pas b/G940LEDControl/Units/Profile.pas
index 7fa01af..dfd588d 100644
--- a/G940LEDControl/Units/Profile.pas
+++ b/G940LEDControl/Units/Profile.pas
@@ -44,8 +44,8 @@ type
TProfile = class(TPersistent)
private
- FUID: string;
FName: string;
+ FIsTemporary: Boolean;
FButtons: TProfileButtonList;
function GetButton(Index: Integer): TProfileButton;
@@ -61,8 +61,8 @@ type
function HasButton(AIndex: Integer): Boolean;
- property UID: string read FUID write FUID;
property Name: string read FName write FName;
+ property IsTemporary: Boolean read FIsTemporary write FIsTemporary;
property ButtonCount: Integer read GetButtonCount;
property Buttons[Index: Integer]: TProfileButton read GetButton;
@@ -71,7 +71,7 @@ type
TProfileList = class(TObjectList)
public
-// function Find(const AName: string): TProfile;
+ function Find(const AName: string): TProfile;
procedure Load(AReader: IX2PersistReader);
procedure Save(AWriter: IX2PersistWriter);
@@ -92,6 +92,7 @@ const
KeyProviderUID = 'ProviderUID';
KeyFunctionUID = 'FunctionUID';
+ KeyIsTemporary = 'IsTemporary';
{ TProfileButton }
@@ -231,8 +232,8 @@ begin
begin
sourceProfile := TProfile(Source);
- FUID := sourceProfile.UID;
FName := sourceProfile.Name;
+ FIsTemporary := sourceProfile.IsTemporary;
FButtons.Clear;
for buttonIndex := 0 to Pred(sourceProfile.ButtonCount) do
@@ -250,8 +251,8 @@ var
begin
buttonIndex := 0;
-// if not AReader.ReadBoolean(KeyIsTemporary, FIsTemporary) then
-// FIsTemporary := False;
+ if not AReader.ReadBoolean(KeyIsTemporary, FIsTemporary) then
+ FIsTemporary := False;
while AReader.BeginSection(SectionButton + IntToStr(buttonIndex)) do
try
@@ -276,7 +277,7 @@ var
buttonIndex: Integer;
begin
-// AWriter.WriteBoolean(KeyIsTemporary, IsTemporary);
+ AWriter.WriteBoolean(KeyIsTemporary, IsTemporary);
for buttonIndex := 0 to Pred(FButtons.Count) do
begin
@@ -329,7 +330,6 @@ end;
{ TProfileList }
-{
function TProfileList.Find(const AName: string): TProfile;
var
profile: TProfile;
@@ -344,7 +344,6 @@ begin
break;
end;
end;
-}
procedure TProfileList.Load(AReader: IX2PersistReader);
diff --git a/G940LEDControl/Units/ProfileManager.pas b/G940LEDControl/Units/ProfileManager.pas
index 32f83ab..a0bc2e4 100644
--- a/G940LEDControl/Units/ProfileManager.pas
+++ b/G940LEDControl/Units/ProfileManager.pas
@@ -3,6 +3,7 @@ unit ProfileManager;
interface
uses
System.Classes,
+ System.SyncObjs,
Profile,
X2UtPersistIntf;
@@ -20,53 +21,57 @@ type
TProfileManager = class;
- ILockedProfileList = interface
- ['{4F647762-AA70-4315-BB1C-E85E320F4E82}']
- function GetEnumerator: TProfileList.TEnumerator;
+ TProfileManagerEnumerator = class(TProfileList.TEnumerator)
+ private
+ FManager: TProfileManager;
+ public
+ constructor Create(AManager: TProfileManager);
+ destructor Destroy; override;
end;
-
TProfileManager = class(TObject)
private
+ FLock: TCriticalSection;
+ FProfiles: TProfileList;
FObservers: TInterfaceList;
- FProfileList: TProfileList;
FActiveProfile: TProfile;
+ function GetActiveProfile: TProfile;
function GetCount: Integer;
function GetItem(Index: Integer): TProfile;
procedure SetActiveProfile(const Value: TProfile);
procedure SetItem(Index: Integer; const Value: TProfile);
protected
property Observers: TInterfaceList read FObservers;
- property ProfileList: TProfileList read FProfileList;
+ property Profiles: TProfileList read FProfiles;
public
+ class function Instance(): TProfileManager;
+
constructor Create;
destructor Destroy; override;
- procedure Add(AProfile: TProfile; ASetActive: Boolean = False);
- function FindByName(const AName: string): TProfile;
- function FindByUID(const AName: string): TProfile;
- function Remove(const AProfile: TProfile): Integer;
+ procedure Lock;
+ procedure Unlock;
- procedure Load(AReader: IX2PersistReader);
- procedure Save(AWriter: IX2PersistWriter);
+ class procedure Add(AProfile: TProfile; ASetActive: Boolean = False);
+ class function Find(const AName: string): TProfile;
+ class function Remove(const AProfile: TProfile): Integer;
- procedure Attach(AObserver: IProfileObserver);
- procedure Detach(AObserver: IProfileObserver);
+ class procedure Load(AReader: IX2PersistReader);
+ class procedure Save(AWriter: IX2PersistWriter);
- function LockList: ILockedProfileList;
- procedure UnlockList;
+ class procedure Attach(AObserver: IProfileObserver);
+ class procedure Detach(AObserver: IProfileObserver);
- property ActiveProfile: TProfile read FActiveProfile write SetActiveProfile;
+ function GetEnumerator: TProfileManagerEnumerator;
+
+ property ActiveProfile: TProfile read GetActiveProfile write SetActiveProfile;
property Count: Integer read GetCount;
property Items[Index: Integer]: TProfile read GetItem write SetItem; default;
end;
- { Singleton }
- function Profiles: TProfileManager;
-
implementation
@@ -78,20 +83,8 @@ var
ProfileManagerInstance: TProfileManager;
-
-type
- TLockedProfileList = class(TInterfacedObject, ILockedProfileList)
- private
- FList: TProfileList;
- public
- constructor Create(AList: TProfileList);
-
- function GetEnumerator: TProfileList.TEnumerator;
- end;
-
-
-
-function Profiles: TProfileManager;
+{ TProfileManager }
+class function TProfileManager.Instance: TProfileManager;
begin
if not Assigned(ProfileManagerInstance) then
ProfileManagerInstance := TProfileManager.Create;
@@ -100,130 +93,136 @@ begin
end;
-{ TProfileManager }
constructor TProfileManager.Create;
begin
inherited Create;
FObservers := TInterfaceList.Create;
- FProfileList := TProfileList.Create(True);
+ FProfiles := TProfileList.Create(True);
+ FLock := TCriticalSection.Create;
end;
destructor TProfileManager.Destroy;
begin
- FreeAndNil(FProfileList);
+ FreeAndNil(FLock);
+ FreeAndNil(FProfiles);
FreeAndNil(FObservers);
inherited;
end;
-procedure TProfileManager.Add(AProfile: TProfile; ASetActive: Boolean);
+procedure TProfileManager.Lock;
+begin
+
+end;
+
+
+procedure TProfileManager.Unlock;
+begin
+
+end;
+
+
+class procedure TProfileManager.Add(AProfile: TProfile; ASetActive: Boolean);
var
observer: IInterface;
begin
- TMonitor.Enter(ProfileList);
+ Instance.Lock;
try
- ProfileList.Add(AProfile);
+ Instance.Profiles.Add(AProfile);
finally
- TMonitor.Exit(ProfileList);
+ Instance.Unlock;
end;
- for observer in Observers do
+ for observer in Instance.Observers do
(observer as IProfileObserver).ObserveAdd(AProfile);
if ASetActive then
- SetActiveProfile(AProfile);
+ Instance.SetActiveProfile(AProfile);
end;
-function TProfileManager.FindByName(const AName: string): TProfile;
+class function TProfileManager.Find(const AName: string): TProfile;
begin
-// Result := Instance.ProfileList.Find(AName);
+ Result := Instance.Profiles.Find(AName);
end;
-function TProfileManager.FindByUID(const AName: string): TProfile;
-begin
- //
-end;
-
-
-function TProfileManager.Remove(const AProfile: TProfile): Integer;
+class function TProfileManager.Remove(const AProfile: TProfile): Integer;
var
observer: IInterface;
begin
- TMonitor.Enter(ProfileList);
+ Instance.Lock;
try
- Result := ProfileList.Remove(AProfile);
+ Result := Instance.Profiles.Remove(AProfile);
finally
- TMonitor.Exit(ProfileList);
+ Instance.Unlock;
end;
- for observer in Observers do
+ for observer in Instance.Observers do
(observer as IProfileObserver).ObserveRemove(AProfile);
end;
-procedure TProfileManager.Load(AReader: IX2PersistReader);
+class procedure TProfileManager.Load(AReader: IX2PersistReader);
begin
- TMonitor.Enter(ProfileList);
+ Instance.Lock;
try
- ProfileList.Load(AReader);
+ Instance.Profiles.Load(AReader);
finally
- TMonitor.Exit(ProfileList);
+ Instance.Unlock;
end;
end;
-procedure TProfileManager.Save(AWriter: IX2PersistWriter);
+class procedure TProfileManager.Save(AWriter: IX2PersistWriter);
begin
- TMonitor.Enter(ProfileList);
+ Instance.Lock;
try
- ProfileList.Save(AWriter);
+ Instance.Profiles.Save(AWriter);
finally
- TMonitor.Exit(ProfileList);
+ Instance.Unlock;
end;
end;
-procedure TProfileManager.Attach(AObserver: IProfileObserver);
+class procedure TProfileManager.Attach(AObserver: IProfileObserver);
begin
- Observers.Add(AObserver as IProfileObserver);
+ Instance.Observers.Add(AObserver as IProfileObserver);
end;
-procedure TProfileManager.Detach(AObserver: IProfileObserver);
+class procedure TProfileManager.Detach(AObserver: IProfileObserver);
begin
- Observers.Remove(AObserver as IProfileObserver);
+ Instance.Observers.Remove(AObserver as IProfileObserver);
end;
-function TProfileManager.LockList: ILockedProfileList;
+function TProfileManager.GetActiveProfile: TProfile;
begin
- TMonitor.Enter(ProfileList);
- Result := TLockedProfileList.Create(ProfileList);
-end;
-
-
-procedure TProfileManager.UnlockList;
-begin
- TMonitor.Exit(ProfileList);
+ Result := Instance.FActiveProfile;
end;
function TProfileManager.GetCount: Integer;
begin
- Result := ProfileList.Count;
+ Result := Instance.Profiles.Count;
+end;
+
+
+function TProfileManager.GetEnumerator: TProfileManagerEnumerator;
+begin
+ Result := TProfileManagerEnumerator.Create(Self);
end;
function TProfileManager.GetItem(Index: Integer): TProfile;
begin
- Result := ProfileList[Index];
+ Result := Profiles[Index];
end;
@@ -243,24 +242,26 @@ end;
procedure TProfileManager.SetItem(Index: Integer; const Value: TProfile);
begin
- ProfileList[Index] := Value;
+ Profiles[Index] := Value;
end;
-{ TLockedProfileList }
-constructor TLockedProfileList.Create(AList: TProfileList);
+{ TProfileManagerEnumerator }
+constructor TProfileManagerEnumerator.Create(AManager: TProfileManager);
begin
- inherited Create;
+ inherited Create(AManager.Profiles);
- FList := AList;
+ FManager := AManager;
+ FManager.Lock;
end;
-function TLockedProfileList.GetEnumerator: TProfileList.TEnumerator;
+destructor TProfileManagerEnumerator.Destroy;
begin
- Result := FList.GetEnumerator;
-end;
+ FManager.Unlock;
+ inherited;
+end;
initialization
finalization