Changeset 77
- Timestamp:
- May 19, 2021, 11:30:41 AM (4 years ago)
- Location:
- trunk
- Files:
-
- 3 added
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Forms/UFormImages.lfm
r76 r77 361 361 Stretch = True 362 362 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 363 656 end -
trunk/Forms/UFormImages.pas
r76 r77 13 13 14 14 TFormImages = class(TForm) 15 ImageFastForward: TImage; 16 ImagePause: TImage; 17 ImagePlay: TImage; 15 18 ImageLeftArrow: TImage; 16 19 ImageLocomotive: TImage; -
trunk/Forms/UFormMain.pas
r76 r77 46 46 procedure LoadGraphicAssets; 47 47 procedure DarkModeChange(Sender: TObject); 48 procedure CopyImage(DestBmp: TBitmap; SourceBmp: TBitmap; Grayed: Boolean = False); 48 49 public 49 50 FullScreen: Boolean; … … 85 86 begin 86 87 SaveConfig; 87 Engine.Free;88 FreeAndNil(Engine); 88 89 end; 89 90 … … 216 217 procedure TFormMain.LoadGraphicAssets; 217 218 begin 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); 221 231 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); 224 236 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); 225 244 end; 226 245 end; … … 231 250 end; 232 251 252 procedure TFormMain.CopyImage(DestBmp: TBitmap; SourceBmp: TBitmap; 253 Grayed: Boolean); 254 begin 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); 261 end; 262 233 263 234 264 end. -
trunk/Packages/Common/UPixelPointer.pas
r76 r77 53 53 procedure BitmapSwapRedBlue(Bitmap:TRasterImage); 54 54 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; 55 59 56 60 implementation … … 237 241 end; 238 242 243 procedure BitmapBlendColor(Bitmap: TRasterImage; Color: TColor32); 244 var 245 X, Y: Integer; 246 Ptr: TPixelPointer; 247 A, R, G, B: Word; 248 Pixel: TPixel32; 249 begin 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; 265 end; 266 267 function Color32(A, R, G, B: Byte): TColor32; 268 begin 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); 271 end; 272 273 function Color32ToPixel32(Color: TColor32): TPixel32; 274 begin 275 Result.ARGB := Color; 276 end; 277 278 function Pixel32ToColor32(Color: TPixel32): TColor32; 279 begin 280 Result := Color.ARGB; 281 end; 282 239 283 function PixelPointer(Bitmap: TRasterImage; BaseX: Integer; 240 284 BaseY: Integer): TPixelPointer; -
trunk/UControls.pas
r64 r77 6 6 7 7 uses 8 Classes, SysUtils ;8 Classes, SysUtils, Graphics; 9 9 10 10 type 11 12 { TControl } 13 11 14 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; 12 27 13 end;28 { TButton } 14 29 15 30 TButton = class(TControl) 16 31 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; 17 43 end; 18 44 19 45 implementation 20 46 47 { TButton } 48 49 procedure TButton.Paint; 50 begin 51 inherited Paint; 52 end; 53 54 { TControl } 55 56 procedure TControl.SetEnabled(AValue: Boolean); 57 begin 58 if FEnabled = AValue then Exit; 59 FEnabled := AValue; 60 if Assigned(Canvas) then Paint; 61 end; 62 63 constructor TControl.Create; 64 begin 65 FEnabled := True; 66 end; 67 68 procedure TControl.Paint; 69 begin 70 end; 71 72 { TImage } 73 74 constructor TImage.Create; 75 begin 76 inherited; 77 Bitmap := TBitmap.Create; 78 BitmapDisabled := TBitmap.Create; 79 end; 80 81 destructor TImage.Destroy; 82 begin 83 FreeAndNil(Bitmap); 84 FreeAndNil(BitmapDisabled); 85 inherited; 86 end; 87 88 procedure TImage.Paint; 89 begin 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); 94 end; 95 21 96 end. 22 97 -
trunk/UEngine.pas
r76 r77 9 9 {$IFDEF Darwin}MacOSAll, CocoaAll, CocoaUtils,{$ENDIF} 10 10 Classes, SysUtils, Graphics, Controls, ExtCtrls, Math, DateUtils, 11 UMetaCanvas, fgl, UMenu ;11 UMetaCanvas, fgl, UMenu, UControls; 12 12 13 13 type … … 278 278 FDarkMode: Boolean; 279 279 FOnDarkModeChange: TNotifyEvent; 280 FState: TGameState; 280 281 LastMousePos: TPoint; 281 282 LastFocusedStation: TMapStation; … … 294 295 MenuGame: TMenu; 295 296 LastState: TGameState; 297 TimePerSecond: TDateTime; 296 298 function GetServedDaysCount: Integer; 297 299 procedure ResizeView; … … 315 317 procedure SetDarkMode(AValue: Boolean); 316 318 procedure InitColors; 319 procedure SetState(AValue: TGameState); 317 320 procedure TrainMovement; 318 321 function GetUnusedLine: TMetroLine; … … 325 328 procedure MenuItemGameRestart(Sender: TObject); 326 329 procedure MenuItemBack(Sender: TObject); 330 procedure ButtonPlay(Sender: TObject); 331 procedure ButtonPause(Sender: TObject); 332 procedure ButtonFastForward(Sender: TObject); 327 333 procedure ButtonBackClick(Sender: TObject); 328 334 procedure DarkModeChanged(Sender: TObject); 329 335 procedure LanguageChanged(Sender: TObject); 330 336 procedure FullScreenChanged(Sender: TObject); 337 procedure UpdateInterface; 331 338 public 332 339 Colors: TColors; … … 343 350 TrackStationUp: TTrackPoint; 344 351 ServedPassengerCount: Integer; 345 State: TGameState;346 352 RedrawPending: Boolean; 347 ButtonBack: T MenuItemImage;353 ButtonBack: TImage; 348 354 ImagePassenger: TImage; 349 355 ImageLocomotive: TImage; 356 ImagePlay: TImage; 357 ImagePause: TImage; 358 ImageFastForward: TImage; 350 359 HighestServedPassengerCount: Integer; 351 360 HighestServedDaysCount: Integer; … … 365 374 property Time: TDateTime read FTime; 366 375 property DarkMode: Boolean read FDarkMode write SetDarkMode; 376 property State: TGameState read FState write SetState; 367 377 property ServedDaysCount: Integer read GetServedDaysCount; 368 378 property OnDarkModeChange: TNotifyEvent read FOnDarkModeChange … … 386 396 ImageLocomotiveName = 'Images/Locomotive.png'; 387 397 ImageLeftArrowName = 'Images/Left arrow.png'; 398 ImagePlayName = 'Images/Play.png'; 399 ImagePauseName = 'Images/Pause.png'; 400 ImageFastForwardName = 'Images/Fast forward.png'; 388 401 TrainPassengerCount = 6; 389 402 StationMinDistance = 100; … … 395 408 EndStationLength = 50; 396 409 ShowDistances = False; 397 TimePerSecond = 60 * OneMinute; 410 TimePerSecondNormal = 60 * OneMinute; 411 TimePerSecondFast = 2 * TimePerSecondNormal; 398 412 NewStationPeriod = 1; 399 413 NewShapePeriod = 10; … … 1692 1706 MenuItemBackgroundSelected := $f7bC61; 1693 1707 end; 1708 end; 1709 1710 procedure TEngine.SetState(AValue: TGameState); 1711 begin 1712 if FState = AValue then Exit; 1713 FState := AValue; 1714 UpdateInterface; 1694 1715 end; 1695 1716 … … 1949 1970 end; 1950 1971 1972 procedure TEngine.ButtonPlay(Sender: TObject); 1973 begin 1974 TimePerSecond := TimePerSecondNormal; 1975 if State = gsPaused then State := gsRunning; 1976 UpdateInterface; 1977 end; 1978 1979 procedure TEngine.ButtonPause(Sender: TObject); 1980 begin 1981 if State = gsRunning then State := gsPaused; 1982 UpdateInterface; 1983 end; 1984 1985 procedure TEngine.ButtonFastForward(Sender: TObject); 1986 begin 1987 TimePerSecond := TimePerSecondFast; 1988 if State = gsPaused then State := gsRunning; 1989 UpdateInterface; 1990 end; 1991 1951 1992 procedure TEngine.MenuItemGameContinue(Sender: TObject); 1952 1993 begin … … 1989 2030 FormMain.FullScreen := TMenuItemCheckBox(Sender).Checked; 1990 2031 FormMain.PersistentForm1.SetFullScreen(FormMain.FullScreen); 2032 end; 2033 2034 procedure TEngine.UpdateInterface; 2035 begin 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); 1991 2039 end; 1992 2040 … … 2095 2143 Angle: Double; 2096 2144 Text: string; 2097 Text2: string;2098 2145 I: Integer; 2146 Y: Integer; 2099 2147 const 2100 2148 ClockSize = 20; … … 2115 2163 ClockCenter.Y + Round(Sin(Angle) * ClockSize * 0.9)); 2116 2164 end; 2165 Y := ClockCenter.Y + ScaleY(5, 96); 2117 2166 2118 2167 Canvas.Font.Color := Colors.Text; 2119 2168 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); 2126 2192 end; 2127 2193 … … 2394 2460 Text := IntToStr(Trains.GetUnusedCount); 2395 2461 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); 2397 2463 Canvas.Brush.Style := bsClear; 2398 2464 Canvas.Font.Size := 14; … … 2403 2469 // Status interface 2404 2470 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); 2406 2472 Canvas.Brush.Style := bsClear; 2407 2473 Canvas.Font.Size := 14; … … 2415 2481 Canvas.Font.Size := 40; 2416 2482 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; 2418 2487 2419 2488 // Show train grabbed by mouse … … 2441 2510 if State = gsRunning then begin 2442 2511 FTime := FTime + (Now - LastTickTime) / OneSecond * TimePerSecond; 2443 Redraw; // Redraw on every because engine time is changed so clock should be redrawn2512 Redraw; // Redraw on every tick because engine time is changed so clock should be redrawn 2444 2513 2445 2514 // Add new trains … … 2593 2662 end; 2594 2663 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 2595 2682 // Place selected train if focused track 2596 2683 if Assigned(SelectedTrain) then begin … … 2792 2879 constructor TEngine.Create; 2793 2880 begin 2794 ButtonBack := TMenuItemImage.Create; 2881 TimePerSecond := TimePerSecondNormal; 2882 ButtonBack := TImage.Create; 2795 2883 ButtonBack.OnClick := ButtonBackClick; 2796 ButtonBack.BackgroundColor := clNone;2797 2884 ButtonBack.Bounds := Bounds(0, 0, ScaleX(80, 96), ScaleY(80, 96)); 2798 2885 MenuMain := TMenu.Create; … … 2810 2897 View := TView.Create; 2811 2898 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; 2814 2907 //if FileExists(ImagePassengerName) then 2815 2908 // ImagePassenger.Picture.LoadFromFile(ImagePassengerName); … … 2824 2917 FreeAndNil(MetaCanvas); 2825 2918 FreeAndNil(Trains); 2919 FreeAndNil(ImagePlay); 2920 FreeAndNil(ImageFastForward); 2921 FreeAndNil(ImagePause); 2826 2922 FreeAndNil(ImageLocomotive); 2827 2923 FreeAndNil(ImagePassenger); -
trunk/UMenu.pas
r76 r77 6 6 7 7 uses 8 Classes, SysUtils, Graphics, Controls, fgl ;8 Classes, SysUtils, Graphics, Controls, fgl, UControls; 9 9 10 10 type … … 13 13 { TMenuItem } 14 14 15 TMenuItem = class 15 TMenuItem = class(TControl) 16 16 BackgroundColor: TColor; 17 17 BackgroundSelectedColor: TColor; 18 18 Kind: TMenuItemKind; 19 19 Text: string; 20 Bounds: TRect;21 20 Selected: Boolean; 22 21 FontSize: Integer; 23 22 FontColor: Integer; 24 Enabled: Boolean;25 procedure Paint(Canvas: TCanvas; P: TPoint); virtual;26 23 function GetOutputText: string; virtual; 27 constructor Create; virtual;24 constructor Create; override; 28 25 end; 29 26 … … 35 32 public 36 33 Checked: Boolean; 37 procedure Paint (Canvas: TCanvas; P: TPoint); override;34 procedure Paint; override; 38 35 property OnChanged: TNotifyEvent read FOnChanged write FOnChanged; 39 36 end; … … 49 46 constructor Create; override; 50 47 destructor Destroy; override; 51 procedure Paint (Canvas: TCanvas; P: TPoint); override;48 procedure Paint; override; 52 49 function GetOutputText: string; override; 53 50 property OnChanged: TNotifyEvent read FOnChanged write FOnChanged; … … 57 54 58 55 TMenuItemButton = class(TMenuItem) 59 private60 FOnClick: TNotifyEvent;61 56 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; 77 58 end; 78 59 … … 118 99 implementation 119 100 120 { TMenuItemImage }121 122 procedure TMenuItemImage.Paint(Canvas: TCanvas; P: TPoint);123 begin124 if Selected then Canvas.Brush.Color := BackgroundSelectedColor125 else Canvas.Brush.Color := BackgroundColor;126 if Canvas.Brush.Color = clNone then Canvas.Brush.Style := bsClear127 else Canvas.Brush.Style := bsSolid;128 Canvas.StretchDraw(Bounds, Bitmap);129 end;130 131 constructor TMenuItemImage.Create;132 begin133 inherited;134 Bitmap := TBitmap.Create;135 end;136 137 destructor TMenuItemImage.Destroy;138 begin139 FreeAndNil(Bitmap);140 inherited;141 end;142 143 101 { TMenuItemButton } 144 102 145 procedure TMenuItemButton.Paint(Canvas: TCanvas; P: TPoint); 146 begin 103 procedure TMenuItemButton.Paint; 104 var 105 P: TPoint; 106 begin 107 P := Point(Bounds.Left, Bounds.Top); 147 108 if Selected then Canvas.Brush.Color := BackgroundSelectedColor 148 109 else Canvas.Brush.Color := BackgroundColor; … … 155 116 { TMenuItemCheckBox } 156 117 157 procedure TMenuItemCheckBox.Paint (Canvas: TCanvas; P: TPoint);118 procedure TMenuItemCheckBox.Paint; 158 119 var 159 120 OutputText: string; 160 begin 121 P: TPoint; 122 begin 123 P := Point(Bounds.Left, Bounds.Top); 161 124 OutputText := Text; 162 125 if Checked then OutputText := '✓' + OutputText; … … 171 134 { TMenuItem } 172 135 173 procedure TMenuItem.Paint(Canvas: TCanvas; P: TPoint);174 begin175 end;176 177 136 function TMenuItem.GetOutputText: string; 178 137 begin … … 201 160 end; 202 161 203 procedure TMenuItemComboBox.Paint(Canvas: TCanvas; P: TPoint); 204 begin 162 procedure TMenuItemComboBox.Paint; 163 var 164 P: TPoint; 165 begin 166 P := Point(Bounds.Left, Bounds.Top); 205 167 if Selected then Canvas.Brush.Color := BackgroundSelectedColor 206 168 else Canvas.Brush.Color := BackgroundColor; … … 235 197 if Items[I].Bounds.Contains(Position) then begin 236 198 if (Items[I] is TMenuItemButton) then begin 237 if Assigned(TMenuItemButton(Items[I]). FOnClick) then238 TMenuItemButton(Items[I]). FOnClick(Items[I]);199 if Assigned(TMenuItemButton(Items[I]).OnClick) then 200 TMenuItemButton(Items[I]).OnClick(Items[I]); 239 201 end else 240 202 if (Items[I] is TMenuItemCheckBox) then begin … … 286 248 Font.Size := Items[I].FontSize; 287 249 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; 289 254 LineHeight := Round(TextHeight('I') * 1.1); 290 255 Inc(Y, LineHeight);
Note:
See TracChangeset
for help on using the changeset viewer.