Changeset 77


Ignore:
Timestamp:
May 19, 2021, 11:30:41 AM (3 years ago)
Author:
chronos
Message:
  • Added: Control icons for Pause, Play and Fast forward.
  • Modified: Image buttons changed to custom TImage control with Enabled property supported.
Location:
trunk
Files:
3 added
7 edited

Legend:

Unmodified
Added
Removed
  • trunk/Forms/UFormImages.lfm

    r76 r77  
    361361    Stretch = True
    362362  end
     363  object ImagePlay: TImage
     364    Left = 168
     365    Height = 64
     366    Top = 152
     367    Width = 80
     368    Picture.Data = {
     369      1754506F727461626C654E6574776F726B477261706869636214000089504E47
     370      0D0A1A0A0000000D4948445200000200000002000803000000C3A624C8000002
     371      B2504C5445000000000000000000000000000000000000000000000000000000
     372      0000000000000000000000000000000000000000000000000000000000000000
     373      0000000000000000000000000000000000000000000000000000000000000000
     374      0000000000000000000000000000000000000000000000000000000000000000
     375      0000000000000000000000000000000000000000000000000000000000000000
     376      0000000000000000000000000000000000000000000000000000000000000000
     377      0000000000000000000000000000000000000000000000000000000000000000
     378      0000000000000000000000000000000000000000000000000000000000000000
     379      0000000000000000000000000000000000000000000000000000000000000000
     380      0000000000000000000000000000000000000000000000000000000000000000
     381      0000000000000000000000000000000000000000000000000000000000000000
     382      0000000000000000000000000000000000000000000000000000000000000000
     383      0000000000000000000000000000000000000000000000000000000000000000
     384      0000000000000000000000000000000000000000000000000000000000000000
     385      0000000000000000000000000000000000000000000000000000000000000000
     386      0000000000000000000000000000000000000000000000000000000000000000
     387      0000000000000000000000000000000000000000000000000000000000000000
     388      0000000000000000000000000000000000000000000000000000000000000000
     389      0000000000000000000000000000000000000000000000000000000000000000
     390      0000000000000000000000000000000000000000000000000000000000000000
     391      0000000000000000000000000000000000000000000000000000000000000000
     392      0000000000000000000000000000000000000000000000CD1F3532000000E574
     393      524E53000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C
     394      1D1E1F202122232425262728292A2B2C2D2E2F3031333435363738393C3D3E3F
     395      4041424445464748494A4B4E4F505152535458595A5B5C5D6061626364656667
     396      696A6B6C6D6E6F707475767778797A7B7C7E7F8081828384858687898A8B8C8D
     397      8E8F9091939495969798999A9B9D9E9FA0A1A2A3A4A5A6A7A8A9AAABACADAEAF
     398      B0B1B2B3B4B5B6B9BABBBCBDBEBFC0C2C3C4C5C6C7C8C9CACBCCCDCECFD1D2D3
     399      D4D5D6D9DADBDCDDDEE0E1E2E3E4E5E6E7E8E9EAEBECEDEEEFF0F1F2F3F4F5F6
     400      F7F8F9FAFBFCFDFE1ECAFC2B0000107A49444154789CEDDDF99FD75515C77137
     401      724971435C53DC404BD172CBAD52B45C4BD054304DC152A0722F17D052C43250
     402      DB0449914505716111198D45050CD1588A419DC11998E5FC1F219BB3DCEFF7FB
     403      59EEE7F3BEE7DCF7F30FE071EFFDBC7E3B67BEECB45331761DB27B41FF32E9B0
     404      64D2C1E82310D22259781EFA0C04B450E4B31B77419F8260360720327E7FF431
     405      08654B0032FF0CF43908646B0052FF53F44108635B00D23E661FF45108617B00
     406      22AFF7479F8500BE0A40D65C853E0C95AF4300B2E9A1BDD1C7A1B2750C40E4A5
     407      E3D1E7A192750E40565E863E1095AB4B00D274D71EE8235199BA0620F2C291E8
     408      335189BA07204B2F441F8ACAE308401A6FEF813E1695C51580C8042E09C4C21D
     409      009704A2512100F9FC262E0944A15200224F1D803E1B95A0720032FF4CF4E1A8
     410      78550290FA6BD1A7A3C2550B40DA1FEF893E1F15AC6A00226F9C823E2015AB46
     411      005C12B0AE56005C1230AE6600222FF7451F928A9320002E095896240069BA7B
     412      4FF439A920890210997C14FAA0548C8401C8B201E89352219206201B867349C0
     413      A2C401884C38047D58F22F4500B2E87CF469C9BB340148C3CFB924604DAA00B8
     414      24604FCA00E46D2E09D89236002E0918933A00691FCB250143D207C0250153B2
     415      04206B06A28F4DBE640A405A467149C0886C017049C08CAC01C8CACBD147271F
     416      320720CDF77049C080EC01884CEE833E3DE5962700597611FAF89457AE0064C3
     417      88AFA12F40F9E40B40E4392E09E89637002E0928973B0069B87957F42528BBFC
     418      01883C7320FA1694998F0064C159E86B50565E0290F5D7A1EF4119F90940DAC7
     419      EE8BBE0965E229009137B924A092B70064ED20F45D28037F0148CB28FEAF33FA
     420      780C40E4152E09A8E335002E09E8E3370069BE974B02BA780E40E4C53EE82B51
     421      1ADE0390E55C12D0C47F005C1250A58000B824A0492101C8E2EFA1EF45091513
     422      8034DEC25F12D0A1A000449EE985BE1A2551580052C725010D8A0B40D60F465F
     423      8E6A2B30009127F6435F8F6A293400997D2AFA7E5443B101704920780507202D
     424      A3B92410B4A2031099D10F7D47AAA2F800E4E32BD097A4CA4A0840367249205C
     425      65042032A50FFA9E54413901C8F28BD11725B79202902F467249204865052032
     426      E950F45DC9A1BC006409970402546200D23894BF24109C320310F9CB41E8FB52
     427      17E5062075DF455F983A2B3900593F047D63EAA4EC00B8241098F20390395C12
     428      08082000597B35FAD6B4032200697D984B02A180042032F304F4C5692B50005C
     429      1208052A00D978DF5EE8BBD34EC00044A61D8DBE3C410390E53F44DF9EA00148
     430      D3AFB82480060D40E49F87A11F2076E000E4BDEFA35F2072E800A47118970490
     431      E0017049002B8000E41D2E09E08410807CCA250198200210F9E3FEE887885520
     432      01C89C6FA35F2252A104206BAF413F459C8209405A1FE9897E8C188513009704
     433      20420A403EB912FD1CF1092A00D9F45B2E09942CAC0044A61F837E91C8841680
     434      7CC825815205178034FF9A4B02250A2F0091E70F47BF4A44420C804B02250A32
     435      00D9702B97044A126600227FED8D7E9948841A80BCCB258152041B807CFA33F4
     436      DB4421DC0044FEC42581E2851C80CCE59240E1820E40FECB2581A2851D80B4FD
     437      9E4B02C50A3C00915927A29FC8B6E003904F7E8C7E23D3C20F405A7EC72581E2
     438      28084064FAB1E867B24B4500F2E18FD0EF64968E00A479780FF44B19A5240091
     439      89FCEF060AA12600597C1EFAAD4CD2138034DCBC0BFAB50C521480C853BDD0CF
     440      658FAA0064C119E8F732475700527F3DFAC1AC511680C818FE77035EA90B4066
     441      F747BF9929FA02903503D18F6689C200A4F521FE7703DE680C40E495BEE87733
     442      436700B2F272F4C359A13400D974CF9EE8A7B3416B002253FAA0DFCE04BD01C8
     443      B201E8C7B3407100D234824B02B9690E406422FFBB81BC7407C02581DC940720
     444      8D43B924908BF600449EE67F379087FE00A48E4B0239180840EA07A35F51310B
     445      01883CCE5F12C8CA46005C12C8CC48005C12C8CA4A00D23A8A4B025998094064
     446      463FF4636A6428002E096461290069E192406AA60210997A34FA41B531160097
     447      04D2B21680348DE07F379086B900449EE392400A06039025E7A35F55118B0148
     448      03970412331900970492331A80D49D897E5925AC0620EB87A09F5607B301888C
     449      E592400286039039A7A05F5701CB01C89A41E8E70D9FE900A46D3497046AB01D
     450      80C84C2E0954673D00F9F80AF41387CD7C00D2722F9704AAB01F80C8342E0954
     451      164300B2EC22F433872B8A00A4994B0295C41180C8A4C3D12F1DA85802E09240
     452      05D104208DC3B824E0104F00224FF746BF7680620A40DEE19240375105C02581
     453      EEE20A804B02DDC416009704BA882E002E0974165F005C12E824C200445E3D01
     454      FDECE188320059C92581EDE20C405AB924B04DA401884C3F06FDF46188360059
     455      7E31FAED83106F00D23C924B0251072032E908F4F3E3451D80BCC72581B803E0
     456      9240EC01883C7330FA1360451F80BC7316FA1B403180C8970418C0664F1C80FE
     457      0C380CE04B73E35D1260005BACBD1AFD215018C056EDB12E093080ED66C5B924
     458      C00076F8F84AF4C74060005F89724980017434FD58F4F7281D03E824BE250106
     459      D059F3C81EE84F522E06D055644B020CA09BB896041840778DB746B424C0005C
     460      225A1260004EEF46F34B020CC06DFD0DE82F5312065049244B020CA0A279512C
     461      093080CAA25812600055B43FDC13FD7D0AC700AA9A7522FA03158D0154677E49
     462      8001D4607D498001D4647B498001D4667A4980012460794980012432E91BE80F
     463      551406908CD92501069090D52501069098CD25010690DCBB167F498001A46071
     464      498001A4626F498001A433EF54F417F38C01A4B4F61AF427F38B01A4F6B0A95F
     465      126000E9995A12600019585A12600059B4DEB717FAC3F9C200B231B324C00032
     466      B2B224C000B232F2DF0D3080EC4C2C0930801C2C2C0930803C0C2C0930807CD4
     467      2F0930809CB42F093080BC942F093080FC542F0930000F342F0930001F142F09
     468      30003F466BFD250106E0C96BDF447FCA6C18802F4A9704188037ADF769FC2501
     469      06E091C6250106E0D30A7D4B020CC0A74F2E417FCFD4188047AFF5437FCEF418
     470      803F0F6AFC830106E0CB6A9DBF2BCA003C79AB3FFA5366C300FC786C7FF497CC
     471      8801F850AF772780017850773AFA3366C700F21BDF1BFD1573600079350EDB19
     472      FD11F36000392D3907FD09F36100F94CD4FED7410C208F8D2377437FC0BC1840
     473      0ECB06A03F5F7E0C20BB690AC7FFDD3080AC5AEEDA03FDF17C600019ADB80CFD
     474      E9FC6000D9681CFD3B31804C548EFE9D1840064A47FF4E0C20BDB74E467F358F
     475      18406A6A47FF4E0C20A5FA21E84FE617034847F3E8DF8901A4A27AF4EFC40052
     476      503EFA776200C92D563EFA77620089A91FFD3B3180849AF58FFE9D184032CB2E
     477      447FA982308044A65A18FD3B3180048C8CFE9D18406D2B2E457FA50231809ACC
     478      8CFE9D18402D7646FF4E0CA03A4BA37F270650D53C4BA37F270650CD1853A37F
     479      270650D93ABD7FF59F1C03A868C169E88F53060650C9F883D0DFA6140CC0CDE2
     480      E8DF8901382D3E17FD61CAC2005C6C8EFE9D184077CD236C8EFE9D1840374BAD
     481      8EFE9D1840577647FF4E0CA033CBA37F2706D08995BFFA4F8E0174F45A5FF4F7
     482      281D03E8C0F8E8DF8901EC607EF4EFC400B69B7712FA5B4030806D6CFDD57F72
     483      0C600B6B7FF59F1C03F8521CA37F2706B0D9B83846FF4E0C209ED1BF130330F9
     484      57FFC9451FC08423D09F002BF200A21AFD3BC51D405CA37FA7A803987A0CFAF9
     485      F1220E20BAD1BF53BC01C437FA778A368059F18DFE9D220DA0FDC1BDD12F1F88
     486      3803583D08FDEEC1883280B9E6FFEA3FB918038875F4EF145F00EB06A3DF3C28
     487      D10510F1E8DF29B600621EFD3BC5154043D4A37FA7A802887CF4EF145300B18F
     488      FE9DE209A07978ECA37FA76802E0E8DF2D9600A61E8D7EE940C511C0A63B39FA
     489      AF208A004CFFE07F4E3104F0EAF1E8570E98FD0038FAAFCA7C00AB38FAAFCA7A
     490      0073E2FCABFFE48C07C0D17F2DA603E0E8BF36CB0170F49F80E10038FA4FC26C
     491      000D4339FA4FC26A008BCE46BFAC12460378F670F4C36A613280268EFE13B318
     492      C0071CFD27673080291CFDA7602E008EFED3B1160047FF29190B602647FF2999
     493      0AA0ED018EFED3B214C0AA81E8D754C85000B339FACFC04E008FEE877E4B95AC
     494      04B0EE7AF44B2A652480B739FACFC84600E37AA1DF512D0B0134DCC2D17F6606
     495      02E0E83F0FFD0170F49F8BF6009A6EE7E83F17E5017C7001FA01B5D31DC08B7D
     496      D0EFA79EE60036DDC1D17F6E8A03E0E8DF07BD01CC380EFD7626680DA0ED7E8E
     497      FEBD501AC0AAABD00F6785CE00DEFC16FADDCC50190047FFFE280C80A37F9FF4
     498      0530FF3BE83733455D004F72F4EF95B20038FAF74D57000B39FAF74D5500FF38
     499      0CFD5CF6280AA0E9368EFEFDD3130047FF855013C0E4A3D04F659392005A7EB3
     500      3BFAA58CD211C04757A0DFC92C1501CCEA877E26BB1404D0367A1FF42B19167E
     501      006BAE41BF9169C10730F714F413D9167A0063F983FFC50A3B80F537A0DFC7BC
     502      A003A83B13FD3CF6851CC0D3BDD1AF1381700368BC7517F4E3C420D800969C8F
     503      7E9A38841AC07347A05F26126106D03CB207FA6162116400CB2E423F4B3C420C
     504      601A7FF0BF3CE105B0E96EFED57F89820BE0A3CBD14F1297D0027895A3FF7285
     505      1540DB288EFE4B165400ABAF463F477C420A604E7FF46B4428A0001EE7E81F20
     506      9800EA87A09F224EA104507706FA25221548004F71F40F1244000DC338FA4709
     507      2180C5E7A15F2162010430913FF80F040FA0690447FF48E8009672F48F050E60
     508      6A1FF0FDA3070D80A37F3C64002B38FAC7030630B32FFAF2040CA0F521FEE07F
     509      085001AC1E84BE396D010A603647FF81C004C0D17F301001D40F46DF9A760004
     510      B080A3FF80941FC0F883D077A60ECA0E80A3FFC0941CC0E273D117A6CECA0D60
     511      027FF03F346506F0C5708EFE835362004B07A02F4BDD9517C014FEE07F88CA0A
     512      60E35D1CFD07A9A400565C86BE28B99513C00C8EFE43554600AD0F72F41FAC12
     513      02583D107D49AAACF800DE3C197D47AAA2E800DAC7EC87BE2255537000F5D7A3
     514      2F48D5151BC0DBA7A3EF4735141AC0F85EE8EB512D0506D0307467F4EDA8A6E2
     515      02E0E85F85C2027896A37F150A0AE08BDB7743DF8C122926008EFED528248017
     516      39FA57A3800036DEC9D1BF1EFE03E0E85F15EF01BC723CFA4A9486E70038FAD7
     517      C66F00AB38FAD7C66B006F70F4AF8EC700DA1FE3E85F1F7F01ACE3E85F236F01
     518      70F4AF93AF00C671F4AF939F003EBF85A37FA5BC04B088A37FB57C04F0ECA1E8
     519      5B5066F903D8701BFFEA5FB1DC017C7021FA0A9447DE00261F89BE01E5922F80
     520      668EFEB5CB15C08A4BD1C7A7BCF204F03247FFFA650FA0E5018EFE0DC81CC0AA
     521      ABD047271FB206F0C649E8939317D902687F6C5FF4C1C98F4C01ACBB0E7D6CF2
     522      254B00F34F439F9ABCC910C0B803D187267F5207F0F9CD1CFD5B92368085E7A0
     523      4F4C5EA50CE0EF87A00F4C7EA50A60C32FF957FFD6A409E07D8EFEED4911C00B
     524      FCAB7F831207D07C0747FF16250D80A37FA31206C0D1BF5589026879E0EBE873
     525      52419204B0EA27E85352611204F03A47FF86D50CA0ED518EFE2DAB15C0FFAE45
     526      9F900A5523008EFEADAB1EC09F39FAB7AE5A009FDDC4D1BF795502587836FA70
     527      54BCCA0170F41F854A013472F41F870A01BC7F01FA60540E7700CFF3AFFE63E1
     528      0AA0E98EDDD1C7A2B23802F8F725E8435179BA07F0D271E8335189BA06B0E97E
     529      8EFEA3D22580FF70F41F99CE0170F41F9D8E01B4FDA127FA3854B60E01ACE3E8
     530      3F425F05F01647FF31DA11C09307A08F4208DB02F8F4468EFEE3B435807F71F4
     531      1FAB2D01FCED60F431086573008DBFE0E83F5E0BE5FD1FA0CF40404BA672F41F
     532      B3DD86EE893E0225F17F480E00F1A20F60070000000049454E44AE426082
     533    }
     534    Proportional = True
     535    Stretch = True
     536  end
     537  object ImagePause: TImage
     538    Left = 168
     539    Height = 62
     540    Top = 232
     541    Width = 74
     542    Picture.Data = {
     543      1754506F727461626C654E6574776F726B477261706869632401000089504E47
     544      0D0A1A0A0000000D4948445200000080000000800803000000F4E091F9000000
     545      27504C5445000000000000000000000000000000000000000000000000000000
     546      000000000000000000000000DD12F9B50000000C74524E53000F1F2F3F4F5F6F
     547      7F8FDFEF00B0AFC6000000A049444154789CEDDA410E8320144551454554F6BF
     548      DE762C900E684BD29E3B7E919338FDD324499224492F0A7BBA15E7D6768EF7ED
     549      1E7ADF3F72D915EBDB7855C6C7FBDF7FB6D5B65B7DDB2508F56FE6B3363E1BE3
     550      9EBF901ADFCC4BB95D5ADBF409C05A6E57000000000000000000000000000000
     551      00000000000000000000000000000000000080FF027CEB8C67F821D3F053AEF1
     552      C76CE3CFF924499224FD7E0F0EE7B7CD3A119A340000000049454E44AE426082
     553    }
     554    Proportional = True
     555    Stretch = True
     556  end
     557  object ImageFastForward: TImage
     558    Left = 163
     559    Height = 95
     560    Top = 312
     561    Width = 81
     562    Picture.Data = {
     563      1754506F727461626C654E6574776F726B47726170686963F30A000089504E47
     564      0D0A1A0A0000000D49484452000001000000010008060000005C72A86600000A
     565      BA4944415478DAEDDD4B8CDD6519C7F127B60AC15602DE8A513AD504148C4E97
     566      82B0305A12224160AB25EA462E2ED448594B31F592D8B25283256165CB454C6C
     567      8D46E9E092AA78A99AA86567698C344630B6E552DF7F3AA76927E79C3933732E
     568      FFFFF37EBEC96FC786F7ED7CDB39CFEF794F0400000000000000000000000000
     569      0000000000000000000000000000000000000000000000000000000000000000
     570      000018855D256F730C29D958F2C5924B1C050671A6E470C9758E221D9796BC5C
     571      F2B3920F380E0C124093FF947CA964BD2349C35B4A5E5CBCDFE3259F75241824
     572      805EF697BCDBB1A413402F8F965CE1683048004DFE5AF249479352004DFE5C72
     573      B3E3C12001343959B2B36483234A2780DEFDEE72BF38B34C7E51728D634A2780
     574      5E0E95CC3B2A021896174AB63BAA940238B3F8DFDC55B2CE9111C0A0BC56F2BD
     575      D019C828805E7E5872A563238061F975E80C64154093A325B73B3A0218169D81
     576      BC026872BA6477C9658E900086E5B1D019C828805E9E2DB9DE3112C0B0E80CE4
     577      154093974A76945CEC3809605867E0813053CE28805E7E5272952325009D813A
     578      05D0E45818071340E80CD42A8026AF97EC2DD9E47809605867E0BBA133905100
     579      BD1C29D9E688094067A04E0134F95FD817218058FE53649D819C02B04F400023
     580      E7F192F738EE94026872A2E4EEB04F400043F2B7D019C82A805EF6956C76F404
     581      3028A7426720B3009A3C1FF609086099FCB2E45AC79F52004D5E29D95372B96B
     582      20009D81FA04609F800056F4CEC0DB5D454A0134699E26B74F40003A03950AA0
     583      97032557BB1602D019A85300F6090860E4CE80A7A9720AA0B74FF048D8272080
     584      D019A85100E7EF13DCE49A0860586740D73CAF007CFF04018CDC19F0CE404E01
     585      F4B250B2D5951180CE409D02B04F4000237D78A433905700E73F363BE7FA0840
     586      67A04E01D827208091BE9BE0CBA133905500BD7D8287C23E01010CC913A13390
     587      5500F6090840678000CEED13DC1FF6090820067F9D9579725E01F47230EC1310
     588      40E80CD42A00FB0404305267E04E579B5600BD34FB0457B86602D019A85300F6
     589      090860D9FC26EAED0CD42080DECEC883251BFD3813C0A077069ACEC03A02489D
     590      85F0FD040410DE19A855006716FF7FEF09FB040410833B03B71040FAD8272080
     591      EA3B03350BC03E01012C9BA7237767A076013479357C3F0101449DEF0C10807D
     592      0202887A3B0304D07F9FE0223FF604504367800006EF13BCDF8F3E01647F6780
     593      003C314700AB4CF3CEC06602489FBD51F93E813F0479DF192080D1F709B61180
     594      0C7A96AAE9996F2080F4FB0455BE27E1F2F376060860E579262AFB7E02973E7A
     595      8E47B7DE192080D5EF1354F3FD042E3C6F678000D696FD51C13E818BCEDB1920
     596      80B5E76824DF2770C96B7F67603D01D82720009D0102B04F400095E6EFD1BECE
     597      0001D827208029A66D9D0102B04F40003348D319B89600D227C5F713B8C8BC9D
     598      0102B04F400033CEF763769D0102B04F40002DC86F67F4E93101D82720801675
     599      06BE32E5CE0001CC6E9F609E00645067608E00EC131040DDEF0CDC4200D5EC13
     600      6C2100E9D719F8FA847F5F2480F6EC13DC4600D22F874A3E4800E9F35AB4749F
     601      C0E5E4ED0C1040FB72385AB645EA52F2760608A0BD13A11DD1927D021792B733
     602      4000F60908A0A37F438CE39D0102687FFE51F21902907E79728D9D0102E84E7E
     603      1033DA2770F879DF192080EEED137C8200645C9D0102B04F400089B2B0C2CE00
     604      0174FBAEE70940D6D2192080EEEF13DC1513DE2770D0DDCC28DF4D400079F609
     605      E6084056DA192000FB04045071678000F2ED13EC8E31EF1338D83CEF0C6C2180
     606      2AD27C3FC1750420CB75060820F7BFFCEE8B31EC1338CC9C9D81372FFEE12080
     607      DC39106BDC27708839D37C37C1474AFEE92CAAD827F83401C8D29C2839ED1CAA
     608      C9C3ABD92770702279F2C7928F138048BD3959F2C0A8FB040E4C24EF3EC15602
     609      10A937FF2AF942C91B0840A4DEEC1BB44FE07044EA298A7D8A0044EADE27F84E
     610      C9650420526F9E2BF918018810808854F42BC0EE386FA5D8A188D4F321E06D3E
     611      041431062400910AF2A22290489D79461558A4CE65A0AF590612A9731D789B75
     612      6069F2EFF020484D59D5178C3AB89CF955C90DE149B01AE24930B9A0E8F1ADC5
     613      DFFF3C0A9A3F07C3A3A0B298E7976C7B79163C6F3C0B2E17E4C725EF5B72B704
     614      9033BE1844CEE5E5921D256FEC73B70490EFD7BB3DE1ABC164317F28B971C8DD
     615      1240AE1EFFED31011C6E77473E9B96B95B02C8115F0F2EE7D28CF53E3FE2DD12
     616      40F77BFC7797AC8B09E2A0BB35DB9F5FC1DD1240B7EF7A6B4C0187DD9DD9FEC6
     617      15DE2D01742FA74A76AEE2AE09A092D93E01E4CD9195F6F80920FF6CFFBD6BB8
     618      5B02E84EF6AEA6C74F00F5CDF60920578E956C8F19E212BA35DB27803CF969AC
     619      B1C74F00F966FBEF1CE3DD1240BBFF857751B40017D2ADD93E01743B87638C3D
     620      7E02E87E9A77DB3E3CA1BB2580F6F5F8DF1A2DC3E5CC26AFAE72B64F00DDCBD1
     621      98508F9F00BA3BDBBF750A774B00B3CF63255BA2C5B8A46ECDF609A01B391153
     622      E8F113407DB37D02C8B7B34100C9F3FB31CEF609408F9F002A9EED13407B7BFC
     623      3745077179939BED7F6EC6774B00C97BFC04D0DED9FE875A70B70490BCC74F00
     624      ED9BED7FB345BF031240F21E3F01B4ABEC716BCBEE96002633CDB93F5AD2E327
     625      8076E4A996963D0860FC3DFEEB23192E766D7F1BDC37E5D93E01CCA6C7FF50B4
     626      B0C74F00F5CDF60960FABFDADD118971C9DD9AED13C0747BFC73911C173DFBBD
     627      7D02685F8FFF9EE8408F9F00A6978568C76C9F0026DFE1D81A15E1D287E79568
     628      D76C9F0026D7E37FB0A3F74C0013CAB4F6F609408F9F005A96A7627A7BFB0430
     629      BB3C121DEEF113407DB37D02184F5E28B933E00F43746BB64F007AFC04308174
     630      65B64F00ABCF7FE36C8FFF623FF604D0A6BD7D02984E8FFFA37EDC09A0EBB37D
     631      0258F98A76DA1E3F01AC7EB6FF8DC83FF3AD5D00CD18F70E3FE2049069B64F00
     632      A3E5F1A8A0C74F0039F6F60960BC3DFE7BA3921E3F01D437DB2780E13DFE793F
     633      D204707E7E577243A5775B8B00AAEDF113407DB37D02B8307F8A8A7BFC0450DF
     634      6C9F00CEE6F5D0E32780A86FB64F007AFC0410F5CEF66B1740D3E3BFDAD51240
     635      DBDFE427003D7E0288E9CCF6E75C636A01E8F113C0C0D9FE9B5C615A01E8F113
     636      C0C0D9FE8DAE2EB500F4F809A0EFE8E7E1A87BB65F83009A1EFF66D7470066FB
     637      7509A0AAF7F80960F41C0AB3FDEC02A8EE3D7E02583EA7C36C3FBB004E96EC74
     638      C70460B65F9F00F4F809A06F7E1466FB9905D07C98BB37F4F80920ECEDD72680
     639      6325DB5D0D01D8DBAF4F0007438F9F00A2FF6CFF1DAE22AD009A7FD9E9F11380
     640      D97E85027836F4F80920CCF66B1340B39EBDA7E472D740004B67FBBBC2DC37B3
     641      009A11AE1E3F0154FD267FAD02D81F7AFC041066FBB509408F9F00067E02FCD5
     642      B0B79F59000BE13D7E0208B3FDDA04A0C74F0066FB950AE048E8F1134098EDD7
     643      26805E8F7F93E32500B3FDBA04D0F4F8BDC74F0066FB150AE040C9558E9400EC
     644      EDD72580974A76841E3F01F4C99361B69F59007AFC0460B65FA100F4F8096060
     645      9E0BB3FDCC02D0E32700B3FD4A05B0AFE44AC7460066FB7509A0D7E35FEFC808
     646      60699E0EB3FDCC0258083D7E02E89353E14DFECC02687AFC4D7763836322007B
     647      FB7509E02F25373B1EF413C01361B69F59008F96BCCBD160A9009AC65733DBF7
     648      267F4E011C0F1FE4628000CCF67372699C2D6DFDBCE41AC7817E7C3BCCF6B3D2
     649      7C807B6FC9258E02000000000000000000000000000000000000000000000000
     650      00000000000000000000000000000000000000000000006075FC1F4FD4830F12
     651      A78CC60000000049454E44AE426082
     652    }
     653    Proportional = True
     654    Stretch = True
     655  end
    363656end
  • trunk/Forms/UFormImages.pas

    r76 r77  
    1313
    1414  TFormImages = class(TForm)
     15    ImageFastForward: TImage;
     16    ImagePause: TImage;
     17    ImagePlay: TImage;
    1518    ImageLeftArrow: TImage;
    1619    ImageLocomotive: TImage;
  • trunk/Forms/UFormMain.pas

    r76 r77  
    4646    procedure LoadGraphicAssets;
    4747    procedure DarkModeChange(Sender: TObject);
     48    procedure CopyImage(DestBmp: TBitmap; SourceBmp: TBitmap; Grayed: Boolean = False);
    4849  public
    4950    FullScreen: Boolean;
     
    8586begin
    8687  SaveConfig;
    87   Engine.Free;
     88  FreeAndNil(Engine);
    8889end;
    8990
     
    216217procedure TFormMain.LoadGraphicAssets;
    217218begin
    218   Engine.ImagePassenger.Picture.Assign(FormImages.ImagePassenger.Picture);
    219   Engine.ImageLocomotive.Picture.Assign(FormImages.ImageLocomotive.Picture);
    220   Engine.ButtonBack.Bitmap.Assign(FormImages.ImageLeftArrow.Picture.Bitmap);
     219  CopyImage(Engine.ImagePassenger.Bitmap, FormImages.ImagePassenger.Picture.Bitmap);
     220  CopyImage(Engine.ImagePassenger.BitmapDisabled, FormImages.ImagePassenger.Picture.Bitmap, True);
     221  CopyImage(Engine.ImageLocomotive.Bitmap, FormImages.ImageLocomotive.Picture.Bitmap);
     222  CopyImage(Engine.ImageLocomotive.BitmapDisabled, FormImages.ImageLocomotive.Picture.Bitmap, True);
     223  CopyImage(Engine.ButtonBack.Bitmap, FormImages.ImageLeftArrow.Picture.Bitmap);
     224  CopyImage(Engine.ButtonBack.BitmapDisabled, FormImages.ImageLeftArrow.Picture.Bitmap, True);
     225  CopyImage(Engine.ImagePlay.Bitmap, FormImages.ImagePlay.Picture.Bitmap);
     226  CopyImage(Engine.ImagePlay.BitmapDisabled, FormImages.ImagePlay.Picture.Bitmap, True);
     227  CopyImage(Engine.ImagePause.Bitmap, FormImages.ImagePause.Picture.Bitmap);
     228  CopyImage(Engine.ImagePause.BitmapDisabled, FormImages.ImagePause.Picture.Bitmap, True);
     229  CopyImage(Engine.ImageFastForward.Bitmap, FormImages.ImageFastForward.Picture.Bitmap);
     230  CopyImage(Engine.ImageFastForward.BitmapDisabled, FormImages.ImageFastForward.Picture.Bitmap, True);
    221231  if Engine.DarkMode then begin
    222     BitmapInvert(Engine.ImagePassenger.Picture.Bitmap);
    223     BitmapInvert(Engine.ImageLocomotive.Picture.Bitmap);
     232    BitmapInvert(Engine.ImagePassenger.Bitmap);
     233    BitmapInvert(Engine.ImagePassenger.BitmapDisabled);
     234    BitmapInvert(Engine.ImageLocomotive.Bitmap);
     235    BitmapInvert(Engine.ImageLocomotive.BitmapDisabled);
    224236    BitmapInvert(Engine.ButtonBack.Bitmap);
     237    BitmapInvert(Engine.ButtonBack.BitmapDisabled);
     238    BitmapInvert(Engine.ImagePlay.Bitmap);
     239    BitmapInvert(Engine.ImagePlay.BitmapDisabled);
     240    BitmapInvert(Engine.ImagePause.Bitmap);
     241    BitmapInvert(Engine.ImagePause.BitmapDisabled);
     242    BitmapInvert(Engine.ImageFastForward.Bitmap);
     243    BitmapInvert(Engine.ImageFastForward.BitmapDisabled);
    225244  end;
    226245end;
     
    231250end;
    232251
     252procedure TFormMain.CopyImage(DestBmp: TBitmap; SourceBmp: TBitmap;
     253  Grayed: Boolean);
     254begin
     255  DestBmp.PixelFormat := SourceBmp.PixelFormat;
     256  DestBmp.SetSize(0, 0);
     257  DestBmp.SetSize(SourceBmp.Width, SourceBmp.Height);
     258  BitmapCopyRect(DestBmp, Bounds(0, 0, DestBmp.Width, DestBmp.Height), SourceBmp,
     259    Point(0, 0));
     260  if Grayed then BitmapBlendColor(DestBmp, $ffffffff);
     261end;
     262
    233263
    234264end.
  • trunk/Packages/Common/UPixelPointer.pas

    r76 r77  
    5353  procedure BitmapSwapRedBlue(Bitmap:TRasterImage);
    5454  procedure BitmapInvert(Bitmap: TRasterImage);
     55  procedure BitmapBlendColor(Bitmap: TRasterImage; Color: TColor32);
     56  function Color32(A, R, G, B: Byte): TColor32;
     57  function Color32ToPixel32(Color: TColor32): TPixel32;
     58  function Pixel32ToColor32(Color: TPixel32): TColor32;
    5559
    5660implementation
     
    237241end;
    238242
     243procedure BitmapBlendColor(Bitmap: TRasterImage; Color: TColor32);
     244var
     245  X, Y: Integer;
     246  Ptr: TPixelPointer;
     247  A, R, G, B: Word;
     248  Pixel: TPixel32;
     249begin
     250  Pixel := Color32ToPixel32(Color);
     251  Bitmap.BeginUpdate(True);
     252  Ptr := PixelPointer(Bitmap);
     253  for Y := 0 to Bitmap.Height - 1 do begin
     254    for X := 0 to Bitmap.Width - 1 do begin
     255      A := Ptr.Pixel^.A; //(Ptr.Pixel^.A + Pixel.A) shr 1;
     256      R := (Ptr.Pixel^.R + Pixel.R) shr 1;
     257      G := (Ptr.Pixel^.G + Pixel.G) shr 1;
     258      B := (Ptr.Pixel^.B + Pixel.B) shr 1;
     259      Ptr.Pixel^.ARGB := Color32(A, R, G, B);
     260      Ptr.NextPixel;
     261    end;
     262    Ptr.NextLine;
     263  end;
     264  Bitmap.EndUpdate;
     265end;
     266
     267function Color32(A, R, G, B: Byte): TColor32;
     268begin
     269  Result := ((A and $ff) shl 24) or ((R and $ff) shl 16) or
     270    ((G and $ff) shl 8) or ((B and $ff) shl 0);
     271end;
     272
     273function Color32ToPixel32(Color: TColor32): TPixel32;
     274begin
     275  Result.ARGB := Color;
     276end;
     277
     278function Pixel32ToColor32(Color: TPixel32): TColor32;
     279begin
     280  Result := Color.ARGB;
     281end;
     282
    239283function PixelPointer(Bitmap: TRasterImage; BaseX: Integer;
    240284  BaseY: Integer): TPixelPointer;
  • trunk/UControls.pas

    r64 r77  
    66
    77uses
    8   Classes, SysUtils;
     8  Classes, SysUtils, Graphics;
    99
    1010type
     11
     12  { TControl }
     13
    1114  TControl = class
     15  private
     16    FEnabled: Boolean;
     17    FOnClick: TNotifyEvent;
     18    procedure SetEnabled(AValue: Boolean);
     19  public
     20    Bounds: TRect;
     21    Canvas: TCanvas;
     22    constructor Create; virtual;
     23    procedure Paint; virtual;
     24    property Enabled: Boolean read FEnabled write SetEnabled;
     25    property OnClick: TNotifyEvent read FOnClick write FOnClick;
     26  end;
    1227
    13   end;
     28  { TButton }
    1429
    1530  TButton = class(TControl)
    1631    Text: string;
     32    procedure Paint; override;
     33  end;
     34
     35  { TImage }
     36
     37  TImage = class(TControl)
     38    Bitmap: TBitmap;
     39    BitmapDisabled: TBitmap;
     40    constructor Create; override;
     41    destructor Destroy; override;
     42    procedure Paint; override;
    1743  end;
    1844
    1945implementation
    2046
     47{ TButton }
     48
     49procedure TButton.Paint;
     50begin
     51  inherited Paint;
     52end;
     53
     54{ TControl }
     55
     56procedure TControl.SetEnabled(AValue: Boolean);
     57begin
     58  if FEnabled = AValue then Exit;
     59  FEnabled := AValue;
     60  if Assigned(Canvas) then Paint;
     61end;
     62
     63constructor TControl.Create;
     64begin
     65  FEnabled := True;
     66end;
     67
     68procedure TControl.Paint;
     69begin
     70end;
     71
     72{ TImage }
     73
     74constructor TImage.Create;
     75begin
     76  inherited;
     77  Bitmap := TBitmap.Create;
     78  BitmapDisabled := TBitmap.Create;
     79end;
     80
     81destructor TImage.Destroy;
     82begin
     83  FreeAndNil(Bitmap);
     84  FreeAndNil(BitmapDisabled);
     85  inherited;
     86end;
     87
     88procedure TImage.Paint;
     89begin
     90  if Canvas.Brush.Color = clNone then Canvas.Brush.Style := bsClear
     91    else Canvas.Brush.Style := bsSolid;
     92  if FEnabled then Canvas.StretchDraw(Bounds, Bitmap)
     93    else Canvas.StretchDraw(Bounds, BitmapDisabled);
     94end;
     95
    2196end.
    2297
  • trunk/UEngine.pas

    r76 r77  
    99  {$IFDEF Darwin}MacOSAll, CocoaAll, CocoaUtils,{$ENDIF}
    1010  Classes, SysUtils, Graphics, Controls, ExtCtrls, Math, DateUtils,
    11   UMetaCanvas, fgl, UMenu;
     11  UMetaCanvas, fgl, UMenu, UControls;
    1212
    1313type
     
    278278    FDarkMode: Boolean;
    279279    FOnDarkModeChange: TNotifyEvent;
     280    FState: TGameState;
    280281    LastMousePos: TPoint;
    281282    LastFocusedStation: TMapStation;
     
    294295    MenuGame: TMenu;
    295296    LastState: TGameState;
     297    TimePerSecond: TDateTime;
    296298    function GetServedDaysCount: Integer;
    297299    procedure ResizeView;
     
    315317    procedure SetDarkMode(AValue: Boolean);
    316318    procedure InitColors;
     319    procedure SetState(AValue: TGameState);
    317320    procedure TrainMovement;
    318321    function GetUnusedLine: TMetroLine;
     
    325328    procedure MenuItemGameRestart(Sender: TObject);
    326329    procedure MenuItemBack(Sender: TObject);
     330    procedure ButtonPlay(Sender: TObject);
     331    procedure ButtonPause(Sender: TObject);
     332    procedure ButtonFastForward(Sender: TObject);
    327333    procedure ButtonBackClick(Sender: TObject);
    328334    procedure DarkModeChanged(Sender: TObject);
    329335    procedure LanguageChanged(Sender: TObject);
    330336    procedure FullScreenChanged(Sender: TObject);
     337    procedure UpdateInterface;
    331338  public
    332339    Colors: TColors;
     
    343350    TrackStationUp: TTrackPoint;
    344351    ServedPassengerCount: Integer;
    345     State: TGameState;
    346352    RedrawPending: Boolean;
    347     ButtonBack: TMenuItemImage;
     353    ButtonBack: TImage;
    348354    ImagePassenger: TImage;
    349355    ImageLocomotive: TImage;
     356    ImagePlay: TImage;
     357    ImagePause: TImage;
     358    ImageFastForward: TImage;
    350359    HighestServedPassengerCount: Integer;
    351360    HighestServedDaysCount: Integer;
     
    365374    property Time: TDateTime read FTime;
    366375    property DarkMode: Boolean read FDarkMode write SetDarkMode;
     376    property State: TGameState read FState write SetState;
    367377    property ServedDaysCount: Integer read GetServedDaysCount;
    368378    property OnDarkModeChange: TNotifyEvent read FOnDarkModeChange
     
    386396  ImageLocomotiveName = 'Images/Locomotive.png';
    387397  ImageLeftArrowName = 'Images/Left arrow.png';
     398  ImagePlayName = 'Images/Play.png';
     399  ImagePauseName = 'Images/Pause.png';
     400  ImageFastForwardName = 'Images/Fast forward.png';
    388401  TrainPassengerCount = 6;
    389402  StationMinDistance = 100;
     
    395408  EndStationLength = 50;
    396409  ShowDistances = False;
    397   TimePerSecond = 60 * OneMinute;
     410  TimePerSecondNormal = 60 * OneMinute;
     411  TimePerSecondFast = 2 * TimePerSecondNormal;
    398412  NewStationPeriod = 1;
    399413  NewShapePeriod = 10;
     
    16921706    MenuItemBackgroundSelected := $f7bC61;
    16931707  end;
     1708end;
     1709
     1710procedure TEngine.SetState(AValue: TGameState);
     1711begin
     1712  if FState = AValue then Exit;
     1713  FState := AValue;
     1714  UpdateInterface;
    16941715end;
    16951716
     
    19491970end;
    19501971
     1972procedure TEngine.ButtonPlay(Sender: TObject);
     1973begin
     1974  TimePerSecond := TimePerSecondNormal;
     1975  if State = gsPaused then State := gsRunning;
     1976  UpdateInterface;
     1977end;
     1978
     1979procedure TEngine.ButtonPause(Sender: TObject);
     1980begin
     1981  if State = gsRunning then State := gsPaused;
     1982  UpdateInterface;
     1983end;
     1984
     1985procedure TEngine.ButtonFastForward(Sender: TObject);
     1986begin
     1987  TimePerSecond := TimePerSecondFast;
     1988  if State = gsPaused then State := gsRunning;
     1989  UpdateInterface;
     1990end;
     1991
    19511992procedure TEngine.MenuItemGameContinue(Sender: TObject);
    19521993begin
     
    19892030  FormMain.FullScreen := TMenuItemCheckBox(Sender).Checked;
    19902031  FormMain.PersistentForm1.SetFullScreen(FormMain.FullScreen);
     2032end;
     2033
     2034procedure TEngine.UpdateInterface;
     2035begin
     2036  ImagePlay.Enabled := not ((State = gsRunning) and (TimePerSecond = TimePerSecondNormal));
     2037  ImageFastForward.Enabled := not ((State = gsRunning) and (TimePerSecond = TimePerSecondFast));
     2038  ImagePause.Enabled := FState = gsRunning; //not (State = gsPaused);
    19912039end;
    19922040
     
    20952143  Angle: Double;
    20962144  Text: string;
    2097   Text2: string;
    20982145  I: Integer;
     2146  Y: Integer;
    20992147const
    21002148  ClockSize = 20;
     
    21152163      ClockCenter.Y + Round(Sin(Angle) * ClockSize * 0.9));
    21162164  end;
     2165  Y := ClockCenter.Y + ScaleY(5, 96);
    21172166
    21182167  Canvas.Font.Color := Colors.Text;
    21192168  Text := FormatDateTime('ddd', Time + 2);
    2120   Canvas.TextOut(ClockCenter.X - ClockSize - Canvas.TextWidth(Text) - 10, ClockCenter.Y -
    2121     Canvas.TextHeight(Text) div 2, Text);
    2122 
    2123   Text2 := SDay + ' ' + IntToStr(Trunc(Time));
    2124   Canvas.TextOut(ClockCenter.X - ClockSize - Canvas.TextWidth(Text) - 10, ClockCenter.Y -
    2125     Canvas.TextHeight(Text2) div 2 + Trunc(Canvas.TextHeight(Text) * 1.1), Text2);
     2169  Canvas.TextOut(ClockCenter.X - ClockSize - Canvas.TextWidth(Text) - 10,
     2170    Y - Canvas.TextHeight(Text) div 2, Text);
     2171  Y := Y + Canvas.TextHeight(Text)  + ScaleY(5, 96);
     2172
     2173  Text := SDay + ' ' + IntToStr(Trunc(Time));
     2174  Canvas.TextOut(ClockCenter.X - ClockSize - Canvas.TextWidth(Text) - 10,
     2175    Y - Canvas.TextHeight(Text) div 2, Text);
     2176  Y := Y + Canvas.TextHeight(Text)  + ScaleY(5, 96);
     2177
     2178  ImagePause.Canvas := Canvas;
     2179  ImagePause.Bounds := Bounds(CanvasSize.X - ScaleX(20 + 10, 96), Y, ScaleX(20, 96), ScaleY(20, 96));
     2180  ImagePause.Paint;
     2181  Y := Y + ImagePause.Bounds.Height + ScaleY(5, 96);
     2182
     2183  ImagePlay.Canvas := Canvas;
     2184  ImagePlay.Bounds := Bounds(CanvasSize.X - ScaleX(20 + 10, 96) , Y, ScaleX(20, 96), ScaleY(20, 96));
     2185  ImagePlay.Paint;
     2186  Y := Y + ImagePlay.Bounds.Height + ScaleY(5, 96);
     2187
     2188  ImageFastForward.Canvas := Canvas;
     2189  ImageFastForward.Bounds := Bounds(CanvasSize.X - ScaleX(20 + 10, 96) , Y, ScaleX(20, 96), ScaleY(20, 96));
     2190  ImageFastForward.Paint;
     2191  Y := Y + ImageFastForward.Bounds.Height + ScaleY(5, 96);
    21262192end;
    21272193
     
    23942460  Text := IntToStr(Trains.GetUnusedCount);
    23952461  Canvas.Draw(CanvasSize.X div 2 - Length(LineColors) div 2 * LineColorsDist - 100,
    2396     CanvasSize.Y - LineColorsDist - ImageLocomotive.Picture.Bitmap.Height div 2, ImageLocomotive.Picture.Bitmap);
     2462    CanvasSize.Y - LineColorsDist - ImageLocomotive.Bitmap.Height div 2, ImageLocomotive.Bitmap);
    23972463  Canvas.Brush.Style := bsClear;
    23982464  Canvas.Font.Size := 14;
     
    24032469  // Status interface
    24042470  Text := IntToStr(ServedPassengerCount);
    2405   Canvas.Draw(CanvasSize.X - 50, CanvasSize.Y - 60, ImagePassenger.Picture.Bitmap);
     2471  Canvas.Draw(CanvasSize.X - 50, CanvasSize.Y - 60, ImagePassenger.Bitmap);
    24062472  Canvas.Brush.Style := bsClear;
    24072473  Canvas.Font.Size := 14;
     
    24152481  Canvas.Font.Size := 40;
    24162482  Canvas.Font.Color := Colors.Text;
    2417   ButtonBack.Paint(Canvas, Point(10, 10));
     2483  ButtonBack.Canvas := Canvas;
     2484  ButtonBack.Bounds.Left := 10;
     2485  ButtonBack.Bounds.Top := 10;
     2486  ButtonBack.Paint;
    24182487
    24192488  // Show train grabbed by mouse
     
    24412510  if State = gsRunning then begin
    24422511    FTime := FTime + (Now - LastTickTime) / OneSecond * TimePerSecond;
    2443     Redraw; // Redraw on every because engine time is changed so clock should be redrawn
     2512    Redraw; // Redraw on every tick because engine time is changed so clock should be redrawn
    24442513
    24452514  // Add new trains
     
    25932662      end;
    25942663
     2664      // Pause button
     2665      if ImagePause.Bounds.Contains(Position) then begin
     2666        if Assigned(ImagePause.OnClick) then
     2667          ImagePause.OnClick(ImagePause);
     2668      end;
     2669
     2670      // Play button
     2671      if ImagePlay.Bounds.Contains(Position) then begin
     2672        if Assigned(ImagePlay.OnClick) then
     2673          ImagePlay.OnClick(ImagePlay);
     2674      end;
     2675
     2676      // Fast forward button
     2677      if ImageFastForward.Bounds.Contains(Position) then begin
     2678        if Assigned(ImageFastForward.OnClick) then
     2679          ImageFastForward.OnClick(ImageFastForward);
     2680      end;
     2681
    25952682      // Place selected train if focused track
    25962683      if Assigned(SelectedTrain) then begin
     
    27922879constructor TEngine.Create;
    27932880begin
    2794   ButtonBack := TMenuItemImage.Create;
     2881  TimePerSecond := TimePerSecondNormal;
     2882  ButtonBack := TImage.Create;
    27952883  ButtonBack.OnClick := ButtonBackClick;
    2796   ButtonBack.BackgroundColor := clNone;
    27972884  ButtonBack.Bounds := Bounds(0, 0, ScaleX(80, 96), ScaleY(80, 96));
    27982885  MenuMain := TMenu.Create;
     
    28102897  View := TView.Create;
    28112898  Trains := TMetroTrains.Create;
    2812   ImagePassenger := TImage.Create(nil);
    2813   ImageLocomotive := TImage.Create(nil);
     2899  ImagePassenger := TImage.Create;
     2900  ImageLocomotive := TImage.Create;
     2901  ImagePlay := TImage.Create;
     2902  ImagePlay.OnClick := ButtonPlay;
     2903  ImagePause := TImage.Create;
     2904  ImagePause.OnClick := ButtonPause;
     2905  ImageFastForward := TImage.Create;
     2906  ImageFastForward.OnClick := ButtonFastForward;
    28142907  //if FileExists(ImagePassengerName) then
    28152908  //  ImagePassenger.Picture.LoadFromFile(ImagePassengerName);
     
    28242917  FreeAndNil(MetaCanvas);
    28252918  FreeAndNil(Trains);
     2919  FreeAndNil(ImagePlay);
     2920  FreeAndNil(ImageFastForward);
     2921  FreeAndNil(ImagePause);
    28262922  FreeAndNil(ImageLocomotive);
    28272923  FreeAndNil(ImagePassenger);
  • trunk/UMenu.pas

    r76 r77  
    66
    77uses
    8   Classes, SysUtils, Graphics, Controls, fgl;
     8  Classes, SysUtils, Graphics, Controls, fgl, UControls;
    99
    1010type
     
    1313  { TMenuItem }
    1414
    15   TMenuItem = class
     15  TMenuItem = class(TControl)
    1616    BackgroundColor: TColor;
    1717    BackgroundSelectedColor: TColor;
    1818    Kind: TMenuItemKind;
    1919    Text: string;
    20     Bounds: TRect;
    2120    Selected: Boolean;
    2221    FontSize: Integer;
    2322    FontColor: Integer;
    24     Enabled: Boolean;
    25     procedure Paint(Canvas: TCanvas; P: TPoint); virtual;
    2623    function GetOutputText: string; virtual;
    27     constructor Create; virtual;
     24    constructor Create; override;
    2825  end;
    2926
     
    3532  public
    3633    Checked: Boolean;
    37     procedure Paint(Canvas: TCanvas; P: TPoint); override;
     34    procedure Paint; override;
    3835    property OnChanged: TNotifyEvent read FOnChanged write FOnChanged;
    3936  end;
     
    4946    constructor Create; override;
    5047    destructor Destroy; override;
    51     procedure Paint(Canvas: TCanvas; P: TPoint); override;
     48    procedure Paint; override;
    5249    function GetOutputText: string; override;
    5350    property OnChanged: TNotifyEvent read FOnChanged write FOnChanged;
     
    5754
    5855  TMenuItemButton = class(TMenuItem)
    59   private
    60     FOnClick: TNotifyEvent;
    6156  public
    62     procedure Paint(Canvas: TCanvas; P: TPoint); override;
    63     property OnClick: TNotifyEvent read FOnClick write FOnClick;
    64   end;
    65 
    66   { TMenuItemImage }
    67 
    68   TMenuItemImage = class(TMenuItem)
    69   private
    70     FOnClick: TNotifyEvent;
    71   public
    72     Bitmap: TBitmap;
    73     procedure Paint(Canvas: TCanvas; P: TPoint); override;
    74     property OnClick: TNotifyEvent read FOnClick write FOnClick;
    75     constructor Create; override;
    76     destructor Destroy; override;
     57    procedure Paint; override;
    7758  end;
    7859
     
    11899implementation
    119100
    120 { TMenuItemImage }
    121 
    122 procedure TMenuItemImage.Paint(Canvas: TCanvas; P: TPoint);
    123 begin
    124   if Selected then Canvas.Brush.Color := BackgroundSelectedColor
    125     else Canvas.Brush.Color := BackgroundColor;
    126   if Canvas.Brush.Color = clNone then Canvas.Brush.Style := bsClear
    127     else Canvas.Brush.Style := bsSolid;
    128   Canvas.StretchDraw(Bounds, Bitmap);
    129 end;
    130 
    131 constructor TMenuItemImage.Create;
    132 begin
    133   inherited;
    134   Bitmap := TBitmap.Create;
    135 end;
    136 
    137 destructor TMenuItemImage.Destroy;
    138 begin
    139   FreeAndNil(Bitmap);
    140   inherited;
    141 end;
    142 
    143101{ TMenuItemButton }
    144102
    145 procedure TMenuItemButton.Paint(Canvas: TCanvas; P: TPoint);
    146 begin
     103procedure TMenuItemButton.Paint;
     104var
     105  P: TPoint;
     106begin
     107  P := Point(Bounds.Left, Bounds.Top);
    147108  if Selected then Canvas.Brush.Color := BackgroundSelectedColor
    148109    else Canvas.Brush.Color := BackgroundColor;
     
    155116{ TMenuItemCheckBox }
    156117
    157 procedure TMenuItemCheckBox.Paint(Canvas: TCanvas; P: TPoint);
     118procedure TMenuItemCheckBox.Paint;
    158119var
    159120  OutputText: string;
    160 begin
     121  P: TPoint;
     122begin
     123  P := Point(Bounds.Left, Bounds.Top);
    161124  OutputText := Text;
    162125  if Checked then OutputText := '✓' + OutputText;
     
    171134{ TMenuItem }
    172135
    173 procedure TMenuItem.Paint(Canvas: TCanvas; P: TPoint);
    174 begin
    175 end;
    176 
    177136function TMenuItem.GetOutputText: string;
    178137begin
     
    201160end;
    202161
    203 procedure TMenuItemComboBox.Paint(Canvas: TCanvas; P: TPoint);
    204 begin
     162procedure TMenuItemComboBox.Paint;
     163var
     164  P: TPoint;
     165begin
     166  P := Point(Bounds.Left, Bounds.Top);
    205167  if Selected then Canvas.Brush.Color := BackgroundSelectedColor
    206168    else Canvas.Brush.Color := BackgroundColor;
     
    235197    if Items[I].Bounds.Contains(Position) then begin
    236198      if (Items[I] is TMenuItemButton) then begin
    237         if Assigned(TMenuItemButton(Items[I]).FOnClick) then
    238           TMenuItemButton(Items[I]).FOnClick(Items[I]);
     199        if Assigned(TMenuItemButton(Items[I]).OnClick) then
     200          TMenuItemButton(Items[I]).OnClick(Items[I]);
    239201      end else
    240202      if (Items[I] is TMenuItemCheckBox) then begin
     
    286248      Font.Size := Items[I].FontSize;
    287249      Font.Color := Items[I].FontColor;
    288       Items[I].Paint(Canvas, Point(X, Y));
     250      Items[I].Bounds.Left := X;
     251      Items[I].Bounds.Top := Y;
     252      Items[I].Canvas := Canvas;
     253      Items[I].Paint;
    289254      LineHeight := Round(TextHeight('I') * 1.1);
    290255      Inc(Y, LineHeight);
Note: See TracChangeset for help on using the changeset viewer.