Added Prepar3D branding if it's discovered to be running

This commit is contained in:
Mark van Renswoude 2017-08-13 16:19:39 +02:00
parent ff2bc232b2
commit 5796cf95fb
11 changed files with 400 additions and 86 deletions

View File

@ -1,7 +1,7 @@
object MainForm: TMainForm
Left = 0
Top = 0
ActiveControl = cbCheckUpdates
ActiveControl = cmbProfiles
BorderIcons = [biSystemMenu, biMinimize]
BorderStyle = bsSingle
Caption = 'G940 LED Control'
@ -30,7 +30,7 @@ object MainForm: TMainForm
Margins.Top = 8
Margins.Right = 8
Margins.Bottom = 8
ActivePage = tsAbout
ActivePage = tsButtons
Align = alClient
TabOrder = 0
object tsButtons: TTabSheet
@ -276,6 +276,278 @@ object MainForm: TMainForm
Height = 13
Shape = bsTopLine
end
object imgFSXStateDisconnected: TImage
Left = 397
Top = 67
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}
Visible = False
end
object imgFSXStateConnected: TImage
Left = 359
Top = 67
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 imgPrepar3DStateDisconnected: TImage
Left = 397
Top = 108
Width = 32
Height = 32
AutoSize = True
Picture.Data = {
0954506E67496D61676589504E470D0A1A0A0000000D49484452000000200000
00200806000000737A7AF40000001974455874536F6674776172650041646F62
6520496D616765526561647971C9653C0000032269545874584D4C3A636F6D2E
61646F62652E786D7000000000003C3F787061636B657420626567696E3D22EF
BBBF222069643D2257354D304D7043656869487A7265537A4E54637A6B633964
223F3E203C783A786D706D65746120786D6C6E733A783D2261646F62653A6E73
3A6D6574612F2220783A786D70746B3D2241646F626520584D5020436F726520
352E332D633031312036362E3134353636312C20323031322F30322F30362D31
343A35363A32372020202020202020223E203C7264663A52444620786D6C6E73
3A7264663D22687474703A2F2F7777772E77332E6F72672F313939392F30322F
32322D7264662D73796E7461782D6E7323223E203C7264663A44657363726970
74696F6E207264663A61626F75743D222220786D6C6E733A786D703D22687474
703A2F2F6E732E61646F62652E636F6D2F7861702F312E302F2220786D6C6E73
3A786D704D4D3D22687474703A2F2F6E732E61646F62652E636F6D2F7861702F
312E302F6D6D2F2220786D6C6E733A73745265663D22687474703A2F2F6E732E
61646F62652E636F6D2F7861702F312E302F73547970652F5265736F75726365
526566232220786D703A43726561746F72546F6F6C3D2241646F62652050686F
746F73686F7020435336202857696E646F7773292220786D704D4D3A496E7374
616E636549443D22786D702E6969643A46373844414546353830333031314537
383642313835314144313333453444322220786D704D4D3A446F63756D656E74
49443D22786D702E6469643A4637384441454636383033303131453738364231
383531414431333345344432223E203C786D704D4D3A4465726976656446726F
6D2073745265663A696E7374616E636549443D22786D702E6969643A46373844
4145463338303330313145373836423138353141443133334534443222207374
5265663A646F63756D656E7449443D22786D702E6469643A4637384441454634
383033303131453738364231383531414431333345344432222F3E203C2F7264
663A4465736372697074696F6E3E203C2F7264663A5244463E203C2F783A786D
706D6574613E203C3F787061636B657420656E643D2272223F3E2AAC8A2B0000
05884944415478DAB5975D4C145714C7FF33BBCBF7571023864421A8A118BE2C
51A0C627531BF1951A8920F1C147424830358813A55A2B515BEDBB4D15296B8A
4DA07DE08918FB620C602D890F34C1867D0024F2B5B8B0BBB33DE7EEDE656676
D8DD9AF4869B3BCCDC7BCFEFFCCF9973679523478E14E6E6E69EF4F97C45A150
48A50E5DD7637A30188C5EF31C6E3CC6EBD639722D75DDEFF77BBC5EEFEFCAF1
E3C7CF2F2C2C14D143552E90CDBA91F1BE7514D73CDADD078F3130FAC6C68647
397AF468CFEAEAAA6AF42C6206F2DF44C6134118012001A86F6E6EEA4A7D7DBD
B6BEBE6EF2566E62356A0715EBAD8D7246A8C8353BBCE1F341A9ABABD33E7CF8
B08DF190FC33198FCEB18C710DDB00B05DE5F0E1C31AC5228EE1F846B7C02C32
5BC0ACD71C02565EA9ADADD5027E7F7441C4BCC970F49E11328E11B3E711408B
4A2152C0CB00870E1DD2EC12705B05128420EE330300DB5C5FF742A9A9AED642
06A3310A58F22026276CB3DEE2BD4D78743D08AF9714A8260085E72888F5DA40
24169BE69801604CC038092AC1F42087C01B06501505A969A9C8CCCC84C3E130
D9D6433AA84E20E00F40A17939B93934C769F28EE55C595E813F924BD9D95970
B952242FCDE38CF7515F17FB04820101B0E68D84808D1E3C7810675BCEC2E974
8A0D8D8D01868787F1E6CD1B5CEEBE8C94D4942D48656BCE13F7134CFF3D8D8E
8E0EECDAB5CB5C5BA84D4F4F63E89721783C1E6C12ECDADA2A295055A5395D4E
545656A2B5B515333333989F9B0F43D0E62E970BE59F944375A8B8F7FD3DD4D5
D7C349C05B29A92023231D151515585A5AC69DDBB7D1D9D9898CCC0CBC7EFD1A
814040CCCACFCFC7810307B0B2B282BEBE3EBC7BB78855BA5668A1C65E575555
A2A5A50503033FE3D5AB57E2F0618D1D4E86AB407373330607DD78F9F2258502
505587080937863C73E60CF6ED2BC5952B57D0D5D5250CDDBFFF03975B31C741
0E34347C86D3A7BFC4E8E82886868604B0525E5E2E42505353430067F1F8F100
26272785026C4086E7DCB9563C7AD48F172F5E202F2F0F274E7C4EE17289CDD3
287F5881E7CFFFC0C8C8082E5EECA2CD9770F7EE77A053560A2572ACB7B7170B
F3F3B875AB0FEFDFBF875256562614A8A9A9162170BBDD34318B364D1300EC1D
C3B1CCBDBD5F63717151C4B7ADAD4D3CE3964A39B173E74EA1DCC39F1EA28B00
78F33B77EE8A722BF384017A2EF7880A78FDC67501A9505C04001524E1E5E0E0
2079F70579991B062708F682EF8F8F8F53687491A8DC5455154996929282A6A6
26D4D67E8A9B37BFC5850B1768F330805080001C14B2E2E2625CBAF49550EAC1
8F0FB0BC4C21D8BF7F7F14A0ADED1CE5C000DEBEFD074AA4387028D86B8E257B
BC77EFDE2880CC70F6ACB1B1915428C0D5ABD7D0DEDE2E72C8ED1E14D9CE5BE5
EFD881538DA7904BAFF18D1BDF88B7C5BB46AF6169696934071880E33C313111
4E42831188F73B1BD7AE5D25C953A335801592C938363686A74F7F457777370A
0B0B45B593AF34CFE13AD1DFDF8F67CF9E9143FEF0695852522200780127DBD4
D414E6E6E68461B9B184484F4FC7B163C7A20AC86AC546666767E9B5FB4B84A5
A1A1015959591115C3EBE9F38B72E44FD0D79778358304E7A3E2A4505C3499ED
5B678DB920CBC6F3D8008F76870BAB261509C387ABA53CECF83977B94628B067
CF1E4D6E6E94538EA693C1E6D32CF6008AFD58B5BBC79D1354292A2AD2A46746
10ABE776CA24FC3E8C3984CC8A0980DDBB776B4669B78348468D784AD8A92000
A8A89800AC2148148A8F51C204505050A0B1713B80442A249B0B766A444340A7
540C40322A244ACA4430E2B39C3E86153A58E20224A342A2306CA78650202727
4793C6E3A9F07FE48300A03ADEA3861BFE6B32269B0FDBC11080AE505D3F4FA5
B5880CA856059255E16394E01FA754093D6CB590363D49A38048C6F364429100
4CA7F3C04365F9B77F012DCE3F40F34BE76D0000000049454E44AE426082}
Visible = False
end
object imgPrepar3DStateConnected: TImage
Left = 359
Top = 108
Width = 32
Height = 32
AutoSize = True
Picture.Data = {
0954506E67496D61676589504E470D0A1A0A0000000D49484452000000200000
00200806000000737A7AF4000000097048597300000EC400000EC401952B0E1B
0000059A4944415478DAB5975D4C145714C7FF773F403E0482102124A0418CC5
C08245BE4A7822B509BE5A8301E4C9873631C60453039200D55A89D06A7DB6A9
22654DB1893EF9640C7D41A2526BE2034DB0D10740A27CECB2B03BB33DE7EECC
3033BBEE2E4D7AC37087997BEFF99DFF39F7DC41D4D5D579B2B3B36F040281DA
7038ECA44BA8AA0AFBA5288A714F63C08DFB78977D8C36979B120C06A77C3EDF
D7A2A5A565727171F130BD74691304B4665FC8FCDCDECB7BEE633D07F7C6DF61
0D26B4B1B1F1443435356DAEAEAE3AE981301BD12725633C11841900BA1AF46B
737353110D0D0D8ADFEF979E87B72CC28262004443457B1B43393394764F0E87
37020188FAFA7A757D7D1DB18D87F51F8B71638CAD8F6B381A006C57D4D6D6AA
148B3886E31BDD02B3C96C03B3DF5308C0CA8B9A9A1A35140C1A1334F316C3C6
3333641C2356CF35409B4A6152C0C700870E1D52CD5B2BA102094210F79D0980
6DFAFD3E88EAAA2A356C321AA5802D0FA2722266D6DBBC8F111E5555E0F39102
55042037BE40B4D7262239D932C60A007302C649501D4C553804BE08804308A4
EE48454646069C4EA7C5B61A56417502A1600882C6656567D11897C53B967365
7905412D9776EECC84DB9DA2F3D238CEF8005D7EB94E48094980359F1602367A
F0E041B477B4C3E572C905CD8D01EEDFBF8F57AF5EA1B7A71729A9295B90626B
CC5DEF5DCCFE3D8B3367CE60F7EEDD966DC96D76761613BF4DE0EDDBB7D824D8
B5B55552C0E3515D6E172A2B2BD1D9D989B9B9392CCC2F44206871B7DB8DF24F
CAE1703A70EDC76BA86F68808B80B75252203D3D0D151515F8F06119C357AFE2
ECD9B348CF48C78B172F100A85E4A8DCDC5CECDFBF1F2B2B2B181A1AC2BB774B
58A57B411355F6DAE3A944474707C6C67EC5CCCC8C3C7C5863A78BE12A70E2C4
098C8F7B313D3D4DA1001C0EA70C0937866C6B6BC3BE7DA5E8EBEB437777B734
74FDFA4FA0722BC738C981C6C6CF70FCF89778F8F02126262624B0282F2F9721
A8AEAE268076DCB93386E7CF9F4B05D8801E9E93273B71FBF628A6A6A6909393
8323473EA770B9E5E23B287F5881C9C93FF0E0C1039C3BD74D8B7FC0C8C80FA0
5356174AE6D8E0E02016171670E5CA10DEBF7F0F71E0C001A9407575950C81D7
EBA58199B4E80E09C0DE311CCB3C38F82D969696647CBBBABAE43B6EA99413F9
F9F952B95BBFDC423701F0E2C3C323B2DCEA79C200177A2FC80A78F1D2450929
282E12800A92F4727C7C9CBCFB82BCCC8E8013047BC1CF9F3E7D4AA15165A272
73381C32C952525270ECD831D4D47C8ACB97BFC7A953A768F108805480009C14
B23D7BF6E0FCF96FA452377FBE89E5650A4159599901D0D5759272600CAF5FFF
03A115070E057BCDB1648F4B4A4A0C003DC3D9B3D6D65652210FFDFD03387DFA
B4CC21AF775C663B2F95BB6B178EB61E45366DE34B97BE93BBC5B746DBB0B4B4
D4C80106E0383F7BF62C9284262390FB7B270606FA49F254A306B0427A323E7A
F408F7EEFD8E9E9E1E141414C86AA76F691EC375627474148F1F3F26878291D3
70EFDEBD12802770B2BD7CF912F3F3F3D2B0BEB00E91969686E6E6664301BD5A
B191376FDED0B6FB4B86A5B1B1119999999A8A91F9F4F94539F227E8EB4B6E4D
85E002549C04C545D5B37DEBACB11664BDF13836C07DACC38555D31589C047AA
A57ED8F17BBEF4395281E2E262555FDC2CA7DE5B4E86189F66D10750F4C76AAC
677C71828AA2A22255F7CC0C62F73C963209BF0FA30E21AB6212A0B0B050354B
FB318864D488A7442C15240015150B803D048942F15F94B000E4E5E5A96C3C16
40221592CD85586A1821A0532A0A201915122565221806E08F6141074B5C8064
544814868FA92115C8CACA5234E3229E0AFF433E842500D5F14D32ECA44B6C37
1993CD878FC0308022A8AE4F52693D4C065CBA12DB55619B4A18FF9C52257CC2
B27B68D11BD4D752EF149A85789E27138A3860FC40A1F3608ACAF257FF0266EC
56107E5E17130000000049454E44AE426082}
Visible = False
end
object btnP1: TButton
Left = 11
Top = 67
@ -641,6 +913,8 @@ object MainForm: TMainForm
Align = alTop
BevelOuter = bvNone
TabOrder = 1
ExplicitLeft = -19
ExplicitTop = 8
object pnlFSX: TPanel
AlignWithMargins = True
Left = 233
@ -650,67 +924,11 @@ object MainForm: TMainForm
Align = alRight
BevelOuter = bvNone
TabOrder = 0
object imgFSXStateNotConnected: TImage
object imgSimulatorState: 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
@ -780,9 +998,8 @@ object MainForm: TMainForm
7901CBF3552A9CD30416F89951CBCA4428D022A635999CD35D14A88A5826399E
0E2D10AFE61CB27855F81656D0C8A5AA694DF092FA3F8CC8125D22B18C700000
000049454E44AE426082}
Visible = False
end
object lblFSX: TLabel
object lblSimulator: TLabel
Left = 42
Top = 4
Width = 146
@ -795,7 +1012,7 @@ object MainForm: TMainForm
Font.Style = [fsBold]
ParentFont = False
end
object lblFSXState: TLabel
object lblSimulatorState: TLabel
Left = 42
Top = 23
Width = 31

View File

@ -40,6 +40,7 @@ const
TM_UPDATE = 1;
TM_NOUPDATE = 2;
TM_FSXSTATE = 3;
TM_FSXSIMULATOR = 4;
LED_COUNT = 8;
@ -107,10 +108,9 @@ type
btnDeleteProfile: TButton;
bvlProfiles: TBevel;
pnlFSX: TPanel;
imgFSXStateNotConnected: TImage;
imgFSXStateConnected: TImage;
lblFSX: TLabel;
lblFSXState: TLabel;
imgSimulatorState: TImage;
lblSimulator: TLabel;
lblSimulatorState: TLabel;
pnlState: TPanel;
tsConfiguration: TTabSheet;
cbProfileMenu: TCheckBox;
@ -130,6 +130,10 @@ type
ApplicationEvents: TApplicationEvents;
cbFSXSEAutoLaunch: TCheckBox;
ScriptErrorDialog: TTaskDialog;
imgFSXStateDisconnected: TImage;
imgFSXStateConnected: TImage;
imgPrepar3DStateDisconnected: TImage;
imgPrepar3DStateConnected: TImage;
procedure FormCreate(Sender: TObject);
procedure lblLinkLinkClick(Sender: TObject; const Link: string; LinkType: TSysLinkType);
@ -167,6 +171,9 @@ type
FLoadingSettings: Boolean;
FFunctionRegistry: TLEDFunctionRegistry;
FSimulator: TFSXSimConnectSimulator;
FSimulatorConnected: Boolean;
protected
procedure RegisterDeviceArrival;
procedure UnregisterDeviceArrival;
@ -205,6 +212,7 @@ type
procedure SetDeviceState(const AMessage: string; AFound: Boolean);
procedure SetFSXState(const AMessage: string; AConnected: Boolean);
procedure UpdateSimulatorState;
// procedure SetFSXToggleZoomButton(const ADeviceGUID: TGUID; AButtonIndex: Integer; const ADisplayText: string);
procedure CheckForUpdatesThread(const ATask: IOmniTask);
@ -215,6 +223,7 @@ type
procedure HandleDeviceStateMessage(AMessage: TOmniMessage);
procedure HandleFSXStateMessage(AMessage: TOmniMessage);
procedure HandleSimulatorMessage(AMessage: TOmniMessage);
procedure CMAskAutoUpdate(var Msg: TMessage); message CM_ASKAUTOUPDATE;
@ -222,6 +231,9 @@ type
property Settings: TSettings read FSettings;
property StateConsumerTask: IOmniTaskControl read FStateConsumerTask;
property Simulator: TFSXSimConnectSimulator read FSimulator write FSimulator;
property SimulatorConnected: Boolean read FSimulatorConnected write FSimulatorConnected;
property Log: IX2Log read FLog;
property FunctionRegistry: TLEDFunctionRegistry read FFunctionRegistry;
end;
@ -290,9 +302,10 @@ type
protected
function Initialize: Boolean; override;
procedure Cleanup; override;
public
{ IFSXSimConnectStateObserver }
procedure ObserverStateUpdate(ANewState: TFSXSimConnectState);
procedure ObserveStateUpdate(ANewState: TFSXSimConnectState);
procedure ObserveSimulatorUpdate(ASimulator: TFSXSimConnectSimulator);
end;
@ -913,11 +926,39 @@ procedure TMainForm.SetFSXState(const AMessage: string; AConnected: Boolean);
begin
Log.Verbose(Format('FSX SimConnect state changed (connected = %s, status = %s)', [BoolToStr(AConnected, True), AMessage]));
lblFSXState.Caption := AMessage;
lblFSXState.Update;
lblSimulatorState.Caption := AMessage;
lblSimulatorState.Update;
imgFSXStateConnected.Visible := AConnected;
imgFSXStateNotConnected.Visible := not AConnected;
SimulatorConnected := AConnected;
UpdateSimulatorState;
end;
procedure TMainForm.UpdateSimulatorState;
begin
case Simulator of
scsFSX:
begin
lblSimulator.Caption := 'Flight Simulator X';
lblSimulator.Update;
if SimulatorConnected then
imgSimulatorState.Picture.Assign(imgFSXStateConnected.Picture)
else
imgSimulatorState.Picture.Assign(imgFSXStateDisconnected.Picture);
end;
scsPrepar3D:
begin
lblSimulator.Caption := 'Prepar3D';
lblSimulator.Update;
if SimulatorConnected then
imgSimulatorState.Picture.Assign(imgPrepar3DStateConnected.Picture)
else
imgSimulatorState.Picture.Assign(imgPrepar3DStateDisconnected.Picture);
end;
end;
end;
@ -1263,6 +1304,9 @@ begin
TM_FSXSTATE:
HandleFSXStateMessage(msg);
TM_FSXSIMULATOR:
HandleSimulatorMessage(msg);
TM_UPDATE:
if MessageBox(Self.Handle, PChar('Version ' + msg.MsgData + ' is available on the G940 LED Control website.'#13#10 +
'Do you want to open the website now?'), 'Update available',
@ -1327,6 +1371,13 @@ begin
end;
procedure TMainForm.HandleSimulatorMessage(AMessage: TOmniMessage);
begin
Simulator := TFSXSimConnectSimulator(AMessage.MsgData.AsInteger);
UpdateSimulatorState;
end;
procedure TMainForm.TrayIconClick(Sender: TObject);
begin
Show();
@ -1400,9 +1451,14 @@ begin
inherited Cleanup;
end;
procedure TFSXStateMonitorWorker.ObserverStateUpdate(ANewState: TFSXSimConnectState);
procedure TFSXStateMonitorWorker.ObserveStateUpdate(ANewState: TFSXSimConnectState);
begin
Task.Comm.Send(TM_FSXSTATE, Integer(ANewState));
end;
procedure TFSXStateMonitorWorker.ObserveSimulatorUpdate(ASimulator: TFSXSimConnectSimulator);
begin
Task.Comm.Send(TM_FSXSIMULATOR, Integer(ASimulator));
end;
end.

View File

@ -8,7 +8,7 @@
<FrameworkType>VCL</FrameworkType>
<ProjectVersion>13.4</ProjectVersion>
<Base>True</Base>
<Config Condition="'$(Config)'==''">Release</Config>
<Config Condition="'$(Config)'==''">Debug</Config>
<Platform Condition="'$(Platform)'==''">Win32</Platform>
<TargetedPlatforms>1</TargetedPlatforms>
<AppType>Application</AppType>

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

View File

@ -3,14 +3,13 @@ local strings = {}
strings.Category = {}
strings.Category.FSX = {}
strings.Category.FSX.Default = 'Flight Simulator X'
strings.Category.FSX.AutoPilot = strings.Category.FSX.Default..' - Autopilot'
strings.Category.FSX.ControlSurfaces = strings.Category.FSX.Default..' - Control surfaces'
strings.Category.FSX.Engines = strings.Category.FSX.Default..' - Engines'
strings.Category.FSX.Instruments = strings.Category.FSX.Default..' - Instruments'
strings.Category.FSX.Lights = strings.Category.FSX.Default..' - Lights'
strings.Category.FSX.Panels = strings.Category.FSX.Default..' - Panels'
strings.Category.FSX.Radios = strings.Category.FSX.Default..' - Radios'
strings.Category.FSX.Systems = strings.Category.FSX.Default..' - Systems'
strings.Category.FSX.AutoPilot = 'Autopilot'
strings.Category.FSX.ControlSurfaces = 'Control surfaces'
strings.Category.FSX.Engines = 'Engines'
strings.Category.FSX.Instruments = 'Instruments'
strings.Category.FSX.Lights = 'Lights'
strings.Category.FSX.Panels = 'Panels'
strings.Category.FSX.Radios = 'Radios'
strings.Category.FSX.Systems = 'Systems'
return strings

View File

@ -476,6 +476,14 @@ begin
Log.Info('Succesfully connected');
TFSXSimConnectStateMonitor.SetCurrentState(scsConnected);
{ Attempt to discover if it's FSX or Prepar3D }
if WaitNamedPipe('\\.\pipe\Lockheed Martin Prepar3D v2\SimConnect', 0) or
WaitNamedPipe('\\.\pipe\Lockheed Martin Prepar3D v3\SimConnect', 0) or
WaitNamedPipe('\\.\pipe\Lockheed Martin Prepar3D v4\SimConnect', 0) then
TFSXSimConnectStateMonitor.SetSimulator(scsPrepar3D)
else
TFSXSimConnectStateMonitor.SetSimulator(scsFSX);
Task.ClearTimer(TIMER_TRYSIMCONNECT);
RegisterDefinitions;
UpdateProfileMenu;

View File

@ -58,10 +58,12 @@ type
TFSXSimConnectState = (scsDisconnected, scsConnecting, scsConnected, scsFailed);
TFSXSimConnectSimulator = (scsFSX, scsPrepar3D);
IFSXSimConnectStateObserver = interface
['{0508904F-8189-479D-AF70-E98B00C9D9B2}']
procedure ObserverStateUpdate(ANewState: TFSXSimConnectState);
procedure ObserveStateUpdate(ANewState: TFSXSimConnectState);
procedure ObserveSimulatorUpdate(ASimulator: TFSXSimConnectSimulator);
end;

View File

@ -14,10 +14,14 @@ type
FObservers: TInterfaceList;
FCurrentStateLock: TCriticalSection;
FCurrentState: TFSXSimConnectState;
FSimulator: TFSXSimConnectSimulator;
FSimulatorLock: TCriticalSection;
procedure DoSetCurrentState(const Value: TFSXSimConnectState);
procedure DoSetSimulator(const Value: TFSXSimConnectSimulator);
protected
property CurrentStateLock: TCriticalSection read FCurrentStateLock;
property SimulatorLock: TCriticalSection read FCurrentStateLock;
property Observers: TInterfaceList read FObservers;
public
constructor Create;
@ -25,11 +29,13 @@ type
class function Instance: TFSXSimConnectStateMonitor;
class procedure SetCurrentState(AState: TFSXSimConnectState);
class procedure SetSimulator(ASimulator: TFSXSimConnectSimulator);
procedure Attach(AObserver: IFSXSimConnectStateObserver);
procedure Detach(AObserver: IFSXSimConnectStateObserver);
property CurrentState: TFSXSimConnectState read FCurrentState write DoSetCurrentState;
property Simulator: TFSXSimConnectSimulator read FSimulator write DoSetSimulator;
end;
@ -55,11 +61,18 @@ begin
end;
class procedure TFSXSimConnectStateMonitor.SetSimulator(ASimulator: TFSXSimConnectSimulator);
begin
Instance.DoSetSimulator(ASimulator);
end;
constructor TFSXSimConnectStateMonitor.Create;
begin
inherited Create;
FCurrentStateLock := TCriticalSection.Create;
FSimulatorLock := TCriticalSection.Create;
FObservers := TInterfaceList.Create;
end;
@ -100,11 +113,30 @@ begin
end;
for observer in Observers do
(observer as IFSXSimConnectStateObserver).ObserverStateUpdate(CurrentState);
(observer as IFSXSimConnectStateObserver).ObserveStateUpdate(CurrentState);
end;
end;
procedure TFSXSimConnectStateMonitor.DoSetSimulator(const Value: TFSXSimConnectSimulator);
var
observer: IInterface;
begin
if Value <> FSimulator then
begin
CurrentStateLock.Acquire;
try
FSimulator := Value;
finally
CurrentStateLock.Release;
end;
for observer in Observers do
(observer as IFSXSimConnectStateObserver).ObserveSimulatorUpdate(Simulator);
end;
end;
initialization
FSXSimConnectStateInstance := TFSXSimConnectStateMonitor.Create;

View File

@ -348,7 +348,7 @@ begin
fileName := fileName + ' - ' + string(debug.source)
end;
TX2GlobalLog.Log(ALevel, AMessage, filename);
TX2GlobalLog.Category('Lua').Log(ALevel, AMessage, filename);
end;