Compare commits

..

No commits in common. "db909b5520309f7c45b36759913e46486841201b" and "60749c0d9305585b3074efe49264a0433b7a2352" have entirely different histories.

67 changed files with 2367 additions and 4520 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -1,103 +0,0 @@
object e_menumain1:e_menumain
caption="²Ëµ¥·¶Àý"
height=392
left=488
mainmenu=mainmenu1
onclose=e_menumain1_close
popupmenu=popupmenu1
top=220
width=375
object mainmenu1:tmainmenu
left=58
top=73
height=30
width=30
object menu1:tmenu
caption="menu1"
object menu3:tmenu
caption="²Ëµ¥3"
onclick=menuclick
end
object menu4:tmenu
caption="menu4"
object menu5:tmenu
caption="menu5"
onclick=menuclick
end
end
end
object menu2:tmenu
caption="menu2"
onclick=menuclick
end
end
object popupmenu1:tpopupmenu
left=172
top=98
height=30
width=30
caption="popupmenu1"
object menu6:tmenu
bitmap={ 900200000000000000020000000200000001000000480300003C0000000000000
004000000040000000400000008000000030000000B0000000103000074797065
64617461696D6789504E470D0A1A0A0000000D494844520000002000000020080
6000000737A7AF4000000017352474200AECE1CE90000000467414D410000B18F
0BFC6105000000097048597300000EC300000EC301C76FA864000002964944415
45847ED964B68135114865D894BC1951BE946A42B752356505C54042D882E846A
5BA13B6B151491D295B4882B2D08E293D6422D55918AF5416AC5A22008BAD085D
45A6D9A986812E3249989B1769263FEDB7BAF379957122DA5900F0EC99C398F7F
E69E99B9CB689159FA02326F5FD3B7CE760AECAF67BFC6D8437EA634FE49803E3
A4293B5AB6862CDF2020B1F3BC423BCF114103BDF455AFF2532E331EEF9CBCCBE
EDACE174FD061687C64284F1CCC7A3DC2910F0BDA79B12B76EF0A379444158A07
127690357C94CFC60E770DBD17C76F23D3B065F5AF7B2D868F729EE71470A885F
BF201B850E37CAA210E56FA893E784059A765162A897B27A8AC509D098D5686FE
61E77A480ACA153B0A54136800895F4AB17143DDB49D33B36CA1866352B2898BF
EAE4DD01CAFD4C33C1F063494AC13203C6D347ECD6A65F8E738F15E3F918454E9
FA0CFDB6A0BC47C58B792426D0728393C48B95F191EED8EE7107A618CFBE86B47
1B4D6DAA2910F371FD6A0A1F6FA5D4C81D22738E475B910252F786D8731CE93AC
93DE5A3E7DF01688AE6AA18888348FDC903A25C8E47CF2305A80973A120F75A31
6311FECF1DDD779FC2475BD8B2A8B5B16CEA7C48017883C52F9FCBDFD251EEB1F
23BE867457035E5907A3C4CA12307D9C0223F71BB9F9F71980134FAB465ADE551
C260A20086B45250437D746D05884630153701D1331DB6F3632635CABC7BC38FA
CFC3701221E312AFEDD9B995F7D5BAA2CB80027BFA02AA02AA02A606909C8EA49
B9FF2B061B98E24D0CA848C0ECD4844CC477A152C4C70BE6F43AB6150066F66C6
589F12B3DDC533EC81502C446B6184701DACD6B32195F46AC7B39861C91EFF6F9
761400B0D6A248A5A6F55DE4D5EC711500B08ED840408C9D61176C67C829657E3
C052C348B2C80E80FBF5E212863E9B00A0000000049454E44AE426082 }
caption="menu6"
onclick=menuclick
end
object menu7:tmenu
bitmap={ 9002000000000000000200000002000000010000008C0300003C0000000000000
004000000040000000400000008000000030000000B0000004503000074797065
64617461696D6789504E470D0A1A0A0000000D494844520000002000000020080
6000000737A7AF4000000017352474200AECE1CE90000000467414D410000B18F
0BFC6105000000097048597300000EC300000EC301C76FA864000002DA4944415
45847C597BD6A54411886BD066BADD45E11BC01116C6C142F402C2CAC44112C94
947A031606B7515288918022A8202EF107D42A0988C4D5603624EBAE68B2C6282
A9FFB8CE73D993D993973768DF8C040767EDF39F3CDFB4DB6D87F66200193CDAF
76A6FEC1F6DF7C6FBBAFCDD9B6D1866DEF95BDD7E7ECE0AD79BBF0B46D77DF7DB
1C5D59FD9883449012BDF7FD995A94F6ED1AD97672B9791671DEBACA585940AB8
F8BC637B7A3BF527DE596BD8A189A69D7BDCB61BAF576C7CB66B23BD9D1FB9BD6
0BB6A6FFBFAEE1B9BB3B157CBD96C61A2022EBDF8D837D9F9276D9BEE7CCB5AE3
CCF4FA9CAEB7FAC69E7CD8CA5A37121470F4CE423E78C7D586D5E757B396EAD46
6965D7C681EE60CB141006A35E8C483A5AC76780EF78E46F371A445FA04705EEA
CCC014A71EB55C49C14662227201442C4143273E5D8A63F716F349F93B0547495
F829A9B2572015C1B4DC8F995E12FAE9212411CA92FD75A380118871A89E03242
8BABA4447093E887A7082700F7D2245CA318FEE2136FBAC1BFCB44708DD50F570
527000BA5122389515C1CF41BAA8AC0C8E883A58313808F53899B85082D0EAA13
5544E0A2B4EB189C00920995586A11DF17FCC541F53EBE88900362E1B491CCC00
99063E1EB451045E7E2E2A0858A48446843E40FDAC8A4E004F02326A08C988032
24405EE304B0432A438ACB1846808E8063072740B93E1684318611A02024F0C10
99041945DC310C308D0353C3BE95DC3974B6BF964654654645001BE1129DE9C00
3830FEC70B5256EC33A8007D694AB3FBC3D5E50248106A4C2523A1FE55F093118
94FE40248917AFF5549C7308800A56352BEFF58CD05008F054D5AE54142445352
F80F92A2D7F40980E3F7D77D7FB39F64A3539FB3DA75360800DD55CA663D4A635
F2A280050ABC194BF7996F35563440500E7A577A2CA20FF9810D4A197B04FA900
2062FDF7629582A770ADFDC7678CA4008171B05B2C141F279970C664529219F98
463C25507A1B2807F83D96FD95753C0FE2C3C9B0000000049454E44AE426082 }
caption="menu7"
onclick=menuclick
end
end
end

View File

@ -0,0 +1,101 @@
object e_menumain1:e_menumain
caption="²Ëµ¥·¶Àý"
height=392
left=488
mainmenu=mainmenu1
onclose=e_menumain1_close
popupmenu=popupmenu1
top=220
width=375
object mainmenu1:tmainmenu
left=58
top=73
height=30
width=30
object menu1:tmenu
caption="menu1"
object menu3:tmenu
caption="²Ëµ¥3"
onclick=menuclick
end
object menu4:tmenu
caption="menu4"
object menu5:tmenu
caption="menu5"
onclick=menuclick
end
end
end
object menu2:tmenu
caption="menu2"
onclick=menuclick
end
end
object popupmenu1:tpopupmenu
left=172
top=98
height=30
width=30
caption="popupmenu1"
object menu6:tmenu
bitmap={ 0502000000060400000074797065000203000000696D670006040000006461746
100020103000089504E470D0A1A0A0000000D4948445200000020000000200806
000000737A7AF4000000017352474200AECE1CE90000000467414D410000B18F0
BFC6105000000097048597300000EC300000EC301C76FA8640000029649444154
5847ED964B68135114865D894BC1951BE946A42B752356505C54042D882E846A5
BA13B6B151491D295B4882B2D08E293D6422D55918AF5416AC5A22008BAD085D4
5A6D9A986812E3249989B1769263FEDB7BAF379957122DA5900F0EC99C398F7FE
69E99B9CB689159FA02326F5FD3B7CE760AECAF67BFC6D8437EA634FE49803E3A
4293B5AB6862CDF2020B1F3BC423BCF114103BDF455AFF2532E331EEF9CBCCBEE
DACE174FD061687C64284F1CCC7A3DC2910F0BDA79B12B76EF0A379444158A071
27690357C94CFC60E770DBD17C76F23D3B065F5AF7B2D868F729EE71470A885FB
F201B850E37CAA210E56FA893E784059A765162A897B27A8AC509D098D5686FE6
1E77A480ACA153B0A54136800895F4AB17143DDB49D33B36CA1866352B2898BFE
AE4DD01CAFD4C33C1F063494AC13203C6D347ECD6A65F8E738F15E3F918454E9F
A0CFDB6A0BC47C58B792426D0728393C48B95F191EED8EE7107A618CFBE86B471
B4D6DAA2910F371FD6A0A1F6FA5D4C81D22738E475B910252F786D8731CE93AC9
3DE5A3E7DF01688AE6AA18888348FDC903A25C8E47CF2305A80973A120F75A316
311FECF1DDD779FC2475BD8B2A8B5B16CEA7C48017883C52F9FCBDFD251EEB1F2
3BE867457035E5907A3C4CA12307D9C0223F71BB9F9F71980134FAB465ADE551C
260A20086B45250437D746D05884630153701D1331DB6F3632635CABC7BC38FAC
FC3701221E312AFEDD9B995F7D5BAA2CB80027BFA02AA02AA02A606909C8EA49B
9FF2B061B98E24D0CA848C0ECD4844CC477A152C4C70BE6F43AB6150066F66C65
89F12B3DDC533EC81502C446B6184701DACD6B32195F46AC7B39861C91EFF6F97
61400B0D6A248A5A6F55DE4D5EC711500B08ED840408C9D61176C67C829657E3C
052C348B2C80E80FBF5E212863E9B00A0000000049454E44AE42608200 }
caption="menu6"
onclick=menuclick
end
object menu7:tmenu
bitmap={ 0502000000060400000074797065000203000000696D670006040000006461746
100024503000089504E470D0A1A0A0000000D4948445200000020000000200806
000000737A7AF4000000017352474200AECE1CE90000000467414D410000B18F0
BFC6105000000097048597300000EC300000EC301C76FA864000002DA49444154
5847C597BD6A54411886BD066BADD45E11BC01116C6C142F402C2CAC44112C949
47A031606B7515288918022A8202EF107D42A0988C4D5603624EBAE68B2C6282A
9FFB8CE73D993D993973768DF8C040767EDF39F3CDFB4DB6D87F66200193CDAF7
6A6FEC1F6DF7C6FBBAFCDD9B6D1866DEF95BDD7E7ECE0AD79BBF0B46D77DF7DB1
C5D59FD9883449012BDF7FD995A94F6ED1AD97672B9791671DEBACA585940AB8F
8BC637B7A3BF527DE596BD8A189A69D7BDCB61BAF576C7CB66B23BD9D1FB9BD60
BB6A6FFBFAEE1B9BB3B157CBD96C61A2022EBDF8D837D9F9276D9BEE7CCB5AE3C
CF4FA9CAEB7FAC69E7CD8CA5A37121470F4CE423E78C7D586D5E757B396EAD466
965D7C681EE60CB141006A35E8C483A5AC76780EF78E46F371A445FA04705EEAC
CC014A71EB55C49C14662227201442C4143273E5D8A63F716F349F93B0547495F
829A9B2572015C1B4DC8F995E12FAE9212411CA92FD75A380118871A89E032428
BABA4447093E887A7082700F7D2245CA318FEE2136FBAC1BFCB44708DD50F5705
27000BA5122389515C1CF41BAA8AC0C8E883A58313808F53899B85082D0EAA135
544E0A2B4EB189C00920995586A11DF17FCC541F53EBE88900362E1B491CCC009
9063E1EB451045E7E2E2A0858A48446843E40FDAC8A4E004F02326A08C9880322
4405EE304B0432A438ACB1846808E8063072740B93E1684318611A02024F0C109
9041945DC310C308D0353C3BE95DC3974B6BF964654654645001BE1129DE9C003
830FEC70B5256EC33A8007D694AB3FBC3D5E50248106A4C2523A1FE55F0931189
4FE40248917AFF5549C7308800A56352BEFF58CD05008F054D5AE54142445352F
80F92A2D7F40980E3F7D77D7FB39F64A3539FB3DA75360800DD55CA663D4A635F
2A280050ABC194BF7996F35563440500E7A577A2CA20FF9810D4A197B04FA9002
062FDF7629582A770ADFDC7678CA4008171B05B2C141F279970C664529219F984
63C25507A1B2807F83D96FD95753C0FE2C3C9B0000000049454E44AE42608200 }
caption="menu7"
onclick=menuclick
end
end
end

View File

@ -1,167 +0,0 @@
object e_toolbarmain1:e_toolbarmain
caption="묏야으렀절"
height=520.0
left=429
onclose=e_toolbarmain1_close
top=236
width=664
object toolbar1:ttoolbar
caption="toolbar1"
height=29
imagelist=controlimagelist1
width=648
object toolbutton1:ttoolbutton
caption="객큐1"
imageid=0
onclick=toolbaritemclick
end
object toolbutton2:ttoolbutton
caption="객큐2"
imageid=1
onclick=toolbaritemclick
end
object toolbutton3:ttoolbutton
caption="객큐3"
imageid=2
onclick=toolbaritemclick
end
object toolbutton4:ttoolbutton
caption="toolbutton4"
imageid=4
onclick=toolbaritemclick
end
object toolbutton5:ttoolbutton
caption="toolbutton5"
imageid=3
onclick=toolbaritemclick
end
end
object controlimagelist1:tcontrolimagelist
left=84
top=114
images={ 900200000000000000020000000000000000000000B40F00003E0000000000000
0040000000400000005000000020900000004000000050D000000690F00007479
70656974656D73626D70739005000000020000000000000002000000020000006
80F00007E00000000000000040000000400000004000000020208000000030000
000B0000009F020000AA02000003000000AD020000D3030000800600000300000
083060000DB0200005E0900000300000061090000F8020000590C000003000000
5C0C00008E0200007479706564617461696D6789504E470D0A1A0A0000000D494
8445200000020000000200806000000737A7AF4000000017352474200AECE1CE9
0000000467414D410000B18F0BFC6105000000097048597300000EC300000EC30
1C76FA86400000234494441545847ED96CDCB69511487EF5F6BC25061A048C940
9181C840182829C554664AEFC04C0C0C64A0440626C8E0DC9E75D73E6DC7E1E55
EEE3BF1D41A9CB5D6DEFB77F6C7DAFB97F3C37C047C045C08C866B34E201078DA
686768341ABE39582C1693B8CD4B056CB75BDFB8D77ABD9EE4C34B9760381CCA0
0D56A553D97CC663389472211F5BC588099C16EB7AB9E4BCEE7B3C483C1A07A3C
0268C83A91F4B7964C269DC3E1A03D5EB2DFEF25271C0EABC712C0BA783B7BD6C
AE5B233994CB4C76BD6EBB5E4C5E371F55802581782ACD3BB582C1632463A9D56
8F2520140A49F0743AA9E7F54CA753192397CBA9C712108D4625B8DBEDD4F3185
F5F5FCE6834D2AFFB8CC76319A3542AA9C712904AA524B85C2ED5F318DFED7C1B
734C6BB59A7A2C01F97C5E82F736911FABD5CA4924120F89E8F7FB92D76AB5D46
309A8542A12644A6FC1F16293FA99116157392FE6A4D9425D01CD66538283C140
3DD79829FCCE10E4077F4E9C9930B802FCD479A1D613B78D7658A15090F6C5625
1B3AF61EDC9E1470CAE00FE9C2033F12CF57A5DDAB28F8EC7A37AAF61F793C769
30B802587B82EC8567E8743AD22E93C948A9BD07E79F5CEA81C115C0EE377FF12
8F3F95CDA50FF379B8D7A6F4305249F8A68700570FE09520F9E816378EBF2F1C2
1DC018DC0906570015902015F15D700B3286BD54AE00EE0082DC09EF82770063F
02E30B802E09D37227DD2B7FD1A820B019C6B92DE69ED765B47FBC3850040C4BF
BE8AFC8C3E79B078B912F0BFF908F861018EF31BE3A64DABEA577256000000004
9454E44AE426082696D6789504E470D0A1A0A0000000D49484452000000300000
003008060000005702F987000000017352474200AECE1CE90000000467414D410
000B18F0BFC6105000000097048597300000EC300000EC301C76FA86400000368
494441546843ED98DB4B14511CC7FB837AEB35287A080A8A1E844088EA2108C94
8222822BAA0629682742122C9D0BC84B5A246E135EFBAAEAB99AD46522A5B5E48
2C5371E7F66DCECE6FDCD9F1CCECCD7194F6035FD839F33D737EDFD939672E7BB
0CB4907709B74002EBF2781BA1380AF981A9CC39900A3CF80B2BD9A825DD4E80C
D60116C781F76781E6F3407B0ED07915E8BD050CE40383F701FF03400E91D904E
BA70718794C8D26E687D4639400DE42A03F0FE8BE01745C01DAB281A6735ADBCA
2C99ADB10E507B3852044FC38FC8C8C118C0CEC74E8EF198668D9591D11AEB00B
C031AB530A2F9E687B5B3CCC48A653207304BE75369F431CD327A2D482E407D06
9954DE66F23D769A6ED6FA2E06F8FB753916C0B8BAD41CE47BEC345E499D553CC
7F81E26C702B009AE136BAEF0642CCC5BC0F7303912C0739C0CC4DF2030EB4D4C
46D8366F1C266702A87FF95632DDC21F87C99100E5FBB4FB81F9AC26A3892AE0F
511FE384C8ECD81ED523A80DB4A07705BE900B1F4EA90F640C65B22EDE4BDCB3F
9E598E07E8CB257312189F58ADE47880EEEB644E106175870460626F506CA0441
4EF2338F3C6E03F9FC44E2B1D201EB117733650228A670233316F0C520BD0758D
CC49102B04BB57C4416A01D87B41B2D8050854904943595A53975E99B6A249FD1
2B25B46F5CF2D66597D0FAADA0FCCB453012A7FD621167E4028A31CA153D5106B
E8538E819D33891B4F024B5F69700DB1C2AF156F90DC33457B35764600F6E992D
D9D09A92100B1A43BFC5B2CEE8C0A209CA98132F92BBC8FE17E005F110DA8A228
109F0E6C142B95F9A02CAC40C8AE8B0A2116755207B7034C54D3606AED3F9721D
C6E8E2A9489FD1BF2F08F4DED3AEE04A83E0004B54B84C10A14B23C9B8AD425F7
4D43F28C6D6C4BE57EEAE95680858F34885AFCBB2F51C572755ABDEE3FCF417CD
803E9C510F5D4D8FE006F8ED200EA65E30B42BCD9145E1EB9851B245CAA8732B3
443D236C7F00C34B9058EA8570B911CAE22AC47B1DDCC299C4DC56286B02F58AC
6850077680035405EAB56A05A3C96D7C361CCC54B4FFAC9CDC73A40DB457E01A9
AA258B0600421722CBA3F4D20F796C0EA1CCCA485BED2839ADB10EC0E0BD906F8
508BD505D72D77708EA9C608F0D72C73772D9631FC061E4DE2948CF072116B443
C8698090590531BF0D72609E1CB17135C056900EE036BB3C00F00FB4FD2774447
C293D0000000049454E44AE426082696D6789504E470D0A1A0A0000000D494844
5200000020000000200806000000737A7AF4000000017352474200AECE1CE9000
0000467414D410000B18F0BFC6105000000097048597300000EC300000EC301C7
6FA86400000270494441545847D596CB6A2A411086CF0BBA72A3A851541414043
722EE44111782BAF182260441B7826F6188E015DCB81111172AC4B55087BFE89E
8CE3CCD8E6C484F341914A55F7F43F5D3DD5FEA15FE6FF13301C0EA95AAD92C7E
32197CB45D1689452A914F5FB7DDA6EB762943ACA0276BB1D65B35972381CB656
2814E870388859B7511230994C281C0EF3028944823A9D0EAD562B91253A1E8FD
4EBF5C8EFF7F398582C46F3F95C64EDB92960B3D9F076E3C1E572993E3E3E44E6
1A942097CB69BBB15C2E45C69A9B02506F3CAC56AB89C86DBADD2ECF29954A226
28DAD80E974CA0F72BBDDBC13AAA024B21CEFEFEF226A8EAD80F57A4DF1789CDF
E85E702620A05EAFF3FFFBFD9E4EA713FB7A940EE13D542A150A8542D46AB5584
02693E15D808F9731F2ED02DAED362F260DE583C137DB495301AFAFAF6C5F452F
C2E974F25F7C41665C09188D46DA64F85F65301868CF49A7D3743E9F45E6922B0
1B27630F8FFC2DBDB1B6F3BBAA8155702D0DBA500F88FE642C0783CE6859F9E9E
D8E023F6482E04BCBCBCF0A2CD66930D3E62F780CF0EF3A4A121E5F37991BDE64
280BC707091C0E023760FFAC58D66862660369BF1A060302822C43E62C8A9625C
0CDD54DE0DC56251443FD1043C3F3F6B938D869C2A728E1E79A7F87C3E11F9441
3100804B4C946434E153947CF4D018BC582074422110EEA410C398C51C1280025
9017936509E489470B3522DB2AC6A820059899D9D7C002BC5E2F0F306BBDB2356
38C0AFA05AD4C0F0BC0AFDA46A3C1013392C9247FDF2A982D02ACBE06ED107E17
560280D961FC5101D805E4D01D253F26006F2F4BA03F8C0F1360677ABE5D80F13
29286BADBB6E2DFE2970510FD05E1AD4F7F1B5448FE0000000049454E44AE4260
82696D6789504E470D0A1A0A0000000D494844520000002000000020080600000
0737A7AF4000000017352474200AECE1CE90000000467414D410000B18F0BFC61
05000000097048597300000EC300000EC301C76FA8640000028D494441545847C
5973D6814411480B7B25050045B259D8595A0A5550AB5B00A626163255A5A5B28
B676E92C14091A8B84E01F88281844A208FE8128722268E7DE9D5E363197E4923
CF79B9BB7EEE6CE9DD9BDD3FD608ED937F3E6BD9B7DF3DE6C209EB456D665E273
5BC69EB464FFDDA6EC996AC8D61BA169F4919D989D9799AFCB12AD6E582D374E0
73EB43A72F679243B26EB125CFF6EDA968950764FD5E5C0BDA669F491E9F8CEC9
D0E8A0EB22D781F3AF1765FBCDAEE1C38F7ECA85370B3217AEDAD15E5E353A72F
9FD2F3912CF45075DD6C8E3AF0E1C9F6D9945F6CE34E46AAD6DA5FEA0832E6B1C
7AF0C34A7BE9EBC0C87457F14CBC8DF5F6BA9516075DFD23BB6E85569AA5C7012
6A2C0760F8B934FE7CD9AFCB1CD641C60AB9888C2B0E10FB1363B9226718060E9
376198F04AB1910E4CE300C7858825680679E72E581B1BD8D2236A1CE0CCE259D
1683FF73232AD08D8C0163621206B91388EC667B7282C442B0A3985C446760D48
9D2C32FE71C90EFB53D6818B6FBBF1466A0FC8DF3CD4A2353BEC4F5907C8A6E85
157028AC8B6B8A094A1AC0340EDC0764025EB97207C18C4010A18B603CAE9C1FB
4D2B2EC6200E5045B16D1CE0218F53CF22B34BD76AD940EDE70073988B4E1E890
36C03DB9187462DEDD2BB5416DBE400632A73D592E415100804848B2B9F9692C5
4FCFD924629F01993E33D74512847A0CB94CB8B8F36DD9242DE61F7BDCBD74A4F
B8C31C745E6186A22E226E3C38B7A47F6DD8E3DB7C6B52163CC07AD8C2611692A
E61AE5CB978535197DF86707E823F325938A119429468B9D0DF3DE69F47DE9294
6FC545E8EA1D20B8952E9954CA9F452AA3011854AAEE58A2A123445AF6A800EBA
AC51F8C3442158885816F9EF9F660AC785335BC9C7699A7FF3792EF21B1F1CB3C
87955C3470000000049454E44AE426082696D6789504E470D0A1A0A0000000D49
48445200000020000000200806000000737A7AF4000000017352474200AECE1CE
90000000467414D410000B18F0BFC6105000000097048597300000EC300000EC3
01C76FA86400000223494441545847ED972DAB024114860D824D2C7693C560103
409FA038C62B008828A3FC0EA57B268320882980D822206838A4530F80BC42236
ABC570EE3D7BE7EC9DFD9A9D5D96850BF78117768ECE996757775603204920108
0CD66C34662B2D92C9CCF673612232DF07ABD20994CB2D10FEFF71B2E970B7C3E
1F56F9A1DFEFB3237BA4059056AB05F3F91CDAED36643219E5AA6082C120A4D36
9A8D7EB50AD56E1F97CB219F6480BDCEF77A8542AEAA256894422301C0ED92C7B
A404F6FBBDE962A2148B45365B8CADC0E974825028A4344DA552301E8F0D8BF1E
16565246C054AA592DA1005ECAE06BE1E0E87D5F16432619DCC110ADC6E37F5EC
DD06A5450805F01B6FD6D4691E8F07EB684428D068344C1B3A8D6853D208D0AD8
69F2372381C6C733C1EA582E0FE81E1D108C46231D57A3A9D42A7D3D19C89DBE0
09E11D41E372B9CC56E404F4DFEE5C2E07BD5E4F53731BB33B87F04560B7DB196
A84A5403E9FF74C60BBDD1A6A842F02EBF5DA50237C11582E97861A2114E876BB
9A9ADB2C160B438DF04560B55A196A842F02FADE184228E0E546A4AF11BF47DFE
0938BDE8093BC14A8D56AEA188F098DC0F57A85D168A44C4070DFE61BB90DF6C3
E7CC6C365382C78446408F9702560805F08A98357492783CCEBA99231440D01E9
F0B187D73AAEB5FA3DA6030605DACB115E0E117C11028C9D7717159FE05FE9600
36365B04FF0BF202FADF7D221C09E0CE98482494E81769369B108D46A15028B08
A0C005F1ECEF59244AA69250000000049454E44AE426082 }
end
end

View File

@ -0,0 +1,168 @@
object e_toolbarmain1:e_toolbarmain
caption="묏야으렀절"
height=520.0
left=429
onclose=e_toolbarmain1_close
top=236
width=664
object toolbar1:ttoolbar
caption="toolbar1"
height=29
imagelist=controlimagelist1
width=648
object toolbutton1:ttoolbutton
caption="객큐1"
imageid=0
onclick=toolbaritemclick
end
object toolbutton2:ttoolbutton
caption="객큐2"
imageid=1
onclick=toolbaritemclick
end
object toolbutton3:ttoolbutton
caption="객큐3"
imageid=2
onclick=toolbaritemclick
end
object toolbutton4:ttoolbutton
caption="toolbutton4"
imageid=4
onclick=toolbaritemclick
end
object toolbutton5:ttoolbutton
caption="toolbutton5"
imageid=3
onclick=toolbaritemclick
end
end
object controlimagelist1:tcontrolimagelist
left=84
top=114
images={ 0502000000060400000074797065000204000000626D707300060500000069746
56D73000505000000000000000005020000000604000000747970650002030000
00696D670006040000006461746100029F02000089504E470D0A1A0A0000000D4
948445200000020000000200806000000737A7AF4000000017352474200AECE1C
E90000000467414D410000B18F0BFC6105000000097048597300000EC300000EC
301C76FA86400000234494441545847ED96CDCB69511487EF5F6BC25061A048C9
409181C840182829C554664AEFC04C0C0C64A0440626C8E0DC9E75D73E6DC7E1E
55EEE3BF1D41A9CB5D6DEFB77F6C7DAFB97F3C37C047C045C08C866B34E201078
DA686768341ABE39582C1693B8CD4B056CB75BDFB8D77ABD9EE4C34B9760381CC
A00D56A553D97CC663389472211F5BC588099C16EB7AB9E4BCEE7B3C483C1A07A
3C0268C83A91F4B7964C269DC3E1A03D5EB2DFEF25271C0EABC712C0BA783B7BD
6CAE5B233994CB4C76BD6EBB5E4C5E371F55802581782ACD3BB582C1632463A9D
568F2520140A49F0743AA9E7F54CA753192397CBA9C712108D4625B8DBEDD4F31
85F5F5FCE6834D2AFFB8CC76319A3542AA9C712904AA524B85C2ED5F318DFED7C
1B734C6BB59A7A2C01F97C5E82F736911FABD5CA4924120F89E8F7FB92D76AB5D
46309A8542A12644A6FC1F16293FA99116157392FE6A4D9425D01CD66538283C1
403DD79829FCCE10E4077F4E9C9930B802FCD479A1D613B78D7658A15090F6C56
251B3AF61EDC9E1470CAE00FE9C2033F12CF57A5DDAB28F8EC7A37AAF61F793C7
6930B802587B82EC8567E8743AD22E93C948A9BD07E79F5CEA81C115C0EE377FF
128F3F95CDA50FF379B8D7A6F4305249F8A68700570FE09520F9E816378EBF2F1
C21DC018DC0906570015902015F15D700B3286BD54AE00EE0082DC09EF8277006
3F02E30B802E09D37227DD2B7FD1A820B019C6B92DE69ED765B47FBC3850040C4
BFBE8AFC8C3E79B078B912F0BFF908F861018EF31BE3A64DABEA5772560000000
049454E44AE426082000001000000050200000006040000007479706500020300
0000696D67000604000000646174610002D303000089504E470D0A1A0A0000000
D49484452000000300000003008060000005702F987000000017352474200AECE
1CE90000000467414D410000B18F0BFC6105000000097048597300000EC300000
EC301C76FA86400000368494441546843ED98DB4B14511CC7FB837AEB35287A08
0A8A1E844088EA2108C948222822BAA0629682742122C9D0BC84B5A246E135EFB
AAEAB99AD46522A5B5E482C5371E7F66DCECE6FDCD9F1CCECCD7194F6035FD839
F33D737EDFD939672E7BB0CB4907709B74002EBF2781BA1380AF981A9CC39900A
3CF80B2BD9A825DD4E80CD60116C781F76781E6F3407B0ED07915E8BD050CE403
83F701FF03400E91D904EBA70718794C8D26E687D4639400DE42A03F0FE8BE017
45C01DAB281A6735ADBCA2C99ADB10E507B3852044FC38FC8C8C118C0CEC74E8E
F198668D9591D11AEB00BC031AB530A2F9E687B5B3CCC48A653207304BE75369F
431CD327A2D482E407D069954DE66F23D769A6ED6FA2E06F8FB753916C0B8BAD4
1CE47BEC345E499D553CC7F81E26C702B009AE136BAEF0642CCC5BC0F7303912C
0739C0CC4DF2030EB4D4C46D8366F1C266702A87FF95632DDC21F87C99100E5FB
B4FB81F9AC26A3892AE0F511FE384C8ECD81ED523A80DB4A07705BE900B1F4EA9
0F640C65B22EDE4BDCB3F9E598E07E8CB257312189F58ADE47880EEEB644E1061
75870460626F506CA04414EF2338F3C6E03F9FC44E2B1D201EB117733650228A6
70233316F0C520BD0758DCC49102B04BB57C4416A01D87B41B2D8050854904943
595A53975E99B6A249FD12B25B46F5CF2D66597D0FAADA0FCCB453012A7FD6211
67E4028A31CA153D5106BE8538E819D33891B4F024B5F69700DB1C2AF156F90DC
33457B35764600F6E992DD9D09A92100B1A43BFC5B2CEE8C0A209CA98132F92BB
C8FE17E005F110DA8A228109F0E6C142B95F9A02CAC40C8AE8B0A2116755207B7
034C54D3606AED3F9721DC6E8E2A9489FD1BF2F08F4DED3AEE04A83E0004B54B8
4C10A14B23C9B8AD425F74D43F28C6D6C4BE57EEAE95680858F34885AFCBB2F51
C572755ABDEE3FCF417CD803E9C510F5D4D8FE006F8ED200EA65E30B42BCD9145
E1EB9851B245CAA8732B3443D236C7F00C34B9058EA8570B911CAE22AC47B1DDC
C299C4DC56286B02F58AC6850077680035405EAB56A05A3C96D7C361CCC54B4FF
AC9CDC73A40DB457E01A9AA258B0600421722CBA3F4D20F796C0EA1CCCA485BED
2839ADB10EC0E0BD906F8508BD505D72D77708EA9C608F0D72C73772D9631FC06
1E4DE2948CF072116B443C8698090590531BF0D72609E1CB17135C056900EE036
BB3C00F00FB4FD2774447C293D0000000049454E44AE426082000002000000050
2000000060400000074797065000203000000696D670006040000006461746100
02DB02000089504E470D0A1A0A0000000D4948445200000020000000200806000
000737A7AF4000000017352474200AECE1CE90000000467414D410000B18F0BFC
6105000000097048597300000EC300000EC301C76FA8640000027049444154584
7D596CB6A2A411086CF0BBA72A3A851541414043722EE44111782BAF182260441
B7826F6188E015DCB81111172AC4B55087BFE89E8CE3CCD8E6C484F341914A55F
7F43F5D3DD5FEA15FE6FF13301C0EA95AAD92C7E32197CB45D1689452A914F5FB
7DDA6EB762943ACA0276BB1D65B35972381CB6562814E870388859B7511230994
C281C0EF3028944823A9D0EAD562B91253A1E8FD4EBF5C8EFF7F398582C46F3F9
5C64EDB92960B3D9F076E3C1E572993E3E3E44E61A942097CB69BBB15C2E45C69
A9B02506F3CAC56AB89C86DBADD2ECF29954A22628DAD80E974CA0F72BBDDBC13
AAA024B21CEFEFEF226A8EAD80F57A4DF1789CDFE85E702620A05EAFF3FFFBFD9
E4EA713FB7A940EE13D542A150A8542D46AB558402693E15D808F9731F2ED02DA
ED362F260DE583C137DB495301AFAFAF6C5F452FC2E974F25F7C41665C09188D4
6DA64F85F65301868CF49A7D3743E9F45E6922B01B27630F8FFC2DBDB1B6F3BBA
A8155702D0DBA500F88FE642C0783CE6859F9E9ED8E023F6482E04BCBCBCF0A2C
D66930D3E62F780CF0EF3A4A121E5F37991BDE64280BC707091C0E023760FFAC5
8D66862660369BF1A060302822C43E62C8A9625C0CDD54DE0DC56251443FD1043
C3F3F6B938D869C2A728E1E79A7F87C3E11F94413100804B4C946434E153947CF
4D018BC582074422110EEA410C398C51C12800259017936509E489470B3522DB2
AC6A820059899D9D7C002BC5E2F0F306BBDB235638C0AFA05AD4C0F0BC0AFDA46
A3C1013392C9247FDF2A982D02ACBE06ED107E17560280D961FC5101D805E4D01
D253F26006F2F4BA03F8C0F1360677ABE5D80F1329286BADBB6E2DFE2970510FD
05E1AD4F7F1B5448FE0000000049454E44AE42608200000300000005020000000
60400000074797065000203000000696D67000604000000646174610002F80200
0089504E470D0A1A0A0000000D4948445200000020000000200806000000737A7
AF4000000017352474200AECE1CE90000000467414D410000B18F0BFC61050000
00097048597300000EC300000EC301C76FA8640000028D494441545847C5973D6
814411480B7B25050045B259D8595A0A5550AB5B00A626163255A5A5B28B676E9
2C14091A8B84E01F88281844A208FE8128722268E7DE9D5E363197E4923CF79B9
BB7EEE6CE9DD9BDD3FD608ED937F3E6BD9B7DF3DE6C209EB456D665E2735BC69E
B464FFDDA6EC996AC8D61BA169F4919D989D9799AFCB12AD6E582D374E073EB43
A72F679243B26EB125CFF6EDA968950764FD5E5C0BDA669F491E9F8CEC9D0E8A0
EB22D781F3AF1765FBCDAEE1C38F7ECA85370B3217AEDAD15E5E353A72F9FD2F3
912CF45075DD6C8E3AF0E1C9F6D9945F6CE34E46AAD6DA5FEA0832E6B1C7AF0C3
4A7BE9EBC0C87457F14CBC8DF5F6BA9516075DFD23BB6E85569AA5C70126A2C07
60F8B934FE7CD9AFCB1CD641C60AB9888C2B0E10FB1363B9226718060E9376198
F04AB1910E4CE300C7858825680679E72E581B1BD8D2236A1CE0CCE259D1683FF
73232AD08D8C0163621206B91388EC667B7282C442B0A3985C446760D489D2C32
FE71C90EFB53D6818B6FBBF1466A0FC8DF3CD4A2353BEC4F5907C8A6E85157028
AC8B6B8A094A1AC0340EDC0764025EB97207C18C4010A18B603CAE9C1FB4D2B2E
C6200E5045B16D1CE0218F53CF22B34BD76AD940EDE70073988B4E1E89036C03D
B9187462DEDD2BB5416DBE400632A73D592E415100804848B2B9F9692C54FCFD9
24629F01993E33D74512847A0CB94CB8B8F36DD9242DE61F7BDCBD74A4FB8C31C
745E6186A22E226E3C38B7A47F6DD8E3DB7C6B52163CC07AD8C2611692AE61AE5
CB978535197DF86707E823F325938A119429468B9D0DF3DE69F47DE92946FC545
E8EA1D20B8952E9954CA9F452AA3011854AAEE58A2A123445AF6A800EBAAC51F8
C3442158885816F9EF9F660AC785335BC9C7699A7FF3792EF21B1F1CB3C87955C
3470000000049454E44AE42608200000400000005020000000604000000747970
65000203000000696D670006040000006461746100028E02000089504E470D0A1
A0A0000000D4948445200000020000000200806000000737A7AF4000000017352
474200AECE1CE90000000467414D410000B18F0BFC61050000000970485973000
00EC300000EC301C76FA86400000223494441545847ED972DAB024114860D824D
2C7693C560103409FA038C62B008828A3FC0EA57B268320882980D822206838A4
530F80BC42236ABC570EE3D7BE7EC9DFD9A9D5D96850BF78117768ECE99675777
56032049201080CD66C34662B2D92C9CCF673612232DF07ABD20994CB2D10FEFF
71B2E970B7C3E1F56F9A1DFEFB3237BA4059056AB05F3F91CDAED36643219E5AA
6082C120A4D369A8D7EB50AD56E1F97CB219F6480BDCEF77A8542AEAA25689442
2301C0ED92C7BA404F6FBBDE962A2148B45365B8CADC0E974825028A4344DA552
301E8F0D8BF1E16565246C054AA592DA1005ECAE06BE1E0E87D5F16432619DCC1
10ADC6E37F5ECDD06A5450805F01B6FD6D4691E8F07EB684428D068344C1B3A8D
6853D208D0AD869F2372381C6C733C1EA582E0FE81E1D108C46231D57A3A9D42A
7D3D19C89DBE009E11D41E372B9CC56E404F4DFEE5C2E07BD5E4F53731BB33B87
F04560B7DB196A84A5403E9FF74C60BBDD1A6A842F02EBF5DA50237C11582E978
61A2114E876BB9A9ADB2C160B438DF04560B55A196A842F02FADE184228E0E546
A4AF11BF47DFE0938BDE8093BC14A8D56AEA188F098DC0F57A85D168A44C4070D
FE61BB90DF6C3E7CC6C365382C78446408F9702560805F08A98357492783CCEBA
99231440D01E9F0B187D73AAEB5FA3DA6030605DACB115E0E117C11028C9D7717
159FE05FE960036365B04FF0BF202FADF7D221C09E0CE98482494E81769369B10
8D46A15028B08A0C005F1ECEF59244AA69250000000049454E44AE42608200 }
end
end

View File

@ -1,23 +1,23 @@
object bconfig_cmd_shower:t_bconfig_cmd_shower
caption="ÃüÁîÐÐ"
height=263
height=250
left=610
minmaxbox=false
onclose=bconfig_cmd_shower_close
top=406
width=546
width=508
object panel1:tpanel
align=albottom
caption="panel1"
height=45
left=0
parentcolor=true
top=179
width=530
top=166
width=492
wsdlgmodalframe=false
object bt_ok:tbtn
caption="Íê³É"
height=33
height=26
left=406
onclick=btn1_clk
top=8
@ -25,8 +25,8 @@ object bconfig_cmd_shower:t_bconfig_cmd_shower
end
object bt_copy:tbtn
caption="¸´ÖÆ"
height=33
left=253
height=26
left=291
onclick=bt_copy_clk
top=8
width=94
@ -36,11 +36,11 @@ object bconfig_cmd_shower:t_bconfig_cmd_shower
align=alclient
autogutterwidth=true
caption="memo1"
height=179
height=211
left=0
readonly=true
top=0
width=530
width=492
end
object cpbord:tclipboard
left=211

View File

@ -0,0 +1,368 @@
object ed_script:t_compile_config
caption="编译选项设置"
height=681
left=618
minmaxbox=false
onclose=compile_config_close
top=180
width=502
wssizebox=true
object bt_ok:tbtn
caption="确定"
height=31
left=405
onclick=bt_ok_clk
parentcolor=false
top=582
width=55
end
object gp_dir:tgroupbox
caption="输入目录"
height=87
left=24
parentcolor=true
top=181
width=442
object bt_f_dir:tbtn
caption=".."
height=23
left=408
onclick=bt_f_dir_clk
top=20
width=24
end
object bt_s_dir:tbtn
caption="..."
height=23
left=408
onclick=bt_s_dir_clk
top=51
width=24
end
object label1:tlabel
left=14
top=20
width=68
height=23
caption="函数目录"
end
object ed_f_dirs:tedit
caption="edit1"
height=22
left=87
top=21
width=312
end
object label2:tlabel
left=13
top=51
width=60
height=23
caption="资源目录"
end
object ed_s_dirs:tedit
caption="edit2"
height=23
left=87
top=51
width=311
end
end
object gp_filter:tgroupbox
caption="筛选"
height=164
left=27
parentcolor=true
top=269
width=437
object lb_s_type:tlabel
left=11
top=20
width=92
height=25
caption="资源文件后缀"
end
object ed_s_type:tedit
caption="edit2"
height=27
left=112
text="*.tfm,*.ini"
top=20
width=290
end
object bt_i_f:tbtn
caption="..."
height=22
left=408
onclick=bt_i_f_clk
top=83
width=21
end
object bt_d_f:tbtn
caption="..."
height=21
left=408
onclick=bt_d_f_clk
top=136
width=21
end
object bt_i_s:tbtn
caption="..."
height=22
left=408
onclick=bt_i_s_clk
top=54
width=21
end
object label3:tlabel
left=13
top=51
width=61
height=25
caption="指定资源"
end
object ed_include_s:tedit
caption="edit1"
height=25
left=84
top=52
width=317
end
object label4:tlabel
left=11
top=83
width=63
height=25
caption="指定函数"
end
object ed_include_f:tedit
caption=""
height=23
left=84
top=83
width=317
end
object label5:tlabel
left=12
top=133
width=61
height=25
caption="排除函数"
end
object ed_exclude_f:tedit
caption=""
height=22
left=84
top=136
width=317
end
object lb_tsg:tlabel
left=11
top=106
width=63
height=25
caption="tsg库"
end
object ed_tsg:tedit
caption="edit1"
height=22
left=84
top=111
width=318
end
object bt_tsgadd:tbtn
caption="..."
height=21
left=408
onclick=bt_tsgadd_clk
top=111
width=21
end
end
object gp_out:tgroupbox
caption="输出"
height=123
left=27
parentcolor=true
top=48
width=433
object lb_ype:tlabel
left=14
top=17
width=53
height=25
caption="类型"
end
object cb_type:tcombobox
caption="combobox1"
height=23
itemindex=0
items=["执行程序" "动态库" tsg ]
left=79
onselchanged=cb_type_sel
top=18
width=131
end
object lb_output:tlabel
left=13
top=45
width=46
height=25
caption="输出"
end
object ed_output:tedit
caption="edit1"
height=25
left=79
placeholder="输出文件"
top=48
width=320
end
object bt_output:tbtn
caption="..."
enabled=false
height=23
left=404
onclick=bt_output_clk
top=86
width=22
end
object bt_outputname:tbtn
caption="..."
height=25
left=404
onclick=bt_outputname_clk
top=48
width=22
end
object lb_output_f:tlabel
left=14
top=83
width=60
height=25
caption="输出函数"
end
object ed_out_f:tedit
caption="edit1"
height=25
left=79
top=86
width=320
end
end
object bt_cancel:tbtn
caption="取消"
height=31
left=332
onclick=bt_cancel_clk
top=582
width=55
end
object gp_other:tgroupbox
caption="其他"
height=129
left=27
parentcolor=true
top=440
width=437
object ck_gui:tcheckbtn
caption="gui"
height=25
left=17
top=25
width=75
end
object ck_strong:tcheckbtn
caption="强引用函数"
height=25
left=122
onclick=checkbtn2_clk
top=25
width=98
end
object ck_s_rp:tcheckbtn
caption="资源文件保留相对路径"
enabled=false
height=25
left=253
top=25
width=173
end
object lb_ico:tlabel
left=17
top=59
width=66
height=25
caption=" 图 标:"
end
object ed_ico:tedit
caption="edit3"
height=25
left=94
top=58
width=277
end
object bt_ico:tbtn
caption="..."
height=25
left=386
onclick=bt_ico_clk
top=58
width=22
end
object l_namespace:tlabel
left=17
top=93
width=75
height=25
caption="namespace:"
end
object e_namespace:tedit
caption="edit1"
height=25
left=94
top=93
width=278
end
end
object f_op:topenfileadlg
left=15
top=575
height=30
width=30
caption="openfileadlg1"
filter=<
"ico图标"="*.ico"
>
end
object lb_input:tlabel
left=32
top=16
width=63
height=25
caption="主程序"
end
object e_script:tedit
caption="edit1"
height=25
left=98
top=16
width=331
end
object bt_script:tbtn
caption="..."
height=25
left=437
onclick=bt_script_clk
top=16
width=22
end
object bt_cmd:tbtn
caption="命令行"
height=31
left=208
onclick=bt_cmd_clk
top=582
width=92
end
end

View File

@ -1,12 +1,12 @@
object dir_list:t_dir_list
caption="Ŀ¼¹ÜÀí"
height=239
height=228
left=513
minmaxbox=false
onclose=dir_list_close
top=475
visible=false
width=643
width=615
object lst_dir:tlistbox
caption="listbox1"
height=176
@ -16,7 +16,7 @@ object dir_list:t_dir_list
end
object btn_add:tbtn
caption="Ìí¼Ó"
height=36
height=31
left=496
onclick=btn_add_clk
top=5
@ -24,7 +24,7 @@ object dir_list:t_dir_list
end
object btn_del:tbtn
caption="ɾ³ý"
height=35
height=31
left=496
onclick=btn_del_clk
top=50
@ -32,10 +32,10 @@ object dir_list:t_dir_list
end
object btn_ok:tbtn
caption="Íê³É"
height=40
height=31
left=496
onclick=btn_ok_clk
top=137
top=146
width=86
end
object f_d:tfolderchooseadlg

View File

@ -19,7 +19,7 @@ object ditor_color_mgr:t_editor_color_mgr
color=0
>
height=385
height=382
left=645
minmaxbox=false
onclose=edtcolormain1_close
@ -35,7 +35,6 @@ object ditor_color_mgr:t_editor_color_mgr
onselchanged=colorcombobox1_onselchanged
top=18
width=132
parentfont=false
end
object listbox1:tlistbox
caption="listbox1"
@ -56,7 +55,6 @@ object ditor_color_mgr:t_editor_color_mgr
onselchanged=colorcombobox2_onselchanged
top=18
width=177
parentfont=false
end
object openfileadlg1:topenfileadlg
left=314
@ -80,7 +78,7 @@ object ditor_color_mgr:t_editor_color_mgr
leftrightspacing=20
topbottomspacing=10
>
height=42
height=39
left=5
top=304
width=352
@ -88,7 +86,7 @@ object ditor_color_mgr:t_editor_color_mgr
object btn4:tbtn
autosize=true
caption="导入"
height=22
height=19
left=20
onclick=import_clk
top=10
@ -97,7 +95,7 @@ object ditor_color_mgr:t_editor_color_mgr
object btn5:tbtn
autosize=true
caption="导出"
height=22
height=19
left=78
onclick=export_clk
top=10
@ -106,7 +104,7 @@ object ditor_color_mgr:t_editor_color_mgr
object btn3:tbtn
autosize=true
caption="还原默认"
height=22
height=19
left=136
onclick=btn3_clk
top=10
@ -115,7 +113,7 @@ object ditor_color_mgr:t_editor_color_mgr
object btn1:tbtn
autosize=true
caption="取消"
height=22
height=19
left=226
onclick=btn1_clk
top=10
@ -124,7 +122,7 @@ object ditor_color_mgr:t_editor_color_mgr
object btn2:tbtn
autosize=true
caption="确定"
height=22
height=19
left=284
onclick=btn2_clk
top=10

View File

@ -114,7 +114,7 @@ object editor_config:t_editor_config
leftrightspacing=10
topbottomspacing=10
>
height=124
height=126
left=10
parentcolor=true
top=177
@ -176,7 +176,7 @@ object editor_config:t_editor_config
left=14
top=89
width=30
height=21
height=23
autosize=true
caption=""
end
@ -184,7 +184,7 @@ object editor_config:t_editor_config
left=54
top=89
width=41
height=21
height=23
autosize=true
caption=""
end
@ -192,7 +192,7 @@ object editor_config:t_editor_config
autosize=true
caption="´ÓÍ·Æ¥Åä"
checked=true
height=21
height=23
left=105
top=89
width=105
@ -202,7 +202,7 @@ object editor_config:t_editor_config
caption="panel1"
height=39
left=10
top=311
top=313
width=285
wsdlgmodalframe=false
object bt_ok:tbtn

View File

@ -29,7 +29,7 @@ object functionfinder:t_function_finder
align=altop
autosize=true
caption="panel1"
height=41
height=35
left=0
top=0
width=804
@ -46,18 +46,18 @@ object functionfinder:t_function_finder
object btfind:tbtn
autosize=true
caption="ɸѡ"
height=25
left=284
height=22
left=281
onclick=btfind_clk
top=6
top=7
width=54
end
object ck_prev:tcheckbtn
autosize=true
caption="´ÓÍ·Æ¥Åä"
height=27
left=371
top=8
height=22
left=370
top=7
visible=true
width=111
end
@ -82,11 +82,11 @@ object functionfinder:t_function_finder
text="º¯Êý"
>
]
height=566
height=572
left=0
ondblclick=listfunc_ondblclick
popupmenu=popupmenu1
top=41
top=35
width=804
end
object popupmenu1:tpopupmenu

View File

@ -11,14 +11,14 @@ object m_list_editor:t_m_list_editor
left=7
top=2
width=325
height=31
height=25
caption="采用换行分割"
end
object m_list:tmemo
caption="memo1"
height=371
height=378
left=9
top=38
top=31
width=328
end
object bt_cancel:tbtn

View File

@ -19,11 +19,11 @@ object shortcut_keys_view:t_shortcut_keys_view
>
height=684
left=420
left=711
minmaxbox=false
onclose=shortcut_keys_view_close
parentfont=false
top=217
top=459
visible=false
width=590
object panel1:tpanel

View File

@ -10,16 +10,16 @@ object extcompclassadder:textcompclassadder
object e_classname:tedit
caption="edit1"
height=25
left=99
left=91
readonly=true
top=28
width=247
width=255
end
object label1:tlabel
left=20
top=21
width=72
height=32
top=28
width=50
height=25
caption="控件类"
end
object b_classfile:tbtn
@ -33,41 +33,41 @@ object extcompclassadder:textcompclassadder
object label2:tlabel
left=20
top=72
width=65
height=33
width=64
height=25
caption="图标"
end
object p_imgshow:tpanel
caption="img"
height=195
height=187
left=91
top=107
top=120
width=245
wsdlgmodalframe=false
end
object b_img:tbtn
caption="添加图标"
height=25
left=100
left=91
onclick=b_img_clk
top=72
width=176
top=73
width=94
end
object b_ok:tbtn
caption="确定"
enabled=true
height=31
left=134
left=133
onclick=b_ok_clk
top=306
top=317
width=72
end
object b_cancel:tbtn
caption="取消"
height=31
left=271
left=283
onclick=b_cancel_clk
top=306
top=317
width=73
end
object f_open:topenfileadlg

View File

@ -5,14 +5,14 @@ object extcompclassmgr:textcompclassmgr
minmaxbox=false
onclose=extcompclassmgr_close
top=272
width=484
width=477
wssizebox=true
object listbox1:tlistbox
caption="listbox1"
height=339
height=345
left=4
onselchanged=listbox1_sel
top=44
top=38
width=344
end
object b_del:tbtn
@ -21,7 +21,7 @@ object extcompclassmgr:textcompclassmgr
height=31
left=364
onclick=b_del_clk
top=224
top=248
width=88
end
object b_add:tbtn
@ -29,7 +29,7 @@ object extcompclassmgr:textcompclassmgr
height=31
left=364
onclick=b_add_clk
top=279
top=299
width=88
end
object b_ok:tbtn
@ -52,13 +52,13 @@ object extcompclassmgr:textcompclassmgr
]
left=0
top=403
width=468
width=461
end
object label1:tlabel
left=8
top=5
width=176
height=36
top=10
width=80
height=25
caption="¿Ø¼þÁбí"
end
end

View File

@ -1,6 +1,6 @@
object fm_inheritedwnd:tfm_inheritedwnd
caption="通过继承构造窗口"
height=550
height=543
left=526
minmaxbox=false
onclose=fm_inheritedwnd_close
@ -11,7 +11,7 @@ object fm_inheritedwnd:tfm_inheritedwnd
caption="statusbar1"
height=25
left=0
top=486
top=479
width=417
end
object panel2:tpanel
@ -19,7 +19,7 @@ object fm_inheritedwnd:tfm_inheritedwnd
caption="panel2"
height=31
left=0
top=455
top=448
width=417
wsdlgmodalframe=false
object label1:tlabel
@ -27,8 +27,8 @@ object fm_inheritedwnd:tfm_inheritedwnd
top=0
width=18
height=31
align=alright
caption=""
align=alright
end
object ed_ok:tbtn
align=alright
@ -45,8 +45,8 @@ object fm_inheritedwnd:tfm_inheritedwnd
top=0
width=25
height=31
align=alright
caption=" "
align=alright
end
object bt_cancel:tbtn
align=alright
@ -69,21 +69,21 @@ object fm_inheritedwnd:tfm_inheritedwnd
object label3:tlabel
left=0
top=0
width=149
width=85
height=27
align=alleft
caption="可以继承:"
align=alleft
end
object ed_search:tedit
align=alclient
caption="edit1"
height=27
left=149
left=85
onchanged=ed_search_onchanged
onkeyup=ed_search_keyup
placeholder="搜索"
top=0
width=268
width=332
end
end
object panel3:tpanel
@ -91,31 +91,31 @@ object fm_inheritedwnd:tfm_inheritedwnd
caption="panel1"
height=35
left=0
top=420
top=413
width=417
wsdlgmodalframe=false
object label4:tlabel
left=0
top=0
width=104
width=85
height=35
caption=" Ãû³Æ:"
align=alleft
caption="Ãû³Æ:"
end
object ed_name:tedit
align=alclient
caption="edit1"
height=35
left=104
left=85
placeholder="名称"
top=0
width=313
width=332
end
end
object lbx_pal:tlistbox
align=alclient
caption="listbox1"
height=393
height=386
left=0
onselchanged=lbx_pal_sel
top=27

View File

@ -1,122 +0,0 @@
object codeformateditor:t_code_format_mgr
autosize=true
caption="tsl代码格式化参数"
childsizing=<
layout=1
controlsperline=2
horizontalspacing=10
verticalspacing=10
leftrightspacing=20
topbottomspacing=10
>
font=<
height=19
width=9
escapement=0
orientation=0
weight=400
italic=0
underline=0
strikeout=0
charset=134
outprecision=3
clipprecision=2
quality=1
pitchandfamily=49
facename="新宋体"
color=0
>
height=90
left=547
minmaxbox=false
onclose=tformatinfownd1_close
parentfont=false
top=277
width=449
wssizebox=false
object label1:tlabel
left=20
top=10
width=128
height=22
autosize=true
caption="多行注释对齐"
end
object faligncmt:tcheckbtn
autosize=false
caption=""
height=22
left=158
parentcolor=true
top=10
width=110
end
object label3:tlabel
left=20
top=42
width=128
height=22
autosize=true
caption="array格式化"
end
object farraytype:tcombobox
autosize=true
height=22
itemindex=1
items=["默认" "普通" "宽松" ]
left=158
top=42
width=110
end
object label4:tlabel
left=20
top=74
width=128
height=22
autosize=true
caption="语法检查"
end
object fsyncheck:tcheckbtn
caption=""
checked=true
height=22
left=158
parentcolor=true
top=74
width=110
end
object label5:tlabel
left=20
top=106
width=128
height=22
autosize=true
caption="格式化选择区域"
end
object fselectcheck:tcheckbtn
caption=""
height=22
left=158
parentcolor=true
top=106
width=110
end
object label2:tlabel
left=20
top=138
width=128
height=22
caption=""
end
object btn1:tbtn
autosize=true
caption="确定"
height=22
left=158
onclick=dookclick
top=138
width=110
end
end

View File

@ -1,62 +0,0 @@
type t_code_format_mgr=class(tdcreateform)
uses tslvcl;
label1:tlabel;
label2:tlabel;
label3:tlabel;
label4:tlabel;
label5:tlabel;
faligncmt:tcombobox;
fcharct:tcombobox;
farraytype:tcombobox;
fsyncheck:tcheckbtn;
fselectcheck:tcheckbtn;
btn1:tbtn;
function Create(AOwner);override;//构造
begin
inherited;
end
function DoOKClick(o;e);virtual;
begin
calldatafunction(FOnOkClick,self,e);
end
function tformatinfownd1_close(o;e);virtual;
begin
e.skip := true;
o.Visible := false;
end
function Recycling();override;//回收变量
begin
inherited;
ci := self.classinfo();
//将成员变量赋值为nil避免循环引用
for i,v in ci["members"]do
begin
invoke(self,v["name"],nil);
end
end
function GetData();
begin
r := array();
r["cmt"]:= faligncmt.Checked;
r["arraytype"]:= array("普通":1,"默认":0,"宽松":3)[farraytype.getCurrentItemText()];
r["syn"]:= fsyncheck.checked;
r["sel"]:= fselectcheck.checked;
return r;
end
function SetData(d);
begin
//"50" "80" "100" "130"
// "50" "100" "130" "150" "200" "250" "300"
//"默认" "普通" "宽松"
if ifarray(d) then
begin
faligncmt.Checked := (d["cmt"]=1);
farraytype.ItemIndex := (array(0:0,1:1,3:2))[d["arraytype"]];
fsyncheck.Checked := d["syn"];
fselectcheck.Checked := d["sel"];
end
end
property OnOkClicked read FOnOkClick write FOnOkClick;
private
[weakref] FOnOkClick;
end

View File

@ -1,556 +0,0 @@
object ed_script:t_compile_config
autosize=true
caption="编译选项设置"
childsizing=<
layout=2
controlsperline=10
horizontalspacing=10
verticalspacing=10
leftrightspacing=10
topbottomspacing=10
>
height=562
left=638
minmaxbox=false
onclose=compile_config_close
top=208
width=488
wssizebox=true
object panel1:tpanel
autosize=true
caption="panel1"
childsizing=<
layout=1
controlsperline=3
horizontalspacing=2
verticalspacing=2
leftrightspacing=2
topbottomspacing=2
>
height=25
left=10
top=10
width=452
wsdlgmodalframe=false
object lb_input:tlabel
left=2
top=2
width=44
height=21
autosize=true
caption="主程序"
end
object e_script:tedit
autosize=true
caption="edit1"
height=21
left=48
top=2
width=331
end
object bt_script:tbtn
autosize=true
caption=".."
height=21
left=381
onclick=bt_script_clk
top=2
width=28
end
end
object gp_out:tgroupbox
autosize=true
caption="输出"
childsizing=<
layout=1
controlsperline=3
horizontalspacing=2
verticalspacing=10
leftrightspacing=2
topbottomspacing=2
>
height=94
left=10
parentcolor=true
top=45
width=452
object lb_ype:tlabel
left=6
top=21
width=58
height=21
autosize=true
caption="类型"
textalign=al9_centerright
end
object cb_type:tcombobox
autosize=true
caption="combobox1"
height=21
itemindex=0
items=["执行程序" "动态库" tsg ]
left=74
onselchanged=cb_type_sel
top=21
width=324
end
object label6:tlabel
left=408
top=21
width=28
height=21
autosize=true
caption=""
end
object lb_output:tlabel
left=6
top=44
width=58
height=21
autosize=true
caption="输出"
textalign=al9_centerright
end
object ed_output:tedit
autosize=true
caption="edit1"
height=21
left=74
placeholder="输出文件"
top=44
width=324
end
object bt_outputname:tbtn
autosize=true
caption=".."
height=21
left=408
onclick=bt_outputname_clk
top=44
width=28
end
object lb_output_f:tlabel
left=6
top=67
width=58
height=21
autosize=true
caption="输出函数"
textalign=al9_centerright
end
object ed_out_f:tedit
autosize=true
caption="edit1"
height=21
left=74
top=67
width=324
end
object bt_output:tbtn
autosize=true
caption=".."
enabled=false
height=21
left=408
onclick=bt_output_clk
top=67
width=28
end
end
object gp_dir:tgroupbox
autosize=true
caption="输入目录"
childsizing=<
layout=1
controlsperline=3
horizontalspacing=2
verticalspacing=2
leftrightspacing=2
topbottomspacing=2
>
height=73
left=10
parentcolor=true
top=149
width=452
object label1:tlabel
left=6
top=21
width=58
height=23
autosize=true
caption="函数目录"
end
object ed_f_dirs:tedit
autosize=true
caption="edit1"
height=23
left=66
top=21
width=312
end
object bt_f_dir:tbtn
autosize=true
caption=".."
height=23
left=380
onclick=bt_f_dir_clk
top=21
width=28
end
object label2:tlabel
left=6
top=46
width=58
height=21
autosize=true
caption="资源目录"
end
object ed_s_dirs:tedit
autosize=true
caption="edit2"
height=21
left=66
top=46
width=312
end
object bt_s_dir:tbtn
autosize=true
caption=".."
height=21
left=380
onclick=bt_s_dir_clk
top=46
width=28
end
end
object gp_filter:tgroupbox
autosize=true
caption="筛选"
childsizing=<
layout=1
controlsperline=3
horizontalspacing=2
verticalspacing=2
leftrightspacing=2
topbottomspacing=2
>
height=139
left=10
parentcolor=true
top=232
width=452
object lb_s_type:tlabel
left=6
top=21
width=86
height=20
autosize=true
caption="资源文件后缀"
end
object ed_s_type:tedit
autosize=true
caption="edit2"
height=20
left=94
text="*.tfm,*.ini"
top=21
width=322
end
object label7:tlabel
left=418
top=21
width=28
height=20
autosize=true
caption=""
end
object label3:tlabel
left=6
top=43
width=86
height=21
autosize=true
caption="指定资源"
textalign=al9_centerright
end
object ed_include_s:tedit
autosize=true
caption="edit1"
height=21
left=94
top=43
width=322
end
object bt_i_s:tbtn
autosize=true
caption=".."
height=21
left=418
onclick=bt_i_s_clk
top=43
width=28
end
object label4:tlabel
left=6
top=66
width=86
height=21
autosize=true
caption="指定函数"
textalign=al9_centerright
end
object ed_include_f:tedit
autosize=true
caption=""
height=21
left=94
top=66
width=322
end
object bt_i_f:tbtn
autosize=true
caption=".."
height=21
left=418
onclick=bt_i_f_clk
top=66
width=28
end
object lb_tsg:tlabel
left=6
top=89
width=86
height=21
autosize=true
caption="tsg库"
textalign=al9_centerright
end
object ed_tsg:tedit
autosize=true
caption="edit1"
height=21
left=94
top=89
width=322
end
object bt_tsgadd:tbtn
autosize=true
caption=".."
height=21
left=418
onclick=bt_tsgadd_clk
top=89
width=28
end
object label5:tlabel
left=6
top=112
width=86
height=21
autosize=true
caption="排除函数"
textalign=al9_centerright
end
object ed_exclude_f:tedit
autosize=true
caption=""
height=21
left=94
top=112
width=322
end
object bt_d_f:tbtn
autosize=true
caption=".."
height=21
left=418
onclick=bt_d_f_clk
top=112
width=28
end
end
object gp_other:tgroupbox
autosize=true
caption="其他"
childsizing=<
layout=1
controlsperline=3
horizontalspacing=2
verticalspacing=2
leftrightspacing=2
topbottomspacing=2
>
height=97
left=10
parentcolor=true
top=381
width=452
object label9:tlabel
left=6
top=21
width=65
height=25
autosize=true
caption=""
end
object panel3:tpanel
autosize=true
caption="panel3"
childsizing=<
layout=1
controlsperline=3
horizontalspacing=2
verticalspacing=2
leftrightspacing=2
topbottomspacing=2
>
height=25
left=73
top=21
width=316
wsdlgmodalframe=false
object ck_gui:tcheckbtn
autosize=true
caption="gui"
height=21
left=2
top=2
width=56
end
object ck_strong:tcheckbtn
autosize=true
caption="强引用函数"
height=21
left=60
onclick=checkbtn2_clk
top=2
width=105
end
object ck_s_rp:tcheckbtn
autosize=true
caption="资源保留相对路径"
enabled=false
height=21
left=167
top=2
visible=false
width=147
end
end
object label10:tlabel
left=391
top=21
width=28
height=25
autosize=true
caption=""
end
object lb_ico:tlabel
left=6
top=48
width=65
height=21
autosize=true
caption="图标"
textalign=al9_centerright
end
object ed_ico:tedit
autosize=true
caption="edit3"
height=21
left=73
top=48
width=316
end
object bt_ico:tbtn
autosize=true
caption=".."
height=21
left=391
onclick=bt_ico_clk
top=48
width=28
end
object l_namespace:tlabel
left=6
top=71
width=65
height=20
autosize=true
caption="namespace"
end
object e_namespace:tedit
autosize=true
caption="edit1"
height=20
left=73
top=71
width=316
end
object label8:tlabel
left=391
top=71
width=28
height=20
autosize=true
caption=""
end
end
object f_op:topenfileadlg
left=473
top=14
height=30
width=30
caption="openfileadlg1"
filter=<
"ico图标"="*.ico"
>
end
object panel2:tpanel
autosize=true
caption="panel2"
childsizing=<
layout=1
controlsperline=3
horizontalspacing=2
verticalspacing=50
leftrightspacing=50
topbottomspacing=2
>
height=25
left=10
top=488
width=452
wsdlgmodalframe=false
object bt_cmd:tbtn
autosize=true
caption="命令行"
height=21
left=50
onclick=bt_cmd_clk
top=2
width=56
end
object bt_cancel:tbtn
autosize=true
caption="取消"
height=21
left=156
onclick=bt_cancel_clk
top=2
width=42
end
object bt_ok:tbtn
autosize=true
caption="确定"
height=21
left=248
onclick=bt_ok_clk
parentcolor=false
top=2
width=42
end
end
end

View File

@ -1,6 +1,6 @@
type t_compile_config=class(tdcreateform)
uses tslvcl;
bt_ok:tbtn;
gp_dir:tgroupbox;
bt_f_dir:tbtn;
bt_s_dir:tbtn;
@ -14,20 +14,20 @@ type t_compile_config=class(tdcreateform)
cb_type:tcombobox;
lb_output:tlabel;
ed_output:tedit;
bt_cancel:tbtn;
gp_other:tgroupbox;
ck_gui:tcheckbtn;
ck_strong:tcheckbtn;
ck_s_rp:tcheckbtn;
bt_i_s:tbtn;
lb_ico:tlabel;
ed_ico:tedit;
bt_ico:tbtn;
bt_output:tbtn;
f_op:topenfileadlg;
lb_input:tlabel;
e_script:tedit;
bt_script:tbtn;
bt_outputname:tbtn;
lb_output_f:tlabel;
ed_out_f:tedit;
@ -44,26 +44,9 @@ type t_compile_config=class(tdcreateform)
lb_tsg:tlabel;
ed_tsg:tedit;
bt_tsgadd:tbtn;
bt_cmd:tbtn;
l_namespace:tlabel;
e_namespace:tedit;
panel1:tpanel;
lb_input:tlabel;
e_script:tedit;
bt_script:tbtn;
panel2:tpanel;
bt_cmd:tbtn;
bt_cancel:tbtn;
bt_ok:tbtn;
label6:tlabel;
label7:tlabel;
panel3:tpanel;
ck_gui:tcheckbtn;
ck_strong:tcheckbtn;
ck_s_rp:tcheckbtn;
label8:tlabel;
label9:tlabel;
label10:tlabel;
function Create(AOwner);override; //¹¹Ôì
begin
f_sep := iofileseparator();
@ -95,7 +78,7 @@ type t_compile_config=class(tdcreateform)
function bt_tsgadd_clk(o;e);virtual;
begin
tp := array("tsg¿â":"*.tsg");
if show_dir_list(s_to_array(ed_tsg.text,true),tp,"tsg库目录")then
if show_dir_list(s_to_array(ed_tsg.text,true),tp)then
begin
ed_tsg.text := array_to_s(dir_list.get_dirs(),true);
end
@ -183,7 +166,6 @@ type t_compile_config=class(tdcreateform)
function bt_outputname_clk(o;e);virtual;
begin
f_op.filter := array(get_type():"*"+get_type());
f_op.Caption := "输出文件名";
if f_op.OpenDlg()then
begin
ed_output.text :=relative_path( f_op.filename);
@ -202,7 +184,6 @@ type t_compile_config=class(tdcreateform)
function bt_script_clk(o;e);virtual;
begin
f_op.filter := array("tsl½Å±¾":"*.tsf;*.tsl");
f_op.Caption := "入口脚本";
if f_op.OpenDlg()then
begin
e_script.text := relative_path( f_op.filename);
@ -212,7 +193,6 @@ type t_compile_config=class(tdcreateform)
function bt_ico_clk(o;e);virtual;
begin
f_op.filter := array("icoͼ±ê":"*.ico");
f_op.Caption := "图标文件";
if f_op.OpenDlg()then
begin
ed_ico.text := relative_path( f_op.filename);
@ -220,28 +200,28 @@ type t_compile_config=class(tdcreateform)
end
function bt_d_f_clk(o;e);virtual;
begin
if show_m_editor(s_to_array(ed_exclude_f.text),"排除函数")then
if show_m_editor(s_to_array(ed_exclude_f.text))then
begin
ed_exclude_f.text := array_to_s(m_list_editor.get_data());
end
end
function bt_i_f_clk(o;e);virtual;
begin
if show_m_editor(s_to_array(ed_include_f.text),"指定函数")then
if show_m_editor(s_to_array(ed_include_f.text))then
begin
ed_include_f.text := array_to_s(m_list_editor.get_data());
end
end
function bt_i_s_clk(o;e);virtual;
begin
if show_m_editor(s_to_array(ed_include_s.text),"指定资源")then
if show_m_editor(s_to_array(ed_include_s.text))then
begin
ed_include_s.text := array_to_s(m_list_editor.get_data());
end
end
function bt_output_clk(o;e);
begin
if show_m_editor(s_to_array(ed_out_f.text),"输出函数")then
if show_m_editor(s_to_array(ed_out_f.text))then
begin
ed_out_f.text := array_to_s(m_list_editor.get_data());
end
@ -249,14 +229,14 @@ type t_compile_config=class(tdcreateform)
function bt_s_dir_clk(o;e);
begin
if show_dir_list(s_to_array(ed_s_dirs.text,true),nil,"资源目录")then
if show_dir_list(s_to_array(ed_s_dirs.text,true))then
begin
ed_s_dirs.text := array_to_s(dir_list.get_dirs(),true);
end
end
function bt_f_dir_clk(o;e);
begin
if show_dir_list(s_to_array(ed_f_dirs.text,true),nil,"函数目录")then
if show_dir_list(s_to_array(ed_f_dirs.text,true))then
begin
ed_f_dirs.text := array_to_s(dir_list.get_dirs(),true);
end
@ -277,21 +257,19 @@ type t_compile_config=class(tdcreateform)
invoke(self,v["name"],nil);
end
end
function show_dir_list(data,filetype,cp);
function show_dir_list(data,filetype);
begin
dir_list.Left := Left-20;
dir_list.top := top+50;
dir_list.set_dirs(data);
dir_list.fopentype := filetype;
if ifstring(cp) then dir_list.Caption := cp;
return dir_list.ShowModal();
end
function show_m_editor(data,cp);
function show_m_editor(data);
begin
m_list_editor.Left := Left-20;
m_list_editor.top := top+50;
m_list_editor.set_data(data);
if ifstring(cp) then m_list_editor.Caption := cp;
return m_list_editor.ShowModal();
end
function enabled_script_input(f);

View File

@ -21,7 +21,6 @@ type t_editor_color_mgr=class(tdcreateform)
listbox1.Items := fcolorindexname;
listbox1.ItemIndex := 1;
listbox1.SelBkColor := listbox1.Color;
listbox1.onfontchanged := thisfunction(lfchanged);
end
function edtcolormain1_close(o;e);virtual;
begin
@ -65,10 +64,7 @@ type t_editor_color_mgr=class(tdcreateform)
listbox1.InvalidateRect(nil,false);
end
end
function lfchanged();
begin
listbox1.ItemHeight := font.Height+5;
end
function btn1_clk(o;e);virtual;
begin
EndModal(0);

View File

@ -1,6 +1,7 @@
//启动tsl编辑器
//20230421 整理代码
uses tslvcl;
setprocessdpiawareness(2);
deletefuncacheini(); //清空缓存
ops := ""; //待打开文件
GLobal G_OpenHostory;
@ -91,7 +92,6 @@ begin
global g_dotsavehistory; //是否保存打开的历史记录
g_dotsavehistory := true;
end
setprocessdpiawareness(2);
app := initializeapplication();
app.createform(class(TRunEditorForm),fm);
fm.OpenAndGotoFileByName(ops);

View File

@ -2,46 +2,32 @@
tsl界面设计器启动程序
}
uses tslvcl,utslvclDesigner;
oldlib := sysgettsllibpath();
setprocessdpiawareness(2);
deletefuncacheini();
isdebug := false;
willopen := "";
i := 0;
ct := sysparamcount();
while i<=ct do
for i:= 0 to sysparamcount() do
begin
if ("-tpj"=sysparamstr(i)) then //´ò¿ª¹¤³Ì
if wait_filename then
begin
willopen := sysparamstr(i);
wait_filename := 0;
end else
if ("-tpj"=sysparamstr(i)) then
begin
i++;
if i<=ct then willopen := sysparamstr(i);
wait_filename := true;
end else
if ("-DEBUGSERVER" = sysparamstr(i)) then
begin
isdebug := true;
end else
if ("-libpath" = sysparamstr(i)) then //ÉèÖÃlibpahth
begin
i++;
if i<=ct then
begin
ph := sysparamstr(i);
if oldlib<>ph then
begin
try
syssettsllibpath(ph);
except
end;
end
end
end
i++;
break;
end
end
deletefuncacheini();
h := FindWindowA("tsluidesigner_a_a_1",nil); //查找唯一窗口
if not(isdebug) and h then
begin
return PostMessageA(h,0x400,303,10);
end
setprocessdpiawareness(2);
app := InitializeApplication();
app.createform(class(TVclDesignerStart),Desginer);
Desginer.Show();

View File

@ -46,8 +46,7 @@ type teditorform = class(TVCform) //
const c_m_help = "帮助";
const c_m_manu = "使用手册";
const c_m_tsl_help = "tsl语言帮助";
const c_m_about = "关于";
const c_m_font = "字体图标大小";
const c_m_about = "关于";
function WMACTIVATE(o,e):WM_ACTIVATE;override; //激活
begin
inherited;
@ -98,7 +97,6 @@ type teditorform = class(TVCform) //
Fexefilepath := basepath+"editer"+sp+"tslfile.tsm";
FOpendpaths := basepath+"editer"+sp+"openedpaths.tsm";
FTabWidthpath := basepath+"editer"+sp+"tabwidpath.tsm";
Fsysfontpath := basepath+"editer"+sp+"sysfont.tsm";
FexefileCmds := basepath+"editer"+sp+"cmds.tsm";
FHistoryPath := basepath+"editer"+sp+"HistoryPath.tsm";
FCodeblockPath := basepath+"editer"+sp+"BlockManager.tsm";
@ -269,16 +267,13 @@ type teditorform = class(TVCform) //
FCodeBlockMenu.Parent := FTslLangMenu;
FTslFormatMenu.Parent := FTslLangMenu;
tbwidth := 4;
if importfile(ftstream(),"",FTabWidthpath,d)=1 and ( d>0 ) then //tab宽度
if importfile(ftstream(),"",FTabWidthpath,d)=1 and ( d>0 ) then
begin
tbwidth := d;
end
FMTabContain :=new TMenu(self);
fmshowhltediter :=new TMenu(self);
fmshowhltediter.caption := c_m_edit_color;
fmsysfont :=new TMenu(self);
fmsysfont.caption := c_m_font;
FMTabs := array();
FMTabContain.Caption := c_m_tab_config;
for i:= 0 to 6 do
@ -294,13 +289,9 @@ type teditorform = class(TVCform) //
end
FMTabContain.parent := FMenuSet;
fmshowhltediter.Parent := FMenuSet;
fmsysfont.Parent := FMenuSet;
fmshowhltediter.OnClick := function(o,e)begin
FEdter.showhltcolor();
end
fmsysfont.OnClick := function(o,e)begin
FEdter.modifysyssize();
end
mainmenu := m;
FmTool.parent := m;
FEnCodeMenu.parent := m;
@ -320,7 +311,8 @@ type teditorform = class(TVCform) //
FCloseMenu := new tmenu(self);
FCloseMenu.Caption:=c_m_close_min;
//FCloseMenu.parent := FMenuSet;
//FCloseMenu.Checked := true;
FCloseMenu.parent := FMenuSet;
FCloseMenu.OnClick := function(o,e)
begin
FCloseMenu.Checked := not(FCloseMenu.Checked);
@ -423,18 +415,15 @@ type teditorform = class(TVCform) //
FEdter.OnPageItemSelChanged := thisfunction(PageItemSelChanged);
FEdter.OnPageEditerChanged := thisfunction(PageEditerChanged);
FEdter.TslExe := tslexefile;
FEdter.align := alClient;
FEdter.align := alClient;
if (importfile(ftstream(),"",feditorglobalpath,ginfo)=1) and ifarray(ginfo) then
begin
global editorglobalinfo ;
editorglobalinfo := ginfo;
if ifarray(ginfo) then
begin
app := initializeapplication();
app.font := array("width":ginfo["fontsize"],"height" :ginfo["fontsize"]*2);
NotifyComponent(self,ginfo);
end
global g_editer_font_size := ginfo["font"];
//FEdter.getpage().font := ginfo["font"];
//FEdter.getcodemap().font := ginfo["font"];
//Fdirview.addrootdirs(dirs);
end
if importfile(ftstream(),"",fdirspath,dirs)=1 then
begin
@ -719,11 +708,11 @@ type teditorform = class(TVCform) //
if ifarray(d) and d then
begin
Exportfile(ftstream(),"",Fhighlightpath,d);
end
global editorglobalinfo ;
if ifarray(editorglobalinfo) and editorglobalinfo then
end
global g_editer_font_size;
if ifarray(g_editer_font_size) and g_editer_font_size then
begin
Exportfile(ftstream(),"",feditorglobalpath,editorglobalinfo);
Exportfile(ftstream(),"",feditorglobalpath,array("font":g_editer_font_size));
end
save_opend_file_name();
FEdter.CloseAllPageItems();
@ -859,7 +848,156 @@ type teditorform = class(TVCform) //
return array();
end
protected
type TSerlogerSimpleWnd=class(tdcreateform)
uses tslvcl;
label1:tlabel;
furl:tedit;
label2:tlabel;
fport:tedit;
label3:tlabel;
fusr:tedit;
label4:tlabel;
fpwd:tpassword;
flogout:tbtn;
flogin:tbtn;
[weakref]cancel_clk;
[weakref]save_clk;
function Create(AOwner);override; //构造
begin
inherited;
Loader.LoadFromTfmScript(self,getinfo());
flogout.OnClick := function(o,e)begin
calldatafunction(cancel_clk,self,e);
end
flogin.OnClick := function(o,e)begin
calldatafunction(save_clk,self,e);
end
end
function setdata(d);
begin
if not ifarray(d) then return ;
furl.text := d["addr"];
fport.text := d["port"];
fusr.text := d["usr"];
fpwd.text := d["pwd"];
end
function getdata();
begin
r := array();
r["addr"] := furl.text;
r["port"] := fport.text;
r["usr"] := fusr.text;
r["pwd"] := fpwd.text;
return r;
end
function tserlogersimplewnd1_close(o;e);virtual;
begin
Visible := false;
e.skip := true;
end
function Recycling();override; //回收变量
begin
inherited;
ci := self.classinfo(); //将成员变量赋值为nil避免循环引用
for i,v in ci["members"] do
begin
if v["static"]then continue;
invoke(self,v["name"],nil);
end
end
private
function getinfo();
begin
return %%
object tserlogersimplewnd1:tserlogersimplewnd
caption="远程连接信息"
color=0xFFFFFF
height=211
minmaxbox=false
onclose=tserlogersimplewnd1_close
width=422
wsdlgmodalframe=true
wssizebox=true
object label1:tlabel
left=4
top=3
width=80
height=25
caption="服务器地址"
end
object furl:tedit
height=25
left=88
tabstop=true
top=3
width=204
end
object label2:tlabel
left=296
top=3
width=34
height=25
caption="端口"
end
object fport:tedit
height=25
left=333
tabstop=true
top=3
width=62
end
object label3:tlabel
left=2
top=38
width=80
height=25
caption=" 用户名"
end
object fusr:tedit
height=25
left=88
tabstop=true
top=38
width=244
end
object label4:tlabel
left=2
top=72
width=80
height=25
caption=" 密 码"
end
object fpwd:tpassword
height=25
left=88
tabstop=true
top=72
width=245
end
object flogout:tbtn
anchors=[akright akbottom]
caption="取消"
height=23
left=149
tabstop=true
top=130
width=74
end
object flogin:tbtn
anchors=[akright akbottom]
caption="保存"
height=23
left=259
tabstop=true
top=130
width=74
end
end
%%;
end
end
type TBlockEditer = class(TPanel)
uses TSLVCL,UtslCodeEditor;
function Create(AOwner);override;
@ -872,7 +1010,6 @@ type teditorform = class(TVCform) //
li := new TLabel(self);
li.caption := v;
FLabels[i] := li;
li.TextAlign := AL9_CENTERRIGHT;
li.parent := self;
end
FEditers := array();
@ -909,31 +1046,27 @@ type teditorform = class(TVCform) //
begin
if FLabels and FEditers and FBtn and FCoder and FChecked then
begin
ft := font;
fh := ft.height+5;
fw := ft.width;
r := ClientRect;
nx := 5+5+fw*7; //标签截止位置
lr := array(5,10,nx,10+fh);
FChecked.SetBoundsRect(array(nx+5,10,nx+25,30));
lr := array(5,10,45,35);
FChecked.SetBoundsRect(array(52,10,72,30));
for i,v in FLabels do
begin
v.SetBoundsRect(lr);
lr[1]+=fh;
lr[3]+=fh;
lr[1]+=25;
lr[3]+=25;
end
w := r[2]-r[0];
lr := array(nx+5,10+fh+1,w-5,10+fh+fh-1);
lr := array(52,10+25,w-48,35+25);
for i,v in FEditers do
begin
v.SetBoundsRect(lr);
lr[1]+=fh+1;
lr[3]+=fh-1;
lr[1]+=25;
lr[3]+=25;
end
lr[3] := r[3]-fh-10;
lr[3] := r[3]-35;
FCoder.SetBoundsRect(lr);
lr := array(lr[2]-fw*6,lr[3]+5,lr[2],r[3]-5);
lr := array(lr[2]-100,lr[3]+5,lr[2],r[3]-5);
FBtn.SetBoundsRect(lr);
end
end
@ -966,18 +1099,6 @@ type teditorform = class(TVCform) //
end
type TBlockManager=class(TVCForm)
uses TSLVCL;
function ftchanged(o,e);
begin
if not flist then return ;
ft := font;
if not ft then return ;
fh := ft.height;
fw := ft.width;
FList.ItemHeight := fh+5;
flist.ColumnWidth(0) := fw*6;
flist.ColumnWidth(1) := fw*6;
flist.ColumnWidth(2) := fw*11;
end
function Create(AOwner);override;
begin
inherited;
@ -1033,28 +1154,25 @@ type TBlockManager=class(TVCForm)
class(UtslCodeEditor).move_popwnd_to_center2(FEditer);
FEditer.showmodal();
end
OnFontChanged := thisfunction(ftchanged);
end
function DoControlAlign();override;
begin
if FList and FBtns then
begin
ft := font;
fw := ft.width;
fh := ft.height;
R := ClientRect;
R1 := R;
R1[3]-=(fh+10);
R1[3]-=30;
FList.SetBoundsRect(R1);
rc := R;
RC[1] := R[3]-(fh+5);
RC[1] := R[3]-28;
RC[3] := R[3]-2;
for i,v in Fbtns do
begin
rc1 := RC;
rc1[0] := R[2]-(I+1)*(fw*8);
rc1[2] := RC1[0]+fw*6;
rc1[0] := R[2]-(I+1)*130;
rc1[2] := RC1[0]+95;
V.SetBoundsRect(rc1);
end
end
@ -1138,8 +1256,8 @@ type tsearchdir = class(TCustomControl)
function Create(AOwner);override;
begin
inherited;
//ParentFont := false;
//font := array("width":10,"height":20);
ParentFont := false;
font := array("width":10,"height":20);
fcopyer := new TClipBoard(self);
caption := "函数搜索目录:左侧为别名,右侧为-libpath目录....";
fcpmenu := new TPopupmenu(self);
@ -1157,7 +1275,7 @@ type tsearchdir = class(TCustomControl)
FFolder.parent := self;
FLists := array();
FBtns := array();
for i,v in array(array(2,38,220,430),array(248,2,700,430)) do
for i,v in array(array(2,28,220,430),array(248,2,700,430)) do
begin
ls := new tdirlistbox(self);
ls.SetBoundsRect(v);
@ -1181,7 +1299,6 @@ type tsearchdir = class(TCustomControl)
for i,v in array("+","-","+","-","确定") do
begin
bt := new tbtn(self);
if i<4 then bt.ParentFont := false;
bt.caption := v;
bt.SetBoundsRect(btrecs[i]);
bt.parent := self;
@ -1194,8 +1311,7 @@ type tsearchdir = class(TCustomControl)
FBtns[4].autosize := true;
/////////////////////////////////
FEdit := new tedit(self);
FEdit.SetBoundsRect(array(2,2,220,26));
FEdit.autosize := true;
FEdit.SetBoundsRect(array(2,2,220,26));
FEdit.parent := self;
FEdit.onkeyup := thisfunction(editkeyup);
FEdit.placeholder := "查找or添加";
@ -1419,7 +1535,6 @@ end
flastopend;
FOpendpaths;
FTabWidthpath;
Fsysfontpath;
FFileopen;
FexefileCmds;
FCodeblockPath;
@ -1544,13 +1659,6 @@ type tdirviewer = class(tcustomcontrol)
end
end
selnowork();
ftree.OnFontChanged := function(o,e)begin
ft := font;
if ft then
begin
ftree.ItemHeight := ft.height+6;
end
end
end
function treenodeselchanged(o,e);
begin
@ -1608,17 +1716,6 @@ type tdirviewer = class(tcustomcontrol)
end
ftb.ImageList := fimgs;
ftb.parent := self;
ftb.autosize := true;
onnotification := thisfunction(wftchanged);
end
function wftchanged(o,e);
begin
if not fimgs then return ;
d := e.msg;
if ifarray(d) and d["imgsize"]>0 then
begin
fimgs.imgsize := d["imgsize"];
end
end
function toolclick(o,e); //工具栏事件
begin

View File

@ -4,7 +4,7 @@ interface
@param(说明) 设计器工程相关工具,包括历史工程,工程目录管理,代码编辑器 %%
@date(20220518)
**}
uses utslvclauxiliary,utslvcldcomponents,tslvcl,utslmemo,UTslSynMemo,UVCPropertyTypesPersistence,UtslCodeEditor,utslvclsyntaxparser;
uses utslvclauxiliary,tslvcl,utslmemo,UTslSynMemo,UVCPropertyTypesPersistence,UtslCodeEditor,utslvclsyntaxparser;
function SetWndPostWithMouse(wnd,lft);
type TProjectManagerForm = class(TVCForm) //工程管理 TCustomControl
function Create(AOwner);override;
@ -144,10 +144,10 @@ type TProjectManagerForm = class(TVCForm) //
if findfunction(n)or findclass(n)then return "和现有的函数重名";
cprojpath := p+fio;
fn := f;
//CreateDirWithFileName(cprojpath+"resource.tfm"+fio+"abc.tfm"); //构建窗口信息文件
CreateDirWithFileName(cprojpath+"resource.tfm"+fio+"abc.tfm"); //构建窗口信息文件
info := array();
info["name"]:= n;
info["version"]:= "1.1.0";
info["version"]:= "1.2.0";
info["dir"]:= array();
mfn := n+"main";
info["files"]:= array(
@ -175,8 +175,7 @@ end
%%,n,n+"main");
ReWriteString(cprojpath+n+".tsl",r);
ReWriteString(cprojpath+n+"main.tsf",CreateAForm(n+"main"));
ReWriteString(cprojpath+n+"main.tfm",CreateAtfm(n+"main",n+"main"));
//ReWriteString(cprojpath+"resource.tfm"+fio+format("%smain.tfm",n),CreateAtfm(n+"main",n+"main"));
ReWriteString(cprojpath+"resource.tfm"+fio+format("%smain.tfm",n),CreateAtfm(n+"main",n+"main"));
//写入缓存
FProjectCoder.AddProject(n,f);
//添加到list 中
@ -207,7 +206,6 @@ type TProjectView = class(TVCForm) //
FFilterList;
FFilterNodes;
Fhighlightpath;
feditorglobalpath;
function ShowFilterList(d);
begin
if not FFilterList.visible then
@ -344,7 +342,7 @@ type TProjectView = class(TVCForm) //
rc := _wapi.GetScreenRect();
left := 20;
top := 150;
width := 330; //350
width := 360; //350
height := max(400,rc[3]-200);
FInput := new TNameInput(self);
finheritedinput := new tfm_inheritedwnd(self);
@ -352,9 +350,6 @@ type TProjectView = class(TVCForm) //
FInput.visible := false;
FInput.parent := self;
FTslEditer := new TTslEditer(AOwner);
FTslEditer.ParentFont := false;
FTslEditer.dbclkcreate := false;
FTslEditer.Notification(FTslEditer,"change_editor_keys");
FTslEditer.FExecuteEditer.cannotadd := true;
FTslEditer.FExecuteEditer.onsaveclk := function(o,e)
begin
@ -366,7 +361,6 @@ type TProjectView = class(TVCForm) //
FTslEditer.TslCacheDir := bpath+"designer"+fio+"cmpCaches";
FCodeblockPath := bpath+"editer"+fio+"BlockManager.tsm";
Fhighlightpath := bpath+"editer"+fio+"highlight.tsm";
feditorglobalpath := bpath+"editer"+fio+"feditorglobalpath.tsm";
if 1=importfile(ftstream(),"",FCodeblockPath,blockd)and blockd and ifarray(blockd)then
begin
class(TTSLCompletion).FCodeBlocks := blockd;
@ -388,33 +382,14 @@ type TProjectView = class(TVCForm) //
nd := FTree.CurrentNode;
if nd and (nd["type"] in array("panel","form")) then FDesigner.EditerCodeChanged(nd);
end
imgs := New TControlImageList(self);
imgs.onnotification := function(o,e)begin
d := e.msg;
if ifarray(d) and d["imgsize"]>0 then
begin
o.imgsize := d["imgsize"];
end
end
if (importfile(ftstream(),"",feditorglobalpath,ginfo)=1) and ifarray(ginfo) then
begin
global editorglobalinfo ;
editorglobalinfo := ginfo;
if ifarray(ginfo) then
begin
app := initializeapplication();
app.font := array("width":ginfo["fontsize"],"height" :ginfo["fontsize"]*2);
FTslEditer.font := array("width":ginfo["fontsize"],"height" :ginfo["fontsize"]*2);
NotifyComponent(self,ginfo);
end
end
//FTslEditer.Parent := AOwner;
FTmfParser := new TTmfParser();
FTslParser := new ttslscripparser();
FTreeTool := new TToolBar(self);
FTreeTool.autosize := true;
FTreeTool.parent := self;
imgs := New TControlImageList(self);
imgs.width := 24;
imgs.height := 24;
imgs.DrawBmpFirst := true;
EditToolBmps := array();
for i,v in GetToolBtns() do
@ -436,7 +411,6 @@ type TProjectView = class(TVCForm) //
FTreeTool.ImageList := imgs;
//**************目录树筛选功能***********************************
FFilter := new TEdit(self);
FFilter.autosize := true;
FFilterList := new TListBox(self);
FFilterList.color := 0xdcF8ff;
FFilterList.visible := false;
@ -548,7 +522,6 @@ type TProjectView = class(TVCForm) //
it.parent := fnewmenu;
it.OnClick := thisfunction(newadd);
end
return;
end
function setnodesel(nd);
@ -556,11 +529,6 @@ type TProjectView = class(TVCForm) //
if fopenbuzy then return ;
ftree.setsel(nd);
end
function getall_class_tsf();//列表
begin
ls := FTree.get_leaf_nodes();
return ls;
end
function OpenTreeNode(); //打开当前节点
begin
if not FCProjectPath then return Messageboxa("工程没打开","提示",0,self);
@ -903,11 +871,8 @@ type TProjectView = class(TVCForm) //
function ShowEditor(); //显示函数编辑
begin
//FTslEditer.Show(SW_SHOWNOACTIVATE); //
FTslEditer.Show(); //
FTslEditer.Show(SW_SHOWNOACTIVATE); //
_wapi.bringWindowToTop(FTslEditer.Handle);
it := FTslEditer.GetCurrentEditer();
if it then return it.SetFocus();
end
function hiddeneditor(rc);//隐藏
begin
@ -926,10 +891,6 @@ type TProjectView = class(TVCForm) //
if r then FTslEditer.OpenAndGotoFileByName(r);
ShowEditor();
end
function opensysfontmgr();
begin
FTslEditer.modifysyssize();
end
function ShowCurrenttfm();
begin
if FCurrentOpend then r := FCurrentOpend.gettmfname();
@ -976,10 +937,9 @@ type TProjectView = class(TVCForm) //
return r;
end
end
function GoToAFunction(n,fn); //跳转到函数
function GoToAFunction(n); //跳转到函数
begin
if not fn then
fn := FCurrentOpend.gettsfname();
fn := FCurrentOpend.gettsfname();
r := FTslEditer.GoToFunction(fn,n);
saveformcode(fn);
ShowEditor();
@ -1042,6 +1002,7 @@ type TProjectView = class(TVCForm) //
it := FTslEditer.OpenAndGoLineByName(tfm);
if it then
begin
//FTmfParser.ScriptPath := FCurrentOpend.gettmfname();
sc := it.FEditer.text;
FTmfParser.Script := sc;
FCurrentOpend.ftfmscript := sc;
@ -1049,13 +1010,9 @@ type TProjectView = class(TVCForm) //
//FTfmComponets := array();
//FTmfParser.GetAllSubObjects(nil,FTfmComponets);
FDesigner.LoadTreeNode(FTmfParser,inh,FCurrentOpend);
xx := FTslEditer.OpenAndGotoFileByName(FCurrentOpend.gettsfname());
FDesigner.LoadTreeNode(FTmfParser,inh,FCurrentOpend);
FDesigner.EditerCodeChanged(FCurrentOpend);
end else //缺少tfm文件
begin
xx := FTslEditer.OpenAndGotoFileByName(FCurrentOpend.gettsfname());
ShowEditor();
end
fopenbuzy := false;
end else
@ -1178,7 +1135,6 @@ type TProjectView = class(TVCForm) //
FExecEntry := d["entryscript"];
end
FTslEditer.setExecuteEditerSetcmdline(d["commandline"]);
move_tfm_to_tsf(p);
OpenMainForm(); //打开主窗口
end
@ -1329,8 +1285,6 @@ end %%,fn);
if ph then ph += fio;
else ph := "";
ph := cprojpath+ph+n+".tsf";
tfm := ph;
tfm[(length(tfm)-3):length(tfm)] := ".tfm";
if not(FileExists("",ph))then
begin
r := format(%%
@ -1346,9 +1300,8 @@ end
%%,n,nd.Fname,us);
ReWriteString(ph,r);
FTmfParser.ScriptPath := nd.gettmfname();
r := FTmfParser.inheritedcopy(n+"1",n,nd.Fname);
ReWriteString(tfm,r);
//ReWriteString((FCProjectPath+"resource.tfm"+fio+n+".tfm"),r);
r := FTmfParser.inheritedcoy(n+"1",n,nd.Fname);
ReWriteString((FCProjectPath+"resource.tfm"+fio+n+".tfm"),r);
end else
begin
FTslParser.ScriptPath := ph;
@ -1379,8 +1332,7 @@ end
if ph then ph += fio;
else ph := "";
ph := cprojpath+ph+n+".tsf";
tfm := ph;
tfm[(length(tfm)-3):length(tfm)] := ".tfm";
tfm := FCProjectPath+"resource.tfm"+fio+n+".tfm";
if not(FileExists("",ph))then
begin
r := CreateAForm(n);
@ -1426,9 +1378,7 @@ end
if ph then ph += fio;
else ph := "";
ph := cprojpath+ph+n+".tsf";
//tfm := (FCProjectPath+"resource.tfm"+fio+n+".tfm");
tfm := ph;
tfm[(length(tfm)-3):length(tfm)] := ".tfm";
tfm := (FCProjectPath+"resource.tfm"+fio+n+".tfm");
if not FileExists("",ph)then
begin
r := CreateAPanel(n);
@ -1813,11 +1763,6 @@ end
begin
exportfile(ftstream(),"",Fhighlightpath,d);
end
global editorglobalinfo ;
if ifarray(editorglobalinfo) and editorglobalinfo then
begin
Exportfile(ftstream(),"",feditorglobalpath,editorglobalinfo);
end
end
private
FMoveMnus;
@ -1888,10 +1833,6 @@ end
CreateDirWithFileName(FCProjectPath+ndr+fio+d["name"]+"."+ft);
if 1=filerename("",FCProjectPath+ml+d["name"]+"."+ft,FCProjectPath+ndr+d["name"]+"."+ft) then
begin
if FileExists("",(FCProjectPath+ml+d["name"]+".tfm")) then
begin
filerename("",FCProjectPath+ml+d["name"]+".tfm",FCProjectPath+ndr+d["name"]+".tfm");
end
nd.Recycling();
SaveProjInfo();
//移动成功
@ -2222,7 +2163,7 @@ BD141CA912494F502D48D224F45050274A21E03806FF2C7CA7516022D7D000000
function GoToFunction(fn,n);
begin
it := OpenAndGotoFileByName(fn);
if it then return it.GotoFunction(n);
if it then it.GotoFunction(n);
end
function AddFunction(n,fn,finfo); //添加函数
begin
@ -2397,34 +2338,16 @@ type TFileTree = class(TTreeCtl)
if FFType in array( "form","panel") then
begin
if not(ifstring(nn) and nn) then nn := Fname;
return Owner.fprojectpath+FPath2()+nn+".tfm";
//return Owner.fprojectpath+"resource.tfm"+fio+nn+".tfm";
return Owner.fprojectpath+"resource.tfm"+fio+nn+".tfm";
end
end
function gettmfdirs();//获得tmfdir
begin
if FFType in array( "form","panel") then
begin
//return array( Owner.fprojectpath+"resource.tfm"+fio);
return listdirs(Owner.fprojectpath);
return array( Owner.fprojectpath+"resource.tfm"+fio);
end
end
function listdirs(dir);
begin
r := array();
fio := dir[length(dir)];
r[0] := dir;
for i,v in FileList("",dir+"*") do
begin
vn := v["FileName"];
if vn="." or vn=".." then continue;
if pos("D",v["Attr"]) then
begin
r union=listdirs(dir+vn+fio);
end
end
return r;
end
property FFileInfo read FFFileInfo write setfileinfo;
fio;
fdtree;
@ -2445,12 +2368,6 @@ type TFileTree = class(TTreeCtl)
end
fprojectpath;
fio;
function get_leaf_nodes();
begin
leafs := array();
GetNodeLeafs(FPNode,leafs);
return leafs;
end
function GetInfo(dir,files); //获得信息
begin
leafs := array();
@ -3040,11 +2957,6 @@ type TNameInput=class(TCustomControl) //
FBtn.Click();
end
end
autosize := true;
FEidt.autosize := true;
FLabel.autosize := true;
FBtn.autosize := true;
childsizing := array("layout":1);
end
function sellAllText();
begin
@ -3136,57 +3048,6 @@ type TProjectAddDlg=class(TCustomControl) //
FBtn;
FOnBtnClk;
end
////////////////////////////////////////////////////////////////
function move_tfm_to_tsf(dir);
begin
if not(FileList("",dir+iofileseparator()+"resource.tfm"+iofileseparator()+"*.tfm")) then return ;
tsfs := array();
tfms := array();
find_tsf_tfm(dir,tsfs,tfms);
fs := iofileseparator();
for i,v in tsfs do
begin
tfmi := tfms[i];
if tfmi then
begin
sf := tfmi[0];
df := v+fs+tfmi[1];
if sf<>df then
begin
if filecopy("",sf,"",df) then
begin
filedelete("",sf);
end
end
end
end
if not(FileList("",dir+iofileseparator()+"resource.tfm"+iofileseparator()+"*.tfm")) then removedir("",dir+iofileseparator()+"resource.tfm");
end
function find_tsf_tfm(dir,tsfs,tfms);
begin
fs := iofileseparator();
for i,v in filelist("",dir+fs+"*") do
begin
vn := v["FileName"];
if vn="." or vn=".." then continue;
if pos("D",v["Attr"]) then //??
begin
find_tsf_tfm(dir+fs+vn,tsfs,tfms) ;
end else
begin
if parseregexpr("(.+)\\.tsf",vn,"i",mr,mp,ml)=1 then
begin
tsfs[lowercase(mr[0,1])] := dir;
end else
if parseregexpr("(.+)\\.tfm",vn,"i",mr,mp,ml)=1 then
begin
fn := dir+fs+vn;
tfms[lowercase(mr[0,1])] := array(fn,vn);
end
end
end
end
/////////////////////////////////////////////////////////////////
function ReWriteString(fn,d);
begin
if not ifstring(d)then return 0;
@ -3223,6 +3084,24 @@ r := format(%% type %s=class(tdcreatepanel)
begin
inherited;
end
function DoControlAlign();override;//对齐子控件
begin
//当窗口大小改变时,该函数会被调用,
//可以通过 clientrect 获取客户区大小,设置子控件的位置以及大小
//如果自己处理了子控件的对齐,就可以去掉 inherited
inherited;
end
function Recycling();override;
begin
inherited;
ci := self.classinfo();
for i,v in ci["members"] do
begin
if v["const"] then continue;
if v["static"] then continue;
invoke(self,v["name"],nil);
end
end
end
%%,n);
return r;
@ -3271,6 +3150,41 @@ function LegalFolderName(n); //Ŀ¼
begin
return ifstring(n) and n and (1=ParseRegExpr("^[A-Za-z_]\\w{2,}$",n,v,vp,vl)) and (lowercase(n)<>"con");
end
function createtslfunction(f);//构造函数
begin
n := f["name"];
p := f["param"];
b := f["body"];
ps := "";
if ifarray(p)then
begin
len := length(p);
for i := 0 to len-1 do
begin
v := p[i];
if ifstring(v)then ps += v;
if i<len-1 then ps += ";";
end
end
hs := nil;
vt := "";
if f["virtual"] then vt := "virtual;";
if ifstring(n) and ifstring(b)then
begin
//hs := "\r\nfunction "+n+"("+ps+");"+vt+"\r\n\tbegin\r\n"+b+"\r\n\tend\r\n";
bs := str2array(b,"\r\n");
bs2 := "";
for i,v in bs do
begin
if not v then continue;
bs2 += " "+v+"\r\n";
end
hs := "\r\n\ function "+n+"("+ps+");"+vt+"\r\n\ begin\r\n"+bs2+"\r\n\ end\r\n";
end
//hs := "\r\n\tfunction "+n+"("+ps+");"+vt+"\r\n\tbegin\r\n"+b+"\r\n\tend\r\n";
return hs;
end
function SetWndPostWithMouse(wnd,lft);
begin
{**

File diff suppressed because it is too large Load Diff

View File

@ -133,9 +133,6 @@ type TFormatParser = class
"%%","(*","//","#!",
"<?tslx>",
"?>",
"...",
":>",":<",":<>", ":==",":>=",":<=",
"::>","::<","::<>", "::==","::>=","::<=",
//"0x","0O","0b",
);
TslSyn2 := array("div=","union2=","intersect=","outersect=","minus=","end.",);

View File

@ -1013,7 +1013,9 @@ type TTslSynHighLighter = class(TSynHighLighter)
end
tvi := s[idx];
if tvi=" " or tvi="\t" then
begin
begin
SetTToken(tokens,const ccs,idx-1,array("%%"));
return ParserTokenLines(s,idx+1,e,ccs,tokens);
end
@ -1021,7 +1023,7 @@ type TTslSynHighLighter = class(TSynHighLighter)
end
end else
begin
SetTToken(tokens,"%",idx-1);
SetTToken(tokens,"%",idx-1);
idx--;
end
end
@ -1051,13 +1053,6 @@ type TTslSynHighLighter = class(TSynHighLighter)
SetTToken(tokens,"<",idx);
end
end else
if vi="." and (idx<e-2) and s[idx+1]="." and s[idx+2]="." then //////////¼ÓÈë´¦Àí ...
begin
if ttk then
SetTToken(tokens,ttk,idx-1);
SetTToken(tokens,"...",idx+2);
idx+=2;
end else
if pos(vi,"`~@#$^&*)+-;,.?:[]|\\=><%/") then
begin
if ttk then
@ -1253,8 +1248,8 @@ type TTslSynHighLighter = class(TSynHighLighter)
end
function GetLineTokens(idx);override;
begin
if idx<FSatesCount then return FTokens[idx];
return nil;
if idx<FSatesCount then
return FTokens[idx];
end
private
function FindRightChar(c,s,b,e,zy); //²éÕÒ·â±ÕµÄ×Ö·û

File diff suppressed because it is too large Load Diff

View File

@ -686,7 +686,7 @@ type TTslDebuga=class(TCustomControl)
function Create(AOwner);
begin
inherited;
//init_item_height := 30;
init_item_height := 30;
fscriptbrks := array();
//Frundirect := false;
FCmdHistory := array();
@ -698,15 +698,14 @@ type TTslDebuga=class(TCustomControl)
dbwnd.Align := alClient;
dbwnd.Parent := self;
FStackList := new TListView(self); // new TListBox(self); //new tmemo(self);//
//FStackList.ItemHeight := init_item_height;
FStackList.ItemHeight := init_item_height;
FStackList.Columns := array(("text":"line","width":80),
("text":"function","width":250) //,("text":"type","width":70)
);
FStackList.Border := true;
FVaraiblesList := new TGroupGridA(self);
FVaraiblesList.Border := false;
//FVaraiblesList.ItemHeight := init_item_height;
FVaraiblesList.ItemHeight := init_item_height;
FVaraiblesList.Columns := array(("text":"name","width":105),
("text":"value","width":135),
("text":"type","width":80)
@ -714,7 +713,7 @@ type TTslDebuga=class(TCustomControl)
FCommandtext := new TEdit(self);
FCommandtext.autosize := true;
FCommandtext.placeholder := "命令输入框";
//FCommandtext.Height := init_item_height;
FCommandtext.Height := init_item_height;
FCommandtext.onkeyup := thisfunction(cmdkeyup);
FShowText := new tmemo(self);
FShowText.ReadOnly := true;
@ -755,18 +754,20 @@ type TTslDebuga=class(TCustomControl)
begin
return 1;
end
self.onfontchanged := function(o,e)begin
if (FVaraiblesList and FStackList) then
begin
ft := o.font;
if ft then
begin
ht := ft.Height;
FVaraiblesList.ItemHeight := ht+6;
FStackList.ItemHeight := ht+6;
end
end
end
onnotification := function(o,e)begin
if not (FStackList and FVaraiblesList) then return ;
ms := e.message;
if ifarray(ms) and ms[0] ="font" then
begin
ft := ms[1];
FStackList.font := ft;
FStackList.ItemHeight := ft["height"]+6;
FVaraiblesList.font := ft;
FVaraiblesList.ItemHeight := ft["height"]+6;
//font := ms[1];
end
end
end
function addbreak(item,idx,n); //添加断点
begin
@ -1943,43 +1944,38 @@ type ttempclass = class()
end
type tdbgselwnd=class(tdcreateform)
uses tslvcl;
fdiag:tfolderchooseadlg;
flist:tlistview;
cancel_clk;
save_clk;
dbg_clk;
fhistorydir;
panel3:tpanel;
label1:tlabel;
portpal:tpanel;
furl:tedit;
label2:tlabel;
fport:tedit;
label3:tlabel;
fusr:tedit;
label4:tlabel;
label5:tlabel;
fpwd:tpassword;
label6:tlabel;
panel2:tpanel;
fdir:tedit;
fdiag:tfolderchooseadlg;
flist:tlistview;
fcbtn:tbtn;
flogout:tbtn;
flogin:tbtn;
label5:tlabel;
panel1:tpanel;
fdir:tedit;
fcbtn:tbtn;
panel4:tpanel;
fdbg:tbtn;
cancel_clk;
save_clk;
dbg_clk;
fhistorydir;
function Create(AOwner);override; //构造
begin
inherited;
Visible := false;
//ParentFont := false;
ParentFont := false;
Loader.LoadFromTfmScript(self,getinfo());
flist.Columns := array(("text":"ID号","width":150)
,("text":"信息","width":300)
,("text":"创建时间","width":100)
flist.Columns := array(
("text":"ID号","width":150),
("text":"信息","width":300),
("text":"创建时间","width":100)
);
//flogout.top := 140;
flogout.top := 140;
flogout.OnClick := function(o,e)
begin
calldatafunction(cancel_clk,self,e);
@ -1999,56 +1995,15 @@ type tdbgselwnd=class(tdcreateform)
calldatafunction(dbg_clk,self,e);
end
setlist();
onfontchanged := thisfunction(ftchanged);
end
function ftchanged(o,e);
begin
ft := font;
if flist and ft then
begin
flist.ItemHeight := ft.Height+6;
end
end
function panel1_gprefsize(o;e);virtual;
begin
ft := font;
if not ft then return;
fh := ft.Height;
fw := ft.Width;
e.width := 400; //宽度
e.height := fh+10; //高度
end
function flist_gprefsize(o;e);
begin
{**
@explan(说明) 获取最佳的尺寸 %%
@param(o)(tcontrol)控件 %%
@param(e)(tmmeasuresize) 消息对象 %%
**}
e.width := 600; //宽度
e.height := 400; //高度
end
function fusr_gprefsize(o;e);
begin
ft := font;
if not ft then return;
fh := ft.Height;
fw := ft.Width;
e.width := 400; //宽度
e.height := fh+5; //高度
end
function setattachwait(flg); //设置登陆样式
begin
if flg then
begin
//Height := 210;
flist.Visible := false;
panel4.Visible := false;
Height := 210;
end else
begin
//Height := 550;
flist.Visible := true;
panel4.Visible := true;
Height := 550;
end
end
function loaddata(); //导入数据
@ -2133,243 +2088,132 @@ type tdbgselwnd=class(tdcreateform)
begin
return %%
object tserlogersimplewnd1:tserlogersimplewnd
autosize=true
caption="远程调试"
childsizing=<
layout=2
controlsperline=4
horizontalspacing=10
verticalspacing=10
leftrightspacing=10
topbottomspacing=10
>
color=0xFFFFFF
height=636
left=700
minmaxbox=false
onclose=tserlogersimplewnd1_close
top=271
width=452
wsdlgmodalframe=true
wssizebox=false
object fdiag:tfolderchooseadlg
left=501
top=34
height=30
width=30
caption="执行目录"
end
object panel3:tpanel
autosize=true
caption="panel3"
childsizing=<
layout=1
controlsperline=2
horizontalspacing=5
verticalspacing=5
leftrightspacing=5
topbottomspacing=5
>
height=136
left=10
top=10
width=416
wsdlgmodalframe=false
object label1:tlabel
left=5
top=5
width=58
height=22
autosize=true
caption="服务地址"
textalign=al9_centerright
end
object portpal:tpanel
autosize=true
caption="panel1"
childsizing=<
layout=1
controlsperline=3
horizontalspacing=0
verticalspacing=1
leftrightspacing=0
topbottomspacing=1
>
height=22
left=68
top=5
width=343
wsdlgmodalframe=false
object furl:tedit
caption="edit1"
height=20
left=0
tabstop=true
top=1
width=204
end
object label2:tlabel
left=205
top=1
width=30
height=20
autosize=true
caption="端口"
end
object fport:tedit
caption="edit1"
height=20
left=236
tabstop=true
top=1
width=62
end
end
object label3:tlabel
left=5
top=32
width=58
height=20
autosize=true
caption="用户名"
textalign=al9_centerright
end
object fusr:tedit
caption="edit1"
height=20
left=68
ongetpreferredsize=fusr_gprefsize
tabstop=true
top=32
width=343
end
object label4:tlabel
left=5
top=57
width=58
height=20
autosize=true
caption="密码"
textalign=al9_centerright
end
object fpwd:tpassword
caption="password1"
height=20
left=68
ongetpreferredsize=fusr_gprefsize
tabstop=true
top=57
width=343
end
object label5:tlabel
left=5
top=82
width=58
height=21
autosize=true
caption="脚本目录"
textalign=al9_centerright
end
object panel1:tpanel
autosize=true
caption="panel1"
childsizing=<
layout=1
controlsperline=2
horizontalspacing=0
verticalspacing=3
leftrightspacing=1
topbottomspacing=0
>
height=21
left=68
ongetpreferredsize=panel1_gprefsize
top=82
width=343
wsdlgmodalframe=false
object fdir:tedit
caption="edit1"
height=21
left=1
tabstop=true
top=0
width=300
end
object fcbtn:tbtn
caption="..."
height=21
left=304
onclick=getdir
tabstop=true
top=0
width=35
end
end
object label6:tlabel
left=5
top=108
width=58
height=23
autosize=true
caption=""
end
object panel2:tpanel
autosize=true
caption="panel2"
height=23
left=68
top=108
width=343
wsdlgmodalframe=false
object flogout:tbtn
autosize=true
caption="取消"
height=21
left=147
tabstop=true
top=0
width=42
end
object flogin:tbtn
autosize=true
caption="连接"
height=21
left=300
tabstop=true
top=0
width=42
end
end
end
object flist:tlistview
height=400
left=10
ongetpreferredsize=flist_gprefsize
top=156
width=416
end
object panel4:tpanel
autosize=true
caption="panel4"
height=21
left=10
top=566
width=416
wsdlgmodalframe=false
object fdbg:tbtn
align=alright
anchors=[aktop akleft]
autosize=true
caption="调试"
height=21
left=374
tabstop=true
top=0
width=42
end
end
caption="远程调试"
color=0xFFFFFF
top=100
height=550
minmaxbox=false
onclose=tserlogersimplewnd1_close
width=580
wsdlgmodalframe=true
wssizebox=false
object label1:tlabel
left=4
top=3
width=80
height=25
caption="服务器地址"
end
object furl:tedit
height=25
left=88
tabstop=true
top=3
width=204
end
object label2:tlabel
left=296
top=3
width=34
height=25
caption="端口"
end
object fport:tedit
height=25
left=333
tabstop=true
top=3
width=62
end
object label3:tlabel
left=2
top=38
width=80
height=25
caption=" 用户名"
end
object fusr:tedit
height=25
left=88
tabstop=true
top=38
width=300
end
object label4:tlabel
left=2
top=72
width=80
height=25
caption=" 密 码"
end
object label5:tlabel
left=2
top=100
width=80
height=25
caption=" 脚本目录"
end
object fpwd:tpassword
height=25
left=88
tabstop=true
top=72
width=300
end
object fdir:tedit
height=25
left=88
tabstop=true
top=100
width=300
end
object fcbtn:tbtn
caption="..."
height=25
left=390
tabstop=true
top=100
width=22
onclick=getdir
end
object flogout:tbtn
an1chors=[akright akbottom]
caption="取消"
height=23ff
left=375
tabstop=true
top=480
width=74
end
object fdbg:tbtn
an1chors=[akright akbottom]
caption="调试"
height=23
left=470
tabstop=true
top=480
width=74
end
object flogin:tbtn
caption="连接"
height=23
left=470
tabstop=true
top=140
width=74
end
object flist:tlistview
anch1ors=[akTop akright akLeft akBottom]
height=290
left=2
top=180
width=560
end
object fdiag:tfolderchooseadlg
caption="执行目录"
end
end
%%;
end
private
@ -2717,11 +2561,6 @@ type tdbgvalueshowgrid=class(TDrawGrid)
end
end
PopupMenu := mu;
onfontchanged := function()begin
ft := font;
if not ft then return ;
ItemHeight := ft.Height+4;
end
end
function DoDrawSubItem(o,e);override;
begin

View File

@ -41,7 +41,6 @@ type TVclDesigner = class(tvcform)
FStopMenu;
FProjectsManager;
FProjectManager;
FTslParser;//解析器
//***************************
function WrapProjectTo(); //打包当前
begin
@ -117,7 +116,7 @@ type TVclDesigner = class(tvcform)
height := (integer(mx*32/twidth)+1)*32+60+30{+24}+5;
end
function TreeNode2tfmsub(lib,node,itemnames,nd,bshow);//tmf文件字符串
function TreeNode2tfmsub(lib,node,itemnames,nd);//tmf文件字符串
begin
if not(node) then
begin
@ -129,7 +128,7 @@ type TVclDesigner = class(tvcform)
if not tr then return ;
it := tr.RootItem;
node := (it.items)[0];
ifnit := true;
ifnit := true;
end
if not ifarray(itemnames) then itemnames := array();
if not ifarray(lib) then lib := array();
@ -146,7 +145,7 @@ type TVclDesigner = class(tvcform)
begin
tcname := tc.name;
tcclassname := tc.dclassname;
if not(tcclassname and tcname and ifstring(tcname) and ifstring(tcclassname)) then return " ";//raise "错误!"$" "$tcname$" "$tcclassname$"<<<<";
if not(tcclassname and tcname and ifstring(tcname) and ifstring(tcclassname)) then raise "错误!";
oorinh := (tc.isinherited)?"inherited ":"object ";
ihp := "";
if tc.isinherited then
@ -154,9 +153,8 @@ type TVclDesigner = class(tvcform)
if ifstring(tc.inheritedparent) then
begin
ihp := "("+tc.inheritedparent+")";
bshow := true;
end
end else bshow := true;
end
r+= oorinh + tcname +":"+tcclassname+ihp+"\r\n";
itemnames[length(itemnames)] := array(tcname,tcclassname);
cr := tc.GetChangedPublish();
@ -165,18 +163,10 @@ type TVclDesigner = class(tvcform)
if not(v and ifstring(i) and ifstring(v) ) then continue; //严格判断
r+=tab;
r+= i + "=" + v +"\r\n";
bshow := true;
end
for i := 0 to node.ItemCount-1 do
begin
ibshow := false;
rri := TreeNode2tfmsub(lib,(node.items)[i],itemnames,nil,ibshow);
if ibshow then
begin
rr := tablelines( rri,tab);
r += rr;
bshow := true;
end
r += tablelines( TreeNode2tfmsub(lib,(node.items)[i],itemnames),tab);
end
r += "end";
end
@ -479,12 +469,12 @@ type TVclDesigner = class(tvcform)
begin
Foh := o.height;
_send_(WM_USER,123,123,1);
e.skip := true;
return ;
end
SC_MINIMIZE:
begin
//e.skip := true;
e.skip := true;
return ;
end
SC_DEFAULT:
begin
@ -497,8 +487,6 @@ type TVclDesigner = class(tvcform)
end
SC_RESTORE:
begin
Foh := o.height;
_send_(WM_USER,123,123,1);
end
end;
@ -515,7 +503,7 @@ type TVclDesigner = class(tvcform)
begin
if e.wparam = 123 and e.lparam=123 then
begin
if {o.height>Foh}true then
if o.height>Foh then
begin
o.height := Foh; //gtk 逻辑正确但是设置无效
end
@ -525,10 +513,6 @@ type TVclDesigner = class(tvcform)
begin
FProjectManager.ShowCurrentFormCode();//ShowEditor();
end
function opensysfontmgr();
begin
FProjectManager.opensysfontmgr();
end
function opentfm(); //打开资源文件
begin
FProjectManager.ShowCurrenttfm();
@ -590,11 +574,9 @@ type TVclDesigner = class(tvcform)
)),
("type":"menu","caption":"工具","items":(
("type":"menu","caption":"设计器目录","checked":0,"onclick":thisfunction(open_tsl_dir)),
("type":"menu","caption":"控件管理","checked":0,"onclick":thisfunction(mgr_control)),
("type":"menu","caption":"打开图片","checked":0,"onclick":thisfunction(ViewBitmap)),
("type":"menu","caption":"编辑器颜色","checked":0,"onclick":thisfunction(showhltcolor)),
("type":"menu","caption":"字体图标大小","onclick":thisfunction(opensysfontmgr))
("type":"menu","caption":"编辑器颜色","checked":0,"onclick":thisfunction(showhltcolor))
)),
("type":"menu","caption":"帮助","items":(
("type":"menu","caption":"关于","onclick":thisfunction(openabout)),
@ -923,46 +905,8 @@ type TVclDesigner = class(tvcform)
end
end else
begin
inh := FProjectManager.GoToAFunction(dv);
if not ifstring(inh) then return ;
////////////////父类中查找////////////////////////////////////////////
flg := true;
fs := FProjectManager.getall_class_tsf();
while flg and inh do //循环查找父类
begin
fn := 0;
for i,v in fs do //查找父类文件
begin
if v.fname=inh and v.FType<>"tsl" then
begin
fn := v.gettsfname();
break;
end
end
if not fn then break;//没找到文件退出
FTslParser.ScriptPath := fn;
ci := FTslParser.GetClassInfo();
for i,vf in ci["funcs"] do //对比函数名
begin
if dv=vf then
begin
flg := false;
break;
end
end
if flg then //没找到函数,继续找上一级父类
begin
inh := ci["inherited",0] ;
end else //找到函数,提示跳转
begin
if messageboxa("函数:"$dv$"在父类:"$inh$"中,是否打开","打开提示!",1,self)=IDOK then
begin
return FProjectManager.GoToAFunction(dv,v.gettsfname());
end
end
end
//////////////////////////////////////////////////////////////////
FProjectManager.GoToAFunction(dv);
return ;
end
end
end
@ -1019,7 +963,6 @@ type TVclDesigner = class(tvcform)
{**
@explan(说明) 组件被点击 %%
**}
uses utslvclevent;
nd := o._tag;
tr := nd.owner;
if not(tr.visible) then
@ -1028,20 +971,6 @@ type TVclDesigner = class(tvcform)
FProjectManager.setnodesel(wnd);
return ;//
end
///////////////////特殊处理page控件///////////////////////////////////////////
if (o is class(TPageControl)) and (e is class(TMMouse)) then
begin
d := o.hittabat(e.pos);
if ifarray(d) then
begin
pid := d["idx"];
if (pid>=0) then
begin
o.SetPublish("cursel",pid,1);
end
end
end
///////////////////////////////////////////
if fselctlnode<> nd then
begin
//wd := o;//nd.Component.Cwnd;
@ -1110,8 +1039,7 @@ type TVclDesigner = class(tvcform)
@explan(说明) 选择工具按钮 %%
**}
cct := o._tag;
FComponentCreater := cct;
//if FProjectManager then FProjectManager.hiddeneditor();
FComponentCreater := cct;
end
function CloseShowForm(o,e); //主窗口关闭
@ -1499,8 +1427,8 @@ type TVclDesigner = class(tvcform)
{$endif}
compcwnd.Handle;
end
comp.isinherited := d["inherited"];
comp.inheritedparent := d["parent"];
comp.isinherited := d["inherited"];
comp.name := d["name"];
obarray[d["name"]] := comp;
FVariableSelecter.additem(comp);
@ -1570,14 +1498,14 @@ type TVclDesigner = class(tvcform)
function create(AOwner);
begin
inherited;
//ParentFont := false;
//Font := array("width":10,"height":20);
ParentFont := false;
Font := array("width":10,"height":20);
top := 10;
left := 10;
rect := _wapi.GetScreenRect();
twidth := (rect[2]-50);
width := twidth;
height := 190;
height := 180;
//calcheight(twidth);
caption := "TVCL界面设计器";
FProjectsManager := new TProjectManagerForm(self);
@ -1629,36 +1557,19 @@ type TVclDesigner = class(tvcform)
tparent.parent := FObjInspector;
pparent.parent := FObjInspector;
//FTree.parent := tparent;
/////////////////属性筛选////////////////////////////////
fsearch := new tedit(self);
fsearch.placeholder := "筛选";
fsearch.Align := alTop;
fsearch.autosize := true;
fsearch.parent := pparent;
fsearch.OnChange := function(o,e)begin
if FPropGrid then FPropGrid.searchidex := o.text;
if FEventGrid then FEventGrid.searchidex := o.text;
end
////////////////////////////////////////////////
pedits.parent := pparent ;
FProp.parent := pedits;
FEvent.parent := pedits;
FEvent.parent := pedits;
FPropGrid.align := alclient;
FEventGrid.align := alclient;
FPropGrid.parent := FProp;
FEventGrid.parent := FEvent;
onactivate := thisfunction(OnDesignerActivate);
fdimagelist := new TDesigImageList(self);
global editorglobalinfo ;
if ifarray(editorglobalinfo) and editorglobalinfo then
begin
fdimagelist.imgsize := editorglobalinfo["imgsize"];
sz := editorglobalinfo["fontsize"] ;
if sz>5 then FObjInspector.width :=sz*34+20;
end
FEventGrid.parent := FEvent;
Mobjinspect();
onactivate := thisfunction(OnDesignerActivate);
fdimagelist := new TDesigImageList(self);
//FTree.Imagelist := fdimagelist;
fwindowinfos := new tfilesinfo(self,thisfunction(ClickTreeNode),fdimagelist,tparent);
//******************toolbar ***************
@ -1697,6 +1608,9 @@ type TVclDesigner = class(tvcform)
FToolBars := new TDesignertoolbars(self);
FToolBars.Imagelist := fdimagelist;
FToolBars.Font.width := 10;
FToolBars.Font.height := 20;
FToolBars.linkimagelist := FProjectManager.FTslEditer.gettoolbarimglist();
addtoolbuttons();
FToolBars.Align := alClient;
FToolBars.parent := self;
@ -1717,14 +1631,6 @@ type TVclDesigner = class(tvcform)
FProjectManager.FTslEditer.setdbugruncall(thisfunction(debugproject)); //设置调试回调
FProjectManager.newmenu.parent := ffilemenu;//
FProjectManager.goformmenu.parent := fviewmenu;//
FToolBars.onnotification := function(o,e)begin
d := e.msg;
if ifarray(d) and d["imgsize"]>0 then
begin
fdimagelist.imgsize := d["imgsize"];
end
end ;
FTslParser := new unit(utslvclsyntaxparser).ttslscripparser();
//OnChange
//fnewmenu
end
@ -1734,10 +1640,6 @@ type TVclDesigner = class(tvcform)
begin
FProjectManager.showhltcolor();
end
function open_tsl_dir();
begin
_Wapi.openresourcemanager(sysexecname());
end
function mgr_control();
begin
if not fmgr_ctl then
@ -2067,41 +1969,42 @@ type TPropEditGrid = class(TPropGrid) //
function SetComponent(v);override;
begin
if v=FComponent then exit;
ocls := Columns;
if v is class(TDComponent) then
begin
TSLData := getneedpublished(v);//
TSLData := v.GetPublishProperties();
end else
begin
TSLData := array();//array(NIL);
end
inherited;
if ocls then
begin
w := ocls[1,"width"];
if w>0 then
begin
i := 1;
self.ColumnWidth(1) := w;
end
end
end
public
function Create(AOwner);
begin
inherited;
FobjProptype := p_properys;
end
function getneedpublished(v);virtual;
begin
return v.GetPublishProperties();
end
end
end
type TEventEditGrid = class(TPropEditGrid) //事件编辑器
type TEventEditGrid = class(TPropGrid) //事件编辑器
{**
@explan(说明) 事件编辑 %%
**}
protected
function SetComponent(v);override;
begin
if v=FComponent then exit;
if v is class(TDComponent) then
begin
TSLData := v.GetPublishEvents();
//echo tostn(TSLData);
end else
begin
TSLData := array(NIL);
end
inherited;
end
public
function Create(AOwner);
begin
@ -2109,10 +2012,6 @@ type TEventEditGrid = class(TPropEditGrid) //
FobjProptype := p_evnets;
OndblClick := thisfunction(GridCellDblClick);
end
function getneedpublished(v);override;
begin
return v.GetPublishEvents();
end
function GridCellDblClick(o,e);override;//双击处理
begin
i := e.iitem;
@ -2197,10 +2096,19 @@ type TDesignertoolbars = class(TPageControl) //
[weakref]ftoolbars;
FLabels ;
[weakref]fimg;
[weakref]flinkimagelist;
function SetImageList(im);
begin
fimg := im;
end
function SetlinkeImageList(img);
begin
flinkimagelist := img;
if flinkimagelist then
begin
flinkimagelist.onchange := thisfunction(changedimg);
end
end
public
function changedimg(o,e);
begin
@ -2212,7 +2120,7 @@ type TDesignertoolbars = class(TPageControl) //
FToolsheets := array();
ftoolbars := array();
inherited;
//ParentFont := false;
ParentFont := false;
align := alClient;
@ -2268,6 +2176,7 @@ type TDesignertoolbars = class(TPageControl) //
end
end
property ImageList write SetImageList;
property linkimagelist write SetlinkeImageList;
private
[weakref]ftbs;

View File

@ -55,7 +55,7 @@ type TGridPropertyRender = class(TGCellRender) //
inherited;
Owner := AOwner;
end
[weakref]Owner ;
Owner ;
end
type TGridCellEditWithButton = class(TGridPropertyRender) //带按钮的单元格编辑
{**
@ -387,6 +387,7 @@ type TListVariable = class(TGridList)
SetColumnWidth(0,Width-11);
end
end
function create(AOwner);override;
begin
inherited;
@ -396,11 +397,6 @@ type TListVariable = class(TGridList)
Columns := array(
("text":"variable","width":180)
);
OnFontChanged := function()begin
ft := font;
if not ft then return ;
ItemHeight := ft.height+6;
end
end
function SetSelectedByValue(v_);override;
begin
@ -462,7 +458,7 @@ type TListStr = class(TListVariable)
function create(AOwner);override;
begin
inherited;
Columns := array(("text":"±à¼­Æ÷","width":160));
Columns := array(("text":"´ò¿ª±à¼­Æ÷","width":160));
end
function additem(v);override;
begin
@ -859,12 +855,6 @@ type TPropGrid = class(TTSLDataGrid)
OnMouseWheel := function(o,e)begin
currentLeave();
end
onfontchanged := function(o,e)begin
ft := font;
if not ft then return ;
fh := ft.height;
itemheight := fh+6;
end
end
function Recycling();override;
begin
@ -917,7 +907,7 @@ type TTSLDataGrid=class(TDrawGrid)
@explan(说明)TSL数组和对象展示 %%
**}
private
fsearchidex;
FCols;
Fdata;
FObjectData;
@ -926,7 +916,7 @@ type TTSLDataGrid=class(TDrawGrid)
FRows;
FShowTwo;
FCControls;
FdfColumnWidth;
FColumnWidth;
FRowHeader;
static FGCellRender;
FCanEditStr;
@ -996,14 +986,6 @@ type TTSLDataGrid=class(TDrawGrid)
return FGCellRender[n];
end
private
function setsearchidex(s);
begin
if fsearchidex<>s and ifstring(s) then
begin
fsearchidex := s;
InvalidateRect(nil,false);
end
end
function SetRowHeader(v);
begin
nv := v?true:false;
@ -1050,24 +1032,23 @@ type TTSLDataGrid=class(TDrawGrid)
if ifstring(v)then
begin
wd := max(wd,length(v) * ftwidth+3);
if wd>500 then break;
if wd>200 then break;
end
end
if RowHeader then
begin
fcs[0]:= array("text":" ","width":min(500,wd));
fcs[0]:= array("text":" ","width":min(200,wd));
end
cw := 15* ftwidth;
if FCL and allFCL and FShowTwo then
begin
FCols := FCl;
for i,v in FCols do
begin
fcs[length(fcs)]:= array("text":ifstring(v)?v:inttostr(v),"width":cw);
fcs[length(fcs)]:= array("text":ifstring(v)?v:inttostr(v),"width":FMRWD);
end
end else
begin
fcs[length(fcs)]:= array("text":" ","width":fdfColumnWidth>20?fdfColumnWidth:cw);
fcs[length(fcs)]:= array("text":" ","width":ColumnWidth>20?ColumnWidth:100);
end
Columns := fcs;
ItemCount := length(FRows);
@ -1159,7 +1140,6 @@ type TTSLDataGrid=class(TDrawGrid)
end
end
public
property searchidex read fsearchidex write setsearchidex;
function create(AOwner);override;
begin
inherited;
@ -1176,7 +1156,7 @@ type TTSLDataGrid=class(TDrawGrid)
FStringAlign := AL9_CENTERLEFT;
FDefAlign := AL9_CENTER;
end
function InitializeWnd();override;
begin
inherited;
@ -1256,10 +1236,6 @@ type TTSLDataGrid=class(TDrawGrid)
begin
ds := d;
//dc.drawtext(ds,src);
if j=0 and fsearchidex and pos(lowercase(fsearchidex),lowercase(d)) then
begin
dc.font.color := 0xff;
end
class(TLabel).CanvasDrawAlignText(dc,src,ds,FStringAlign);
end else
if ifobj(d)then
@ -1285,8 +1261,12 @@ type TTSLDataGrid=class(TDrawGrid)
begin
dc := e.canvas;
rc := e.rcitem;
c := color;
if c then dc.brush.color := c; //
{if SelectedRow = e.id then
if ifnumber(SelectRowColor) then dc.brush.color := SelectRowColor;
else
dc.brush.color := rgb(150,150,150);
else }
if color then dc.brush.color := color; //
else dc.brush.color := rgb(255,255,255);
dc.fillrect(rc);
inherited;
@ -1329,8 +1309,9 @@ type TTSLDataGrid=class(TDrawGrid)
begin
if d["type"]="object" then
begin
rd := GetCellRender(d["class"]);
if rd then return rd.CelldbClick(o,e,d); ///////////
rd := GetCellRender(d["class"]);
if r then return r.CelldbClick(o,e,d);
end
getitemcontrol(d,p,e.iitem,cl,"grid",cp,indexs);
end else
@ -1375,6 +1356,24 @@ type TTSLDataGrid=class(TDrawGrid)
end
end
return r;
idx := "FData";
for i,v in index do
begin
if ifnumber(v)then idx += format("[%d]",v);
else if ifstring(v)then
begin
idx += format('["%s"]',v);
end
end
if length(idx)>5 then
begin
vals := idx+":="+tostn(val)+";"; //FData["c"]["value"]:=0;
try
eval(&vals);
except
//echo "===errr";
end;
end
end
function ControlIndexs(dx);
begin
@ -1455,7 +1454,7 @@ type TTSLDataGrid=class(TDrawGrid)
end
property Twodimensional:bool read FShowTwo write SetTwoD;
property TSLdata:variable read GetTSLData write SetData;
property dfColumnWidth:integer read FdfColumnWidth write FdfColumnWidth;
property ColumnWidth:integer read FColumnWidth write FColumnWidth;
property RowHeader:bool read FRowHeader write SetRowHeader;
property CanEditStr:bool read FCanEditStr write FCanEditStr;
property StringAlign:AlignStyle9 read FStringAlign write SetStringAlign;
@ -3046,7 +3045,6 @@ private
public
function create(aOwner);override;begin
inherited;
ParentFont := false;
caption:="TreeViewEditor";
left:=300;
top:=300;
@ -3252,15 +3250,13 @@ type TMultiSelList = class(TCustomControl)
function Create(AOwner);
begin
inherited;
FBtnWidth := 80;
border := true;
FList := new TListBox(self);
FList.checkbox := true;
FList.Multisel := 2;
//FList.Appenditems(array("a","b","c"));
FList.setCurrentSelection(array(0,1));
FList.parent := self;
FOkBtn := new TBTN(self);
FOkBtn := new TBTN(self);
FBtnWidth := 80;
FOkBtn.width := FBtnWidth;
FOkBtn.caption := "确定";
FOkBtn.parent := self;
@ -3270,20 +3266,7 @@ type TMultiSelList = class(TCustomControl)
FCanceBtn.parent := self;
FCanceBtn.onclick := thisfunction(CancelClick);
FOkBtn.onclick := thisfunction(okClick);
OnFontChanged := thisfunction(DoControlAlign);
end
{function FontChanged(o);override;
begin
ft := font;
if not ft then return ;
inherited;
FBtnWidth := 5*ft.width;
FOkBtn.height := ft.height+5;
Fokbtn.width := FBtnWidth;
FCanceBtn.height := ft.height+5;
FCanceBtn.width := FCanceBtn;
end }
function GetSelectdata();
begin
idx := FList.getSelectedIndexes();
@ -3330,24 +3313,18 @@ type TMultiSelList = class(TCustomControl)
end
function DoControlAlign();override;
begin
ft := font;
if ft and FList and FOkBtn AND FCanceBtn then
if FList and FOkBtn AND FCanceBtn then
begin
r := ClientRect;
h :=ft.height+4;
w :=ft.width*5;
h := FOkBtn.height;
c := r;
c[3]-=h+4;
FList.SetBoundsRect(c);
bt := r[3]-h-1;
FOkBtn.height := h;
FOkBtn.width := w;
FOkBtn.Top := bt;
FOkBtn.Left := r[2]-w-5;
FOkBtn.Left := r[2]-FBtnWidth-5;
FCanceBtn.top := bt;
FCanceBtn.height := h;
FCanceBtn.width := w;
FCanceBtn.Left := r[2]-w*2-10;
FCanceBtn.Left := r[2]-FBtnWidth-FBtnWidth-10;
end
end
function CancelClick(o,e);

View File

@ -958,12 +958,6 @@ type tsltoken = class(tslparserbase) //
vf := 1;
setdata(FTokens,nk,v,"»Ø³µ",pos,hh);
end else
if v="." and (pos< len-2) and str[pos+1]="." and str[pos+2]="." then
begin
if length(vs)then setdata(FTokens,nk,vs,"Óï¾ä",pos,hh);
setdata(FTokens,nk,"...","Óï¾ä",pos,3);
pos+=2;
end else
if v in array(",",";",".","]","[",":","=","!")then
begin
if length(vs)then setdata(FTokens,nk,vs,"Óï¾ä",pos,hh);

Binary file not shown.

View File

@ -248,7 +248,7 @@ private
if op=opRemove or op=opInsert then return 0;
if fonnotification then
begin
e := new unit(utslvclevent).tmnotif(op);
e := new tuieventbase(op,0,0,0);
e.sender := a;
CallMessgeFunction(fonnotification,self(true),e);
return e.skip;
@ -258,7 +258,7 @@ private
begin
if foninqurequit then
begin
e := new unit(utslvclevent).tminqurequit();//tuieventbase(0,0,0,0);
e := new tuieventbase(0,0,0,0);
CallMessgeFunction(foninqurequit,self(true),e);
return e.skip;
end
@ -335,6 +335,12 @@ public //
FEventsProperties := array();
FVariableProperties := array();
FComponentCreated := true;
return;
If AOwner is class(tcomponent)then
begin
FOwner := AOwner;
AOwner.InsertComponent(Self);
end
end
function set_loadstate(v); //设置loading状态
begin
@ -513,6 +519,30 @@ public //
FChangedinheritedProperties;
FChangedProperties;
FVariableProperties;
{function GetPublishInfo();//属性获取
begin
r := publishs();
rr := array();
ri := 0;
for i,v in r do
begin
if ifstring(v) then rr[ri++] := lowercase(v);
end
return rr;
end }
{function OrderPublish(r,od); //排序发布的东西
begin
if od then
begin
r1 := array();
for i,v in od do
begin
vi := r[v];
if vi then r1[v]:= vi;
end
r := r1;
end
end}
public //设计器属性设置相关
function GetPublishproperties();virtual; //获得属性信息
begin
@ -521,6 +551,7 @@ public //
**}
ps := GetPropInfo();
r := array();
//pps := GetPublishInfo();
for i,v in ps do
begin
typ := v["type"];
@ -530,6 +561,7 @@ public //
if otype then
begin
n := v["name"];
//if pps and not(n in pps)then continue;
if typ in array("variable","popupmenu","syscursor","tmainmenu")then
begin
r[n]:= otype.FormatEdit(FVariableProperties[n],v["write"]?true:false);
@ -644,6 +676,7 @@ public //
if ifobj(otype)then
begin
iv := otype.UnformatEdit(v); //反转换
//if FChangedProperties[n]=vi then continue; //没有改变
if FChangedProperties[n]=iv then continue; //没有改变
SetChangedPublish(n,iv,pp); //保存
if n="visible" or n="wspopup" or n="enabled" then
@ -691,6 +724,7 @@ public //
@param(ComponentStyle)() 样式结合 %%
@param(ComponentCreated)(bool) 样式结合 %%
**}
//property DesignInfo read FDesignInfo write FDesignInfo;
property ComponentCreated read FComponentCreated;
property Components read FComponents;
property ComponentState read FComponentState write SetComponentState;

View File

@ -441,66 +441,42 @@ type tcontrol = class(tcomponent)
{**
@explan(说明)根据消息参数构造消息对象;
**}
case message of
WM_CLOSE :
begin
r := new tmclose(message,wparam,lparam,hwnd);
end
WM_MOUSEMOVE :
begin
r := new tmm_move(message,wparam,lparam,hwnd);
end
WM_CONTEXTMENU :
begin
r := new tmcontextpop(message,wparam,lparam,hwnd);
end
WM_LBUTTONDOWN,
if message in array(WM_MOUSEMOVE,WM_LBUTTONDOWN,
WM_RBUTTONDOWN,WM_LBUTTONUP,
WM_RBUTTONUP,WM_LBUTTONDBLCLK,
WM_RBUTTONDBLCLK,WM_MBUTTONDOWN,WM_MBUTTONUP,WM_MBUTTONDBLCLK :
begin
r := new TMMouse(message,wparam,lparam,hwnd);
end
WM_MENUSELECT :
begin
r := new TMMENUSELECT(message,wparam,lparam,hwnd);
end
WM_MEASUREITEM :
begin
r := new TMMEASUREITEM(message,wparam,lparam,hwnd);
end
WM_ACTIVATE :
begin
r := new tmactivate(message,wparam,lparam,hwnd);
end
WM_KEYDOWN,WM_KEYUP,
WM_SYSCHAR,WM_SYSKEYDOWN,WM_SYSKEYUP :
begin
r := new TMKEY(message,wparam,lparam,hwnd);
end
WM_CHAR:
begin
r := new tmk_press(message,wparam,lparam,hwnd);
end
WM_DRAWITEM :
begin
r := new TMDRAWITEM(message,wparam,lparam,hwnd);
end
WM_NOTIFY :
begin
r := new TMNOTIFY(message,wparam,lparam,hwnd);
end
WM_MOUSEWHEEL :
begin
r := new TMMOUSEWHEEL(message,wparam,lparam,hwnd);
end
WM_STYLECHANGED ,WM_STYLECHANGING :
begin
r := new TMSTYLECHANG(message,wparam,lparam,hwnd);
end
else
r := new tuieventbase(message,wparam,lparam,hwnd);
end ;
WM_RBUTTONDBLCLK,WM_MBUTTONDOWN,WM_MBUTTONUP,WM_MBUTTONDBLCLK)then
begin
r := new TMMouse(message,wparam,lparam,hwnd);
end else
if message=WM_MENUSELECT then
begin
r := new TMMENUSELECT(message,wparam,lparam,hwnd);
end else
if message=WM_MEASUREITEM then
begin
r := new TMMEASUREITEM(message,wparam,lparam,hwnd);
end else
if message in array(WM_KEYDOWN,WM_KEYUP,WM_CHAR,WM_SYSCHAR,WM_SYSKEYDOWN,WM_SYSKEYUP)THEN
begin
r := new TMKEY(message,wparam,lparam,hwnd);
end else
if message=WM_DRAWITEM then
begin
r := new TMDRAWITEM(message,wparam,lparam,hwnd);
end else
if message=WM_NOTIFY then
begin
r := new TMNOTIFY(message,wparam,lparam,hwnd);
end else
if message=WM_MOUSEWHEEL then
begin
r := new TMMOUSEWHEEL(message,wparam,lparam,hwnd);
end else
if message=WM_STYLECHANGED or message=WM_STYLECHANGING then
begin
r := new TMSTYLECHANG(message,wparam,lparam,hwnd);
end else
r := new tuieventbase(message,wparam,lparam,hwnd);
return r;
//return new tuieventbase(message,wparam,lparam,hwnd);
end
@ -1038,7 +1014,7 @@ type tcontrol = class(tcomponent)
function WMMove(o,e):LM_MOVE;virtual;
begin
if not NoRecycled() then return ;
CallMessgeFunction(fOnMove,o,e);
CallMessgeFunction(OnMove,o,e);
if (o is class(TWinControl)) and o.WsPopUp then return ;
if (Align=alNone) then
begin
@ -1053,7 +1029,7 @@ type tcontrol = class(tcomponent)
function WMSize(o,e):LM_SIZE;virtual;
begin
if not NoRecycled() then return ;
CallMessgeFunction(fOnSize,o,e);
CallMessgeFunction(OnSize,o,e);
DoWMSIZE(o,e);
p := Parent ;
if p and p.childsizing.layout>0 then return p.AdjustSize();
@ -1548,7 +1524,7 @@ type tcontrol = class(tcomponent)
info := fonGetPreferredSize.functioninfo();
fn := info["functionname"];
if ifstring(info["classname"]) then fn := info["classname"] $ "." $ fn;
fn := "onGetPreferredSize call: "$fn $" err!" $ exceptobject.errinfo;
fn := "onGetPreferredSize call: "$fn $" err!";
except
fn := "onGetPreferredSize is not function";
end ;
@ -1604,7 +1580,7 @@ type tcontrol = class(tcomponent)
@param(Cursor)(tcursor 通过 member of TSystemCursor 设置) 系统鼠标 %%
**}
property Font:font read GetControlFont write SetControlFont;//write SetFont;
property OnMouseWheel:eventhandler read FOnMouseWheel write FOnMouseWheel;
property OnMouseWheel read FOnMouseWheel write FOnMouseWheel;
{**
@param(Caption)(string) 控件标题 %%
@param(Enabled)(bool) 控件是否有效 %%

View File

@ -18,7 +18,6 @@ type tcustomcontrol=class(TWinControl)
cvs.rcpaint := PAINTSTRUCT().rcpaint();
try
Paint();
inherited;
finally
cvs.Handle := 0;
end;

View File

@ -74,7 +74,6 @@ type tgraphiccontrol = class(TControl)
p := Parent;
if(p is class(TWinControl))and p.HandleAllocated()then
begin
if p.autosize and (p.childsizing.layout<>0) then return p.AdjustSize();
if Align <> alNone then return p.DoControlAlign();
end
//////////////////
@ -183,7 +182,6 @@ type tgraphiccontrol = class(TControl)
inherited;
if NewParent is class(TWinControl)then
begin
if NewParent.autosize or (NewParent.childsizing.layout<>0) then NewParent.AdjustSize();
InvalidateRect();
end
end

View File

@ -33,10 +33,10 @@ function ExitMessageLoop(); //
function NotifyComponent(Sender,Act,ToComponent); //notfiy
//////////////////////操作/////////////////////
Function tslcstructure(data,dsize,pack,ptr);
//function CompareRect(orect,nrect);
function calldatafunction();
function CallMessgeFunction(f,o,e);
function CallMessageFunction(f,o,e); //执行消息回调
//////////////////////执行tsl脚本代码////////////////////
//function TSL_Check(func,funclen,oResult);
function CheckTslCode(code,err); //检查tsl语法
@ -1276,7 +1276,6 @@ type TpanelForm=class(tpanel) //
protected
function SetWsPopUp(v);override;
begin
if self(true).classinfo()["classname"]<>"tdcreatepanel" then return inherited;
if csDesigning in ComponentState then
begin
end else
@ -1286,7 +1285,6 @@ type TpanelForm=class(tpanel) //
end
function GetWsPopUp();override;
begin
if self(true).classinfo()["classname"]<>"tdcreatepanel" then return inherited;
if csDesigning in ComponentState then
begin
return true;
@ -1319,7 +1317,7 @@ type TpanelForm=class(tpanel) //
end
function SetDesigning(f,fc);override;
begin
if f and (self(true).classinfo()["classname"]="tdcreatepanel") then wspopup := true;
if f then wspopup := true;
inherited;
end
end
@ -1491,13 +1489,8 @@ type tmemo = class(TSynMemoNorm) //
function DoTextChanged(p);override;//文本改变
begin
inherited;
CallMessgeFunction(Fonchange,self(true));
end
function GetPreferredSize(w,h);override;
begin
if onGetPreferredSize then return inherited;
w := Width;
h := Height;
if Fonchange then
calldatafunction(Fonchange,self(true),new tuieventbase(0,0,0,0));
end
function MouseUp(o,e);override;
begin
@ -1601,17 +1594,11 @@ type twrapmemo = class(TScrollingWinControl)
end
end
end
function GetPreferredSize(w,h);override;
begin
if onGetPreferredSize then return inherited;
w := Width;
h := Height;
end
function FontChanged(o);override;
begin
if HandleAllocated() then doControlALign();
end
protected
protected
function GetXScrollDelta();override; //x间隔
begin
return FCharwidth;
@ -3592,7 +3579,8 @@ type TListView = class(TDrawGrid)
end
function CallSelChanged();
begin
CallMessgeFunction(FSelectedChanged,self(true));
if OnSelChanged then
return calldatafunction(OnSelChanged,self(true),new tuieventbase(0,0,0,0));
end
function SetCanSelected(v);
begin
@ -5203,7 +5191,7 @@ type TQuotations=class(tcomponent)
**}
if not ifarray(d)then exit;
FData := d;
CallMessgeFunction(FOncallBack,self(true));
calldatafunction(FOncallBack,self(true));
end
public
function create(AOwner);override;
@ -5796,11 +5784,7 @@ type Ttfm2Component = class(TTmfParser)
end
function hastfmresource(o,cn);
begin
////////////根据新特性处理/////////
ci := o.classinfo();
data := ci["tfm"];
///////////////////////////////////////
if not data then data := get_resource_by_name(cn+".tfm");
data := get_resource_by_name(cn+".tfm");
if data then
begin
LoadFromTfmScript(o,data);
@ -5860,22 +5844,20 @@ type Ttfm2Component = class(TTmfParser)
function GetReSourcetfmdir(p,rp);
begin
if not ifarray(rp) then rp := array();
rp[length(rp)] := p;
iofp := ioFileseparator();
for ii,vv in filelist("",p+"*") do
begin
fn := vv["FileName"];
if fn="." or fn=".." then continue;
if Pos("D",vv["Attr"]) then
begin
GetReSourcetfmdir(p+fn+iofp,rp);
{if lowercase(fn)="resource.tfm" then
begin
if lowercase(fn)="resource.tfm" then
begin
rp[length(rp)] := p+"resource.tfm"+iofp;
end else
begin
GetReSourcetfmdir(p+fn+iofp,rp);
end }
end
end
end
end
@ -6530,10 +6512,6 @@ function GetTextWidthAndHeightWidthFont(s,f,mul);//
begin
return unit(utslvclgdi).GetTextWidthAndHeightWidthFont(s,f,mul);
end
function CallMessageFunction(f,o,e); //执行消息回调
begin
return unit(utslvclauxiliary).CallMessgeFunction(f,o,e);
end
function CallMessgeFunction(f,o,e); //执行消息回调
begin
return unit(utslvclauxiliary).CallMessgeFunction(f,o,e);

View File

@ -64,11 +64,6 @@ type tuieventbase=class(TSLUICONST)
Lparam := l;
Hwnd := h;
end
function expandinfo();virtual; //作为函数参数展开
begin
//返回二维数组,字段 name ,var,alias,type
return array();
end
function hilparam();
begin
{**

View File

@ -62,7 +62,6 @@ type TWinControl = class(tcontrol)
FWsDlgModalFrame;
private //模态相关
//*******showmodal******************
fmodalcenter;//模态居中
FModaling;
FModalCode;
FMinWidth;
@ -130,7 +129,6 @@ type TWinControl = class(tcontrol)
FMSG := new TTagMSG();
msg := FMSG._getptr_;
//显示自己
center_self();
_wapi.ShowWindow(hWnd,SW_SHOW);
_wapi.BringWindowToTop(hWnd);
//disable掉父窗口
@ -592,14 +590,9 @@ type TWinControl = class(tcontrol)
if v=SW_SHOWNOACTIVATE then return ;
}
_wapi.ShowWindow(FHandle,v?SW_SHOW:SW_HIDE);
p := parent;
if(p is class(TWinControl))and p.HandleAllocated()then
if(Parent is class(TWinControl))and parent.HandleAllocated()then
begin
if (p.autosize or (p.childsizing.layout<>0) ) then
begin
p.AdjustSize();
end else
if Align <> alNone then p.DoControlAlign();
if Align <> alNone then Parent.DoControlAlign();
end
{if V then
begin
@ -920,7 +913,7 @@ type TWinControl = class(tcontrol)
function WMACTIVATE(o,e):WM_ACTIVATE;virtual;
begin
factivated := e.wparam;
CallMessgeFunction(fOnActivate,o,e);
CallMessgeFunction(OnActivate,o,e);
if e.skip then return ;
defaulthandler(e);
if factivated and ContainsControl(factivecontrol) then
@ -1559,27 +1552,6 @@ type TWinControl = class(tcontrol)
end
procedure PaintWindow(DC:HDC);virtual;
begin
///////////////////设计器中选中绘制/////////////////////////////////////////////
if (csDesigning in ComponentState) and FDesignSelect then //选中
begin
c := getwndclientrect();
x := (c[0]+c[2])/2;
y := (c[1]+c[3])/2;
ps := array(
(x,c[1]),
(c[0],y),
(c[2],y),
(x,c[3])
);
cvs := Canvas;
cvs.Brush.color := sys_complementar_color(Color);
sz := 4;
for i,v in ps do
begin
cvs.draw_rect().rect(array(v[0]-sz,v[1]-sz,v[0]+sz,v[1]+sz)).draw();
end
end
////////////////////////////////////////////////////
end
function SetTempCursor(Value);override;
begin
@ -1815,7 +1787,6 @@ type TWinControl = class(tcontrol)
hParentWnd := hParentWndt;
end
end
Visible := false; //20250508 添加处理关闭按钮
return EndModalCode;
end
function UpdateWindow();
@ -1969,7 +1940,6 @@ type TWinControl = class(tcontrol)
end
function create(aowner);override; //type_twinctrol
begin
fmodalcenter := true;
inherited;
fchildsizing := new t_children_sizer(self(true));
//fbordercolor := rgb(190,190,190);
@ -2097,20 +2067,17 @@ type TWinControl = class(tcontrol)
dy := 20;
x := 0;
y := 0;
c := sys_complementar_color(color);
bbc := cv.brush.color;
cv.brush.color := c;
c := 0;
while y<rc[3] do
begin
y+=dx;
x := 0;
while x<rc[2] do
begin
x+=dx;
cv.FillRect(array(x-1,y-1,x+1,y+1));
x+=dx;
cv.SetPixel(array(x,y),c);
end
end
cv.brush.color := bbc;
ctls := controls;
rcs := array();
sel := -1;
@ -2139,7 +2106,7 @@ type TWinControl = class(tcontrol)
pct := cv.pen.style;
pcw := cv.pen.width;
cv.pen.Style := PS_DOT;
cv.pen.color := c;//0x3f3f3f;
cv.pen.color := 0x3f3f3f;
for i := 0 to len do
begin
if i=sel then continue;
@ -2321,14 +2288,6 @@ type TWinControl = class(tcontrol)
end
end
private //绘制相关成员
function sys_complementar_color(c);
begin
if (c .& 0xff000000) then
begin
return complementary_color( _wapi.GetSysColor(c .& 0x00ffffff));
end
return complementary_color(c);
end
FPaintRects;
FUpDateCount;
public
@ -2588,7 +2547,7 @@ type TWinControl = class(tcontrol)
_Send_(WM_NCLBUTTONDOWN,HTCAPTION,0,0);
e.skip := true;
end
CallMessgeFunction(FOnDesinedsel,self(true),e);
CallMessgeFunction(OnDesignClick,self(true),e);
//保留原有的点击消息
{if DesigningClick() then
begin
@ -2597,11 +2556,11 @@ type TWinControl = class(tcontrol)
end else
if msg = WM_LBUTTONDBLCLK then
begin
CallMessgeFunction(FOnDesigDBLClick,self(true),e);
CallMessgeFunction(OnDesignDBLClick,self(true),e);
end else
if msg = WM_RBUTTONDOWN then
begin
CallMessgeFunction(FOnDesinedRclick,self(true),e);
CallMessgeFunction(OnDesignRClick,self(true),e);
end else
if msg = WM_USER then
begin
@ -2937,11 +2896,11 @@ type TWinControl = class(tcontrol)
property OnActivate:eventhandler read FOnActivate write FOnActivate;
property OnClose:eventhandler read FOnClose write FOnClose;
property OnKeyDown:eventhandler read FOnKeyDown write FOnKeyDown;
property OnsysKeyDown read FOnsysKeyDown write FOnsysKeyDown;
property OnsysKeyDown:eventhandler read FOnsysKeyDown write FOnsysKeyDown;
property OnKeyUp:eventhandler read FOnKeyUp write FOnKeyUp;
property OnsysKeyUp read FOnsysKeyUp write FOnsysKeyUp;
property OnsysKeyUp:eventhandler read FOnsysKeyUp write FOnsysKeyUp;
property OnKeyPress:eventhandler read FOnKeyPress write FOnKeyPress;
property OnSysKeyPress read FOnSysKeyPress write FOnSysKeyPress;
property OnSysKeyPress:eventhandler read FOnSysKeyPress write FOnSysKeyPress;
property OnDesignClick read FOnDesinedsel write FOnDesinedsel;
property OnDesignDBLClick read FOnDesigDBLClick write FOnDesigDBLClick;
property OnDesignRClick read FOnDesinedRclick write FOnDesinedRclick;
@ -2958,34 +2917,7 @@ type TWinControl = class(tcontrol)
property ActiveControl read getactivecontrol write setactivecontrol;
property Active read factivated;//是否获活动窗口
property childsizing:tchildsizing read fchildsizing write setchildsizing;
property modalcenter read fmodalcenter write fmodalcenter; //模态时候居中
private //模态相关
function center_self();
begin
////////////////////窗口居中处理/////////////////////////////////
////////////////////wnd待居中的窗口/////////////////////////////////
////////////////////pwnd父窗口/////////////////////////////////
if not fmodalcenter then return ;
wnd := self(true);
pd := wnd.parent;
if pd and pd.Visible then
begin
while not(pd.wspopup) do
begin
npd := pd.parent;
if npd then pd := npd;
else break;
end
r := pd.ClientRect;
xy := pd.clienttoscreen(r[0],r[1]);
end else
begin
xy := array(0,0);
r := wnd._wapi.GetScreenRect();
end
wnd.Left := max(0,xy[0]+(r[2]-r[0]-wnd.width)/2) ;
wnd.top := max(0,xy[1]+(r[3]-r[1]-wnd.Height)/2);
end
property Modaling read FModaling;
{**
@param(BorderStyle)(bsNone|bsSingle) 边框样式 %%
@ -2995,7 +2927,7 @@ type TWinControl = class(tcontrol)
@param(OnClose)(function[TWincontrol,tuieventbase]) 窗口关闭消息回调 %%
@param(OnKeyDown)(function[TWincontrol,TMKEY]) 按键按下回调 %%
@param(OnKeyUp)(function[TWincontrol,TMKEY]) 按键松开 %%
@param(OnKeyPress)(function[TWincontrol,tmk_press]) 字符消息 %%
@param(OnKeyPress)(function[TWincontrol,TMKEY]) ×Ö·ûÏûÏ¢ %%
**}
private //ShortCut
function dispatchshortcut(c,st); //快捷键分发

View File

@ -1062,16 +1062,6 @@ type tsgtkapi = class(tgtkapis)
end
Function DrawTextExA(hdc :pointer;txt:string;len:integer;rec:array of integer;fmt:integer;lpdtp:pointer):integer;
begin
//DT_LEFT := 0;
DT_RIGHT := 0x2;
//DT_TOP := 0;
DT_BOTTOM:= 0x8;
DT_CENTER := 0x1;
DT_VCENTER:= 0x4;
DT_SINGLELINE:= 0x20;
//DT_TABSTOP:= 0x80;
fmt := (fmt>0 or fmt<0)?fmt:0;
dfs := (fmt .& DT_SINGLELINE) = DT_SINGLELINE;
slen := length( txt);
if slen<1 then return ;
ft := gtk_object_get_data(hdc,"font");
@ -1092,19 +1082,23 @@ type tsgtkapi = class(tgtkapis)
if vi="\r" then continue;
if vi="\n" then
begin
if not dfs then
begin
rs++;
mxl := max(mxl,rl);
rl := 0;
end
rs++;
mxl := max(mxl,rl);
rl := 0;
continue;
end
rl++;
end
if dfs then slen := rl;
ht := ht*rs;
mxl := max(mxl,rl);
mxl := max(mxl,rl);
//DT_LEFT := 0;
DT_RIGHT := 0x2;
//DT_TOP := 0;
DT_BOTTOM:= 0x8;
DT_CENTER := 0x1;
DT_VCENTER:= 0x4;
//DT_SINGLELINE:= 0x20;
//DT_TABSTOP:= 0x80;
rw := rec[2]-rec[0];
nlen := min(len, min(integer(rw/wd),mxl));
sx := rec[0];
@ -1146,11 +1140,7 @@ type tsgtkapi = class(tgtkapis)
y := 0;//gtk_object_get_data(hdc,"viewport.y");
reci := array(rec[0]+x,rec[1]+y,rec[2]+x,rec[3]+y);
cairo_clip_rec(hdc,reci);
if dfs then
begin
r := TextOutexA(hdc,sx,sy-dht,replacetext(replacetext(txt,"\r",""),"\n",""),slen);
end else
r := TextOutexA(hdc,sx,sy-dht,txt,slen);
r := TextOutexA(hdc,sx,sy-dht,txt,slen);
cairo_restore(hdc);
return r;
end

View File

@ -456,9 +456,7 @@ type TCustomMemoCmd=class() //
static const ecPrevBlock=0x2BE;static const ecNextJumpOut=0x2BF;static const ecPrevJumpOut=0x2C0;
static const ecUserFirst=0x3E9;static const ecFind=0x3EA;static const ecReplace=0x3EB;
static const ecSearchAgain=0x3EC;static const ecFindAll=0x3ED;static const ecString=0x3EE;
static const ecSearchUpAgain=0x3EF;
//////////////////////选择模式/////////////////////////////////
static const smNormal = 0;static const smLine = 1;static const smColumn = 2;
static const ecSearchUpAgain=0x3EF;
end
type TCustomMemo = class(TCustomScrollControl,TCustomMemoCmd) //编辑器基类
@ -520,7 +518,10 @@ type TCustomMemo = class(TCustomScrollControl,TCustomMemoCmd) //
static const crUnindent = 7;
static const crSilentDelete = 8;
static const crSilentDeleteAfterCursor = 9;
static const crNothing = 10;
static const crNothing = 10;
static const smNormal = 0;
static const smLine = 1;
static const smColumn = 2;
//****************
protected
@ -692,42 +693,9 @@ type TCustomMemo = class(TCustomScrollControl,TCustomMemoCmd) //
begin
cvs.Brush.Color := fselectbkcolor;//rgb(192,192,192);
src := r;
if FSelectionMode=smLine then //行选择
if FSelectionMode=smLine then
begin
end else
if FSelectionMode=smColumn then //块选择
begin
if bb[0]=ee[0] then
begin
src[0]+= fCharWidth *(bb[1]-1);
src[2]:= src[0]+fCharWidth *(ee[1]-bb[1]);
end
else
begin
t1 := bb;
t2 := ee;
bb := array(min(t1[0],t2[0]),min(t1[1],t2[1]));
ee := array(max(t1[0],t2[0]),max(t1[1],t2[1]));
s := FLines.GetStringByIndex(i);
ls := length(s);
dx := 0;
case bytetype(s,bb[1]) of
2:
begin
src[0]+= fCharWidth *(bb[1]);
dx := -1;
end
else src[0]+= fCharWidth *(bb[1]-1);
end ;
case bytetype(s,ee[1]-1) of
1:src[2]:= src[0]+max(0,fCharWidth *(min(ee[1],ls+1)-bb[1]+1+dx));
else src[2]:= src[0]+max(0,fCharWidth *(min(ee[1],ls+1)-bb[1]+dx));
end ;
end
end else
begin
if bb[0]=ee[0]then //同一行
begin
@ -761,8 +729,8 @@ type TCustomMemo = class(TCustomScrollControl,TCustomMemoCmd) //
begin
if bytetype(dtx,i)<> 0 then
begin
//bn := ft.charset;
//ft.charset := 134;
bn := ft.charset;
ft.charset := 134;
break;
end
end
@ -779,8 +747,8 @@ type TCustomMemo = class(TCustomScrollControl,TCustomMemoCmd) //
begin
if bytetype(dtx,i)<> 0 then
begin
//bn := ft.charset;
//ft.charset := 134;
bn := ft.charset;
ft.charset := 134;
break;
end
end
@ -789,10 +757,10 @@ type TCustomMemo = class(TCustomScrollControl,TCustomMemoCmd) //
r[2]:= r[0]+ct * FCharWidth;
cvs.DrawText(dtx2,r,DT_NOPREFIX);
end
{if bn <> 100000 then
if bn <> 100000 then
begin
ft.charset := bn;
end}
end
end
function paintlinestext(RC,FirstLine,LastLine,FirstCol,LastCol);virtual;
@ -1059,7 +1027,7 @@ type TCustomMemo = class(TCustomScrollControl,TCustomMemoCmd) //
if ftmemlockv.locked then return ;
if e.skip then return;
c := e.wparam;
if ReadOnly or (FSelectionMode=smColumn) then return;
if ReadOnly then return;
if c=13 then return CharInput("\r\n");
if c<32 and not(c in array(9))then return;
cc := e.char;
@ -1171,7 +1139,7 @@ type TCustomMemo = class(TCustomScrollControl,TCustomMemoCmd) //
end
function CharInput(c);virtual;//插入字符
begin
if not(ReadOnly or (FSelectionMode=smColumn)) then return InsertChars(c);
if not ReadOnly then return InsertChars(c);
end
function ExecuteCommand(cmd,data);override;//执行命令
begin
@ -1833,7 +1801,7 @@ type TCustomMemo = class(TCustomScrollControl,TCustomMemoCmd) //
end
function SetSelectionMode(v);
begin
if(v <> FSelectionMode)and(v in array(smNormal,smLine,smColumn))then FSelectionMode := v;
if(v <> FSelectionMode)and(v in array(smNormal,smLine))then FSelectionMode := v;
end
function MoveCaretHorz(stp,sel);
begin
@ -2268,7 +2236,7 @@ type TCustomMemo = class(TCustomScrollControl,TCustomMemoCmd) //
function GetBlockEnd();
begin
if GetSelAvail()then
begin
begin
if fBlockEnd[0]<fBlockBegin[0]or(fBlockEnd[0]=fBlockBegin[0]and fBlockEnd[1]<fBlockBegin[1])then return fBlockBegin;
else return fBlockEnd;
end
@ -2329,52 +2297,6 @@ type TCustomMemo = class(TCustomScrollControl,TCustomMemoCmd) //
if i<len then r += "\r\n";
end
end else
if sm=smColumn then
begin
if bb[0]=ee[0]then
begin
s := fLines[bb[0]-1].FStr;
if not s then return "";
bg := min(bb[1],ee[1]);
ed := max(bb[1],ee[1]);
if bg<ed then return s[bg:(ed-1)]; //2023078 出错
return "";
end else
begin
//第一行
r += "";
//中间
for i := bb[0]-1 to ee[0]-1 do
begin
s := fLines[i].FStr;
ls := length(s);
t1 := bb;
t2 := ee;
bb := array(min(t1[0],t2[0]),min(t1[1],t2[1]));
ee := array(max(t1[0],t2[0]),max(t1[1],t2[1]));
if bb[1]<=ls then
begin
dx := 0;
case bytetype(s,bb[1]) of
2:
begin
bx := bb[1]+1;
dx := -1;
end
else bx := bb[1];
end ;
case bytetype(s,ee[1]-1) of
1: ex := min(ee[1],ls);
else ex:= min(ee[1]-1,ls);
end ;
if bx<=ex then r += s[bx:ex];
end
if i<ee[0]-1 then r += "\r\n";
end
//最后一行
end
end else
begin
if bb[0]=ee[0]then
begin
@ -3036,7 +2958,7 @@ type TSynHighLighter = class(TComponent) //
r := FCacheTokens[ridx];
if r then return r;
s := Flines.GetSTringByIndex(ridx);
if not ifstring(s) then return nil;
if not ifstring(s) then return;
idx := 1;
len := length(s);
tks := array();
@ -3277,7 +3199,6 @@ type tcustomsynhighlighter = class(TSynHighLighter)
function GetLineTokens(idx);override;
begin
if idx<FSatesCount then return FTokens[idx];
return nil;
end
function SetTToken(tokens,ttk,idx,ext);override; //设置token
begin
@ -3845,7 +3766,7 @@ type TSynCustomMemo = class(TCustomMemo)
end
function CharInput(c);override; //字符输入
begin
if ReadOnly or (FSelectionMode=smColumn) then return ;
if ReadOnly then return ;
if c="\r\n" then
begin
if FinishCompletion() then //确定键
@ -4140,28 +4061,28 @@ type TSynMemoNorm = class(TsynCustomMemo) //
end
ord("V"):
begin
if ReadOnly or (FSelectionMode=smColumn) then return ;
if ReadOnly then return ;
ExecuteCommand(ecPaste);
end
ord("X"):
begin
//if (ssAlt in e.shiftstate) then return ExecuteCommand(ecRedo);
if ReadOnly or (FSelectionMode=smColumn) then return ;
if ReadOnly then return ;
ExecuteCommand(ecCut);
end
ord("Y"),ord("L"):
begin
if ReadOnly or (FSelectionMode=smColumn) then return ;
if ReadOnly then return ;
return ExecuteCommand(ecDeleteLine);
end
ord("Z"):
begin
if ReadOnly or (FSelectionMode=smColumn) then return ;
if ReadOnly then return ;
return ExecuteCommand(ecUndo);
end
ord("U"):
begin
if ReadOnly or (FSelectionMode=smColumn) then return ;
if ReadOnly then return ;
return ExecuteCommand(ecRedo);
end
VK_LEFT:
@ -4194,7 +4115,7 @@ type TSynMemoNorm = class(TsynCustomMemo) //
VK_TAB:
begin
if ReadOnly or (FSelectionMode=smColumn) then return ;
if ReadOnly then return ;
FSheetTabFlage := true;
return ExecuteCommand(ecShifttab,array(TabChar,"\t"," "));
end
@ -4261,13 +4182,13 @@ type TSynMemoNorm = class(TsynCustomMemo) //
end
VK_DELETE:
begin
if ReadOnly or (FSelectionMode=smColumn) then return ;
if ReadOnly then return ;
ExecuteCommand(ecDeleteChar);
return CancelCompletion();
end
VK_BACK :
begin
if ReadOnly or (FSelectionMode=smColumn) then return ;
if ReadOnly then return ;
ExecuteCommand(ecDeleteLastChar,1);
return CancelCompletion();
end
@ -4295,23 +4216,23 @@ type TSynMemoNorm = class(TsynCustomMemo) //
begin
if fw>7 then
begin
{if fw=18 then
if fw=18 then
begin
fw := 17;
hw := 34;
end }
end
flg := true;
font := array("width":fw-1,"height":hw-2);
end
end else
begin
if fw<44 then
if fw<18 then
begin
{if fw=16 then
if fw=16 then
begin
fw := 17;
hw := 34;
end }
end
flg := true;
font := array("width":fw+1,"height":hw+2);
end

View File

@ -82,7 +82,8 @@ type TBasicAction=class(TComponent)
if csDesigning in ComponentState then return ;
if FOnExecute then
begin
if iffuncptr(FOnExecute) then call(FOnExecute,self(true));
e := new tuieventbase(0,0,0,0);
if iffuncptr(FOnExecute) then call(FOnExecute,self(true),e);
return true;
end
return false;

View File

@ -615,7 +615,7 @@ type tarray1dlk=class //
function dochanged(info);
begin
if onchangelock then return ;
if fonchanged then CallMessgeFunction(fonchanged,self(true),info);
if fonchanged then CallMessgeFunction(fonchanged,self(true),info);
end
function SwapNoCheck(i,j);
begin
@ -910,7 +910,7 @@ type tstrindexarray = class() //
begin
{**
@explan(˵Ã÷) »ñµÃtsl array %%
@param(n)(bool) true 返回小写下标false 返回原始下标 %%
@param(n)(bool) false 返回小写下标true 返回原始下标 %%
**}
r := array();
for i,v in FData do
@ -3450,9 +3450,8 @@ end;
//////////////////////////////////////
function iffuncptr(fn);
begin
return datatype(fn) in array(7,37);
//return datatype(fn)=7;
//return fn and ifobj(fn);
return fn and ifobj(fn);
end
function includestate(u,s);
begin
@ -4040,136 +4039,12 @@ begin
if m in array(1,3,5,7,8,10,12) then return 31;
return 30;
end
function CallMessgeFunction2(f,o,e);
begin
{**
@ignore(忽略)
**}
if iffuncptr(f) then return call(f,o,e);
end
function get_evt_expand(e,n); //展开形式
begin
if (n=0 or n>2) and (e is class(tuieventbase)) then
begin
ps := e.expandinfo();
//echo e.Classinfo()["classname"],"\r\n";
if ps and ifarray(ps) then
begin
r := ps[0:(n-3)];
len := length(r);
n := len+2;
return r;
end
end
n := min(n,2);
return array();
end
function CallMessgeFunction(f,o,e);
begin
{**
{**
@ignore(ºöÂÔ)
**}
if not iffuncptr(f) then return ;
//////////////事件信息处理//////////////
ff := f.functioninfo();
ffp := ff["parameter"];
plen := length(ffp);
ex := get_evt_expand(e,plen);
//////////////////////////////////
case plen of
1:
begin
r := call(f,o);
end
3:
begin
if ifstring(ex[0,"name"]) then x0 := invoke(e,ex[0,"name"]); else x0 := nil;
r := call(f,o,e,x0);
if ex[0,"var"] then invoke(e,ex[0,"name"],1,x0);
end
4:
begin
if ifstring(ex[0,"name"]) then x0 := invoke(e,ex[0,"name"]); else x0 := nil;
if ifstring(ex[1,"name"]) then x1 := invoke(e,ex[1,"name"]); else x1 := nil;
r := call(f,o,e,x0,x1);
if ex[0,"var"] then invoke(e,ex[0,"name"],1,x0);
if ex[1,"var"] then invoke(e,ex[1,"name"],1,x1);
end
5:
begin
if ifstring(ex[0,"name"]) then x0 := invoke(e,ex[0,"name"]); else x0 := nil;
if ifstring(ex[1,"name"]) then x1 := invoke(e,ex[1,"name"]); else x1 := nil;
if ifstring(ex[2,"name"]) then x2 := invoke(e,ex[2,"name"]); else x2 := nil;
r := call(f,o,e,x0,x1,x2);
if ex[0,"var"] then invoke(e,ex[0,"name"],1,x0);
if ex[1,"var"] then invoke(e,ex[1,"name"],1,x1);
if ex[2,"var"] then invoke(e,ex[2,"name"],1,x2);
end
6:
begin
if ifstring(ex[0,"name"]) then x0 := invoke(e,ex[0,"name"]); else x0 := nil;
if ifstring(ex[1,"name"]) then x1 := invoke(e,ex[1,"name"]); else x1 := nil;
if ifstring(ex[2,"name"]) then x2 := invoke(e,ex[2,"name"]); else x2 := nil;
if ifstring(ex[3,"name"]) then x3 := invoke(e,ex[3,"name"]); else x3 := nil;
r := call(f,o,e,x0,x1,x2,x3);
if ex[0,"var"] then invoke(e,ex[0,"name"],1,x0);
if ex[1,"var"] then invoke(e,ex[1,"name"],1,x1);
if ex[2,"var"] then invoke(e,ex[2,"name"],1,x2);
if ex[3,"var"] then invoke(e,ex[3,"name"],1,x3);
end
7:
begin
if ifstring(ex[0,"name"]) then x0 := invoke(e,ex[0,"name"]); else x0 := nil;
if ifstring(ex[1,"name"]) then x1 := invoke(e,ex[1,"name"]); else x1 := nil;
if ifstring(ex[2,"name"]) then x2 := invoke(e,ex[2,"name"]); else x2 := nil;
if ifstring(ex[3,"name"]) then x3 := invoke(e,ex[3,"name"]); else x3 := nil;
if ifstring(ex[4,"name"]) then x4 := invoke(e,ex[4,"name"]); else x4 := nil;
r := call(f,o,e,x0,x1,x2,x3,x4);
if ex[0,"var"] then invoke(e,ex[0,"name"],1,x0);
if ex[1,"var"] then invoke(e,ex[1,"name"],1,x1);
if ex[2,"var"] then invoke(e,ex[2,"name"],1,x2);
if ex[3,"var"] then invoke(e,ex[3,"name"],1,x3);
if ex[4,"var"] then invoke(e,ex[4,"name"],1,x4);
end
8:
begin
if ifstring(ex[0,"name"]) then x0 := invoke(e,ex[0,"name"]); else x0 := nil;
if ifstring(ex[1,"name"]) then x1 := invoke(e,ex[1,"name"]); else x1 := nil;
if ifstring(ex[2,"name"]) then x2 := invoke(e,ex[2,"name"]); else x2 := nil;
if ifstring(ex[3,"name"]) then x3 := invoke(e,ex[3,"name"]); else x3 := nil;
if ifstring(ex[4,"name"]) then x4 := invoke(e,ex[4,"name"]); else x4 := nil;
if ifstring(ex[5,"name"]) then x5 := invoke(e,ex[5,"name"]); else x5 := nil;
r := call(f,o,e,x0,x1,x2,x3,x4,x5);
if ex[0,"var"] then invoke(e,ex[0,"name"],1,x0);
if ex[1,"var"] then invoke(e,ex[1,"name"],1,x1);
if ex[2,"var"] then invoke(e,ex[2,"name"],1,x2);
if ex[3,"var"] then invoke(e,ex[3,"name"],1,x3);
if ex[4,"var"] then invoke(e,ex[4,"name"],1,x4);
if ex[5,"var"] then invoke(e,ex[5,"name"],1,x5);
end
9:
begin
if ifstring(ex[0,"name"]) then x0 := invoke(e,ex[0,"name"]); else x0 := nil;
if ifstring(ex[1,"name"]) then x1 := invoke(e,ex[1,"name"]); else x1 := nil;
if ifstring(ex[2,"name"]) then x2 := invoke(e,ex[2,"name"]); else x2 := nil;
if ifstring(ex[3,"name"]) then x3 := invoke(e,ex[3,"name"]); else x3 := nil;
if ifstring(ex[4,"name"]) then x4 := invoke(e,ex[4,"name"]); else x4 := nil;
if ifstring(ex[5,"name"]) then x5 := invoke(e,ex[5,"name"]); else x5 := nil;
if ifstring(ex[6,"name"]) then x6 := invoke(e,ex[6,"name"]); else x6 := nil;
r := call(f,o,e,x0,x1,x2,x3,x4,x5,x6);
if ex[0,"var"] then invoke(e,ex[0,"name"],1,x0);
if ex[1,"var"] then invoke(e,ex[1,"name"],1,x1);
if ex[2,"var"] then invoke(e,ex[2,"name"],1,x2);
if ex[3,"var"] then invoke(e,ex[3,"name"],1,x3);
if ex[4,"var"] then invoke(e,ex[4,"name"],1,x4);
if ex[5,"var"] then invoke(e,ex[5,"name"],1,x5);
if ex[6,"var"] then invoke(e,ex[6,"name"],1,x6);
end else
begin
r := call(f,o,e);
end
end ;
return r;
**}
if iffuncptr(f) then return call(f,o,e);
end
function CheckArrayIsNumbers(Value,n);
begin

View File

@ -74,13 +74,6 @@ type tmmeasuresize = class(tuieventbase)
width := -1;
height := -1;
end
function expandinfo();override;
begin
r := array();
r[0] := array("name":"width","alias":"wd","type":"integer","var":true);
r[1] := array("name":"height","alias":"ht","type":"integer","var":true);
return r;
end
width;
height;
end
@ -113,17 +106,8 @@ type TMKEY=class(tuieventbase)
function create(m,w,l,h);override;
begin
inherited;
if w>0 then
FChar := chr(w);
else FChar := chr(0);
FChar := chr(w);
end
function expandinfo();override;
begin
r := array();
r[0] := array("name":"charcode","alias":"key","type":"word");
r[1] := array("name":"shiftstate","alias":"shift","type":"tshiftstateenum");
return r;
end
property char read FChar;
property CharCode read wparam;
property shiftstate read getshiftsate;
@ -133,22 +117,6 @@ type TMKEY=class(tuieventbase)
@param(shiftstate)(arry of TShiftStateEnum member ) ascii码 %%
**}
end
type tmk_press=class(TMKEY)
{**
@param(说明) 按键输入
**}
public
function create(m,w,l,h);override;
begin
inherited;
end
function expandinfo();override;
begin
r := array();
r[0] := array("name":"char","alias":"key","type":"string");
return r;
end
end
Type TtageDrawItem=class(tslcstructureobj)
private
@ -297,7 +265,7 @@ type TSIFTSTATE = class(TSLUICONST)
end;
end
type tmmousewheel=class(tuieventbase)
type TMMOUSEWHEEL=class(tuieventbase)
{**
@explan(说明)鼠标滚动消息类 %%
**}
@ -320,26 +288,12 @@ type tmmousewheel=class(tuieventbase)
property delta read hiwparamsigned;
property ypos read hilparamsigned;
property xpos read lolparamsigned;
property pos read getpos;
function expandinfo();override;
begin
r := array();
i := 0;
r[i++] := array("name":"shiftstate","alias":"shift","type":"tshiftstateenum");
r[i++] := array("name":"delta","alias":"delta","type":"integer");
r[i++] := array("name":"pos","alias":"mousepos","type":"array of integer");
return r;
end
{**
@param(ypos)(integer)鼠标的y坐标 %%
@param(xpos)(integer)鼠标的x坐标 %%
@param(delta)(integer)运动距离 %%
**}
private
function getpos();
begin
return array(xpos,ypos);
end
FKeyState;
end
type TMMouse=class(tuieventbase)
@ -416,110 +370,9 @@ type TMMouse=class(tuieventbase)
shiftstate();
return(ssDouble in FKeyState);
end
function expandinfo();override;
begin
r := array();
r[0] := array("name":"button","alias":"button","type":"tmousebutton");
r[1] := array("name":"shiftstate","alias":"shift","type":"tshiftstateenum");
r[2] := array("name":"xpos","alias":"x","type":"integer");
r[3] := array("name":"ypos","alias":"y","type":"integer");
return r;
end
private
FKeyState;
end
type tmm_move=class(TMMouse)
{**
@explan(说明) 鼠标移动消息类 %%
**}
public
function create(m,w,l,h);override;
begin
inherited;
end
function expandinfo();override;
begin
r := array();
r[0] := array("name":"shiftstate","alias":"shift","type":"tshiftstateenum");
r[1] := array("name":"xpos","alias":"x","type":"integer");
r[2] := array("name":"ypos","alias":"y","type":"integer");
return r;
end
end
type tmcontextpop = class(tuieventbase)
function create(m,w,l,h);
begin
inherited;
end
property mousepos read getpos; //鼠标位置
function expandinfo();override;
begin
r := array();
r[0] := array("name":"mousepos","alias":"mousepos","type":"array of integer");
return r;
end
private
function getpos();
begin
return array(lolparamsigned(),hilparamsigned());
end
end
type tmnotif = class(tuieventbase) //通知消息
function create(op);
begin
inherited create(op,0,0,0);
end
function expandinfo();override;
begin
r := array();
r[0] := array("name":"msg","alias":"msg");
r[1] := array("name":"skip","alias":"stopnotify","type":"bool","var":true);
return r;
end
end
type tmclose = class(tuieventbase) //窗口关闭
function create(m,w,l,h);
begin
inherited;
end
function expandinfo();override;
begin
r := array();
r[0] := array("name":"skip","alias":"stopclose","type":"bool","var":true);
return r;
end
end
type tminqurequit = class(tuieventbase) //退出询问
function create();
begin
inherited create(0,0,0,0);
end
function expandinfo();override;
begin
r := array();
r[0] := array("name":"skip","alias":"stopquit","type":"bool","var":true);
return r;
end
end
type tmactivate = class(tuieventbase)
function create(m,w,l,h);
begin
inherited;
end
property deactivate read getdeactivate;
function expandinfo();override;
begin
r := array();
r[0] := array("name":"deactivate","alias":"deactivate","type":"bool");
return r;
end
private
function getdeactivate();
begin
return Wparam=0;
end
end
type TMSTYLECHANG=class(tuieventbase)
{**
@explan(说明)窗口样式改变消息 %%

View File

@ -256,11 +256,11 @@ type Tcustomfont = class(tgdi)
end
function Setcharset(v)
begin
{if ifnumber(v) and v <> Fcharset then
if ifnumber(v)and v <> Fcharset then
begin
Fcharset := v;
onchange();
end}
end
end
function Setoutprecision(v)
begin
@ -329,7 +329,7 @@ type Tcustomfont = class(tgdi)
begin
s += invoke(self,"f"+v0);
end else
vvi := invoke(self,"f"+v0);
vvi := invoke(self,"f"+v0);
if ifnumber(vvi)then s += inttostr(vvi);
else s += "0";
s += ";";
@ -427,10 +427,12 @@ type Tcustomfont = class(tgdi)
continue;
end
{$endif}
if v0="charset" then continue;
if not ifnil(vsv)then
begin
ovi := invoke(self,"f"+v0);
{$ifdef linux}{$else}
if (vsv=17 and v0="width") or (vsv=34 and v0="height") then continue;
{$endif}
if (ovi <> vsv) then
begin
invoke(self,"f"+v0,1,vsv);
@ -454,7 +456,6 @@ type Tcustomfont = class(tgdi)
if FWidth>0 then return FWidth;
return abs(FHeight)/2;
end
//property constmembers read fconstmembers write setconstmembers
property height read Fheight write Setheight;
property width read Fwidth write Setwidth;
property escapement read Fescapement write Setescapement;

View File

@ -67,18 +67,6 @@ type TcustomGridCtl = class(tcustomscrollcontrol) //
// begin
// DoControlAlign();
// end
function GetPreferredSize(w,h);override;
begin
if csDesigning in ComponentState then
begin
w := 250;
h := 150;
return ;
end
if ongetpreferredsize then return inherited;
w := Width;
h := Height;
end
function DoControlAlign();override;
begin
if(IsUpDating())then
@ -828,7 +816,7 @@ type TcustomGridCtl = class(tcustomscrollcontrol) //
begin
if fonhitcellsizer then
begin
e := new triddragsize(0,r,i,0);
e := new tuieventbase(0,r,i,0);
CallMessgeFunction(fonhitcellsizer,self(true),e);
return e.skip;
end
@ -1181,47 +1169,11 @@ type tgriddrawcellevent = class(tuieventbase)
rec := rc;
canvas := cvs;
end
function expandinfo();override;
begin
r := array();
idx := 0;
r[idx++] := array("name":"canvas","alias":"cvs","type":"tcanvas");
r[idx++] := array("name":"row","alias":"rowidx","type":"integer");
r[idx++] := array("name":"col","alias":"colidx","type":"integer");
r[idx++] := array("name":"rec","alias":"arec");
return r;
end
row;
col;
rec;
canvas;
end
type triddragsize=class(tuieventbase)
function create(a,b,c,d);
begin
inherited;
end
function expandinfo();override;
begin
r := array();
i := 0;
r[i++] := array("name":"idx","alias":"idx","type":"integer");
r[i++] := array("name":"r_or_c","alias":"r_or_c","type":"integer");
r[i++] := array("name":"skip","alias":"stopact","type":"bool","var":true);
return r;
end
property idx read getidx;
property r_or_c read getrc;
private
function getidx();
begin
return lparam;
end
function getrc();
begin
return wparam;
end
end
end
implementation
type TPAINTCOUNT=class()//»æÖƱê¼Ç
function create(v);

View File

@ -1501,29 +1501,6 @@ type TMONITORINFO=class(tslcstructureobj)
property rcwork index "rcwork" read _getvalue_ write _setvalue_;
property dwflags index "dwflags" read _getvalue_ write _setvalue_;
end
type tagTRACKMOUSEEVENT=class(tslcstructureobj)
private
static SSTRUCT;
class function getstruct()
begin
if not SSTRUCT then SSTRUCT := MemoryAlignmentCalculate(array(
("cbsize","int",0),
("dwflags","int",0),
("hwndtrack","pointer",),
("dwhovertime","int",200)));
return SSTRUCT;
end
public
function create(ptr)
begin
inherited create(getstruct(),ptr);
cbsize := _size_();
end
property cbsize index "cbsize" read _getvalue_ write _setvalue_;
property dwFlags index "dwflags" read _getvalue_ write _setvalue_;
property hwndtrack index "hwndtrack" read _getvalue_ write _setvalue_;
property dwhovertime index "dwhovertime" read _getvalue_ write _setvalue_;
end
implementation
(*

View File

@ -1,5 +1,4 @@
unit utslvclpage;
/////////20250710 tab控件添加inert_tab方法//////////////////////////////////
interface
uses utslvclauxiliary,utslvclbase,utslvclgdi;
type tcustomtabsheet = class(TCustomControl) //控件页面
@ -72,13 +71,15 @@ type tcustomtabcontrol = class(TCustomControl)
begin
if FCurrentid<>-1 and fOnSelChanging then
begin
e := new tmtabselchanging(0,FCurrentid,id,0); //m,w,l,h
e := new tuieventbase(0,FCurrentid,id,0); //m,w,l,h
doonSelChanging(self(true),e);
if e.skip then return ;
end
FPrevid := FCurrentid;
FCurrentid := id;
InsureIdxVisible(id);
//InvalidateRect(nil,false);
//DoControlAlign();
DoControlAlign();
if FOnSelChanged then
begin
@ -91,6 +92,43 @@ type tcustomtabcontrol = class(TCustomControl)
FCurrentid := -1;
end
end
function RemovePageTab(id);//移除sheet
begin
if not(id>=0) then return ;
FTabItems.splice(id,1);
if id = FCurrentid then
begin
if id = 0 then
begin
if FTabItems.length()=0 then
begin
FCurrentid := -1;
FPrevid := -1;
end
end
FCurrentid := -1;
FPrevid := -1;
cid := min(max(0,id-1),FTabItems.length()-1);
if cid >=0 then
begin
return setselidx(cid);
end else
begin
if FOnSelChanged then
begin
doonSelChange(self(true),new tuieventbase(0,-1,-1,0));
end
end
end else
if id<FCurrentid then
begin
FCurrentid--;
end
FPrevid := -1;
DoControlAlign();
//CalcTabs();
//InvalidateRect(nil,false);
end
function CreateTableItem(cp);
begin
r := new tcustomtabitem();
@ -110,7 +148,7 @@ type tcustomtabcontrol = class(TCustomControl)
FTabHeight := fh+8;
end
FTabItemswidth := array();
e := new tmtabmeasure(0,-1);
e := new tuieventbase(0,0,0,0);
for i := 0 to FTabItems.length()-1 do
begin
pg := FTabItems[i];
@ -362,6 +400,7 @@ type tcustomtabcontrol = class(TCustomControl)
begin
FirstViewIndex-- ;
DoControlAlign();//CalcTabs();
//InvalidateRect(nil,false);
end
end
function scrollnext(); //滚动到上一个
@ -380,6 +419,8 @@ type tcustomtabcontrol = class(TCustomControl)
end
end ;
FirstViewIndex++ ;
//CalcTabs();
//InvalidateRect(nil,false);
DoControlAlign();
end
end
@ -578,6 +619,7 @@ type tcustomtabcontrol = class(TCustomControl)
begin
it.Caption := Value;
DoControlAlign();
//InvalidateRect(nil,false);
end
end
function SetTabIndex(AIndex,AIndexnew);
@ -604,59 +646,6 @@ type tcustomtabcontrol = class(TCustomControl)
//InvalidateRect(nil,false);
end
end
function remove_tab_byidx(id);virtual;//移除tab
begin
{**
@explan(说明) 移除标签 %%
@param(idx)(integer) 序号 %%
**}
if not(id>=0 and id<FTabItems.length()) then return ;
FTabItems.splice(id,1);
if id = FCurrentid then
begin
if id = 0 then
begin
if FTabItems.length()=0 then
begin
FCurrentid := -1;
FPrevid := -1;
end
end
FCurrentid := -1;
FPrevid := -1;
cid := min(max(0,id-1),FTabItems.length()-1);
if cid >=0 then
begin
return setselidx(cid);
end else
begin
if FOnSelChanged then
begin
doonSelChange(self(true),new tuieventbase(0,-1,-1,0));
end
end
end else
if id<FCurrentid then
begin
FCurrentid--;
end
FPrevid := -1;
DoControlAlign();
end
function insert_tab(c,idx);virtual; //插入tab
begin
{**
@explan(说明) 插入标签 %%
@param(c)(string) 标签 %%
@param(idx)(integer) 位置,默认为尾部 %%
**}
if not ifstring(c) then return 0;
cp := CreateTableItem(c);
if idx>=0 or idx<0 then FTabItems.splice(integer(idx),0,cp);
else FTabItems.Push(cp);
DoControlAlign();
return 1;
end
function Recycling();override;
begin
FOnSelChanged := nil;
@ -667,7 +656,7 @@ type tcustomtabcontrol = class(TCustomControl)
{**
@param(cursel)(integer) 当前选中序号 %%
@param(TabCount)(integer) page数量 %%
@param(OnSelChanged)(function[tcustompagecontrol,tuieventbase]) 标签已经切换 %%
@param(OnSelChange)(function[tcustompagecontrol,tuieventbase]) 标签已经切换 %%
@param(OnSelChanging)(function[tcustompagecontrol,tuieventbase]) 标签正在切换 %%
@param(Onrclcik)(function[tcustompagecontrol,tuieventbase]) 右键点击 %%
**}
@ -801,11 +790,6 @@ type tcustompagecontrol = class(tcustomtabcontrol)
if not (page is class(TWinControl)) then CalcTabs();
InvalidateRect(nil,false);
end
end
protected
function remove_tab_byidx(id);override;
begin
return inherited;
end
public
function GetPreferredSize(w,h);override;
@ -853,7 +837,7 @@ type tcustompagecontrol = class(tcustomtabcontrol)
begin
if not isacceptsheettype(AControl){ not(AControl is class(tcustomtabsheet))} then return;
id := GetPageID(AControl);
remove_tab_byidx(id);
RemovePageTab(id);
//fcoolbands.deleteitem(AControl,true);
end
Function SetCurSel(id);override; //设置当前序号
@ -962,10 +946,6 @@ type tcustompagecontrol = class(tcustomtabcontrol)
tabs;
faccepttype;
private
function insert_tab(c,idx);override; //插入tab
begin
end
function isacceptsheettype(c);
begin
for i,v in faccepttype do
@ -973,64 +953,6 @@ type tcustompagecontrol = class(tcustomtabcontrol)
if c is v then return true;
end
end
end
type tmtabselchanging = class(tuieventbase) //改变
function create(m,w,l,h);
begin
inherited;
end
function expandinfo();override;
begin
r := array();
r[0] := array("name":"lparam","alias":"nselidx","type":"integer");
r[1] := array("name":"skip","alias":"stopchange","type":"bool","var":true);
return r;
end
end
type tmtabmeasure = class(tuieventbase)
function create(i,w);
begin
inherited create(nil,w,i,0);
end
function expandinfo();override;
begin
r := array();
r[0] := array("name":"idx","alias":"idx","type":"integer");
r[1] := array("name":"width","alias":"wid","type":"integer","var":true);
return r;
end
property idx read wparam ; //序号
property width read lparam write lparam;//宽度
end
type teventdrawtab = class(tuieventbase)
{**
@explan(说明)绘制消息对象 %%
@param(idx)(integer) 序号 %%
@param(sel)(integer) 是否选中 %%
@param(rec)(array(左上右下)) 区域 %%
@param(canvas)(TCanvas) 画布 %%
**}
function create(id,s,rc,cvs);
begin
inherited create(0,0,0,0);
idx := id;
sel := s;
rec := rc;
canvas := cvs;
end
function expandinfo();override;
begin
r := array();
i := 0;
r[i++] := array("name":"canvas","alias":"cvs","type":"tcanvas");
r[i++] := array("name":"idx","alias":"idx","type":"integer");
r[i++] := array("name":"rec","alias":"arec","type":"array of integer");
return r;
end
idx;
sel;
rec;
canvas;
end
implementation
type tcustomtabitem = class() //
@ -1068,6 +990,27 @@ type tcustomtabitem = class() //
property PageSheet read FPageSheet Write FPageSheet;
_tag;
end
type teventdrawtab = class(tuieventbase)
{**
@explan(说明)单元格绘制消息对象 %%
@param(idx)(integer) 序号 %%
@param(sel)(integer) 是否选中 %%
@param(rec)(array(左上右下)) 区域 %%
@param(canvas)(TCanvas) 画布 %%
**}
function create(id,s,rc,cvs);
begin
inherited create(0,0,0,0);
idx := id;
sel := s;
rec := rc;
canvas := cvs;
end
idx;
sel;
rec;
canvas;
end
initialization
end.

View File

@ -502,7 +502,7 @@ type tcustombtn = class(TCustomControl) //
3: df := DT_RIGHT
4: df := DT_LEFT .| DT_VCENTER;
6: df := DT_RIGHT .| DT_VCENTER;
7: df := DT_BOTTOM .| DT_LEFT;
7: d := DT_BOTTOM .| DT_LEFT;
8: df := DT_BOTTOM .|DT_CENTER;
9: df := DT_BOTTOM .| DT_RIGHT;
else
@ -530,46 +530,12 @@ type tcustombtn = class(TCustomControl) //
end
function GetPreferredSize(w,h);override;
begin
if iffuncptr(onGetPreferredSize) then return class(tcontrol).GetPreferredSize(w,h); //
class(tcontrol).GetPreferredSize(w,h);
if ongetpreferredsize then return ;
bs := BoundsRect;
cs := ClientRect;
dh := (bs[3]-bs[1])-(cs[3]-cs[1])+2;
dw := (bs[2]-bs[0])-(cs[2]-cs[0]);
c := caption;lc := length(c);
ft := font;
fw := ft.Width;
fh := ft.Height;
if FtextPosition=0 then
begin
w := fw*(lc+2);
h := fh+4;
end else
begin
rs := 1;
mlen := 0;
mmlen := 0;
for i := 1 to lc do
begin
ci := c[i];
case ci of
"\r":
begin
continue;
end
"\n":
begin
rs+=1;
mmlen := max(mmlen,mlen);
mlen := -1;
end
end ;
mlen++;
end
w := fw*(max(mmlen,mlen)+2);
h := fh*rs+4;
end
w += dw;
h += dh;
dh := (bs[3]-bs[1])-(cs[3]-cs[1])+2;
h+=dh;
end
function FontChanged(o);override; //字体改变
begin
@ -658,11 +624,12 @@ type tcustombtn = class(TCustomControl) //
end
function setTextPosition(n);
begin
if not(n>=0 and n<=9) then return ;
n:=integer(n);
if not ifnumber(n) or n<0 or n>9 then
n:=0;
else
n:=integer(n);
if FtextPosition=n then return ;
FtextPosition:=n;
AdjustSize();
InvalidateRect(nil,false);
end
function judgestate(o,e);
@ -717,10 +684,7 @@ type tcustomcheckbtn=class(tcustombtn) //checkbtn
function GetPreferredSize(w,h);override;
begin
inherited;
//w+=20+1;
c := caption;
if c then w+=21;
else w := 21;
w+=20+1;
end
published
property checked:bool read FcheckState write setChecked;
@ -2591,7 +2555,6 @@ type TcustomLabel = class(TGraphicControl)
if v <> FTextAlign then
begin
FTextAlign := v;
AdjustSize();
InvalidateRect(nil,true);
end
end
@ -2615,47 +2578,6 @@ type TcustomLabel = class(TGraphicControl)
set_Preferre_size();
inherited;
end
function GetPreferredSize(w,h);override;
begin
if iffuncptr(onGetPreferredSize) then return class(tcontrol).GetPreferredSize(w,h); //
ft := font;
if not ft then return ;
fw := ft.Width;
fh := ft.Height;
c := caption;lc := length(c);
if FTextAlign=0 then
begin
w := fw*(lc)+2;
h := fh+3;
end else
begin
rs := 1;
mlen := 0;
mmlen := 0;
for i := 1 to lc do
begin
ci := c[i];
case ci of
"\r":
begin
continue;
end
"\n":
begin
rs+=1;
mmlen := max(mmlen,mlen);
mlen := -1;
end
end ;
mlen++;
end
w := fw*(max(mmlen,mlen))+2;
h := fh*rs+3;
end
bd := Border;
w += bd;
h += bd;
end
function FontChanged(o);override;
begin
inherited;
@ -2846,7 +2768,7 @@ type tcustomedit=class(TCustomControl)
begin
ft := Font;
if not ft then return ;
if iffuncptr(onGetPreferredSize) then
if ongetpreferredsize then
begin
return class(tcontrol).GetPreferredSize(w,h);
end
@ -2880,13 +2802,16 @@ type tcustomedit=class(TCustomControl)
inherited;
end
function doonmaxtext();
begin
CallMessgeFunction(FOnMaxText,self(true));
begin
if FOnMaxText then
CallMessgeFunction(FOnMaxText,self(true),new tuieventbase(0,0,0,0));
end
function DoChanged();
begin
CallMessgeFunction(FOnChange,self(true));
CallMessgeFunction(FOnUpdate,self(true));
if FOnChange then
CallMessgeFunction(FOnChange,self(true),new tuieventbase(0,0,0,0));
if FOnUpdate then
CallMessgeFunction(FOnUpdate,self(true),new tuieventbase(0,0,0,0));
end
function FontChanged(sender);override;
begin
@ -3554,16 +3479,6 @@ type TCustomListBoxbase=class(TCustomScrollControl)
begin
return FItemCount;
end
function GetPreferredSize(w,h);override;
begin
if csDesigning in ComponentState then
begin
w := 250;
h := 150;
return ;
end
return inherited;
end
published
property ItemCount read GetItemCount write SetItemCount;
property ItemHeight read GetYScrollDelta;
@ -3615,15 +3530,6 @@ type tlistdrawevent = class(tuieventbase)
rec := r;
Canvas := c;
end
function expandinfo();override;
begin
r := array();
i := 0;
r[i++] := array("name":"canvas","alias":"cvs","type":"tcanvas");
r[i++] := array("name":"idx","alias":"idx","type":"integer");
r[i++] := array("name":"rec","alias":"ARect","type":"array of integer");
return r;
end
rec;
idx;
sel;
@ -3684,11 +3590,7 @@ type TcustomListBox=class(TCustomListBoxbase)
end
2:
begin
if FMultisel3Data[-1] then //ÐÞÕýÑ¡ÖиıäµÄÎÊÌâ20250430
begin
Reindex(FMultisel3Data,array(-1:nil));
end else
selchange := 1;
selchange := 1;
end
end;
if selchange then calllistselchengd();
@ -3801,7 +3703,7 @@ type TcustomListBox=class(TCustomListBoxbase)
end
function PaintIdexText(idx,rc,cvs);virtual;
begin
if fownerdraw and iffuncptr( Fondrawlist) then
if fownerdraw and Fondrawlist then
begin
e := new tlistdrawevent(idx,rc[4],rc,cvs);
CallMessgeFunction(Fondrawlist,self(true),e);
@ -3866,12 +3768,7 @@ type TcustomListBox=class(TCustomListBoxbase)
FSelEnd := n2;
flg := true;
end
end else
if (FSelBegin>=0) and (n=-1) then
begin
FSelBegin := FSelEnd := -1;
flg := true;
end
end
if flg then
begin
InvalidateRect(nil,false);
@ -3904,7 +3801,7 @@ type TcustomListBox=class(TCustomListBoxbase)
end
return;
end
if not(isValidIndex2(n) or n=-1) or n=FSelBegin then return;
if not(isValidIndex2(n)) or n=FSelBegin then return;
SelRange(false);
FSelBegin := FSelEnd := n;
SelRange(true);
@ -4357,7 +4254,7 @@ type TcustomListBox=class(TCustomListBoxbase)
end
function calllistselchengd();
begin
CallMessgeFunction(FselectionChange,self(true));
if FselectionChange then CallMessgeFunction(FselectionChange,self(true),new tuieventbase(0,0,0,0));
end
private
fselbkcolor;
@ -4410,7 +4307,7 @@ type TCustomComboBoxbase=class(TCustomControl)
function GetPreferredSize(w,h);override;
begin
class(tcontrol).GetPreferredSize(w,h);
if iffuncptr(onGetPreferredSize) then return ;
if onGetPreferredSize then return ;
bs := BoundsRect;
cs := ClientRect;
dh := (bs[3]-bs[1])-(cs[3]-cs[1])+2;
@ -4692,7 +4589,6 @@ type TcustomComboBox=class(TCustomComboBoxbase)
end
function DoControlAlign();override;
begin
if not FEdit then return ;
rc := ClientRect;
rc[2]-= 20;
FEdit.SetBoundsRect(rc);
@ -5248,7 +5144,7 @@ type TcustomToolBar=class(TCustomControl)
begin
ft := Font;
if not ft then return ;
if iffuncptr(onGetPreferredSize) then return class(tcontrol).GetPreferredSize(w,h);
if ongetpreferredsize then return class(tcontrol).GetPreferredSize(w,h);
ftw := ft.Width;
fth := ft.Height;
brec := BoundsRect;
@ -6114,7 +6010,7 @@ type TcustomStatusBar=class(TCustomControl)
function GetPreferredSize(w,h);override;
begin
class(tcontrol).GetPreferredSize(w,h);
if iffuncptr(onGetPreferredSize) then return ;
if ongetpreferredsize then return ;
bs := BoundsRect;
cs := ClientRect;
dh := (bs[3]-bs[1])-(cs[3]-cs[1])+2;
@ -6172,7 +6068,6 @@ type TcustomStatusBar=class(TCustomControl)
{**
@explan(说明) 设置多个项目 %%
**}
if Fitems=its then return ;
Fitems := array();
for i,v in its do
begin
@ -6542,7 +6437,7 @@ type TCustomSpinEdit = class(TCustomControl)
function GetPreferredSize(w,h);override;
begin
class(tcontrol).GetPreferredSize(w,h);
if iffuncptr(onGetPreferredSize) then return ;
if ongetpreferredsize then return ;
ft := Font;
if not ft then return ;
h := ft.Height+4;
@ -7122,7 +7017,7 @@ type tcustomipaddr = class(TCustomControl)
end
function DoIpChanged();
begin
return CallMessgeFunction(FaddrChange,self(true));
return CallMessgeFunction(onAddrChange,self(true),new tuieventbase(0,0,0,0));
end
function cleanAddr();
begin
@ -7226,7 +7121,7 @@ type tcustomipaddr = class(TCustomControl)
begin
ft := Font;
if not ft then return ;
if iffuncptr(onGetPreferredSize) then
if ongetpreferredsize then
begin
return class(tcontrol).GetPreferredSize(w,h);
end
@ -7772,8 +7667,9 @@ type tcustomtimepicker = class(tthreeEntry)
ti := strtointdef(t,0);
if ti<0 then p.text := "24";
else if ti>24 then p.text := "0";
end
CallMessgeFunction(Fonselectchange,self(true));
end
if Fonselectchange then
calldatafunction(Fonselectchange,self(true),new tuieventbase(0,0,0,0));
end
end
end
@ -7941,8 +7837,9 @@ type tcustomdatetimepicker = class(tthreeEntry)
ct := getmonthdates(y,m);
if d>ct then es[2].text := inttostr(ct);
end
end
CallMessgeFunction(Fonselectchange,self(true)) ;
end
if Fonselectchange then
calldatafunction(Fonselectchange,self(true),new tuieventbase(0,0,0,0));
end
"dtadate":
begin
@ -7954,15 +7851,18 @@ type tcustomdatetimepicker = class(tthreeEntry)
es[0].text := inttostr(y);
es[1].text := inttostr(m);
es[2].text := inttostr(d);
CallMessgeFunction(Fonselectchange,self(true));
if Fonselectchange then
calldatafunction(Fonselectchange,self(true),new tuieventbase(0,0,0,0));
end else
begin
y := strtointdef(es[0].text,2021);
m := strtointdef(es[1].text,1);
d := strtointdef(es[2].text,1);
return array(y,m,d);
end
end
end
end
end
end
function ShowDropDown(f);virtual;
@ -8076,7 +7976,8 @@ type tcustommonthcalendar = class(TCustomControl)
r := FCalender.ExecuteCommand("meselbypos",e.pos);
if std=3 or r="today" then
begin
CallMessgeFunction(FonSelect,self(true));
if FonSelect then
CallMessgeFunction(FonSelect,self(true),new tuieventbase(0,0,0,0));
end
end
end
@ -8124,7 +8025,8 @@ type tcustommonthcalendar = class(TCustomControl)
end
function DoDatechanged();
begin
CallMessgeFunction(FonSelectChange,self(true));
if FonSelectChange then
CallMessgeFunction(FonSelectChange,self(true),new tuieventbase(0,0,0,0));
end
function recycling();override;
begin

View File

@ -114,8 +114,8 @@ type ttreelistwnd = class(TCustomScrollControl)
FItemHeight := font.height+2;
FxClientMax := fColWidth;
FItemMinWidth := FxClientMax;
height := 150;
width := 250;
height := 400;
width := 300;
border := true;
autoscroll := 3;
ThumbTrack := true;
@ -453,16 +453,6 @@ type ttreelistwnd = class(TCustomScrollControl)
end
return r;
end
function GetPreferredSize(w,h);override;
begin
if csDesigning in ComponentState then
begin
w := 250;
h := 150;
return ;
end
return inherited;
end
published //属性
property Items read GetItems;
property ItemCount read GetItemCount;
@ -584,65 +574,23 @@ type ttreelistwnd = class(TCustomScrollControl)
end
end
type tm_nodeseling=class(tuieventbase)
type TTreeSelCHngedEvent=class(tuieventbase)
{**
@explan(说明) 节点选择正在改变%%
@explan(说明) 导航选择改变消息%%
**}
function create(m,ito,itn,h);override;
function create(m,w,l,h);override;
begin
ItemOld := ito;
ItemNew := itn;
item := itn;
end
function expandinfo();override;
begin
r := array();
i := 0;
r[i++] := array("name":"itemold","alias":"node","type":"tcustomtreectlnode");
r[i++] := array("name":"itemnew","alias":"nselnode","type":"tcustomtreectlnode");
r[i++] := array("name":"skip","alias":"stopchang","type":"bool","var":true);
return r;
end
ItemOld;
ItemNew;
Item;
end
type tm_nodeseled=class(tm_nodeseling)
{**
@explan(说明) 节点选择成功改变%%
**}
function create(m,ito,itn,h);override;
begin
ItemOld := ito;
ItemNew := itn;
item := itn;
end
function expandinfo();override;
begin
r := inherited;
r := r[0:length(r)-2];
return r;
inherited;
end
ItemOld;
ItemNew;
Item;
end
type tm_nodechang = class(tuieventbase)
{**
@explan(说明) 节点改变消息%%
**}
function create(m,w,l,h);
begin
Item := w;
end
function expandinfo();override;
begin
r := array();
r[0] := array("name":"Item","alias":"node","type":"tcustomtreectlnode");
return r;
end
Item;
end
{**
@param(ItemOld)(TcustomTreeCtlNode) 旧的节点 %%
@param(ItemNew)(TcustomTreeCtlNode) 新节点 %%
@param(Item)(TcustomTreeCtlNode) 当前节点 %%
**}
end
type TcustomTreeCtlNode = class(tsluibase) //树结点
{**
@explan(说明) 树结点 %%
@ -1669,7 +1617,10 @@ type TcustomTreeCtl = class(ttreelistwnd)
begin
if FonEmptyNodeExapanding then
begin
e := new tm_nodechang(0,pm,0,0);
e := new TTreeSelCHngedEvent(0,0,0,0);
e.item := pm;
e.ItemNew := pm;
e.ItemOld := pm;
CallMessgeFunction(FonEmptyNodeExapanding,self(true),e);
end
end
@ -1881,16 +1832,6 @@ type TcustomTreeCtl = class(ttreelistwnd)
dc.pen.color := rgb(171,173,179);
dc.draw("polyline",ls);
end
function GetPreferredSize(w,h);override;
begin
if csDesigning in ComponentState then
begin
w := 100;
h := 125;
return ;
end
return inherited;
end
published //属性
property CurrentNode read FCurrentNode write setcurrentnode; //20221118 加上写
property selectionColor:color read FselectionColor write SetselectionColor;
@ -2029,14 +1970,12 @@ type TcustomTreeCtl = class(ttreelistwnd)
t1 := FCurrentNode;
//if t1 then InvalidateItem(t1,false);
//InvalidateItem(it,false);
//ne := new TTreeSelCHngedEvent(0,0,0,0);
//ne.ItemOld := t1;
//ne.ItemNew := it;
//ne.Item := it;
ne := new tm_nodeseling(nil,t1,it);
ne := new TTreeSelCHngedEvent(0,0,0,0);
ne.ItemOld := t1;
ne.ItemNew := it;
ne.Item := it;
CallMessgeFunction(FOnSelChanging,self(true),ne);
if ne.Skip then return true;
ne := new tm_nodeseled(nil,t1,it);
FCurrentNode := it;
CallMessgeFunction(FOnSelChanged,self(true),ne);
end

View File

@ -207,7 +207,7 @@ app := initializeapplication();
app.createform(class(tfm),fm);
fm.show();
app.run();
type tfm = class(tvcform,tg_const)
type tfm = class(tvcform)
function create(aowner);
begin
inherited;
@ -234,10 +234,10 @@ type tfm = class(tvcform,tg_const)
line.lineinfo.color := 0xff0000;
line.markinfo.bkcolor := 0x00ff00;
line.markinfo.color := 0x0000ff;
line.mark_mode := tgc_on;
line.mark_mode := "on";
line.markinfo.size := 30;
line.markinfo.style := tgc_mks_pentagram;
line.polyline_style := tgc_LS_staircase;
line.markinfo.style := line.tgc_mks_pentagram;
line.polyline_style := line.tgc_LS_staircase;
d := array();
idx := 0;
for i:= -pi() to pi() step 0.2 do
@ -256,7 +256,7 @@ app := initializeapplication();
app.createform(class(tfm),fm);
fm.show();
app.run();
type tfm = class(tvcform,tg_const)
type tfm = class(tvcform)
function create(aowner);
begin
inherited;
@ -280,7 +280,7 @@ type tfm = class(tvcform,tg_const)
axs.axises(1).lineinfo.color := 0x00ff00;
sf := new tg_my_surf();
sf.lineinfo.color := 0x0000ff;
sf.lineinfo.style := tgc_BS_SOLID;
sf.lineinfo.style := sf.tgc_BS_SOLID;
sf.graph_data := get_surf_data();
sf.parent := axs;
return ;
@ -388,7 +388,7 @@ app := initializeapplication();
app.createform(class(tfm),fm);
fm.show();
app.run();
type tfm = class(tvcform,tg_const)
type tfm = class(tvcform)
function create(aowner);
begin
inherited;
@ -402,7 +402,7 @@ type tfm = class(tvcform,tg_const)
//////////设置坐标轴属性////////////////////////
axs := new tg_axes();
axs.box := true;
axs.figure := fg;
axs.figure := fg.figure;
axs.title.text := "hello pie ";
axs.axises(1).tics_color := 0x0000ff;
axs.axises(1).fontinfo.size := 8;
@ -421,7 +421,7 @@ type tfm = class(tvcform,tg_const)
for i,v in args do
begin
line := new tg_Polyline();
line.polyline_style := tgc_LS_filled;
line.polyline_style := line.tgc_LS_filled;
line.closed := true;
c := (i=2)?1.1:1;
line.graph_data := 1+get_pie_lines(v[0],v[1],i=prominentidx,prominentrate);
@ -459,7 +459,7 @@ app := initializeapplication();
app.createform(class(tfm),fm);
fm.show();
app.run();
type tfm = class(tvcform,tg_const)
type tfm = class(tvcform)
function create(aowner);
begin
inherited;
@ -504,7 +504,7 @@ type tfm = class(tvcform,tg_const)
gtx.text := array("按住鼠标左键","移动我");
gtx.data := array(0.3,0.2);
//处理鼠标按下
gtx.addEventListener(evt_mouse_down,function(e)begin
gtx.addEventListener("mouse_down",function(e)begin
fdragtext := e.target;
ftextinitpos := fdragtext.data;
x := e.cvsx;y := e.cvsy;
@ -512,7 +512,7 @@ type tfm = class(tvcform,tg_const)
fmousedownpos := array(x1,y1);
end);
//移动标签
fg.addEventListener(evt_mouse_move,function(e)begin
fg.addEventListener("mouse_move",function(e)begin
if fdragtext then
begin
e.stoppropagation();
@ -524,7 +524,7 @@ type tfm = class(tvcform,tg_const)
end
end ,true);
//处理鼠标松开
fg.addEventListener(evt_mouse_up,function(e)begin
fg.addEventListener("mouse_up",function(e)begin
if fdragtext then
begin
e.stoppropagation();
@ -548,12 +548,12 @@ type tfm = class(tvcform,tg_const)
fhitidx := r;
return r>=0;
end
line.addEventListener(evt_mouse_out,function(e)begin
line.addEventListener("mouse_out",function(e)begin
if e.eventPhase<>2 then return ;
fmovetip.Visible := false;
e.stoppropagation();
end,true);
line.addEventListener(evt_mouse_move,function(e)
line.addEventListener("mouse_move",function(e)
begin
if e.eventPhase<>2 then return ;
e.stoppropagation();
@ -638,24 +638,18 @@ end }
type tg_WinControl = class(tcustomcontrol,tg_figure_container) //绘图窗口
function create(AOwner);
begin
if not(s_flush_interval>9) then
begin
s_flush_interval := 150;
ftgwindows := array();
end
class(tcustomcontrol).create(AOwner);
width := 300;
height := 300;
class(tg_figure_container).create();
fg_timer := new unit(utslvclstdctl).tcustomtimer(self);
fg_timer.Interval := s_flush_interval;
fg_timer.Interval := 300;
fg_timer.Ontimer := thisfunction(figure_need_fresh);
ffigureprepared := false;
ffigure.rec_getter := function()begin
return clientrect;
end
ffigure.fresh_caller := thisfunction(flushfigure);
ftgwindows[length(ftgwindows)] := makeweakref(self(true));
end
function flushfigure();
begin
@ -698,35 +692,10 @@ type tg_WinControl = class(tcustomcontrol,tg_figure_container) //
if ffigure then
begin
d := e_2_array(e,evt_mouse_down);
if ffigure.executecommand(evt_mouse_down,d)=1 then e.skip := true;
SetFocus();
if ffigure.executecommand(evt_mouse_down,d)=1 then e.skip := true;
end
//echo "\r\n",functionname(),tostn(array(xy,bt,sh));
end
function KeyDown(o,e);override;
begin
if ffigure then
begin
d := ek_2_array(e,evt_key_down);
if ffigure.executecommand(evt_key_down,d)=1 then e.skip := true;
end
end
function keyup(o,e);override;
begin
if ffigure then
begin
d := ek_2_array(e,evt_key_up);
if ffigure.executecommand(evt_key_up,d)=1 then e.skip := true;
end
end
function keypress(o,e);override;
begin
if ffigure then
begin
d := ek_2_array(e,evt_key_press);
if ffigure.executecommand(evt_key_press,d)=1 then e.skip := true;
end
end
function MouseMove(o,e);override;
begin
if ffigure then
@ -760,58 +729,16 @@ type tg_WinControl = class(tcustomcontrol,tg_figure_container) //
function Recycling();override;
begin
ffigure:=nil;
for i := 0 to length(ftgwindows)-1 do
begin
if ftgwindows[i] =self then
begin
deleteindex(ftgwindows,i);
break;
end
end
inherited;
end
class function set_sys_flush_interal(itv); //设置所有窗口的刷新间隔
begin
if itv>9 and itv<>s_flush_interval then
begin
s_flush_interval := itv;
for i,v in ftgwindows do
begin
v.flash_interval := itv;
end
end
end
property flush_interval read get_interval write set_interval; //当前窗口的刷新间隔
private
function get_interval();
begin
return fg_timer.Interval;
end
function set_interval(itv);
begin
return fg_timer.Interval := itv;
end
function figure_need_fresh(o,e); //定时刷新
begin
o.stop();
if not ffigureprepared then return ; //没有准备好
if f_validate_doing then return;
InvalidateRect(nil,false);
end
function ek_2_array(e,tp);
begin
d := array();
st := e.shiftstate();
sft := 0x0 in st;
sctl := 0x2 in st;
d := array(
"type":tp,
"shift":sft,
"ctrl":sctl,
"key":e.char,
"keycode":e.CharCode,
);
return d;
InvalidateRect(nil,false);
end
function e_2_array(e,tp);
begin
@ -830,8 +757,6 @@ type tg_WinControl = class(tcustomcontrol,tg_figure_container) //
return d;
end
private
static s_flush_interval;
static ftgwindows;
fmovecnt;
fg_timer;
f_validate_doing;
@ -865,18 +790,6 @@ type tg_figure = class(tg_evet_conainter) //
function executecommand(cmd,p);
begin
case cmd of
evt_key_down:
begin
return cmd_key_event(evt_key_down,p);
end
evt_key_up:
begin
return cmd_key_event(evt_key_up,p);
end
evt_key_press:
begin
return cmd_key_event(evt_key_press,p);
end
"figure_need_fresh":
begin
fresh();
@ -1037,24 +950,7 @@ type tg_figure = class(tg_evet_conainter) //
r[len-i] := v;
end
return r;
end
function cmd_key_event(evtname,p) ;
begin
if not fMouseOnOBJ then return ;
d := p;
d["istrusted"] := true;
d["bubbles"] := true;
onds := array();
nnd := fMouseOnOBJ;
while nnd do
begin
onds[length(onds)] := nnd;
nnd := nnd.parent;
end
evt := new tg_evt_key(evtname,d);
dispatchEvent(evt,onds);
return evt.stoppropagationed or evt.defaultPrevented; //是否停止
end
end
function cmd_mouse_event(evtname,p);
begin
d := p;
@ -1091,8 +987,7 @@ type tg_figure = class(tg_evet_conainter) //
end
fMouseOnOBJ := ninnode;
evt := new tg_evt_mouse(evt_mouse_in,d); //处理mouse in
dispatchEvent(evt,nds);
return true;
dispatchEvent(evt,nds);
end
end else
begin
@ -1171,7 +1066,7 @@ type tg_axes = class(tg_base) //
f_changed .|= c_g_data_zoombox;
end
end
cmd_node_add_in,cmd_node_del_from:
cmd_node_add_in:
begin
if pm is class(tg_graph_base) then
begin
@ -1281,7 +1176,6 @@ type tg_axes = class(tg_base) //
cvs.axesrec := r;
cvs.axesvector := get_top_outer_points();
//paint(cvs);
cvs.executecommand("painter",self(true));
paint_grid(cvs);
inherited;
cvs.axesunclip();
@ -1323,7 +1217,7 @@ type tg_axes = class(tg_base) //
if (f_changed .& c_g_data_changed)=c_g_data_changed then
begin
tbds := fdata_bounds;
for i,v in get_node_data_bounds_format(self(true)) do
for i,v in get_node_data_bounds(self(true)) do
begin
if not fdata_bounds_locked[i] then
begin
@ -2457,11 +2351,7 @@ type tg_canvas = class(TcustomCanvas) //
ffigurergn.rect := fg.rect();
faxesrgntemp := new TRGNPOLY();//new TRGNRECT();
//ffigurergn.
end
function executecommand(cmd,p);override;
begin
if cmd ="painter" then fpainter := p;
end
end
function axesclip(); //裁剪坐标系范围
begin
if faxesrgn then
@ -2496,23 +2386,6 @@ type tg_canvas = class(TcustomCanvas) //
property figure:tg_figure read ffigure; //绘制区域
property axesvector read faxesvector write set_clip_vector; //坐标系区域
property axesrec read FaxesRec write set_clip_rect; //坐标系矩形区域
property painter read fpainter;
////////////绘制相关//////////////////////////////////////////////
function tg_movto(x,y,z);//移动
begin
if not fpainter then return ;
if fpainter.zoom_to_xyz(x,y,z,x0,y0) then return moveto(x0,y0);
end
function tg_lineto(x,y,z);//画线
begin
if not fpainter then return ;
if fpainter.zoom_to_xyz(x,y,z,x0,y0) then return lineto(x0,y0);
end
function tg_trans(a,x,y,z);//旋转
begin
if not fpainter then return ;
if fpainter.zoom_to_xyz(x,y,z,x0,y0) then return trans(a,x0,y0);
end
private
FaxesRec;
faxesvector;
@ -2522,7 +2395,6 @@ type tg_canvas = class(TcustomCanvas) //
faxesrgntemp;
ffigurerect;
[weakref]ffigure;
[weakref]fpainter;
private
function set_clip_rect(rec);
begin
@ -3204,12 +3076,12 @@ type tg_text = class(tg_base)
if not zoom_to_xyz(fdata[0],fdata[1],fdata[2],x,y) then return ;
if clip_state=tgc_on or ((p:=parent) and p.clip_state=tgc_on) then
begin
{bx := axes.zoom_box;
bx := axes.zoom_box;
vj := fdata;
if vj[0]<bx[0,0] or vj[1]<bx[1,0] or vj[2]<bx[2,0] or vj[0]>bx[0,1] or vj[1]>bx[1,1] or vj[2]>bx[2,1] then
begin
return ;
end }
end
cvs.axesclip();
end
else cvs.axesunclip();
@ -4521,20 +4393,13 @@ type tg_base = class(TNode,tg_evet_conainter) //
end
function paint_pre(cvs);virtual;
begin
cvs.executecommand("painter",self(true));
begin
paint(cvs);
lgns := array();
for i := 0 to NodeCount-1 do
begin
vi := GetNodeByIndex(i);
if vi is class(tg_legend) then //处理次序问题
begin
lgns[length(lgns)] := vi;
end else
vi.paint_pre(cvs);
end
for i,vi in lgns do vi.paint_pre(cvs);
vi.paint_pre(cvs);
end
end
function hit_at(info):bool; //命中处理,鼠标信息
begin
@ -4657,20 +4522,14 @@ type tg_base = class(TNode,tg_evet_conainter) //
function SetParent(V);virtual;
begin
if not check_parent(v) then return ;
p := parent;
r := inherited;
p2 := parent;
if p=p2 then return ;
if p2 then //添加
begin
ax := p2.axes;
if ax then ax.executecommand(cmd_node_add_in,self(true));
end
if p then //移除
if v then ct := v.NodeCount;
r := inherited;
if v then ct2 := v.NodeCount;
if ct2>ct then
begin
ax := p.axes;
if ax then ax.executecommand(cmd_node_del_from,self(true));
end
ax := axes;
if ax then ax.executecommand(cmd_node_add_in,self(true));
end
return r;
end
protected
@ -4826,9 +4685,6 @@ type tg_const = class()
//static const tgc_out_lower_right = "out_lower_right";
//static const tgc_out_lower_left = "out_lower_left";
//////////////
static evt_key_down = "key_down";
static evt_key_up = "key_up";
static evt_key_press = "key_press";
static evt_mouse_down = "mouse_down";
static evt_mouse_wheel = "mouse_wheel";
static evt_mouse_move = "mouse_move";
@ -4843,7 +4699,6 @@ type tg_const = class()
static const cmd_figure_changed = "figure_changed";
static const cmd_data_changed = "data_changed";
static const cmd_node_add_in = "node_add_in";
static const cmd_node_del_from = "node_del_from";
/////////////////////////////////////////////////////////
static const tgc_complementary_color = "complementary_color"; //采用补色
////////////////////////////////
@ -4936,8 +4791,8 @@ type tg_evt_mouse = class(tg_evt_custom) //
fdouble := pms["double"];
fbutton := pms["button"];
fshift := pms["shift"];
fctrl := pms["ctrl"];
fdelta := pms["fdelta"];
fctl := pms["ctrl"];
fctl := pms["fdelta"];
end
end
property cvsx read fcvsx;
@ -4957,28 +4812,6 @@ type tg_evt_mouse = class(tg_evt_custom) //
fctrl;
fbutton;
end
type tg_evt_key = class(tg_evt_custom) //key消息
function create(etyp,pms);
begin
inherited;
if ifarray(pms) then
begin
fshift := pms["shift"];
fctrl := pms["ctrl"];
fkey := pms["key"];
fkeycode := pms["keycode"];
end
end
property key read fkey;
property shift read fshift;
property ctrl read fctrl;
property keycode read fkeycode;
private
fshift;
fctrl;
fkey;
fkeycode;
end
implementation
///////////事件存储对象///////////////////////
@ -5406,7 +5239,7 @@ begin
n++;
return new_bound_factor(a/10,n);
end else
if a<1 then
if a<=1 then
begin
n--;
return new_bound_factor(a*10,n);
@ -5417,7 +5250,6 @@ begin
a_ := a;
b_ := b;
if not(par>=1) then par:=20;//20;
if a=b then return ;
r := new_bound_factor((b-a)/par,n);
if r<>0 then
begin
@ -5440,23 +5272,10 @@ begin
d := bds;
end else
mg_bds(bds,d);
end else
if v is class(tg_axis) then
begin
echo "\r\n axis";
end
end
return d;
end
function get_node_data_bounds_format(nd);
begin
d := get_node_data_bounds(nd);
for i:= 0 to 2 do
begin
if d[i,0]>=d[i,1] then d[i,1] := d[i,0]+1;
end
return d;
end
function modify_text_pos(x_,y_,txtw,txth,al);//修正对齐位置
begin
case al of

View File

@ -172,7 +172,7 @@ type t_worker_host = class(t_worker_base)
{**
@param(OnMessage)(function[TThreadWorker,data]) 消息回调 %%
@param(OnStart)(function[TThreadWorker]) 子线程启动 %%
@param(OnError)(function[TThreadWorker,d]) 子线程运行错误%%
@param(OnError)(function[TThreadWorker,d]) 子线程启动 %%
**}
function terminate();override;
begin
@ -576,7 +576,6 @@ begin
end
function iffuncptr(fn);
begin
return datatype(fn) in array(7,37);
//return datatype(fn)=7;
return ifobj(fn);
end

View File

@ -6,39 +6,65 @@ uses utslvclauxiliary;//,utslvclgdi;
**}
////////////tmf文件相关//////////////////////////////////////////////
/////////////tmf字符串解析///////////////////////
function RegComponentPropertyType(vc);
function RegComponentPropertyType(vc);
function GetComponentPropertyType(n);
type TTmfParserbase = class
{**
@explan(说明) 解析基类,提供基础类型,提供类型常量
目前使用的常量有 TT_NUM,TT_BIN,TT_STR,TT_SYM%%
**}
static const TT_NUM = 1; //数字
static const TT_LLB = 2; //大括号
static const TT_RLB = 3; //大括号
static const TT_LSB = 4; //(
static const TT_RSB = 5; //)
static const TT_STR = 6; //字符串
static const TT_SYM = 7; //符号
static const TT_POI = 8; //点 .
static const TT_SIG = 9; // : + - :< > =
static const TT_BNK = 10; //空白 \r \n \t
static const TT_ITEM = 11;
static const TT_LMB = 12;
static const TT_RMB = 13;
static const TT_SET = 14;
static const TT_HASH = 15;
static const TT_COLL = 0x10;
static const TT_BIN = 0x11;
static const TT_BOOL = 0x12;
static const TT_LIST = 0x13;
static const TT_IDENT = 0x14;
static const TT_HEX = 0x15;
static const TT_COMP = 0x16;
Static Fsok;
static TT_NUM;//数字
static TT_LLB;//大括号
static TT_RLB;//大括号
static TT_LSB; //(
static TT_RSB; //)
static TT_STR;//字符串
static TT_SYM;//符号
static TT_POI;//点 .
static TT_SIG;// : + - :< > =
static TT_BNK;//空白 \r \n \t
static TT_ITEM;
static TT_RMB;
static TT_LMB;
static TT_SET;
static TT_COLL;
static TT_LIST;
static TT_BIN;
static TT_BOOL;
static TT_IDENT;
static TT_HEX;
static TT_COMP;
public
class function sinit();virtual;
begin
end
if not Fsok then
begin
TT_NUM := 1; //数字
TT_LLB := 2; //大括号
TT_RLB := 3; //大括号
TT_LSB := 4; //(
TT_RSB := 5; //)
TT_STR := 6; //字符串
TT_SYM := 7; //符号
TT_POI := 8; //点 .
TT_SIG := 9; // : + - :< > =
TT_BNK := 10; //空白 \r \n \t
TT_ITEM := 11;
TT_LMB := 12;
TT_RMB := 13;
TT_SET := 14;
TT_HASH := 15;
TT_COLL := 0x10;
TT_BIN := 0x11;
TT_BOOL := 0x12;
TT_LIST := 0x13;
TT_IDENT := 0x14;
TT_HEX := 0x15;
TT_COMP := 0x16;
Fsok := true;
end
end
class function PError(msg,lev);
begin
//messagebox(msg,"解析错误",1);
@ -47,7 +73,7 @@ type TTmfParserbase = class
begin
sinit();
end
end
type TTmfParserToken = class(TTmfParserbase)
{**
@ -63,6 +89,8 @@ type TTmfParserToken = class(TTmfParserbase)
FTokens;
FSplitter; //分隔符
FSyms; //符号
FNumberChar;
FHexChar;
Function SetScript(S);//设置文本
begin
IF FScript <> S then
@ -332,6 +360,9 @@ type TTmfParserToken = class(TTmfParserbase)
//Ffloat := FNumbers union array(".");
FSplitter := array(' ','\t',"\r","\n",";",",");
FSyms := array("=",":","(",")","<",">","[","]");
FNumberChar := inttostr(0 -> 9);
FHexChar := FNumberChar union array("a","b","c","d","e","f",
"A","B","C","D","E","F");
end
property Script read FScript write SetScript;
{**
@ -480,67 +511,26 @@ type TTmfParser = class(TTmfParserbase)
end
function gettree2(); //获得继承关系树
begin
tx := mtic;
d := gettreeasobject();
if d then
begin
d.setinhertedpaths(fssourdirs);//设置路径
d.initinherited(); //解析继承的数据文件信息
d.addinode(d.finheritednode); //合并继承的信息
getnodelist(d,lst,dlist); //获取冲突的对象
for i,v in dlist do //删除冲突的成员
begin
try
v["p"].fobjects.deleteindex(v["n"]);
except
end;
end
d.initinherited();
return object2tree2(d);
end
end
function getnodelist(d,lst,dlist); //获取排除对象列表,以及冲突的对象
function inheritedcoy(n,t,ht);
begin
if not ifarray(lst) then lst := array();
if not ifarray(dlist) then dlist := array();
fos := d.fobjects;
for i,v in fos.IndexNames() do
begin
vd := fos[v];
if lst[v] then //父类中的优先级大于最新添加的,因为新加入的不能和原有的重名,如果积累中添加了,子类也应该被删掉
begin
if lst[v,"i"] and not(vd.ifinherited) then //删除当前这个
begin
dlist[length(dlist)] := array("p":d,"n":v);
end else
if vd.ifinherited and not(lst[v,"i"]) then //删除上一个
begin
dlist[length(dlist)] := lst[v,array("p","n")];
lst[v] := array("p":d,"nd":vd,"n":v,"i":vd.ifinherited,"ct":vd.inheritedcount);
end else
if not(vd.ifinherited) and not(lst[v,"i"]) then //删除当前
begin
dlist[length(dlist)] := array("p":d,"n":v);
end else
if vd.ifinherited<lst[v,"ct"] then //删除当前
begin
dlist[length(dlist)] := array("p":d,"n":v);
end else //删除上一个
begin
dlist[length(dlist)] := lst[v,array("p","n")];
lst[v] := array("p":d,"nd":vd,"n":v,"i":vd.ifinherited,"ct":vd.inheritedcount);
end
end else
begin
lst[v] := array("p":d,"nd":vd,"n":v,"i":vd.ifinherited,"ct":vd.inheritedcount);
end
getnodelist(vd,lst,dlist);
end
end
function inheritedcopy(n,t,ht); //构造继承的tfm文本
begin
return inheritedstr(n,t,ht);
d := gettreeasobject();
if d then
begin
d.setinhertedpaths(fssourdirs);//设置路径
d.initinherited();
return d.inheritedstr(n,t,ht,0);
end
return "";
end
function object2tree2(t); //获得继承关系数组
function object2tree2(t); //获得继承关系
begin
r := array();
r["inherited"] := t.ifinherited;
@ -561,21 +551,23 @@ type TTmfParser = class(TTmfParserbase)
objs[v] := object2tree2(fos[v]);
end
r["property"] := ps;
r["object"] := objs;
r["object"] := objs;
return r;
end
function gettreeasobject();//当前tfm对象
function gettreeasobject();
begin
if ftreeobj then return ftreeobj;
gettree();
if FTree then
begin
//ttfmnode
ftreeobj := createndeobjects(FTree);
return ftreeobj;
end
return nil;
end
function createndeobjects(d);//构造tfm对象树
function createndeobjects(d);
begin
if ifarray(d) then
begin
@ -669,7 +661,7 @@ type TTmfParser = class(TTmfParserbase)
end
end
end
function createobj(); //解析对象
function createobj();
begin
{**
@explan(说明) 获取对象 %%
@ -680,12 +672,13 @@ type TTmfParser = class(TTmfParserbase)
if (tv="object" or tv="inherited") and(tt <> TT_STR) then
begin
r := getobject();
r["inherited"] := (tv="inherited")?true:false;
if tv="inherited" then
r["inherited"] := true;
return r;
end
end
end
function getobject();//解析对象内容
function getobject();
begin
{**
@explan(说明) 获得对象 %%
@ -717,46 +710,43 @@ type TTmfParser = class(TTmfParserbase)
begin
ctoken(tv,tt);
lx := tt;
if tt<>TT_STR then
{if tv="item" and(tt <> TT_STR)then
begin
case tv of
"[":
begin
lx := TT_SET;
val := getset();
end
"<":
begin
val := getabitem(tv,fff); // getab();
if fff then lx := TT_COLL;
else lx := TT_ITEM; //TT_COLL;
end
"(":
begin
val := getsb();
lx := TT_LIST;
end
"{":
begin
val := getlb();
lx := TT_BIN;
end
"true":
begin
val := true;
lx := TT_NUM;
end
"false":
begin
val := false;
lx := TT_NUM;
end
else val := tv;
end ;
end else
lx := TT_ITEM;
val := getabitem();
end else}
if tv="[" and(tt <> TT_STR)then
begin
val := tv;
end
lx := TT_SET;
val := getset();
end else
if tv="<" and(tt <> TT_STR)then
begin
val := getabitem(tv,fff); // getab();
if fff then lx := TT_COLL;
else lx := TT_ITEM; //TT_COLL;
end else
if tv="(" and(tt <> TT_STR)then
begin
val := getsb();
lx := TT_LIST;
end else
if tv="{" and(tt <> TT_STR)then
begin
val := getlb();
lx := TT_BIN;
end else
if tv="true" and(tt <> TT_STR)then
begin
val := true;
lx := TT_NUM;
end else
if tv="false" and(tt <> TT_STR)then
begin
val := false;
lx := TT_NUM;
end else
val := tv;
end
function getmembers();
begin
@ -831,6 +821,7 @@ type TTmfParser = class(TTmfParserbase)
begin
ctoken(tv,tt);
if tv="]" and tt <> TT_STR then return r;
//if tv="item" and tt <> TT_STR then r[rl++]:= array("value":getabitem(tv),"type":TT_ITEM);
else if tv="<" and tt <> TT_STR then
begin
v := getabitem(tv,fff);
@ -844,6 +835,7 @@ type TTmfParser = class(TTmfParserbase)
function getabitem(tp,ifitem);
begin
if not ifstring(tp)then endtp := "end";
//else if tp="item" then endtp := "end";
else if tp="<" then endtp := ">";
else PError("dict错误",1);
r := array();
@ -852,7 +844,7 @@ type TTmfParser = class(TTmfParserbase)
while whileok() do
begin
ctoken(tv,tt);
if tv=endtp and tt <> TT_STR then return r;
if tv=endtp {"end"}and tt <> TT_STR then return r;
p := tv;
ptt := tt;
ctoken(tv,tt);
@ -862,7 +854,13 @@ type TTmfParser = class(TTmfParserbase)
if ifnil(val)or ifnil(lx)then PError("item无值",1);
r[rl++]:= array("name":p,"value":val,"type":lx);
end else
PError("item没有=",1);
{if p="item" and ptt <> TT_STR and(length(r)<1)then
begin
ifitem := true;
btoken(2);
return getab();
end else}
PError("item没有=",1);
end
end
function getab();
@ -879,6 +877,10 @@ type TTmfParser = class(TTmfParserbase)
begin
return r;
end else
{if tv="item" and tt <> TT_STR then
begin
r[rl++]:= getabitem();
end else}
begin
return PError("<>内容错误",1);
end
@ -903,7 +905,8 @@ type TTmfParser = class(TTmfParserbase)
begin
return r;
end else
if tv="<" and tt <> TT_STR then
{if tv="item" and tt <> TT_STR then r[rl++]:= array("value":getabitem(tv),"type":TT_ITEM);
else }if tv="<" and tt <> TT_STR then
begin
v := getabitem(tv,fff);
lx := fff?TT_COLL:TT_ITEM;
@ -2272,67 +2275,11 @@ type ttfmnode = class()
end
function create(t,n);
begin
inheritedcount := 0;
fnodename := n;
fnodetype := t;
fpropertys := new tstrindexarray();
fobjects := new tstrindexarray();
finheritedpaths := array();
end
function addinode(nd);
begin
//if not nd then return ;
if nd and nd.finheritednode then nd.addinode(nd.finheritednode);
for i,v in fobjects.IndexNames() do
begin
ov := fobjects[v];
if ov.ifinherited then //继承的控件
begin
if ifobj(nd) then
begin
fd := nd.getnodebyname(v); //ov.fnodename
if fd then
begin
ov.inheritedcount++;
ov.finheritednode :=fd;
end else //不在继承源头,删除
begin
fobjects.deleteindex(v);
end
end else //不在继承源头,删除
begin
fobjects.deleteindex(v);
end
end else
begin
end
end
if nd then
begin
for i,v in nd.getnodenames() do //添加父窗口控件
begin
ov := fobjects[v];
nnd := nd.getnodebyname(v);
if not ov then
begin
fobjects[v] := nnd.copyinh(); //复制属性
end else ov.addinode(nnd); //添加属性
end
end
end
function copyinh();//继承拷贝
begin
r := new ttfmnode(fnodetype,fnodename);
for i,v in fobjects.IndexNames() do
begin
vv := fobjects[v];
vi := vv.copyinh();
r.addobject(vi);
end
r.finheritednode := self;
r.ifinherited := true;
return r;
end
function get_inherited(data);
begin
@ -2343,29 +2290,21 @@ type ttfmnode = class()
begin
nd.setinhertedpaths(finheritedpaths);
nd.initinherited();
finheritednode := nd;
//addinheritednode(nd); 此处屏蔽
end
finheritednode := nd;
addinheritednode(nd);
end
function initinherited();
begin
s := finheritedname;
if s and ifstring(s) then
begin
//////////根据新特性添加//////////////////////////////////////
o :=findclass(s);
if o then
begin
ci := o.classinfo();
data := ci["tfm"];
end
//////////////////////////////////////////////
if not data then data := get_resource_by_name( s+".tfm");
data := get_resource_by_name( s+".tfm");
if data then
begin
return get_inherited(data);
end
end
for i,v in finheritedpaths do
begin
fv := v+s+".tfm";
@ -2384,9 +2323,6 @@ type ttfmnode = class()
end
function addinheritednode(nd); //处理继承的节点
begin
///////////////查找空白/////////////////////////////////////
///////////////////////////////////////////////////////////////
for i,v in fobjects.IndexNames() do
begin
ov := fobjects[v];
@ -2407,15 +2343,8 @@ type ttfmnode = class()
fobjects.deleteindex(v);
end
end
if fd then
ov.addinheritednode(fd);
end
end
function getnodenames();
begin
return fobjects.IndexNames();
ov.addinheritednode(nd);
end
end
function getnodebyname(sb);//获得节点
begin
@ -2498,8 +2427,29 @@ type ttfmnode = class()
r[i] := fpropertys[v];
end
return r;
end
inheritedcount;
end
function inheritedstr(n,t,ht,h);
begin
if ifnil(n) then n := fnodename;
if ifnil(t) then t := fnodetype;
ws := "";
if not(h>=0) then h := 0;
for i:= 0 to h-1 do
begin
ws+=" ";
end
r := ws+"inherited "+n+":"+t;
if ht then r+="("+ht+")";
r+="\r\n";
for i,v in fobjects.IndexNames() do
begin
vo := fobjects[v];
r+=vo.inheritedstr(nil,nil,nil,h+1);
end
r+="\r\n";
r+=ws+"end\r\n";
return r;
end
ifinherited;
finheritedname;
finheritednode;
@ -2507,17 +2457,10 @@ type ttfmnode = class()
fnodename;
fobjects;
private
fpropertys;
fpropertys;
finheritedpaths;
end
function inheritedstr(n,t,ht);
begin
r := "inherited "+n+":"+t;
if ht then r+="("+ht+")";
r+="\r\n";
r+="end\r\n";
return r;
end
function tablelines(str,n);
begin
lines := str2array(str,"\r\n");

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -1,14 +1,3 @@
更新日志--------2025-5-7
升级新增ExportJSONStringMBCS函数提供对中文原码保留。
更新日志--------2025-5-6
修正profiler等窗口被打开时直接退出关闭会导致报告异常。
升级:支持编译错误行号跳转以及包含文件编译错误的跳转。
修正:板块管理中新建板块导致生成多个用户板块节点的问题。
更新日志--------2025-4-29
升级为namespace下的调试提供支持。
更新日志--------2025-4-28
修正:客户机检查语法生成代码跳转依赖时,某些错误发生会导致异常的问题。
修正:某些情况下函数编辑器内无法点击断点的问题。