From 8cd45006e203c6d71adcc5ab961900c1fcd75199 Mon Sep 17 00:00:00 2001 From: JianjunLiu Date: Sat, 21 May 2022 07:02:54 +0800 Subject: [PATCH] =?UTF-8?q?=E8=AE=BE=E8=AE=A1=E5=99=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 拆分代码 --- .gitignore | 2 + designer/examples/action/e_action.tpj | 4 +- designer/examples/action/e_actionmain.tsf | 12 + .../action/resource.tfm/e_actionmain.tfm | 5 + designer/gettslediterstart.tsf | 7 +- designer/gettslvcldesignerstart.tsf | 11 +- designer/tslvcldesigner.tsf | 6982 +++++++---------- designer/udesignerproject.tsf | 861 +- designer/utslcodeeditor.tsf | 5259 +++---------- designer/utslsynmemo.tsf | 34 +- designer/utslvcldebuger.tsf | 3038 +++++++ designer/utslvcldesignerresource.tsf | 1225 +++ designer/utslvclsyntaxparser.tsf | 847 ++ funcext/tvclib/tcomponent.tsf | 20 +- funcext/tvclib/tcontrol.tsf | 9 +- funcext/tvclib/tslvcl.tsf | 118 +- funcext/tvclib/twincontrol.tsf | 4 +- funcext/tvclib/ugtkinterface.tsf | 50 +- funcext/tvclib/utslmemo.tsf | 9 +- funcext/tvclib/utslvclauxiliary.tsf | 285 + funcext/tvclib/utslvclbase.tsf | 10 +- funcext/tvclib/utslvclgdi.tsf | 6 +- funcext/tvclib/utslvclstdctl.tsf | 217 +- .../tvclib/uvcpropertytypespersistence.tsf | 94 +- 24 files changed, 9329 insertions(+), 9780 deletions(-) create mode 100644 .gitignore create mode 100644 designer/utslvcldebuger.tsf create mode 100644 designer/utslvcldesignerresource.tsf create mode 100644 designer/utslvclsyntaxparser.tsf diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..f103e31 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ + +FunCache.ini diff --git a/designer/examples/action/e_action.tpj b/designer/examples/action/e_action.tpj index 0755993..33820d0 100644 --- a/designer/examples/action/e_action.tpj +++ b/designer/examples/action/e_action.tpj @@ -22,6 +22,6 @@ array( ), "mainform":"e_actionmain", "entryscript":"e_action", - "time":"2022-04-08 14:37:00", - "commandline":"\"$(TSL_EXE)\" \"$(FULL_CURRENT_PATH)\" -libpath \"$(SEARCH_PATH)\\;\"" + "time":"2022-04-24 17:32:45", + "commandline":"\"$(TSL_EXE)\" \"$(FULL_CURRENT_PATH)\" -libpath \"$(SEARCH_PATH)\"" ) \ No newline at end of file diff --git a/designer/examples/action/e_actionmain.tsf b/designer/examples/action/e_actionmain.tsf index 4fe2330..c71289f 100644 --- a/designer/examples/action/e_actionmain.tsf +++ b/designer/examples/action/e_actionmain.tsf @@ -14,6 +14,18 @@ type E_Actionmain=class(tdcreateform) begin inherited; end + + + function action1_onexecute(o;e); + begin + {** + @explan(˵) onexecuteϢص % + @param(e)(tuievent) Ϣ % + @param(o)(tcomponent) % + **} + echo "\r\naction do "; + end + function btn5_clk(o;e);virtual; //޸caption begin action1.caption := datetimetostr(now()); diff --git a/designer/examples/action/resource.tfm/e_actionmain.tfm b/designer/examples/action/resource.tfm/e_actionmain.tfm index 316727e..9bc7f8c 100644 --- a/designer/examples/action/resource.tfm/e_actionmain.tfm +++ b/designer/examples/action/resource.tfm/e_actionmain.tfm @@ -18,9 +18,12 @@ object e_actionmain1:e_actionmain object actionlist1:tactionlist left=225 top=189 + height=30 + width=30 object action1:taction caption="actionĿؼ" enabled=true + onexecute=action1_onexecute end end object btn2:tbtn @@ -59,6 +62,8 @@ object e_actionmain1:e_actionmain object popupmenu1:tpopupmenu left=162 top=329 + height=30 + width=30 caption="popupmenu1" object menu1:tmenu action=action1 diff --git a/designer/gettslediterstart.tsf b/designer/gettslediterstart.tsf index e9a474f..f5a9055 100644 --- a/designer/gettslediterstart.tsf +++ b/designer/gettslediterstart.tsf @@ -6,8 +6,13 @@ ops := ""; GLobal G_OpenHostory; G_OpenHostory := true; //Ĭϴʷ hasinstance := true; // +isdebug := false; for i:= 0 to sysparamcount() do begin + if ("-DEBUGSERVER" = sysparamstr(i)) then + begin + isdebug := true; + end else if (iv then begin @@ -88,7 +56,12 @@ type TDComponent = class() end end end - + private //Ĭ¼ + FDefaultEvent; + function GetDefalutEvent(); + begin + return feventnametable[FDefaultEvent]; + end public function libs();virtual; begin @@ -104,12 +77,13 @@ type TDComponent = class() **} return true; end - class function ClassName();virtual; + function dclassname();virtual; begin {** @explan(˵) ؼ úoverride%% **} - return "tcomponent"; + r := ComponentClass().classinfo()["classname"]; + return r; end function ComponentClass();virtual; begin @@ -119,7 +93,7 @@ type TDComponent = class() return WndClass(); end - class function HitTip();virtual; + function HitTip();virtual; begin {** @explan(˵)ʾ úoverride%% @@ -166,17 +140,9 @@ type TDComponent = class() {** @expand(˵) ͼbitmapϢ %% **} - return GetDefaultIconInfo(); + return getdefaultbmpinfo(); end - function ClassObject();virtual; - begin - {** - @ignore() %% - @explan(˵) Ĺ캯 úoverride %% - **} - return self(true).classinfo(1); - end function WndClass();virtual; begin {** @@ -528,7 +494,7 @@ type TDComponent = class() v := lowercase(v); if v=odn then return false; if v in TemporaryNotName then return false; - cn := ClassName(); + cn := dclassname(); obj.name := v; if v=(obj.name) then begin @@ -562,7 +528,7 @@ type TDComponent = class() obj := GetTrueComponent(); if obj then begin - cn := ClassName(); + cn := dclassname(); cn1 := cn[1]; if cn1="t" and length(cn)>1 then begin @@ -601,12 +567,6 @@ type TDComponent = class() FDefaultEvent := ev["event"]; end end - private - FDefaultEvent; - function GetDefalutEvent(); - begin - return feventnametable[FDefaultEvent]; - end public function geteventfunctionbyname(n); begin @@ -657,1363 +617,7 @@ type TDRootComponent = class(TDComponent) return (Pwnd is class(tvcform)) or (Pwnd is class(tpanelform)); end end -//**********red**DControl***************************** -type TDedit= class(TDComponent) - class function HitTip();override; - begin - return "ıؼ"; - end - function bitmapinfo();override; - begin - return "0502000000060400000074797065000203000000696D670006040000006461746 -10002D201000089504E470D0A1A0A0000000D4948445200000018000000180806 -000000E0773DF8000000017352474200AECE1CE90000000467414D410000B18F0 -BFC6105000000097048597300000EC300000EC301C76FA8640000016749444154 -484BED93B18AC2401445D30BDAA51214044997C6D680A2A435D8DB59FA0D0BFE4 -26C52588B9FB06065C02A453A0B9580A50A12B5D03477796F278B59571CC16CE5 -8107F74E60CE304314A4CC5BF090FF117C0C3F539984E0D53C2598CD6668B7DBA -225511485E7777E4A309D4E619AA6687F136F1C735710451156AB1576BB9D5849 -0A96CB25C230E47C8D9460B15840D775B45A2D94CB650C06035E2741B55A85655 -93C854201B66DF3B71829C17EBFC7F178E44CB252A9C49904994C06411070DF6C -36505515DBED963B2125A0EB711C079D4E874F9CCBE5789D048661708EA9D56A7 -05D57344941AFD743B7DBC57C3EC7E1704808EAF53AE7984AA502DFF7459314D0 -29279309E7F1789C1064B359ACD76BEE9EE7A1582CE272B97027A404A3D108F97 -C1ECD6613FD7E9F1F93A0FFA0D168F0E3D3D5699A96B81E424A40D0A9CEE7B368 -B79C4E2791BEA18DE3CDAFF35DC1ABB811A4313F8234790B1E92B200F80266B31 -3963A1FCCDB0000000049454E44AE42608200"; - end; - class function ClassName();override; - begin - return "tedit"; - end - - function ClassObject();override; - begin - return class(TDedit); - end - function WndClass();override; - begin - return Class(tedit); - end - function Create(AOwner);override; - begin - inherited; - end - function IsContainer();override; - begin - return false; - end -end - -type TDmemo= class(TDComponent) - class function HitTip();override; - begin - return "ı"; - end - function bitmapinfo();override; - begin - return "0502000000060400000074797065000203000000696D670006040000006461746 -100027103000089504E470D0A1A0A0000000D4948445200000024000000240806 -000000E1009898000000017352474200AECE1CE90000000467414D410000B18F0 -BFC6105000000097048597300000EC300000EC301C76FA8640000030649444154 -5847ED96DD4F52711CC6A1EEB21B2FEA3FD07FC0D98DAD1BB76EF2A23B6FEAA2B -A68D3CD2D6D6D66EAD6EB48D010255158CA459B93B9C4347039D37005A8883A82 -5E6C1C5FC68B5BE69029439FCEF7B08327E4E086076BCECFF6BBE0EC1CCEE73CC -FF7F04386FF8C132162777717ABDFBF61F9AB0FF1789CFBCC73E4427473C6FB05 -F6B379982E2F87C73583ADADADA498A850A3C12AFDD25B50ABE9852D3F1FE8EE4 -654A5C2DB9212B8ED9F108D46B1B3B39359484AE8E983C1203A3B7530299AF05B -A100535A0A7761219ACF9FC3DA5A984BEA488448666565199393362C2EFEC0C88 -8152F6EDE80A3A000E6BC33E8AAAB83DFEF472412C9BD10C9F8FD2E188D8F303E -FE81139A9E9E82C1A047CDA58B50D754C36EB7836198DC0BF1320B0B173036F60 -C66730FBB06303838C80A1AA1D777C166FB08AFD78B70388BCA8A8A8A0E5C3C09 -9959B8DDC570B95AD819512210B80C8DA606F50D0DE8E979C5C9783C1E6EB6723 -AD4BCCCDC5C31666654EC0D9BD8A365181A3A85D1D1D3B856796F9F0CBDF684E4 -42C29A9C4E257BC3E7ECD1320C0FCB593919B4DA0ADCAA6DDE2743D7119254C6F -3B78C8A9D8B443266B39C1D6419DADB2BB8642A1FEBD3CA10922524AC89662614 -4A2443325353245399ACE96E4B6F5A19421221A10CCD4C20B0571325A3D5EEC95 -032752FCD696588AC2BE3A12F6518773219A14C6A327C4D0D5DEFD2CA10874E68 -7B7B1B86D6EB7863AA4FD63430202E43C9D09E26C6A184E82927462D887826F0B -EAF1DB1D815F4F7CBD98196A1ADAD2AAD0C5D93E9BBB3AE8C564747074C8656C4 -995944662D303DBD0D8743CEFEF8256484E70A674632A154363737F1E46123829 -FCDF8D9A740F79DAB68D33CE036D174C9F0E44CC86AB540A954E27E7515FA5E1B -B9CDD3E974C0E7F3B1F314127DB52513125640D066180A053981F9F9796E935C5 -A62A056AB93E751ADA9E42CA1582C868D8D0DEECF55381CC2FAFA2FAE463A4E1B -A5183913CA16C9848495A52E9D4E97F11C21C73721A9904C28B506B19AD21D177 -27C13928A13A183C85A28974B0C51A17FC5895066803FCD8B95CBA6C573F60000 -000049454E44AE42608200"; - end; - class function ClassName();override; - begin - return "tmemo"; - end - - function ClassObject();override; - begin - return class(TDmemo); - end - function WndClass();override; - begin - return Class(tmemo); - end - function Create(AOwner);override; - begin - inherited; - DefaultEvent := array( - "event":"onchange", - "name":"change", - "param":array("o","e"), - "virtual":true, - "body": -" - {** - @explan(˵) ııص %% - @param(e)(tuievent) Ϣ %% - @param(o)(tmemo) ı %% - **} -" - ); - end - function IsContainer();override; - begin - return false; - end -end -type TDpassword= class(TDComponent) - class function HitTip();override; - begin - return ""; - end - function bitmapinfo();override; - begin - return "0502000000060400000074797065000203000000696D670006040000006461746 -10002F300000089504E470D0A1A0A0000000D4948445200000024000000240806 -000000E1009898000000017352474200AECE1CE90000000467414D410000B18F0 -BFC6105000000097048597300000EC300000EC301C76FA8640000008849444154 -5847ED91010A80300845BD795DA48374BA859065C36644A163FFC18789321E4A2 -51910F2809007843CF20A4DCB1A1AE12214C5D8424474C4AA99B00D69094DBF42 -44F3FEBABE6B9ECF41C89B7B29C49FB622583D9D1A9C8CF945883F6D45B07A3A3 -538193396D0D7A4106209895533611BBAA31FA1C808E7219300210F087940A84D -291BB496CCEA5B2547890000000049454E44AE42608200"; - end; - class function ClassName();override; - begin - return "tpassword"; - end - - function ClassObject();override; - begin - return class(TDpassword); - end - function WndClass();override; - begin - return Class(tpassword); - end - function Create(AOwner);override; - begin - inherited; - end - function IsContainer();override; - begin - return false; - end -end -(** -type TDtrackbar= class(TDComponent) - class function HitTip();override; - begin - return ""; - end - function bitmapinfo();override; - begin - return "0502000000060400000074797065000203000000696D670006040000006461746 -100026701000089504E470D0A1A0A0000000D4948445200000024000000240806 -000000E1009898000000017352474200AECE1CE90000000467414D410000B18F0 -BFC6105000000097048597300000EC300000EC301C76FA864000000FC49444154 -5847EDCE310AC2401085E1345676E2592CBC876061A3A59E40B0C8416CAC3C400 -A1B0B0BCBA0206A2A53580882A0A0A006C9E8CAAE923871125835C2FCF020EC66 -E133206531888A41540CA2224146694A4E67E9055996850E038487BD4B3A55006 -4DBF6CB304078D8BB2463103506516310B54810360C101EF62EE9540F5054D9CA -1C45A8897B9D91A0EE708742D43A83ADFC534F2448546FAF504CE376AEBB5820E -FE243B1E5063085E6024E9E2FFFD0572C9068B9F1205F73EE985CD501777D9637 -7A8B0D12F52707C89467D01BEFE589FE12814423F728BF3E130A324D537E3DFBC -69988412AEC4CF41FA05FC6202A065131E87D0057498A8BEBDBFB6A1400000000 -49454E44AE42608200"; - end; - class function ClassName();override; - begin - return "ttrackbar"; - end - - function ClassObject();override; - begin - return class(TDtrackbar); - end - function WndClass();override; - begin - return Class(ttrackbar); - end - function Create(AOwner);override; - begin - inherited; - end - function IsContainer();override; - begin - return false; - end -end -**) -type TDcomboBox= class(TDComponent) - class function HitTip();override; - begin - return "ѡ"; - end - class function ImageId();override; - begin - return 6; - end - function bitmapinfo();override; - begin - return "0502000000060400000074797065000203000000696D670006040000006461746 -100023501000089504E470D0A1A0A0000000D4948445200000024000000240806 -000000E1009898000000017352474200AECE1CE90000000467414D410000B18F0 -BFC6105000000097048597300000EC300000EC301C76FA864000000CA49444154 -5847ED92C109C42010452D45F094A385A4A65461135660375EEC220797C92ABBD -90C314AD4ECE0838F8387CF6318E61FC6104AB1139AE7B969300E427772D6D755 -C839B7BD409CB3859665294E04FAD675F5D33479A5D41698E1AF9B1060ADF59CF -32D3003D94277F0DD07225106E82EF4CB65A196C1A8BAA13386508A2221C6D82D -D15A87C60F343654131A42D83D5C8D3126B4E0D0D8504D680861B791132965683 -A42634335A12184DD45698410A1F50D8D0DD5E47F855A066327F40486508A2174 -8EF72FB778FABEB46AB5F60000000049454E44AE42608200"; - end; - class function ClassName();override; - begin - return "tcombobox"; - end - function ClassObject();override; - begin - return class(TDcomboBox); - end - function WndClass();override; - begin - return Class(tcomboBox); - end - function Create(AOwner);override; - begin - inherited; - DefaultEvent := array( - "event":"onselchanged", - "name":"sel", - "virtual":true, - "param":array("o","e"), - "body": -" - {** - @explan(˵) itemѡıص %% - @param(e)(tuievent) Ϣ %% - @param(o)(tcomboBox)comboboxؼ %% - **} - MessageBoxA('ѡid:'+tostn(o.itemIndex),'ʾ',0,o); -" - ); - end - function IsContainer();override; - begin - return false; - end -end -type TDColorComboBox= class(TDComponent) - class function HitTip();override; - begin - return "ɫѡ"; - end - class function ImageId();override; - begin - return 6; - end - function bitmapinfo();override; - begin - return "0502000000060400000074797065000203000000696D670006040000006461746 -100023001000089504E470D0A1A0A0000000D4948445200000024000000240806 -000000E1009898000000017352474200AECE1CE90000000467414D410000B18F0 -BFC6105000000097048597300000EC300000EC301C76FA864000000C549444154 -5847EDD1DF09C32010C77147F13513640AD7C81A9DC2453A45B7F0C52D7CB039F -1A0A1FEC9859C49E03EF02392807C6955BC1909EAD904196386AEE42FE84CADFB -E841EFD7F165789FF73E3D019EE941CBFAE9E832B82F8410A7698AD6DA3438C3B -BCB8280732E6AADD3E00CE841A5BF62EFB2DFFB200463003DE804ADFB76078D5C -09EB2FD4F2FC20B5F00C49506D881CC44D827AE8416AFDC4B14C82AACBE841CC2 -4A8871C347F66962109AA0D9183B84950CF738346AE6413740712D416E317FE0C -479C51B569C20000000049454E44AE42608200"; - end; - class function ClassName();override; - begin - return "tcolorcombobox"; - end - function ClassObject();override; - begin - return class(TDColorComboBox); - end - function WndClass();override; - begin - return Class(tcolorcombobox); - end - function Create(AOwner);override; - begin - inherited; - end -end -type TDradiobtn = class(TDComponent) - - class function HitTip();override; - begin - return "ѡ"; - end - function bitmapinfo();override; - begin - return "0502000000060400000074797065000203000000696D670006040000006461746 -10002AD02000089504E470D0A1A0A0000000D4948445200000024000000240806 -000000E1009898000000017352474200AECE1CE90000000467414D410000B18F0 -BFC6105000000097048597300000EC300000EC301C76FA8640000024249444154 -5847ED96C96EE2401086E7F5B23C14121C13D63B08DE055022E0C076040408894 -54A2EEC4835FE9CB2C621B6BB1D26520EFEA492ACEAEAF2EFEEEA6AFF915F4622 -C84422C84422C8C44D8296CBA574BB5D69341AAEF1BC5AAD74F47BC416743E9FA -55EAF4BA15090542A15688C2190D8B8C412349D4E259BCDBA2FADD56AD26EB765 -B3D9C8E974726DBD5EBB3EC688C9E572329BCD74B61DD682FAFDBEA4D36929954 -A32994CD41B0E31C5625132998C0C0603F59AB112C4CA20A652A9C87EBF57AF19 -62CBE5B22BCA76A58C82A803B689958923C663B7DBB92B95CFE7E572B9A8371CA -3200A987A188FC7EAF94CB3298EE00FE33908B68F1C14BA09A3204E0C457ACDDB -9BC8DD9D93C0C9E0B7FB7B91F7770DF251AD56DD95321129883EC397753A1DF5F -C23488C670F0F1AE4A3D56AB9B94C7DCA991E0E8D8E241C6D3F6C4D9010BFBDBC -68B0424B2057AFD7534F30CED470BCFA391E8FEAF9E0E9E9AB806B7B7ED660851 -CE432D59133351C267F571045EEE77038DC2EE8D76D19054812AE836B384D4142 -B0C7470DF2E11535C2A270A647C3510D3AF61C6D4E5390981F3BF6E015F668345 -2CF67D81AEAC5B947E5F5559D57788DB119D6397D18057175706BD3FAB7DBAD7A -EDF9EF57072C160BF782E4A2E405B610EB5DAEF3F95CBDD15809027E2148CCD78 -6DD6B7E88219639C3E150BD66AC0501BF102C3DF5409172723835F4298C677C8C -1143ACEDCA78C41204D401CD8DAFE7A541C618056C5333D7C416E48715A179F27 -28C67539F317193A09F2011642211642211148DC85F768426F04BC530CE000000 -0049454E44AE42608200"; - end; - class function ImageId();override; - begin - return 6; - end - - class function ClassName();override; - begin - return "tradiobtn"; - end - function ClassObject();override; - begin - return class(TDradiobtn); - end - function WndClass();override; - begin - return Class(tradiobtn); - end - function Create(AOwner);override; - begin - inherited; - end -end -type TDipaddr= class(TDComponent) -{** - @explan(˵)ipƿؼ%% -**} - class function HitTip();override; - begin - return "ipַؼ"; - end - function bitmapinfo();override; - begin - return "0502000000060400000074797065000203000000696D670006040000006461746 -10002B402000089504E470D0A1A0A0000000D4948445200000020000000200806 -000000737A7AF4000000017352474200AECE1CE90000000467414D410000B18F0 -BFC6105000000097048597300000EC300000EC301C76FA8640000024949444154 -5847B5963D8B14411086E7771819980882B870F88170222A2826228A81707881C -1B1818966C7456AA226FA238C4C04115610111185FB211E9C7A6A20D33353774F -431DDD3DDD3D33BBB3EFF232B3555D55EFCCF4471532005FEA6FB2593D966BE69 -69C3697E4989958728F0D1F6386A053C00FD99167D54B395F5E9523E5F15E642C -31C476212B8024A7CC6AB4481F124B8E1C92026E98BBD1A4F3905C2944059C28C -F45132D4272C6D012C0848A251883E40EE109B85F3D88068E496AB83814C06489 -052C83EEC4B402582EA9D97ED3AC2599F34FCA0BAD5C4A6AE912B502724F9F5A4 -614C9F9C16EF353BE37DB72BDBA93CC6B059C292FB70628870A785EBFB2B6D7CD -1BF9DC7CB5B63DF923EBD5D4CB4B4D507CA83F798E90FA4A5DA80D7F28208C7F5 -BBFB776AEA18FDAC5A36AABE508190A707D5D0234F66FF3AFE5A376C121123A42 -2E228009A7D0B7A6A476D167E35944C056FDD4DAFF1FFC8E96273D1FB50B8E53D -718E33C0256CC456FD379D7CCBC3848EDD105C4F04B7ECB5973C58B8356C0D89F -20C4ACF9286BD58617A3B49F60CC49A87BC093FA854CAB8772DBDCF3C686B4939 -0362AE674D95700F7AEAF8BD42EE8E1624E97CB12406DBB15E7FA3D92868D26FF -11A57EC51001D404A31E464304685CE771CC409E38A42B406D7D05B48E633044F -DA2D4A7078702C0989D708A6187EC0900CBE88895B1CEB82500F4D91D87929C31 -440580313BE4B01376911400D85A53ABA30F8975275C0C590180E542925CDF189 -2B1C4E852CBA153800B7A38DA280E11BE29C729E41E1B3EC6F487C83E6F6E81BB -6E01F9710000000049454E44AE42608200"; - end; - class function ClassName();override; - begin - return "tipaddr"; - end - function ClassObject();override; - begin - return class(TDipaddr); - end - function WndClass();override; - begin - return Class(tipaddr); - end - function Create(AOwner);override; - begin - inherited; - end - -end -type TDmessagebox = class(TDRootComponent) - class function HitTip();override; - begin - return "ʾ"; - end - function bitmapinfo();override; - begin - return GetMessageBoxBitmapInfo(); - end; - - function classification();override; - begin - return "Ի"; - end - class function ClassName();override; - begin - return "tmessageboxadlg"; - end - function ComponentClass();virtual; - begin - {** - @explan(˵) ؼ %% - **} - return class(tmessageboxadlg); - end - function ClassObject();override; - begin - return class(TDmessagebox); - end - function WndClass();override; - begin - return Class(TDMessageboxWindow); - end - function Create(AOwner);override; - begin - inherited; - end -end -type TDMessageboxWindow = class(TDVirutalWindow) -{** - @explan(˵) ɫѡؼ %% -**} - public - function Create(AOwner);override; - begin - inherited; - BindComp := new TMessageboxADlg(self);; - end - function GetPublishEvents();override; - begin - return array(1:nil); - end - function bitmapinfo();override; - begin - return GetMessageBoxBitmapInfo(); - end; -end - -//***********zh**DControl*********************** -type TDListBox=class(TDComponent) -private - FLBItemEdit; -public - function isContainer();override;begin - return 0; - end - class function HitTip();override;begin - return "б"; - end - class function ClassName();override;begin - return "tlistbox"; - end - function setItems(o,e);begin - if ifnil(FLBItemEdit) then - FLBItemEdit:= new TItemEditer(); - // {α} - // FLBItemEdit.setdata(FlistBox.getdata()); - // FLBItemEdit.onOK:=void(){FlistBox.setData(FLBItemEdit.getdata());} - end - function menus();override;begin - r := inherited; - r[length(r)] := array("type":"menu","caption":"݋б","onclick":thisfunction(setItems)); - return r; - end - function ClassObject();override;begin - return class(TDListBox); - end - function WndClass();override;begin - return Class(tlistbox); - end - function Create(AOwner);override;begin - inherited; - end - function bitmapinfo();override;begin - return "0502000000060400000074797065000203000000696D670006040000006461746 -100025401000089504E470D0A1A0A0000000D4948445200000024000000240806 -000000E1009898000000017352474200AECE1CE90000000467414D410000B18F0 -BFC6105000000097048597300000EC300000EC301C76FA864000000E949444154 -5847ED96410EC2201045390ADB1E86E371122FE0A69C807D37BD451798C192D8F -643156841C24B5E6C884E5E9C6860A6327AD0199B2021C4AD220E413909CD2B1E -344D93D55134884238E756171515C418FB49A5D4FAC937346F5916330C8391525 -AE999CEA2825271F3E679B6AF847B2E1A84880A426B41FA86D37948C4E5DFD0F8 -7C40DB0842EB09897E6528868C0A4AA5FD20B496BD5AEBF5DD47B207A5D27E105 -A11D2373C7B502AED07A1F584FC8B3FC69088CB837C4405A1B5207DC3DD795517 -B42AAFB0D92EF9A97CCEA3101743140FDAF375D09D22364135D083CEE841618C7 -90143F9BE01B37879820000000049454E44AE42608200"; - end -end -type TDColorBox=class(TDComponent) - function isContainer();override;begin - return 0; - end - class function HitTip();override;begin - return "ɫб"; - end - class function ImageId();override;begin - return 5; - end - class function ClassName();override;begin - return "tcolorbox"; - end - function ClassObject();override;begin - return class(TDColorBox); - end - function WndClass();override;begin - return Class(tcolorBox); - end - function Create(AOwner);override;begin - inherited; - end - function bitmapinfo();override;begin - return "0502000000060400000074797065000203000000696D670006040000006461746 -100025B01000089504E470D0A1A0A0000000D4948445200000024000000240806 -000000E1009898000000017352474200AECE1CE90000000467414D410000B18F0 -BFC6105000000097048597300000EC300000EC301C76FA864000000F049444154 -5847ED96B10D833010451985969A822958838D3C49164813295BD0B00585C3593 -AC9266793B33E06059EF48485A5F32B5CB8B227E30EDA2208EAFBBEA8125F4148 -52F30E0F1AC7D1C9E8838665CB37039E4721755D3B390A16D4B6EDA60CCD9BE7D -9364D638D314E5AD3BFC38288699ADC97E0352C4843EC50421F0480E6A594D83D -E8F57C88AA83AA2134872241D22566D75C3348033408C19F0755CB966F064582A -4CBBC96B96690066C10805306A594880675EF2E3087D8A1042C48BAC4BE3E3C0F -F2404305C19EB0B1200D3C0FF3C807E0CFA3108E210E0F5AF37350492582A0337 -0076D7107A5B1F6034F9699CCB1141CEB0000000049454E44AE42608200"; - end -end -type TDCalendar=class(TDComponent) -private - -public - function isContainer();override;begin - return 0; - end - class function HitTip();override;begin - return ""; - end - class function ImageId();override;begin - return 5; - end - class function ClassName();override;begin - return "tmonthcalendar"; - end - function ClassObject();override;begin - return class(TDCalendar); - end - function WndClass();override;begin - return Class(tmonthcalendar); - end - function Create(AOwner);override;begin - inherited; - end - function GetPublishEvents();override;begin - r:=inherited; - if r then - reindex(r,array("ondrawitem":nil,"onpaint":nil)); - return r; - end - function bitmapinfo();override;begin - return "0502000000060400000074797065000203000000696D670006040000006461746 -100029901000089504E470D0A1A0A0000000D4948445200000018000000180806 -000000E0773DF8000000017352474200AECE1CE90000000467414D410000B18F0 -BFC6105000000097048597300000EC300000EC301C76FA8640000012E49444154 -484BED94B1AA82501CC6DD7C010D71745268953B2AEE3E40F80A2E977A1371095 -C0D8256C1390209DC5C05373721084104BF8BA77335A2AB51D725FAC187E77F3E -F0770E884CC23098321FC168DE40F0F51D612ADA77BFB160B55A41D775489284F -D7E4F772F6CB75BB27F9DC3E140DB9E41C172B9C466B301C77108C390EE5EF03C -0F8661204DD32E6559D2B66750F08B288A7705A669D2E96F5E12F03C0F5996A16 -91AD6EB359AA6A16DCFD382388E110401922481EFFB98CD66701C87B63D4F0B6E -715D17AAAAD2A9E7DF04EDC7A0280A9D7A0605A7D3094551401004EC763BB2AEE -B9A745114A1AA2AB2CEF39C9CDEB66D325F332898CFE760DA7FC9558EC723E92C -CB02CBB2E476ED73B1589003DD322818E37C3E23CBB2EE26F77849F0081FC1289 -D60BA44F8013782F60023EBD3020000000049454E44AE42608200"; - end -end -type TDProgressBar=class(TDComponent) - public - function isContainer();override;begin - return 0; - end - class function HitTip();override;begin - return ""; - end - class function ImageId();override;begin - return 5; - end - class function ClassName();override;begin - return "tprogressbar"; - end - function ClassObject();override;begin - return class(TDProgressBar); - end - function WndClass();override;begin - return Class(tprogressbar); - end - function Create(AOwner);override;begin - inherited; - end - function bitmapinfo();override;begin - return "0502000000060400000074797065000203000000696D670006040000006461746 -100024C02000089504E470D0A1A0A0000000D4948445200000024000000240806 -000000E1009898000000017352474200AECE1CE90000000467414D410000B18F0 -BFC6105000000097048597300000EC300000EC301C76FA864000001E149444154 -5847ED95476E633110447DAB39978FA395749C11A09C73CE3967A907D540CBF46 -75BF46EB46003B57109CDA72A52FEA0371B0FE41A0FE41A0FE41A0FE41A0FE41A -068A4422140A85FEABC0F004C21FB6DB2D9D4EA7A78EC7231D0E07DAEFF7ACDD6 -EC79FD96C36B45EAF9F5AAD56B45C2E69B158D07C3EA7D96CC69A4EA734994C68 -3C1ED36834A2E1704883C180D5EFF7A9D7EB51B7DB65351A0D66F806743E9FE9F -178D0FD7E67DD6E37BA5EAF74B95CD8D34005D20435014D48133008D96AB56C20 -1C04883F9F7F2D0984E60984E601E23749359B4D1B08DF1869688B250DCD93343 -4CF841010B3AE4EA7C3AAD7EB3610224725DA62A944F3A412CD0B429820ED769B -AB423AD56AD50642EC48425B0CEF552DA844F38269088480E032239D52A964032 -17A24A12D96CBA9795289E64925661A0201D56A354EA75028D840381017545B2C -AF44F3A412CD13081344202A950AAB5C2E532E97B381702052D216CB2BD13CA94 -4F38210020208D4542C16399D4C26630321FA5797F3552DA844F3CC3404C204C9 -E7F39C4E3299B48110FD4F3F5CAE57E2AA24082120D96C96D3492412361096BB5 -E832BFA9F0E84D2E934A552294E0300F1789C158BC5281A8D7E077A877FAEE170 -F80BE89DC603B9C603B9C603B9C603B9C603BD1EA27F2BABB3A7A95F430C00000 -00049454E44AE42608200"; - end -end -type TDCheckBtn=class(TDComponent) - public - function isContainer();override;begin - return 0; - end - class function HitTip();override;begin - return "ѡ"; - end - class function ImageId();override;begin - return 5; - end - class function ClassName();override;begin - return "tcheckbtn"; - end - function ClassObject();override;begin - return class(TDCheckBtn); - end - function WndClass();override;begin - return Class(tcheckbtn); - end - function Create(AOwner);override;begin - inherited; - DefaultEvent := array( - "event":"onclick", - "name":"clk", - "param":array("o","e"), - "virtual":true, - "body": -" - {** - @explan(˵) ص %% - @param(e)(tuievent) Ϣ %% - @param(o)(tcheckbtn)ѡť %% - **} - MessageBoxA(((o.checked)?'ѡ':'ûѡ'),'ʾ',0,o); -" - ); - end - function bitmapinfo();override;begin - return "0502000000060400000074797065000203000000696D670006040000006461746 -100023A02000089504E470D0A1A0A0000000D4948445200000024000000240806 -000000E1009898000000017352474200AECE1CE90000000467414D410000B18F0 -BFC6105000000097048597300000EC300000EC301C76FA864000001CF49444154 -5847EDD64B4EC2501406602638C10487C484810B70EC0274430E7527121640888 -AACC0A9C1F22ECF02A52D85D296D70A7E295822A5F6564E8D0EFA2767D873BFDC -474E23F8670941AC84205642102B9EA09BFB775CDDBE055A564FAF7882AC06ABD -50ACBE5128BC502F3F91CB3D90CA669C2300CE8BA8EE9740A4DD330994C301E8F -A1AA2A46A3111445812CCB902409C3E110A2286230186C7A7A85090A12D3EFF7E -9A02031BD5E8F0E3A162308D2014610043AE818CCEBAB846452472A25EF61BADD -2E1D740C26913010899888460D3C3C58BBB5C5743A1D3AC80DA3AA6C8C5D27272 -6D269718369B7DB74901393CF6BB8BC34C0712A1363553C6EE0E9A9BFC1B45A2D -3AC889393DDD2E747161A050507E8469369B74908D7979D1108BED2F68A13219C -5157376A6AFBFE9ED611A8D061D645FE07C7EB2DB1D56B9ED8C85E1799E0EFAFA -9A72399589F2C2D4EB753AC8F99A9E9F47EBA33B3C223F985AAD4607399FB6350 -E1E1FE503941F4CB55AA5839C187B1C64B3D20EE51753A954E820378C3D0E3219 -11E7E7BA6F4CB95CA683BEC3D8E380E7BBBE31A552890EF2C2D8E3C02FA6582CD -2414162388EA38382C49041BFF1937F7D57F8ECEE1E4FD05F2404B11282580941 -DE013E00FF2B90FB3AF2B1880000000049454E44AE42608200"; - end -end -type TDDateTimePicker=class(TDComponent) -private -public - function isContainer();override;begin - return 0; - end - class function HitTip();override;begin - return "ʱѡ"; - end - class function ClassName();override;begin - return "tdatetimepicker"; - end - function ClassObject();override;begin - return class(TDDateTimePicker); - end - function WndClass();override;begin - return Class(tdatetimepicker); - end - function Create(AOwner);override;begin - inherited; - end - function bitmapinfo();override;begin - return "0502000000060400000074797065000203000000696D670006040000006461746 -100020E01000089504E470D0A1A0A0000000D4948445200000018000000180806 -000000E0773DF8000000017352474200AECE1CE90000000467414D410000B18F0 -BFC6105000000097048597300000EC300000EC301C76FA864000000A349444154 -484BD58FD10D83300C44D9285B650D6FD14DFACD10198221F2E1F62C8C5C29941 -80C88279D8C2C398F1BF864AE13E49CC362F91178D19B5AAB046C0A88C6AE00DC -945238A524C177B8001091046C0A3CB46EFE0AA26239D4A04597E0F59EDC51BA0 -57B260869C0C3F76CCEB29B0969208F9BB94B20478D3F5DDB2BAE06F28899BA5F -9B20A4412B8AAB81770257034F942EC111EE1544C5B208CEE2E902E60FE420D1B -CC541E3100000000049454E44AE42608200"; - end -end -type TDTimePicker=class(TDComponent) - public - function isContainer();override;begin - return 0; - end - class function HitTip();override;begin - return "ʱѡ"; - end - class function ClassName();override;begin - return "ttimepicker"; - end - function ClassObject();override;begin - return class(TDTimePicker); - end - function WndClass();override;begin - return Class(ttimepicker); - end - function Create(AOwner);override;begin - inherited; - end - function bitmapinfo();override;begin - r := "0502000000060400000074797065000203000000696D670006040000006461746 -100024C02000089504E470D0A1A0A0000000D4948445200000018000000180806 -000000E0773DF8000000017352474200AECE1CE90000000467414D410000B18F0 -BFC6105000000097048597300000EC300000EC301C76FA864000001E149444154 -484BDD95CB2F434114C6FD0D96D65D5AD8B0B42376B622362291486C88C442626 -3819060A189854A4988054917E2FD4A4BC43BA242545BFAD097BEB455F5F8DC73 -EF54AFA90CF558F04B4E7266EECD7C933373E6CBC32FF3CF04F2B5E72818B240A -3B3A2506F43F1F8254A27AF503EE540A5C189AA19376AE7AFD1B0EC41F39A176D -1B7E746C05D0BB7B83C1C310868FC398388DB2D514DE086874172C7B1FADB4088 -508A14089B463114667420E1142818A6907CBBE8E50A05AAAF177110A34AE7859 -96C11CB887FE24024B28C56614561D71985C776C944128D0BEE9679942F7CE0D6 -6AC31F8138FD2F9D8114C3EC9F3D6700A9367D1DC05FAF6822CCBA64CBAAACB57 -7139AF5FF460E932FE3A56231418954A617225E45073FFF48C9A59E57C5A8D3E1 -82CB7D049777EC41C91E788818310666D31B1007DA49FE8673554AA397B1C4D52 -735133A6A368CC267F23D21BA34DAAC912E0E9D90DA26B3BC0461968E1F4E26AF -8320B05FAF783F2AE8EFC49B8630F4829672C438BBF27CC5F14A140DD82072DEB -3E746E2BBB557731958C8287BFEA1F962857F866FD7101FEB9C949E0338F1DFF6 -0E624F099E79A7FF2B304C834C83CC844C84CC854C85CC864C86CC874C87CC884 -C88CC894C89CC8A4C8ACA83FD4BC11F80DFEBA00F002CD0C9338BD4F383600000 -00049454E44AE42608200"; - return r; - end - -end - - -//******************************* -type TDForm = class(TDComponent) -{** - @explan(˵) %% -**} - private - static FClassName; - static FParser; - function savecurrentform(o,e); - begin - cp:=o.Component; - if not cp then exit; - nd := cp.TreeNode; - if nd then d := nd.owner.Designer; - if d then - begin - d.saveCurrentForm(); - //d.openclassfile(); - end - end - function OpenClass(o,e); - begin - cp:=o.Component; - if not cp then exit; - nd := cp.TreeNode; - if nd then d := nd.owner.Designer; - if d then - begin - d.openclassfile(); - end - end - public - function menus();override; - begin - r := array(); - //r[0] := array("type":"menu","caption":"洰"); - r[0] := array("type":"menu","caption":"tsfļ","onclick":thisfunction(OpenClass)); - r[1] := array("type":"menu","caption":"浱ǰ","onclick":thisfunction(savecurrentform)); - //r[2] := array("type":"menu","caption":"򿪹Ŀ¼","onclick":thisfunction(openProjectDir)); - return r; - end - function InToolBar();override; - begin - return false; - end - function ComponentCreater(tnode,owner);virtual; - begin - r := inherited; - return r; - end - function classification();override; - begin - return "ǵӿؼ"; - end - class function HitTip();override; - begin - return "\r\nڹfile\r\nfile managerй"; - end - class function ClassName(v);override; - begin - if ifstring(v) and v then - begin - FClassName := v; - end - if not FClassName then return "tdcreateform"; - return FClassName; - end - function bitmapinfo();override; - begin - return "0507000000060400000074797065000203000000626D700006050000007769647 -468000010000000060C000000626D776964746862797465730000400000000608 -000000626D706C616E6573000001000000060B000000626D62697473706978656 -C0000200000000606000000686569676874000010000000060500000062797465 -73000200040000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000CEA47CFFCFA47CFFD0A57DFFD0A57CFFD0A57CFFD0A47 -BFFCFA47BFFCFA37BFFCDA27AFFCCA179FFCAA078FFC89E77FFC69D76FFC49B75 -FFC29A74FF00000000CFA47CFFD0A57CFFD1A57CFFD1A57CFFD1A57CFFD1A47BF -FD0A47BFFCFA37AFFCEA279FFCCA178FFCB9F77FFC89E76FFC69C75FFC49B74FF -C29973FF00000000D0A57CFFD1A57CFFD1A57CFFD1A57CFFD1A57BFFD1A47AFFD -0A379FFCFA379FFCEA278FFCDA077FFCA9F76FFC89D75FFC69B73FFC49A72FFC2 -9972FF00000000D0A57CFFFCFCFCFFFDFDFDFFFEFEFEFFFEFEFEFFFEFEFEFFFDF -DFDFFFCFCFCFFFBFBFBFFF9F9F9FFF6F6F6FFF3F3F3FFF1F1F1FFEEEEEEFFC198 -70FF00000000CFA47CFFFCFCFCFFFDFDFDFFFDFDFDFFFEFEFEFFFEFEFEFFFDFDF -DFFFCFCFCFFFBFBFBFFF9F9F9FFF6F6F6FFF3F3F3FFF1F1F1FFEEEEEEFFC1976F -FF00000000CFA47BFFFBFBFBFFFCFCFCFFFDFDFDFFFDFDFDFFFDFDFDFFFCFCFCF -FFBFBFBFFFAFAFAFFF8F8F8FFF6F6F6FFF3F3F3FFF0F0F0FFEDEDEDFFC0966EFF -00000000CEA37AFFFAFAFAFFFBFBFBFFFBFBFBFFFBFBFBFFFBFBFBFFFBFBFBFFF -AFAFAFFF9F9F9FFF7F7F7FFF5F5F5FFF2F2F2FFEFEFEFFFEDEDEDFFC0956CFF00 -000000CCA179FFF8F8F8FFF9F9F9FFF9F9F9FFF9F9F9FFF9F9F9FFF9F9F9FFF8F -8F8FFF7F7F7FFF5F5F5FFF3F3F3FFF1F1F1FFEFEFEFFFEDEDEDFFBF946CFF0000 -0000CAA078FFF5F5F5FFF6F6F6FFF7F7F7FFF7F7F7FFF7F7F7FFF6F6F6FFF6F6F -6FFF5F5F5FFF3F3F3FFF1F1F1FFF0F0F0FFEEEEEEFFECECECFFBE936BFF000000 -00C89E77FFF3F3F3FFF3F3F3FFF4F4F4FFF4F4F4FFF4F4F4FFF4F4F4FFF3F3F3F -FF3F3F3FFF1F1F1FFF0F0F0FFEEEEEEFFEDEDEDFFEBEBEBFFBE936AFF00000000 -C69D76FFF0F0F0FFF1F1F1FFF1F1F1FFF1F1F1FFF1F1F1FFF0F0F0FFF0F0F0FFF -0F0F0FFEFEFEFFFEDEDEDFFECECECFFEBEBEBFFEAEAEAFFBD936AFF00000000C4 -9B75FFEEEEEEFFEEEEEEFFEEEEEEFFEEEEEEFFEEEEEEFFEEEEEEFFEEEEEEFFEDE -DEDFFECECECFFEBEBEBFFEAEAEAFFEAEAEAFFE9E9E9FFBD936BFF00000000C29A -74FFC29973FFC29972FFC19870FFC1976FFFC1966EFFC0956DFFC0956CFFC0946 -BFFBF946BFFBE936AFFBE936AFFBD926AFFBD936BFFBD936BFF00000000000000 -00000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000"; - end - function ClassObject();override; - begin - return class(TDForm); - end - function WndClass();override; - begin - return class(tvcform); - //return class(TDCreateForm); - end - function create(AOwner);override; - begin - inherited; - DefaultEvent := array( - "event":"onclose", - "name":"close", - "virtual":true, - "param":array("o","e"), - "body": - " - {** - @explan(˵) ڹرջص %% - @param(e)(tuievent) Ϣ %% - @param(o)(ttimer) ǰ %% - **} - if MessageBoxA('Ƿرյǰ','ر',MB_YESNO,o)<>IDYES then e.skip := true; -"); - end -end -type TDPanelForm = class(TDForm) -{** - @explan(˵) %% -**} - function ClassObject();override; - begin - return class(TDPanelForm); - end - function WndClass();override; - begin - return class(TpanelForm); - //return class(TDCreatePanel); - end - function create(AOwner);override; - begin - inherited; - end -end - - -//**************TPanel************************** -type TDPanel = class(TDComponent) - class function HitTip();override; - begin - return "ؼ"; - end - - class function ClassName();override; - begin - return "tpanel"; - end - function bitmapinfo();override; - begin - return "0502000000060400000074797065000203000000696D670006040000006461746 -10002CA00000089504E470D0A1A0A0000000D4948445200000024000000240806 -000000E1009898000000017352474200AECE1CE90000000467414D410000B18F0 -BFC6105000000097048597300000EC300000EC301C76FA8640000005F49444154 -5847EDD7B109C0300C05D1ECBF812AADA94EC1453A91AB4C1CB80F571ABDD6571 -F36413441B41194991D115B5B37A68DA0F5A0AAB6B66E4C13F42488124409A204 -5182284194204A1025881244FD1B74DC47F1CB09A2097A5FF70DF185865E9BB41 -DE30000000049454E44AE42608200"; - end - function ClassObject();override; - begin - return class(TDPanel); - end - function WndClass();override; - begin - return Class(tpanel); - end - function ComponentCreater(node,pt);override; - begin - r := inherited; - return r; - if r then - begin - r.Cwnd.Color := rgb(240,240,240); - end - return r; - end - function Create(AOwner);override; - begin - inherited; - DefaultEvent := "no"; - end - - -end -//**************groupbox************************** -type TDGroupBox = class(TDComponent) -{** - @explan(˵) groupboxؼ -**} - class function HitTip();override; - begin - return ""; - end - class function ClassName();override; - begin - return "tgroupbox"; - end - - function bitmapinfo();override; - begin - return "0502000000060400000074797065000203000000696D670006040000006461746 -100020B01000089504E470D0A1A0A0000000D4948445200000018000000180806 -000000E0773DF8000000017352474200AECE1CE90000000467414D410000B18F0 -BFC6105000000097048597300000EC300000EC301C76FA864000000A049444154 -484BCD91510A83301044BD92782B2F90DF9CA11F3D8FED358A7894C8424736B0A -43B89A11978B0129D67922975CE7F04EB732FC2E41284F0B8B04A35FA5D0B9D4C -8058A59A52A4E7BDBDBE4F86E0383ED548F138821863F6B107B740CAE5AC2199E -7E527940012CC5E28410DE3EC80BD035A0009662F94A0867176C0DE81400920C1 -EC8512D4E012C8620B45C15D980289FE9356904CD0239D05299D037BBA604E978 -76D0000000049454E44AE42608200"; - end - function ClassObject();override; - begin - return class(TDGroupBox); - end - function WndClass();override; - begin - return Class(tgroupbox); - end - function Create(AOwner);override; - begin - inherited; - end - -end -//*****************Check GroupBox************************ -type TDBtn = class(TDComponent) - class function HitTip();override; - begin - return "ť"; - end - function IsContainer();override; - begin - return false; - end - class function ClassName();override; - begin - return "tbtn"; - end - function bitmapinfo();override; - begin - return "0502000000060400000074797065000203000000696D670006040000006461746 -10002A101000089504E470D0A1A0A0000000D4948445200000018000000180806 -000000E0773DF8000000017352474200AECE1CE90000000467414D410000B18F0 -BFC6105000000097048597300000EC300000EC301C76FA8640000013649444154 -484BED95416A83401486BD5537D90A929D8A0B1123928D889B627B93D21E21076 -87B80B408AD8A95E042415C4430907887BFBC81144D44A1D14221031F8CCFF7E6 -1B477C7298785C0583637AC1C3F316B3BB4FDCDC7E8C0AADF9F8B2054793F7B84 -45DD7A3F2F6556276EF83235B57C218D0DABF12A469DA193F655090651996CB25 -0CC380A669088280C5154539CBED6250208A22C23064F33CCFC1F33CF6FBFD8F6 -0B3D9A0288A564D935E4155559065B915B32C0B51143181E779505515BBDDAE95 -D3A45750962524496AC54840BB160401F3F99C6DA279FF945E01418BC471CCE67 -444747D381CD813388E83D56A7556D36450902409168B054CD384AEEBEC7828EE -BA2E7B17B66DC3F7FDB3BA2383824BF91B01B50AFAACBB122E617D6C15D490A66 -A764FAFE5F587333CFEBB00F8061B912011B78C94420000000049454E44AE4260 -8200"; - end; - function ClassObject();override; - begin - return class(TDBtn); - end - function WndClass();override; - begin - return Class(tbtn); - end - function Create(AOwner);override; - begin - inherited; - DefaultEvent := array( - "event":"onclick", - "name":"clk", - "virtual":true, - "param":array("o","e"), - "body": -" - {** - @explan(˵) ص %% - @param(e)(tuievent) Ϣ %% - @param(o)(tbtn)ť %% - **} - MessageBoxA(o.caption+':','ʾ',0,o); -" - ); - end - -end -//*****************TPairSplitter******************************* -type TDPairSplitterSide = class(TDComponent) - class function HitTip();override; - begin - return "PairSplitterSide\r\nsplitterؼҼ"; - end - class function ClassName();override; - begin - return "tpairsplitterside"; - end - function classification();override; - begin - return "ǵӿؼ" ; - end - function menus();override; - begin - r := inherited; - return select * from r where ["caption"]="ɾ" end ; - end - function InToolBar();override; - begin - return false; - end - function bitmapinfo();override; - begin - return "0502000000060400000074797065000203000000696D670006040000006461746 -10002E601000089504E470D0A1A0A0000000D4948445200000010000000100806 -0000001FF3FF61000000017352474200AECE1CE90000000467414D410000B18F0 -BFC6105000000097048597300000EC300000EC301C76FA8640000017B49444154 -384FA592DB4EC24010867D5E51349C29F8128AA82082808F81882184A0507C0CC -E6728C7DFFDDB6E5D9B182FD8E4BBE874E6DBD9DD39C191CB14C48B2D818EAB97 -36E236B122D1112BE8D0F24D449F3F11C935107EAA2394A92198AE22907A9702D -D2EFC728815491B9A1044F32D4484209CFD404808828F350484C0FF2005EE6281 -2604D1425BA0232204E15C13A16C03C14C1DFE740DBE54153E55B0DBEDB0DFEF7 -1381C1CF8CDF876BBC57ABDC672B9C46C36C36432C17038C4E57DE5E70852A04A -FE135CDCD9025E169354895ABCD96C60188623188FC7180C06F026DF2C8156689 -9494C76C338775FAD56582C16984EA7188D46A6E0ECD616F089B80313DD302E8B -65FB8E2051B6047C5F26B045264BF84DD462B6CFF3F7FB7D786E5E2D018783096 -43E9FFF42C6D562EEDEEBF5702A059C2CFE64920A6312D936776671B7DB158292 -25E058D2FC17EE42D2E974C4116C01679A63C9C9E270F07DBDC90ACEC52DF3A63 -D0952365B36B92E99C58EE09875A400F80678339550E1D72CF30000000049454E -44AE42608200"; - end - function ClassObject();override; - begin - return class(TDPairSplitterSide); - end - function WndClass();override; - begin - return Class(TPairSplitterSide); - end - function CheckParentWnd(Pwnd);override; - begin - {** - @explan(˵) ڵж %% - **} - r := Pwnd is class(TPairSplitter); - if (not r) and (Pwnd is class(TWincontrol) ) then Pwnd._wapi.MessageBoxA(Pwnd.Handle,"Ҫ TPairSplitter Ϊ","ʧ",0); - return r; - end - - function Create(AOwner);override; - begin - inherited; - end -end -type TDPairSplitter = class(TDComponent) - class function HitTip();override; - begin - return "ɶԷ"; - end - class function ClassName();override; - begin - return "tpairsplitter"; - end - function AddsplitterSide(o,e);override; - begin - cp := o.Component; - r := (GetDCompObject("tpairsplitterside")).ComponentCreater(cp.TreeNode,cp.Cwnd); - if not r then exit; - r.CreateName(); - tr := r.TreeNode.owner.Designer; - tr.BindCwndMessage(r.Cwnd); - tr.VariableSelecter.additem(r); - end - function menus();override; - begin - r := inherited; - r[length(r)] := array("type":"menu","caption":"splitterside","onclick":thisfunction(AddsplitterSide)); - return r; - end - function bitmapinfo();override; - begin - return "0502000000060400000074797065000203000000696D670006040000006461746 -100023301000089504E470D0A1A0A0000000D4948445200000018000000180806 -000000E0773DF8000000017352474200AECE1CE90000000467414D410000B18F0 -BFC6105000000097048597300000EC300000EC301C76FA864000000C849444154 -484B63F84F63304C2C983973264E0C02870E1CC4C020804D3D0CC3005E1FC0148 -20CBC7FFF361C97974F028B231B840B0C2E0B40060F0D1F3C7BFB1D4C136B014C -3D368061C18B77DFFF07371C07B3D12DC01544FEB5C7FE3F79FD0DCC46072816C -00CB7C8D907E613EB03907A5C96C02D40369C5C8CCD12B8059913CE61D5442A06 -99830CE8E70310A0691CC0004D53110CD0341F2003622DC00748B2005710E1038 -3CB07645B0052880B8300C80290A1C81804B0A9876118C0EB036A001A5BF0FF3F -008B200E0EE56C49BF0000000049454E44AE42608200"; - end - function ClassObject();override; - begin - return class(TDPairSplitter); - end - function WndClass();override; - begin - return Class(TPairSplitter); - end - function CheckChild(dcmp);override; - begin - return dcmp is Class(TDPairSplitterSide); - end - function Create(AOwner);override; - begin - inherited; - end - function ComponentCreater(tnode,owner);override; - begin - {** - @explan(˵) ½ڵ㴰 %% - @param(tnode)(TComponentTreeNode) ڵ %% - @param(owner)(TWincontrol) %% - @return(TDComponent|0)ɹضʧ0%% - **} - o := inherited; - //if o then o.Cwnd.color := rgb(200,200,200); - return o; - end - -end -type TDTabSheet = class(TDComponent) - function CheckParent(p,pwnd);override; - begin - if not (p is class(TDPage)) then return 0; - return inherited; - end - class function HitTip();override; - begin - return "pagesheet\r\npageؼҼ"; - end - class function ClassName();override; - begin - return "ttabsheet"; - end - function classification();override; - begin - return "ǵӿؼ"; - end - function SelectedNode();override; - begin - if Cwnd is class(ttabsheet) then - begin - pc := Cwnd.Parent; - if pc is class(TPageControl) then - begin - pc.cursel := Cwnd; - end - end - inherited; - end - function bitmapinfo();override; - begin - return "0502000000060400000074797065000203000000696D670006040000006461746 -10002AE01000089504E470D0A1A0A0000000D4948445200000010000000100806 -0000001FF3FF61000000017352474200AECE1CE90000000467414D410000B18F0 -BFC6105000000097048597300000EC300000EC301C76FA8640000014349444154 -384FAD92C94AC4501045FBAFFC1657BA722B7E862E04FDAA86A61511119C5A5D6 -44E77E639B9D67DCD4B7A08226AE040A0EA5C2A55991C9C4DF11754002693D1E2 -4FF8A709469EB66DD1340DEABA465996288A02799E234D53244982388EC7030EC -FE77B1C5FDEE2E6C9EDE5288A1086E17E40D7754A68E5BDE9805AA884FBCF1827 -D777983DDABDBC5AADB603F4C80C28242113522111E206982D221CC9244110287 -9B95C0E015AAEAA4A0544229C5E5CF5F835E009AC51F47D1F9EE70D015C14652E -8B4D6C7605A7022CC1140C8135CAAEEBC2719C2180B2DE329BD8BC3901792FD60 -15AB62C6B08A09C6599DA329B3E4A6021C29BF02ABCE4C0B3C09A6DDB4A364D73 -08D0326FCB2636EF4EF090AD03281A86A1E803F48FC113B189CD63B0A6E5AD00C -ABC2D4FC4A6EF180DD03F863E915E14BF7773E45DFA80DF33C517615C294C8193 -B0280000000049454E44AE42608200"; - end - function menus();override; - begin - r := inherited; - return select * from r where ["caption"]="ɾ" end ; - end - function InToolBar();override; - begin - return false; - end - function ClassObject();override; - begin - return class(TDTabSheet); - end - function WndClass();override; - begin - return Class(TTabSheet); - end - function Create(AOwner);override; - begin - inherited; - end -end -type TDPage = class(TDComponent) - class function HitTip();override; - begin - return "ҳؼ"; - end - class function ClassName();override; - begin - return "tpagecontrol"; - end - function addtabsheet(o,e); - begin - cp := o.Component; - r := (GetDCompObject("ttabsheet")).ComponentCreater(cp.TreeNode,cp.Cwnd); - if not r then exit; - r.CreateName(); - cp.TreeNode.expand(); - tr := r.TreeNode.owner.Designer; - tr.BindCwndMessage(r.Cwnd); - tr.VariableSelecter.additem(r); - end - function menus();override; - begin - r := inherited; - r[length(r)] := array("type":"menu","caption":"tabsheet","onclick":thisfunction(addtabsheet)); - return r; - end - function bitmapinfo();override; - begin - return "0502000000060400000074797065000203000000696D670006040000006461746 -100023001000089504E470D0A1A0A0000000D4948445200000024000000240806 -000000E1009898000000017352474200AECE1CE90000000467414D410000B18F0 -BFC6105000000097048597300000EC300000EC301C76FA864000000C549444154 -5847ED97C10A84201400F76BA36E7EB5274F9A969AB9BC43B1CBEAB30EED53706 -02E29398181BE6265F4A0123DA8C419C4188BC330A0C29CA7398360C112E338FE -441E4ED3947C0EDEF9905B413087739E14C6841049AFBCFBA0EEA07DDF51FF1E1 -44240AD2E08DBB8D818F633809F9BFE2B68DB361261ED83BA83BCF72466839C73 -24B61364AD25311BB4AE2B89ED042DCB426236C81843623B415A6B12DB099AE79 -9C46C90528AC47682A49424B61174E5A2F894C9236C2DF4A0123D0827C637259C -FCE218FD50E80000000049454E44AE42608200"; - end - function CheckChild(cd);override; - begin - return cd is class(TDTabSheet); - end - function ClassObject();override; - begin - return class(TDPage); - end - function WndClass();override; - begin - return Class(TPageControl); - end - function Create(AOwner);override; - begin - inherited; - end -end //************TImageList*********************** type TDVirutalWindow = class(TCustomControl) {** @@ -2145,6 +749,1359 @@ type TDVirutalWindow = class(TCustomControl) **} end +type TGCellRender = class(TSLUIBASE) +{** + @explan(˵) gridcellȾ %% +**} + private + FActivate; + public + function CreateEditer(AOwner);virtual; + begin + return createobject(self(true).classinfo(1),AOwner); + end + function Create(AOwner);override; + begin + {** + @explan(˵) ༭ %% + **} + class(TSLuibase).create(); + end + function CelldbClick(grid,e,d);virtual; + begin + end + function CellClick(grid,e,d);virtual; + begin + {** + @explan(˵) ӵ %% + **} + FActivate := true; + end + function CellDraw(grid,e,d);virtual; + begin + {** + @explan(˵) Ƹ %% + **} + end + function CellLeave(grid);virtual; + begin + {** + @explan(˵) 뿪༭ %% + **} + FActivate := false; + end; + property Activated read FActivate; +end +type TVclDesigner = class(tvcform) +{** + @explan(˵) ؼ %% +**} + private + + FChmHelper; + tmpcanvas; //canvas + FImageList; //ͼ + FViewBitmap; + FCTrans; + FVariableSelecter; + FFunctionSelecter; + Ftvclform; + //**********˵*************** + FMenu0; + FParser; + //******************************** + FToolBars; + FTree; + FCurrentTreeNode; + FObjInspector; + FPropGrid; + FEventGrid; + + FTempCanvas; + static FClassItems; + //************************************ + FCurrentNode; + FCurrentClikPos; + FComponentCreater; + FRounMenu; + FStopMenu; + FProjectsManager; + FProjectManager; + //*************************** + function WrapProjectTo(); + begin + FProjectManager.WrapTo(); + end + function OpenProjectFromtpj(); //ѡ + begin + SetWndPostWithMouse(FProjectsManager); + FProjectsManager.Show(); + return ; + end + function ShowProjectView(o,e); //ļ + begin + FProjectManager.visible := not FProjectManager.visible; + if o then + begin + FProjectManager._tag := o; + o.Checked := FProjectManager.visible; + end + //FProjectManager.show(); + end + + function addtoolbuttons();//ӹ + begin + {** + @explan(˵)ӹ %% + **} + for i,v in FClassItems do + begin + FImageList.RegisterDitem(v); + //if not v.InToolBar() then continue; + tb := new TToolButton(self); + tb.caption := v.HitTip; + tb.Enabled := v.InToolBar(); + ig := FImageList.GetImageId(V.dclassname); + tb.imageid := ig; + v.Imgs := ig; + tb._tag := v; + tb.onclick := thisfunction(OnToolButtonCick); + FToolBars.addbtn(tb,v.classification); + end + end + + function calcheight(twidth); //߶ȼ + begin + //extheight := CaptionHeight()+MenuBarHeight(); + clc := array(); + if FClassItems and ifarray(FClassItems) then + begin + for i,v in FClassItems do + begin + cli := v.classification; + if not(cli and ifstring(cli)) then cli := ""; + if ifnil(clc[cli]) then clc[cli] := 0; + clc[cli]+=1; + end + mx := 0; + for i,v in clc do mx := max(mx,v); + height := (integer(mx*32/twidth)+1)*32+60+30; + end else + height := 90+32; + end + + function TreeNode2tfmsub(lib,node,itemnames);//tmfļַ + begin + if not(node) then + begin + it := FTree.RootItem; + node := (it.items)[0]; + end + if not ifarray(itemnames) then itemnames := array(); + if not ifarray(lib) then lib := array(); + if not node then exit; + tc := node.Component; + wlibs := tc.libs(); + tlibs := array(); + for i,v in wlibs do if v and ifstring(v) then tlibs[length(tlibs)] := lowercase(v); + tclib := lowercase(tc.libs()); + lib union2= tlibs; + r := ""; + tab := " "; + if tc is class(TDComponent) then + begin + tcname := tc.name; + tcclassname := tc.dclassname; + if not(tcclassname and tcname and ifstring(tcname) and ifstring(tcclassname)) then raise "!"; + r+= "object "+ tc.name +":"+tc.dclassname+"\r\n"; + itemnames[length(itemnames)] := array(tc.name,tc.dclassname); + cr := tc.GetChangedPublish(); + for i,v in cr do + begin + if not(v and ifstring(i) and ifstring(v) ) then continue; //ϸж + r+=tab; + r+= i + "=" + v +"\r\n"; + end + for i := 0 to node.ItemCount-1 do + begin + r += tablelines( call(thisfunction,lib,(node.items)[i],itemnames),tab); + end + r += "end"; + end + return r; + //GetChangedPublish + end + + function DeletComponent(comp); //ɾؼ + begin + if comp is class(TDComponent) then + begin + DeleteNode(comp.TreeNode); + end + end + function DeleteNode(node); //ɾڵ + begin + if node Is class(TComponentTreeNode) then + begin + comp := node.Component; + tree := Node.owner; + node.Recycling(); + if tree is class(TComponentTree) then + begin + tree.deleteitem(node); + node.Recycling(); + end + if comp is class(TDComponent) then + begin + wd := comp.Cwnd; + if wd is class(TComponent) then wd.Recycling(); + end + end + end + + function createmainmenubyarray(ms,pm,oer); + begin + if not(ifarray(ms) and ms) then exit; + if ms["type"]="menu" then + begin + if not pm then pm := new TMainmenu(oer); + if ifstring(ms["caption"]) then + begin + mu := new tmenu(oer); + mu.caption := ms["caption"]; + o := ms["onclick"]; + mu.onclick := ms["onclick"]; + mu.parent := pm; + if ms["checked"] =1 then + begin + mu.Checked := true; + end + field := ms["filed"]; + if ms["checked"]=true then + begin + mu.Checked := true; + end else + begin + bp := ms["bitmap"]; + if bp and ifstring(bp) then + begin + bpp := new tbitmap(); + bpp.Readvcon(HexFormatStrToTsl( bp)); + mu.bitmap := bpp; + end + + end + if ms["enabled"]=0 then + begin + mu.Enabled := false; + end + if ifstring(field) then + begin + try + invoke(oer,lowercase(field),1,mu); + except + end ; + end + call(thisfunction,ms["items"],mu,oer); + end + end + else for i,v in ms do + begin + call(thisfunction,v,pm,oer); + end + end + public + function OpenFileFromTpjFile(); //ļ򿪹 + begin + FProjectFileOpener.caption := ""; + if FProjectFileOpener.OpenDlg() then + begin + f := FProjectFileOpener.FileName; + FProjectsManager.OpenFileFromTpjFile(f); + for i := length(f) downto 3 do + begin + if f[i]="\\" then + begin + FProjectFileOpener.initialDir := f[1:(i-1)]; + break; + end + end + end + end + function OpenExaple(); + begin + FProjectFileOpener.caption := "򿪷...."; + f := 0;// tslfilename(); + fio := ioFileseparator(); + if f then + begin + for i := length(f) downto 3 do + begin + if f[i]=fio then + begin + ef := f[1:i]+"examples"; + if filelist("",ef) then + begin + FProjectFileOpener.initialDir := ef; + end + else + begin + FProjectFileOpener.initialDir := f[1:(i-1)]; + end + break; + end + end + end else + begin + f := sysexecname(); + for i := length(f) downto 3 do + begin + if f[i]=fio then + begin + ef := f[1:i]+"designer"+fio+"examples"; + if filelist("",ef) then + begin + FProjectFileOpener.initialDir := ef; + end + else + begin + FProjectFileOpener.initialDir := f[1:(i-1)]; + end + break; + end + end + end + if FProjectFileOpener.OpenDlg() then + begin + //echo ,"\r\n"; + FProjectsManager.OpenFileFromTpjFile(FProjectFileOpener.FileName); + end + end + function CreateTpjFomFile();//½ + begin + FProjectFileOpener.caption := "½"; + if FProjectFileOpener.OpenDlg() then + begin + f := FProjectFileOpener.FileName; + if parseregexpr(".tpj$",f,"",pp1,pp2,pp3)<>1 then f+=".tpj"; + FProjectsManager.CreateTpjFomFile(f); + end + end + function db(o,e): WM_NCLBUTTONDBLCLK;virtual;//󻯴 + begin + e.skip := true; + end + function openclassfile(); //򿪱༭ + begin + FProjectManager.ShowCurrentFormCode();//ShowEditor(); + end + + Function EnabledDesigner(f); + begin + {** + @explan(˵) designerǷ %% + @param(f)(bool) + **} + FObjInspector.Visible := F; + self.Enabled := f; + rt := FTree.RootItem; + if rt and rt.ItemCount>0 then + it := (rt.items)[0]; + if it then itt := it.Component; + if itt then itt.Cwnd.Enabled := f; + end + function TreeNode2tfm(lib,itemnames); //תļ + begin + {** + @explan(˵) ṹתΪļʽ %% + **} + r := TreeNode2tfmsub(lib,nil,itemnames); + if itemnames then itemnames := itemnames[1:]; + return r; + end + + function saveCurrentForm(); //浱ǰ༭ + begin + FProjectManager.saveCurrentEdit(); + end + function mainmenus();virtual; + begin + {** + @explan(˵) ˵ + **} + return array( + ("type":"menu","caption":"ļ","onclick",nil,"items":( + ("type":"menu","caption":"","onclick":thisfunction(saveCurrentForm), + "bitmap":GetSaveFileBitmapInfo()), + ("type":"menu","caption":"༭","onclick":thisfunction(openclassfile), + "bitmap":geteditcodebitmapinfo()) + )), + ("type":"menu","caption":"ͼ","items":( + ("type":"menu","caption":"ļ","checked":1,"bitmap":GetWindowMgrBmp(),"onclick":thisfunction(ShowProjectView)), + ("type":"menu","caption":"","checked":true,"onclick":thisfunction(Mobjinspect), + "bitmap":getdefaultbmpinfo()) + )), + ("type":"menu","caption":"","items":( + ("type":"menu","caption":"򿪹","onclick":thisfunction(OpenFileFromTpjFile), + "bitmap":GetOpenFileBitmapInfo()), + ("type":"menu","caption":"½","onclick":thisfunction(CreateTpjFomFile), + "bitmap":getcreateprojectbmpinfo()), + ("type":"menu","caption":"ʷ","onclick":thisfunction(OpenProjectFromtpj), + "bitmap":GetHostroyBimp()) + , + ("type":"menu","caption":"","onclick":thisfunction(WrapProjectTo), + "bitmap":getwrapprojectbmpinfo() + ) + ) + ), + ("type":"menu","caption":"","items":( + ("type":"menu","caption":"","onclick":thisfunction(editcommandline)), + ("type":"menu","caption":"","onclick":thisfunction(RunProject),"filed":"FRounMenu", + "bitmap":getrunbmpinfo() + ), + ("type":"menu","caption":"ֹͣ","onclick":thisfunction(StopProject),"enabled":false,"filed":"FStopMenu", + "bitmap":getstopbmpinfo()), + ("type":"menu","caption":"","onclick":thisfunction(debugproject)), + + )), + ("type":"menu","caption":"","items":( + ("type":"menu","caption":"ͼƬ","checked":0,"onclick":thisfunction(ViewBitmap)) + )), + ("type":"menu","caption":"","items":( + ("type":"menu","caption":"ʹֲ","onclick":thisfunction(OpenHelp), + "bitmap":getmanubmpinfo()), + ("type":"menu","caption":"ؼ","onclick":thisfunction(OpenHelp), + "bitmap":getctlsbmpinfo()), + ("type":"menu","caption":"..","onclick":thisfunction(OpenExaple), + "bitmap":getexamplesbmpinfo()) + ), + + ) + ); + end + public + function DeleFiledFromEdit(n,nn); + begin + if FTree.Loading then return ; + FProjectManager.DeleteAFiled(n,nn); + end + function AddFiledFromEdit(n); + begin + if FTree.Loading then return ; + FProjectManager.AddAFiled(n); + end + function AddusesFromEdit(lbs); + begin + if FTree.Loading then return ; + FProjectManager.adduses(lbs); + end + function EditerCodeChanged(); //ı + begin + if FTree.Loading then return ; + classinfo := FProjectManager.GetFormClassInfo(); + if classinfo and ifarray(classinfo) then + begin + class(TDComponent).TemporaryNotName := classinfo["members"]; + SetFunctionList(classinfo["funcs"]); + end + end + function LoadProject(n); + begin + FProjectManager.SetProjectInfo(n); + end + private + function tablelines(str,n); + begin + lines := str2array(str,"\r\n"); + r := ""; + for i,v in lines do + begin + if not v then continue; + r+=n; + r+= v; + r+="\r\n"; + end + return r; + end + function OpenHelp(o,e); + begin + if not FChmHelper then + begin + FChmHelper := new unit(UtslCodeEditor).TTslChmHelp(); + end + case o.caption of + "ʹֲ": + begin + FChmHelper.ChmName := "help\\designerUserGuid.CHM"; + // p := "C:\\Program Files\\Tinysoft\\Analyse.NETplug\\help\\designerUserGuid.pdf" ;//pluginpath()+"..\\help\\designerUserGuid.pdf"; + //_wapi.WinExec(format('cmd.exe /C call "start %s"',p),0); //http://bzjj.sinaapp.com/tslvclhelp/index.html + //_wapi.WinExec(format('start "%s"',p),0); + //_wapi.WinExec('cmd.exe /C start http://bzjj.sinaapp.com/tslvclhelp/index.html',0); + //_wapi.WinExec('cmd.exe /C "start http://bzjj.sinaapp.com/tvcldesignerhelp/tvcldesigner.pdf"',0); + + end + "ÿؼ": + begin + FChmHelper.ChmName := "help\\vclNormalControls.CHM"; + end + "ؼ": + begin + FChmHelper.ChmName := "help\\tslvclhelp.chm"; + + end + + end + FChmHelper.ShowTslLangChm(); + //_wapi.WinExec('cmd.exe /C start http://bzjj.sinaapp.com/tslvclhelp/index.html',0); + end + function ComponentMove(o,e); //ƶ + begin + {** + @explan(˵) ƶ ؼ %% + **} + //setcomponentfocus(o,false); + FPropGrid.SetGridValue("left",O.left,O) ; + FPropGrid.SetGridValue("top",o.top,O); + + end + function ComponentSize(o,e);//Сı + begin + {** + @explan(˵) ؼС %% + **} + FPropGrid.SetGridValue("width",o.width,O); + FPropGrid.SetGridValue("height",o.height,O); + //setcomponentfocus(o,false); + end + function DesignerClose(o,e) //ر + begin + {** + @explan(˵) %% + **} + if _wapi.MessageBoxA(self.Handle,"˳Ӧ","ʾ", MB_YESNO.| MB_ICONWARNING) = IDNO then + begin + e.skip := true; + end + else + begin //̴ + FProjectManager.StopProject(); + FProjectManager.CloseCurrentEdit(); + end + end + function CompClose(o,e); //ؿؼ + begin + {** + @explan(˵) ؼر %% + **} + e.skip := true; + end + function OnDesignerActivate(o,e); + begin + {** + @explan(˵) %% + **} + return ; + if e.wparam = WA_CLICKACTIVE then + begin + end + end + + public + class function GetClassItem(n); + begin + return FClassItems[n]; + end + class function RegestorClassItems(its); + begin + {** + @explan(˵) ע %% + @param(its)(array of TDComponent) %% + **} + if not ifarray(FClassItems) then FClassItems := array(); + for i,v in its do + begin + if (v is class(TDComponent) ) then + begin + o := createobject(v); + n := o.dclassname(); + if n and ifstring(n) then + begin + n := lowercase(n); + FClassItems[n]:= o; + end + //RegisterComponentType(n,FClassItems[n].ComponentClass()); + end + end + + end + //**************************************** + function CreateComponent(); // + begin + {** + @explan(˵) %% + @return (TDComponent) + **} + if FComponentCreater and FCurrentNode and FCurrentClikPos then + begin + par := FCurrentNode.Component.Cwnd; + r := FComponentCreater.ComponentCreater(FCurrentNode,FCurrentNode.Component.Cwnd); + if not r then exit; + r.CreateName(); + FVariableSelecter.additem(r); + BindCwndMessage(r.Cwnd); + if ifarray(FCurrentClikPos) and (r.Cwnd is class(TControl)) then + begin + if r.Cwnd.Align<>alnone then + begin + //par.DoControlAlign(); + end else + begin + x := FCurrentClikPos[0]; + y := FCurrentClikPos[1]; + if r.Cwnd is class(TControl) then + begin + if ifnumber(x) then r.Cwnd.left := x; + if ifnumber(y) then r.Cwnd.top := y; + end + end + end + FTree.SetSel(r.TreeNode); + end + FCurrentClikPos := nil; + FComponentCreater := nil; + FCurrentNode := nil; + FTree.PopupMenu := nil; + //echo "\r\n ӿؼ"; + return r; + end + function RectToPoints(rc); + begin + {** + @explan(˵) + **} + r := array(); + r := array((rc[0],rc[1]),(rc[2],rc[1]),(rc[2],rc[3]),(rc[0],rc[3]),(rc[0],rc[1])); + return r; + end + function setcomponentfocus(cwnd,fk); + begin + {** + @explan(˵) ƿؼý %% + **} + if not(cwnd is class(TWincontrol)) then exit ; + if not cwnd.HandleAllocated() then exit; + //if cwnd is class(tvcform) then exit; + //if cwnd.WsPopUp then exit; + return cwnd.DesigningSelect(fk); + end + function setcomponentfocus_bk(cwnd,fk); + begin + + if not(cwnd is class(TWincontrol)) then exit ; + if not cwnd.HandleAllocated() then exit; + if cwnd.WsPopUp then exit; + cp := cwnd.parent ; + if not(cp is class(TWincontrol)) then exit; + rec := array(cwnd.left-1,cwnd.top-1,cwnd.left+cwnd.width+1,cwnd.top+cwnd.height+1); + if not fk then + begin + if cwnd is class(TTabSheet) then + begin + tmpcanvas.pen.color := rgb(255,255,255); + goto abcef; + //return o.DoControlAlign(); + end + t := 25; + rec := array(rec[0]-t,rec[1]-t,rec[2]+t,rec[3]+t); + return cp.InvalidateRect(rec,true); + end + tmpcanvas.pen.color := rgb(200,0,0); + label abcef; + tmpcanvas.pen.width := 2; + //tmpcanvas.pen.Style := 1; + pcp := _wapi.GetDC(cp.handle); + if not pcp then exit; + tmpcanvas.Handle := pcp; + vw := RectToPoints(rec); + tmpcanvas.draw("polyline",vw); + tmpcanvas.Handle := 0; + _wapi.ReleaseDC(cp.Handle,pcp); + end + function TreeNodeSelected(n); + begin + {** + @explan(˵) ڵ㱻ѡ %% + @param(n)(TComponentTreeNode) ѡڵ %% + **} + if FCurrentNode=n then exit; + FCurrentNode := n; + if not ifobj(n) then exit; + t := n.Component; + if not t then exit; + mu := t.CreateMenu(); + FTree.PopupMenu := mu; + FPropGrid.Component := t; + FEventGrid.Component := t; + wd := t.cwnd ; + setcomponentfocus(wd,true); + return t.SelectedNode(); + end + private + function RClickComponent(o,e); + begin + {** + @explan(˵)Ҽ˵ %% + **} + nd := o._tag; + if FCurrentNode<>nd then + begin + FTree.SetSel(nd); + TreeNodeSelected(nd); + end + cp := nd.Component; + if cp then + begin + mu := cp.CreateMenu(); + if mu then + begin + //ֱӽ˵ֵؼ,gtkڽ㵼µ˵ + cwnd := cp.Cwnd; + cwnd.PopupMenu := mu; + xy := o.ClientToScreen(e.lolparamsigned,e.hilparamsigned); + _send_(WM_CONTEXTMENU,cwnd.handle,makeposition(xy[0],xy[1]),1); + return ; + uf := TPM_LEFTALIGN .| TPM_TOPALIGN .| TPM_RIGHTBUTTON; + _wapi.TrackPopupMenu(mu.Handle,uf,xy[0],xy[1],0,self.Handle,nil); + end + end + end + //FClickTime; + public + function addandopeneventbyname(nd,n); + begin + if nd then + begin + cp := nd.Component; + if cp then + begin + pe := cp.GetPublishEvents(); + if ifstring(n) and n then + begin + de := cp.geteventfunctionbyname(n); + end else + de := cp.DefaultEvent; + if ifarray(de) and de then + begin + dei := de["event"]; + dvs := pe[dei]; + if ifarray(dvs) then + begin + dv := dvs["value"]; + if not dv then + begin + td := de; + td["name"] := cp.Name+"_"+td["name"]; + if FProjectManager.AddAFunction(td) then + begin + FEventGrid.SetGridValue(dei,td["name"],cp.Cwnd); + FProjectManager.GoToAFunction(td["name"]); + return ; + end + end else + begin + FProjectManager.GoToAFunction(dv); + return ; + end + end + end + end + end + FProjectManager.ShowEditor(); + end + function AddAndOPenEvent(nd); + begin + {** + @explan(˵)ͨڵ򿪺༭ %% + **} + addandopeneventbyname(nd,n); + end + function DBLClickComponent(o,e);//˫ + begin + {** + @explan(˵) ˫ %% + **} + if o then AddAndOPenEvent(o._tag); + if e then e.skip := true; + end + private + function ClickComponent(o,e); //ѡ + begin + {** + @explan(˵) %% + **} + nd := o._tag; + if FCurrentNode<> nd then + begin + wd := o;//nd.Component.Cwnd; + //if wd is class(TWincontrol) then _wapi.BringWindowToTop(wd.Handle); + FTree.SetSel(nd); + TreeNodeSelected(nd); + end; + setcomponentfocus(o,true); + if FComponentCreater and FCurrentNode then + begin + //SetSysParam("cpos_screan",array(e.lolparam,e.hilparam)); + if FComponentCreater is class(TDRootComponent) then + begin + FCurrentNode := (FTree.RootItem.items)[0]; + if not FCurrentNode then exit; + O1 := FCurrentNode.Component.Cwnd; + if not o1 then exit; + end else o1 := o; + xy := array(0,0); + _wapi.GetCursorPos(xy); + FCurrentClikPos := o.ScreenToClient(xy[0],xy[1]); + //FCurrentClikPos := array(e.lolparam,e.hilparam);//o1.screentoclient(e.lolparam,e.hilparam); + r := CreateComponent(); + end + return ; + end + function ClickTreeNode(o,e);//ѡ + begin + {** + @explan(˵) ͨѡڵ %% + **} + od := e.itemold; + if od then + begin + cp := od.Component; + if cp then + begin + setcomponentfocus(cp.Cwnd,false); + end + end + TreeNodeSelected(e.item); + end + + + function SpectorClose(o,e);//objectspector ر + begin + {** + @explan(˵) Ŀ¼ر %% + **} + e.skip := true; + o.visible := false; + if o._Tag is class(tmenu) then o._tag.Checked := false; + end + + function OnToolButtonCick(o,e); // + begin + {** + @explan(˵) ѡ񹤾߰ť %% + **} + cct := o._tag; + //if FComponentCreater=cct then exit; + FComponentCreater := cct; + return ; + fm := (FTree.RootItem.items)[0]; + if not fm then exit; + O1 := fm.Component.Cwnd; + o1.show(); + + end + + function CloseShowForm(); //ڹر + begin + {** + @explan(˵)رյǰ̴%% + **} + FProjectManager.CloseCurrentEdit(); + end + public + function BindCwndMessage(wnd); + begin + {** + @explan(˵) Ϊؼ¼ %% + **} + if wnd is class(tmenu) then wnd.OnDesignClick := thisfunction(ClickComponent); + if wnd is class(TWincontrol) then + begin + wnd.OnDesignClick := thisfunction(ClickComponent); + wnd.OnDesigndblClick := thisfunction(DBLClickComponent); + wnd.OnDesignrClick := thisfunction(RClickComponent); + wnd.onmove := thisfunction(ComponentMove); + wnd.onsize := thisfunction(ComponentSize); + //wnd.Onclose := thisfunction(CompClose); //ֻǺ + wnd.Onclose := function(o,e)begin + e.skip := true; + CloseShowForm(); //洰Ϣ + end ; + wnd.bindmessage(wnd.WM_NCLBUTTONDOWN,thisfunction(ClickComponent)); + //WM_NCLBUTTONUP wnd. + if (wnd is class(TVCForm)) then + begin + {wnd.Onclose := function(o,e)begin + e.skip := true; + CloseShowForm(); + end ;} + wnd.OnMinimize := thisfunction(CompClose); + end + end + end + function UnLoadTreeNode(); + begin + {** + @explan(˵) жtreeĽڵ%% + **} + node := FTree.RootItem; + if node.ItemCount>0 then + begin + DeleteNode((Node.items)[0]); + end + FVariableSelecter.clean(); + FEventGrid.Component := array(); + FPropGrid.Component := array(); + //TemporaryNotName + class(TDComponent).TemporaryNotName := array(); + end + private + FLoadInheritedName; + public + function LoadTreeNode(Ptfm,inh); + begin + {** + @explan(˵) treeڵ %% + **} + FLoadInheritedName := inh; + UnLoadTreeNode(); + FTree.Loading := true; + try + prs := array(); + obarray := array(); + loadtfmtotree(Ptfm,Ptfm.gettree,FTree.RootItem,FTree,prs,obarray); + for i,v in prs do + begin + va := obarray[v[2]]; + if va then + begin + v[0].SetComponentProperties(v[1],va.GetTrueComponent()); + end + end + except + end ; + FTree.Loading := nil; + end + function loadtfmtotree(p,d,node,owner,prs,obarray); + begin + {** + @explan(˵) tfmļ %% + **} + if not ifarray(d) then exit; + if not d["type"]=p.TT_COMP then exit; + dcls := d["class"]; + it := GetClassItem(dcls); + if not it then + begin + if ("tdcreateform" in FLoadInheritedName) then + begin + it := NEW TDForm(); + end else + if "tdcreatepanel" in FLoadInheritedName then + begin + it := new TDPanelForm(); + end else return ; + it.dclassname(d["class"]); + it.Imgs := FImageList.GetImageId("tdcreateform"); + FLoadInheritedName := array(); + end + comp := it.ComponentCreater(node,owner); + comp.name := d["name"]; + obarray[d["name"]] := comp; + FVariableSelecter.additem(comp); + BindCwndMessage(comp.Cwnd); + pubs := comp.GetPublishProperties() union comp.GetPublishEvents(); + dprop := d["property"]; + ddp := array(); + for i,v in dprop do + begin + ddp[v["name"]] :=v; + end + if comp.DefaultAlign() then + begin + if ifarray(ddp["align"]) and (ddp["align"]["value"]="alnone") then + begin + comp.Cwnd.align := alnone; + end + end + lazy := array(); + for i,v in pubs do + begin + n := i; + ddpv := ddp[n]; + if not ifarray(ddpv) then continue; + cls := v["class"]; + et := GetComponentPropertyType(cls);//GetPropertyType(cls); + if not et then continue; + setddpv := et.TmfToNode(p.SampleValue(ddpv)); + if et.IfComponent() then + begin + prs[length(prs)]:= array(comp,n,setddpv); + continue; + end + if et.LazyProperty() then + begin + lazy[length(lazy)] := array(n,setddpv); + continue; + end + comp.SetComponentProperties(n,setddpv); + end + for i,v in d["object"] do + begin + call(thisfunction,p,v,comp.TreeNode,comp.Cwnd,prs,obarray); + end + for i,v in lazy do + begin + comp.SetComponentProperties(v[0],v[1]); + end + //comp.DoControlAlign(); + end + function SetFunctionList(v); + begin + {** + @explan(˵) õǰʹõĺ %% + **} + FFunctionSelecter.clean(); + for i,vi in v do + begin + if vi in array("create","destroy","recycling","loadfromtfm") then continue; + FFunctionSelecter.additem(vi); + end + end + + function create(AOwner); + begin + inherited; + tmpcanvas := new tcanvas(AOwner); + top := 10; + left := 10; + rect := _wapi.GetScreenRect(); + twidth := (rect[2]-50); + width := twidth; + calcheight(twidth); + caption := "TVCL"; + FProjectsManager := new TProjectManagerForm(self); + ico := new tbitmap(); + ico.Readvcon(HexFormatStrToTsl( GetHostroyBimp())); + FProjectsManager.FormICon := ico.ToIcon(); + + FProjectsManager.parent := self; + FProjectManager := new TProjectView(self); + ico := new tbitmap(); + ico.Readvcon(HexFormatStrToTsl(GetWindowMgrBmp())); + FProjectManager.FormICon := ico.ToIcon(); + FProjectManager.parent := self; + //FTempCanvas := new + //*********************************************** + FObjInspector := initobjinspector(); + FObjInspector.height := rect[3]-top-height-20; + tparent := new TPairSplitterSide(self); + tparent.border := false; + pparent := new TPairSplitterSide(self); + //********************************** + FTree := new TComponentTree(self); + FTree.onselchanged := thisfunction(ClickTreeNode); + FTree.align := alClient; + //*************޸********************** + pedits := new TPageControl(self); + pedits.align := alclient; + FProp := new TTabSheet(self); + FProp.caption := "propertys"; + FEvent := new TTabSheet(self); + FEvent.caption := "events"; + FPropGrid := new TPropEditGrid(self); + FPropGrid.border := false; + FPropGrid.Component := self; + FEventGrid := new TEventEditGrid(self); + FVariableSelecter := new TListVariableFilter(self); + FVariableSelecter.visible := false; + FVariableSelecter.parent := FPropGrid; + FFunctionSelecter := new TListStr(self); + FFunctionSelecter.visible := false; + FFunctionSelecter.parent := FEventGrid; + FEventGrid.EventEditer := FFunctionSelecter; + FPropGrid.VariabeEditer := FVariableSelecter; + //**************ڹϵ********************* + FObjInspector.parent := self; + tparent.parent := FObjInspector; + pparent.parent := FObjInspector; + FTree.parent := tparent; + pedits.parent := pparent ; + FProp.parent := pedits; + FEvent.parent := pedits; + + FPropGrid.align := alclient; + FEventGrid.align := alclient; + FPropGrid.parent := FProp; + FEventGrid.parent := FEvent; + + Mobjinspect(); + + onactivate := thisfunction(OnDesignerActivate); + FImageList := new TDesigImageList(self); + FTree.Imagelist := FImageList; + //******************toolbar *************** + FToolBars := new TDesignertoolbars(self); + FToolBars.parent := self; + FToolBars.Imagelist := FImageList; + addtoolbuttons(); + //************˵****************************** + createmainmenubyarray(mainmenus(),FMenu0,self); + Mainmenu := FMenu0; + self.onclose := thisfunction(DesignerClose); + ic := new Ticon(); + ic.Readvcon(HexFormatStrToTsl(GetTsIconBitmapInfo())); + self.FormICon := ic; + + //ļ򴰿 + + FProjectFileOpener := new TOpenFileADlg(self); + FProjectFileOpener.filter := array("tvcl":"*.tpj"); + FProjectFileOpener.parent := self; + + end + property VariableSelecter read FVariableSelecter; + private + function ViewBitmap(o,e); + begin + if not FViewBitmap then + begin + FViewBitmap := new TViewBitmap(self); + FViewBitmap.minmaxbox := FALSE; + FViewBitmap.visible := 0; + FViewBitmap.visible := false; + FViewBitmap.onclose := thisfunction(SpectorClose); + FViewBitmap.parent := self; + FViewBitmap._Tag := o; + //FViewBitmap.show(0); + end + FViewBitmap.visible := not FViewBitmap.visible; + if o then o.Checked := FViewBitmap.visible; + end + function StopProject(o,e); + begin + //FRounMenu.Enabled := true; + //FStopMenu.Enabled := false; + FProjectManager.StopProject(); + end + function RunProject(o,e); // + begin + FRounMenu.Enabled := false; + FStopMenu.Enabled := true; + FProjectManager.RunProject(); + FRounMenu.Enabled := true; + FStopMenu.Enabled := false; + end + function editcommandline(); + begin + FProjectManager.ShowExeEditer(); + end + function debugproject(o,e); + begin + FProjectManager.debugproject(); + end + function Mobjinspect(o,e); //лչʾ + begin + {** + @explan(˵) ޸ %% + **} + FObjInspector.Visible := not FObjInspector.Visible; + if FObjInspector.Visible then + begin + FObjInspector.left := width+ Left-FObjInspector.width; + FObjInspector.top := top+height+20; + end + if o then + begin + FObjInspector._tag := o; + o.Checked := FObjInspector.Visible + end + end + function initobjinspector(); + begin + project := new TPairSplitter(self); + project.visible := false; + project.caption := "object inspector"; + project.Onclose := thisfunction(spectorclose); + project.WsPopUp := true; + project.Visible := false; + project.Width := 300;// + project.height := 800; + project.WsCaption := true; + project.WsSysmenu := true; + project.WSSizebox := true; + project.SplitterType := pstVertical; + project.position := 250; + return project; + end + function GetWindowMgrBmp(); + begin + + return "0502000000060400000074797065000203000000696D670006040000006461746 +10002DA01000089504E470D0A1A0A0000000D4948445200000010000000100806 +0000001FF3FF61000000017352474200AECE1CE90000000467414D410000B18F0 +BFC6105000000097048597300000EC300000EC301C76FA8640000016F49444154 +384FA593EB4EC2401484F7790595702FC59710451451047C0C140C218410EA637 +0BFDF2119CF54DA748DBFA0C964DBCDCC7732BBA9C2998F4A96DA48962C24DFBF +65A52C98450B89621BC65B0BF17C13B19706A2B93A22D91AC24F5FC7E8EF23000 +B370C1F650A242100A3D0465C00B1D726A202883CD7255C43E8F11F8016161902 +880B20966F212A8070AE8150B68EA00082993F005300FBFD1E87C3C115BF77BB1 +D369B0D96CB25E6F33926930986C321020F55AD8E32A52BCD1483DEF07ABDB601 +B3D9CC055CA72B5A1D9528B46CF376BB75E50D73FA743AC56834C26030C0E57D4 +5ABA30C39651A57AB951DE2CA6F27CCE9E3F1D806F4FB7DF8EF3EB53A8A5744A3 +A3C562E10639D909737AAFD783CF03601DC503E106CD14DF1D39619A39DD06A43 +EB43A8AA7C90DAF18A0686290EA76BBE8743AF0DD966D8F5347F12A789A415120 +53C5B5F4BA4A57E1173A0D9C485D1C575FAAACD5D1FE8553EA688053EA688053E +A9CF93B033F9EA579B5AA7EC4E00000000049454E44AE42608200"; + end + FProjectFileOpener; +end + + +implementation +type TComponentMenu= class(tmenu) //Ҽ˵ +{** + @explan(˵) ƿؼ˵ %% +**} + private + FComponent; + public + function Create(AOwner);override; + begin + inherited; + end + function Recycling();override; + begin + FComponent := nil; + inherited; + end + property Component read FComponent write FComponent; + {** + @param(Component)(TDComponent) ƿؼ %% + **} +end +//ؼڵ +type TComponentTreeNode = class(TTreeNode) +{** + @explan(˵)ڵ %% +**} + private + FComponent; + public + function create(AOwner);override; + begin + inherited; + end + function Recycling();override; + begin + FComponent := nil; + inherited; + end + property Component read FComponent write FComponent; +end +type TComponentTree = class(TTreeView) //ؼ +{** + @explan(˵)ؼ %% +**} + private + FEventGrid; + FProGrid; + FDesigner; + FLoading; + public + function hasFocus();override; + begin + return true; + end + function SetSel(item);override; //ѡ + begin + if not FLoading then inherited; + end + function CreateTreeNode();override; //ڵ + begin + return new TComponentTreeNode(self(true)); + end + function Recycling();override; // + begin + FDesigner := nil; + inherited; + end + function create(AOwner);override; + begin + inherited; + FDesigner := AOwner; + end + function GetRootNode();override; //ڵ + begin + r := inherited; + if not(r.Component) then + begin + c := new TDComponent(); + c.Cwnd := owner; + r.Component := c; + end + return r; + end + //ContextMenu(o,e) + property EventGrid read FEventGrid write FEventGrid; //¼ؼ + property ProGrid read FProGrid write FProGrid; //Կؼ + property Designer read FDesigner ; // + property Loading read FLoading write FLoading; //ڼ + {** + @param(Designer)(TVclDesigner) %% + **} +end + +type TGridList = class(TListView) +{** + @explan(˵) tlistview ģ list %% +**} + function clean(); + begin + DeleteAllItems(); + end + function CheckItem(v);override; + begin + {** + @explan(˵) Ŀ %% + **} + return List.indexof(v)<0; + end + function additem(v);virtual; + begin + appenditem(v); + end + function additems(v);virtual; + begin + appenditems(v); + end + function create(AOwner);override; + begin + inherited; + end + function DoDrawSubItem(o,e);override; + begin + dc := e.canvas; + if not dc.Handle then exit; + j := e.subitemid; + if j = 0 then + begin + i := e.itemid; + src := e.subItemRect; + _wapi.DrawFrameControl(dc.Handle,src,DFC_BUTTON,DFCS_BUTTONPUSH); + dc.DrawText(inttostr(i),src,DT_VCENTER .| DT_SINGLELINE); + end + end +end type TDFileWindow = class(TDVirutalWindow) {** @explan(˵) ļѡ %% @@ -2283,14 +2240,10 @@ type TDImageList = class(TDRootComponent) {** @explan(˵)imagelist ƿؼ %% **} - class function HitTip();override; + function HitTip();override; begin return "ͼб"; end - class function ImageId();override; - begin - return 12; - end function bitmapinfo();override; begin return GetImageListBitmapInfo(); @@ -2303,7 +2256,7 @@ type TDImageList = class(TDRootComponent) begin return class(TControlImageList); end - class function ClassName();override; + function dclassname();override; begin return "tcontrolimagelist"; end @@ -2313,10 +2266,7 @@ type TDImageList = class(TDRootComponent) //r[length(r)] := array("type":"menu","caption":"༭","onclick":nil); return r; end - function ClassObject();override; - begin - return class(TDImageList); - end + function WndClass();override; begin return Class(TImageListWindow); @@ -2370,7 +2320,7 @@ type TDLabel = class(TDComponent) {** @explan(˵) labelؼ %% **} - class function HitTip();override; + function HitTip();override; begin return "̬ı"; end @@ -2382,49 +2332,18 @@ type TDLabel = class(TDComponent) begin return class(tlabel); end - class function ClassName();override; + function dclassname();override; begin return "tlabel"; end - function ClassObject();override; - begin - return class(TDLabel); - end + function WndClass();override; begin return Class(TGraphicLabelWindow); end function bitmapinfo();override; begin - return "0502000000060400000074797065000203000000696D670006040000006461746 -100026B03000089504E470D0A1A0A0000000D4948445200000024000000240806 -000000E1009898000000017352474200AECE1CE90000000467414D410000B18F0 -BFC6105000000097048597300000EC300000EC301C76FA8640000030049444154 -5847ED95F94F134114C7FDAFD488B73F6922C6C478FF6A4C20A0164C4004B1A08 -9261A148207225034C1185083E281504A6D2986C3022D7297231469A172B4F4E2 -39EF31EB76D9BA1B43C4FEB09F64D37933B333DF7DF37DD32D90606882D4D004A -9A109524313A48626480D55419E9F4198F6067824A7A8761074A5DF78B4711405 -45A2AB7028DB0CDB529B6072D6CF7BA5E45739E0ECCD761E6D1C454126FB2CEC4 -86B26518FDF8EF05E299B2A28F3A11D528ABAA0F0991392732C105D5DE523229B -26C8BB10A4ECD45BA7A173601EB6A63481CDE9E5A32282A050380A559F5C905ED -C0DE925DD50D33C01E188FC03267EF8C977A9F7BA686EF1AB21580945F9A88220 -035B7CD705232CFAC38089399A67859CF25E3E2A82824E15DA28939798B9CBDE8 -DC29527BDE4BB6CF61B4B2BB3C04EB6E6C9021B0929793D4CED59DF0A9FA120E8 -84DE06B94FFB7804F0A87E0492D28C30BF18E23D6BA020CCDE7A8F5537BAA8BF8 -36517996319DFAB6B818C0776CAA600DA20CA8A4720AE20FBB08F16B3F6894784 -A9C6AF7E619CE03D6BA0A0DD175B201411374170D3A4742394378C52FCFCF338B -D3F332F66231E7105A189D13F2F5B26A1CE3CF5FB399865863337A406168E2C1E -78CC85D54E6A5F3738E070CE176A2B2113E40F46609FCE047BD8571FC834491E4 -C3966CEE95AE0B34553C703DFB955F39DDA79157D907CD5426D256482B0AA70D3 -81C945DE23820647A3DFE69B202808378EF50132E65EA6756A5BA72846B36F4F6 -D66060E52FC276482CEDFED84E3FA361EC9C10ADA9F618200CB242298BAF2C318 -C508FA47C7CC8B99F62DAD15C19427409EBACCEEB6D832C7228935B94410FE3DA -0F12A62165F8FD5E12501EFBFBA294641C7F2DBE034F3D6B93B1D50C03C83317A -B0B17386E60834B4BBA9FF48AE05AE553A20ABAC876C105BB91241FDE30B50F5D -1A598563C1A2CE9D61E0FC566F68BC7BC1408D3DDA53738A1F4CD308C4E2FD3F8 -7A5C33CB7485E0BCFB7543D0DE3F47F79C80ECC8FE37124178147FF3FC0B123B4 -3898026480D4D901A9A2035124C10C02FFABD674D6A547CAC0000000049454E44 -AE42608200"; + return getlabelbitmapinfo(); end function Create(AOwner);override; begin @@ -2451,7 +2370,7 @@ type TDTimer = class(TDRootComponent) {** @explan(˵) timmer ؼ %% **} - class function HitTip();override; + function HitTip();override; begin return "ʱ"; end @@ -2468,7 +2387,7 @@ type TDTimer = class(TDRootComponent) begin return class(TTimer); end - class function ClassName();override; + function dclassname();override; begin return "ttimer"; end @@ -2479,11 +2398,6 @@ type TDTimer = class(TDRootComponent) return r; end - - function ClassObject();override; - begin - return class(TDTimer); - end function WndClass();override; begin return Class(TTimerWindow); @@ -2564,7 +2478,7 @@ type TDOpenFileADlg = class(TDRootComponent) {** @explan(˵) ļ򿪿ؼ %% **} - class function HitTip();override; + function HitTip();override; begin return "ļѡ"; end @@ -2584,14 +2498,11 @@ type TDOpenFileADlg = class(TDRootComponent) begin return class(TOpenFileADlg); end - class function ClassName();override; + function dclassname();override; begin return "topenfileadlg"; end - function ClassObject();override; - begin - return class(TDOpenFileADlg); - end + function WndClass();override; begin return Class(TDFileWindow); // @@ -2607,7 +2518,7 @@ type TDSaveFileADlg = class(TDRootComponent) {** @explan(˵) ļ򿪿ؼ %% **} - class function HitTip();override; + function HitTip();override; begin return "ļѡ"; end @@ -2627,14 +2538,11 @@ type TDSaveFileADlg = class(TDRootComponent) begin return class(TSavefileADlg); end - class function ClassName();override; + function dclassname();override; begin return "tsavefileadlg"; end - function ClassObject();override; - begin - return class(TDSaveFileADlg); - end + function GetPublishProperties();override; begin r := inherited; @@ -2657,7 +2565,7 @@ type TDInputQuerys = class(TDRootComponent) {** @explan(˵) ļ򿪿ؼ %% **} - class function HitTip();override; + function HitTip();override; begin return "Ի"; end @@ -2677,14 +2585,11 @@ type TDInputQuerys = class(TDRootComponent) begin return class(TInPutQuerys); end - class function ClassName();override; + function dclassname();override; begin return "tinputquerys"; end - function ClassObject();override; - begin - return class(TDInputQuerys); - end + function WndClass();override; begin return Class(TDInputQuerysWindow); // @@ -2701,7 +2606,7 @@ type TDColorChoose = class(TDRootComponent) {** @explan(˵) ļ򿪿ؼ %% **} - class function HitTip();override; + function HitTip();override; begin return "ɫѡ"; end @@ -2721,14 +2626,11 @@ type TDColorChoose = class(TDRootComponent) begin return class(TColorChooseADlg); end - class function ClassName();override; + function dclassname();override; begin return "tcolorchooseadlg"; end - function ClassObject();override; - begin - return class(TDColorChoose); - end + function WndClass();override; begin return Class(TDColorChooseWindow); // @@ -2743,7 +2645,7 @@ type TDFontChoose = class(TDRootComponent) {** @explan(˵) ļ򿪿ؼ %% **} - class function HitTip();override; + function HitTip();override; begin return "ѡ"; end @@ -2763,14 +2665,11 @@ type TDFontChoose = class(TDRootComponent) begin return class(TFontChooseADlg); end - class function ClassName();override; + function dclassname();override; begin return "tfontchooseadlg"; end - function ClassObject();override; - begin - return class(TDFontChoose); - end + function WndClass();override; begin return Class(TDFontChooseWindow); // @@ -2785,7 +2684,7 @@ type TDFolderChoose = class(TDRootComponent) {** @explan(˵) ļ򿪿ؼ %% **} - class function HitTip();override; + function HitTip();override; begin return "Ŀ¼ѡ"; end @@ -2805,14 +2704,11 @@ type TDFolderChoose = class(TDRootComponent) begin return class(TFolderChooseADlg); end - class function ClassName();override; + function dclassname();override; begin return "tfolderchooseadlg"; end - function ClassObject();override; - begin - return class(TDFolderChoose); - end + function WndClass();override; begin return Class(TDFolderChooseWindow); // @@ -2828,7 +2724,7 @@ type TDToolButton = class(TDComponent) {** @explan(˵) toolbar ťƿؼ %% **} - class function HitTip();override; + function HitTip();override; begin return "toolbutton"; end @@ -2836,7 +2732,7 @@ type TDToolButton = class(TDComponent) begin return "ǵӿؼ" ; end - class function ClassName();override; + function dclassname();override; begin return "ttoolbutton"; end @@ -2854,10 +2750,7 @@ type TDToolButton = class(TDComponent) pwnd := p.Cwnd; return true; end - function ClassObject();override; - begin - return class(TDToolButton); - end + function WndClass();override; begin @@ -2894,7 +2787,7 @@ type TDToolBar = class(TDComponent) tr.VariableSelecter.additem(r); end public - class function HitTip();override; + function HitTip();override; begin return ""; end @@ -2902,7 +2795,7 @@ type TDToolBar = class(TDComponent) begin return true; end - class function ClassName();override; + function dclassname();override; begin return "ttoolbar"; end @@ -2925,27 +2818,10 @@ type TDToolBar = class(TDComponent) begin return cd is class(TDToolButton); end - function ClassObject();override; - begin - return class(TDToolBar); - end + function bitmapinfo();override; begin - return "0502000000060400000074797065000203000000696D670006040000006461746 -10002BE01000089504E470D0A1A0A0000000D4948445200000018000000180806 -000000E0773DF8000000017352474200AECE1CE90000000467414D410000B18F0 -BFC6105000000097048597300000EC300000EC301C76FA8640000015349444154 -484BED953D4AC5501085C77DD8887BD0C645B8010B05155C811BB0114454B4119 -5B78654EE41105110440B9BFCE7BD972016BEC0E8B9E184686E7E40D288031F37 -8799CC979022A203D71F10388EA343225996695F7003CAD66B42D234D5BE5060E -B3521D3E95417B6776B6C1C5F6A14278A3EA180F9E960B946751EC86432310B59 -B89EE5B96E9D8D74EDF05C832852CC000A98B150DF1F4A90D923321E8F6B02D4C -72CD7CDD391AE1F5D28660005CC46905E97F02DAA340A509020B70AA2AB562449 -929AE027980114301B81BBA72F272BDF9EBA8AC4716C9634157A980114306381B -EEE14E7DBAD1589BE3E62970033800266B3F879B538BD7D2B128661A700338002 -66B3F871A914D9F8BDE06EBE38EF17AD4810049D02CC000A98CDE29BB9F2B421B -EEF9B256D600650C08CC55D88E779DA170A6CBD26C4755DED0B05B65E13C3FF0F -CC230D58FF828E52FD0481EEF4FA779294570000000049454E44AE42608200"; + return gettoolbarbitmapinfo(); end function WndClass();override; begin @@ -2967,11 +2843,11 @@ type TDStatusBar = class(TDComponent) {** @explan(˵) statusbarؼ %% **} - class function HitTip();override; + function HitTip();override; begin return "״̬"; end - class function ClassName();override; + function dclassname();override; begin return "tstatusbar"; end @@ -2987,10 +2863,7 @@ type TDStatusBar = class(TDComponent) //r[length(r)] := array("type":"menu","caption":"ӹť","onclick":thisfunction(addtoolbutton)); return r; end - function ClassObject();override; - begin - return class(TDStatusBar); - end + function bitmapinfo();override; begin return "0502000000060400000074797065000203000000696D670006040000006461746 @@ -3024,11 +2897,11 @@ type TDTray = class(TDRootComponent) {** @explan(˵) statusbarؼ %% **} - class function HitTip();override; + function HitTip();override; begin return ""; end - class function ClassName();override; + function dclassname();override; begin return "ttray"; end @@ -3039,10 +2912,7 @@ type TDTray = class(TDRootComponent) //r[length(r)] := array("type":"menu","caption":"ӹť","onclick":thisfunction(addtoolbutton)); return r; end - function ClassObject();override; - begin - return class(TDTray); - end + function CheckParentWnd(Pwnd);override; begin return (Pwnd is class(TVCForm)) ; @@ -3103,7 +2973,7 @@ type TDMainMenu = class(TDMenuBase) {** @explan(˵) ˵ؼ %% **} - class function HitTip();override; + function HitTip();override; begin return "˵"; end @@ -3111,7 +2981,7 @@ type TDMainMenu = class(TDMenuBase) begin return class(tmainmenu); end - class function ClassName();override; + function dclassname();override; begin return "tmainmenu"; end @@ -3124,10 +2994,7 @@ type TDMainMenu = class(TDMenuBase) begin return (Pwnd is class(TVCForm)) ; end - function ClassObject();override; - begin - return class(TDMainMenu); - end + function WndClass();override; begin return Class(TMainMenuWindow); @@ -3143,19 +3010,18 @@ type TDMenu = class(TDMenuBase) {** @explan(˵) ͨ˵ؼ %% **} - class function HitTip();override; + function HitTip();override; begin - return "menu\r\nͨҼ"; + return "menuͨҼ"; end function classification();override; begin return "ǵӿؼ" ; end - class function ClassName();override; + function dclassname();override; begin return "tmenu"; - end - + end function InToolBar();override; begin return false; @@ -3164,14 +3030,10 @@ type TDMenu = class(TDMenuBase) begin return class(tmenu); end - function ClassObject();override; - begin - return class(TDMenu); - end + function Create(AOwner);override; begin - inherited; - + inherited; end function CheckParent(p,pwnd);override; begin @@ -3208,9 +3070,9 @@ type TDAction = class(TDComponent) {** @explan(˵) actionؼ %% **} - class function HitTip();override; + function HitTip();override; begin - return "taction\r\nͨҼ"; + return "tactionͨҼ"; end function IsContainer();override; begin @@ -3231,14 +3093,11 @@ type TDAction = class(TDComponent) return false; end - class function ClassName();override; + function dclassname();override; begin return "taction"; end - function ClassObject();override; - begin - return class(TDAction); - end + function WndClass();override; begin return Class(taction); @@ -3258,7 +3117,7 @@ type TDActionList = class(TDRootComponent) {** @expand(˵)actionlist ؼ %% **} - class function HitTip();override; + function HitTip();override; begin return "actionlist"; end @@ -3280,10 +3139,8 @@ type TDActionList = class(TDRootComponent) tr := r.TreeNode.owner.Designer; tr.VariableSelecter.additem(r); end - function menus();override; begin - r := inherited; r[length(r)] := array("type":"menu","caption":"add action","onclick":thisfunction(addaction)); return r; @@ -3292,14 +3149,10 @@ type TDActionList = class(TDRootComponent) begin return class(tactionlist); end - class function ClassName();override; + function dclassname();override; begin return "tactionlist"; end - function ClassObject();override; - begin - return class(TDActionList); - end function WndClass();override; begin return Class(TActionListWindow); @@ -3308,9 +3161,6 @@ type TDActionList = class(TDRootComponent) begin inherited; end - - - end //**************FMainMenu******************************** type TPopUpMenuWindow = class(TDVirutalWindow) @@ -3389,32 +3239,26 @@ type TDPopUpMenu = class(TDMenuBase) {** @explan(˵) ˵ؼ %% **} - class function HitTip();override; + function HitTip();override; begin return "Ҽ˵"; end function libs();override; begin - return array(); + return array("tslvcl"); end function ComponentClass();override; begin return class(tpopupmenu); end - class function ClassName();override; + function dclassname();override; begin return "tpopupmenu"; end - function bitmapinfo();override; begin return GetPopUpMenuBitmapInfo(); end - - function ClassObject();override; - begin - return class(TDPopUpMenu); - end function WndClass();override; begin return Class(TPopUpMenuWindow); @@ -3428,7 +3272,7 @@ end //*****************clipboard******************** type TDClipBoard = class(TDRootComponent) - class function HitTip();override; + function HitTip();override; begin return "а"; end @@ -3438,13 +3282,13 @@ type TDClipBoard = class(TDRootComponent) end function classification();override; begin - return ""; + return ""; end function ComponentClass();override; begin return class(TClipBoard); end - class function ClassName();override; + function dclassname();override; begin return "tclipboard"; end @@ -3466,7 +3310,7 @@ type TDClipBoard = class(TDRootComponent) end //*********************************** type TDQuotations = class(TDRootComponent) - class function HitTip();override; + function HitTip();override; begin return "鶩"; end @@ -3482,7 +3326,7 @@ type TDQuotations = class(TDRootComponent) begin return ""; end - class function ClassName();override; + function dclassname();override; begin return "tquotations"; end @@ -3504,7 +3348,7 @@ type TDQuotations = class(TDRootComponent) end //**************************** type TDtlogincontrol = class(TDRootComponent) - class function HitTip();override; + function HitTip();override; begin return "½"; end @@ -3520,7 +3364,7 @@ type TDtlogincontrol = class(TDRootComponent) begin return class(tlogincontrol); end - class function ClassName();override; + function dclassname();override; begin return "tlogincontrol"; end @@ -3546,7 +3390,7 @@ type TDSocketServer = class(TDRootComponent) {** @explan(˵) ˵ؼ %% **} - class function HitTip();override; + function HitTip();override; begin return "socket"; end @@ -3562,7 +3406,7 @@ type TDSocketServer = class(TDRootComponent) begin return class(TSocketServer); end - class function ClassName();override; + function dclassname();override; begin return "tsocketserver"; end @@ -3589,7 +3433,7 @@ type TDSocketClient = class(TDRootComponent) {** @explan(˵) ˵ؼ %% **} - class function HitTip();override; + function HitTip();override; begin return "socketͻ"; end @@ -3605,7 +3449,7 @@ type TDSocketClient = class(TDRootComponent) begin return class(TSocketClient); end - class function ClassName();override; + function dclassname();override; begin return "tsocketclient"; end @@ -3631,11 +3475,11 @@ type TDTreeView = class (TDComponent) {** @explan(˵) ƿؼ %% **} - class function HitTip();override; + function HitTip();override; begin return "ؼ"; end - class function ClassName();override; + function dclassname();override; begin return "ttreeview"; end @@ -3659,10 +3503,7 @@ C6D53F7109130000000049454E44AE42608200"; begin return false; end - function ClassObject();override; - begin - return class(TDTreeView); - end + function WndClass();override; begin return Class(ttreeview); @@ -3699,7 +3540,7 @@ type TDSpinEdit = class(TDComponent) {** @explan(˵) spinedit ؼ %% **} - class function HitTip();override; + function HitTip();override; begin return "SpinEdit"; end @@ -3707,14 +3548,11 @@ type TDSpinEdit = class(TDComponent) begin return false; end - class function ClassName();override; + function dclassname();override; begin return "tspinedit"; end - function ClassObject();override; - begin - return class(TDSPinEdit); - end + function bitmapinfo();override; begin return "0502000000060400000074797065000203000000696D670006040000006461746 @@ -3748,7 +3586,7 @@ type TDListView = class(TDComponent) {** @explan(˵) TTSLDataGrid ؼ %% **} - class function HitTip();override; + function HitTip();override; begin return "бͼؼ"; end @@ -3756,30 +3594,14 @@ type TDListView = class(TDComponent) begin return false; end - class function ClassName();override; + function dclassname();override; begin return "tlistview"; end function bitmapinfo();override; begin - return "0502000000060400000074797065000203000000696D670006040000006461746 -10002ED01000089504E470D0A1A0A0000000D4948445200000018000000180806 -000000E0773DF8000000017352474200AECE1CE90000000467414D410000B18F0 -BFC6105000000097048597300000EC300000EC301C76FA8640000018249444154 -484BB5D52D4CC3401407F0E770381C0E8947A3499A60700B06B3E006212080646 -A1364624B204D9A34080C0EB1A48E90903A1C0E070AB97EAD1FE2D1077B973B76 -57D1B54DFEE689DFFFF5724D015B7E7E0B5CD745DBB61B0D99A28006455128C9F -35C4996654AD23455329FCF9590A92DD8BA4871B337C38DE36F057F0340BFCC73 -1919061F10BC328F20F02449CC058CAF1F7D2A9B33EEFD2F58E0E0FC15106E2C2 -090F1B5CE87C0298C3F490504320E2310B8B6808F8323E314796BC6E5C8B8B1C0 -B2ACA510AE9B13AA9B131EC7B1F90D56DD9C70630181B317C0AF29E07B79B632F -C7AD0C7E9DE193EEC76157C78EFE0F5DD184F6F0602D716F0C68CFBAE5AC0F8ED -4E47D99CF16EFF52E05114990B18F726EA6D617CB0BD2F700AE387E72702AF2C9 -0B7665C8E8C53786B193716E86E05A1BA39E1BAB9B1A0A9CD2961189A0BC077CB -CF7F527EA1C3DA7875C10207E7AA366E2C20907118F56AE3DA023E0ECE2A78100 -4FA02DDADA8831B0B9AD8BCB2A0297CA9A0F59F7E7B0FE20F1D79BA1B7D429BC4 -0000000049454E44AE42608200"; + return getlistviewbitmapinfo(); end function WndClass();override; begin @@ -3810,139 +3632,49 @@ end //**********Ա༭*************** -(*type TGCellRender = class(TSLUIBASE) - {** - @ignore() %% - @explan(˵) gridcellȾ %% - **} - private - FActivate; - public - class function EditType();virtual; - begin - {** - @explan(˵) %% - @return(string) ַ %% - **} - return nil; - end - function CreateEditer(AOwner);virtual; - begin - return createobject(self(true).classinfo(1),AOwner); - end - function Create(AOwner);override; - begin - {** - @explan(˵) ༭ %% - **} - class(TSLuibase).create(); - end - function CellClick(grid,e,d);virtual; - begin - {** - @explan(˵) ӵ %% - **} - FActivate := true; - end - function CellDraw(grid,e,d);virtual; - begin - {** - @explan(˵) Ƹ %% - **} - end - function CellLeave(grid);virtual; - begin - {** - @explan(˵) 뿪༭ %% - **} - FActivate := false; - end; - property Activated read FActivate; - end *) - type TGCellRender = class(TSLUIBASE) -{** - @explan(˵) gridcellȾ %% -**} - private - FActivate; - public - function CreateEditer(AOwner);virtual; + +type TGCellBoolRender=class(TGCellRender) + class Function EditType();override; begin - return createobject(self(true).classinfo(1),AOwner); - end - function Create(AOwner);override; + return "bool"; + end + function CellClick(o,e,d);override; begin - {** - @explan(˵) ༭ %% - **} - class(TSLuibase).create(); - end - function CelldbClick(grid,e,d);virtual; - begin - end - function CellClick(grid,e,d);virtual; + if not ifarray(d)then return; + i := e.iitem; + j := e.isubitem; + pt := e.ptaction; + indexs := 1; + o.getdata(i,j,cp,indexs); + dv := d["value"]; + o.setvalue(indexs union array("value"),not dv); + rec := o.GetSubItemRect(i,j); + o.InvalidateRect(rec,true); + end + function CellDraw(o,e,d);override; begin - {** - @explan(˵) ӵ %% - **} - FActivate := true; - end - function CellDraw(grid,e,d);virtual; + dc := e.canvas; + DrawBoolButton(dc,e.SubItemRect,d["value"]); + end + function DrawBoolButton(dc,srca,v); begin - {** - @explan(˵) Ƹ %% - **} - end - function CellLeave(grid);virtual; - begin - {** - @explan(˵) 뿪༭ %% - **} - FActivate := false; - end; - property Activated read FActivate; -end + FRbuttonWidth := 20; + src := srca; + src[0]:= src[2]-FRbuttonWidth-10; + src[2]-= 10; + src[1]+= 3; + src[3]-= 3; + //_wapi.DrawFrameControl(dc.Handle,src,DFC_BUTTON,v?DFCS_CHECKED:DFCS_BUTTONCHECK); + dc.Draw("framecontrol",array(src[0:1],src[2:3]),DFC_BUTTON,v?DFCS_CHECKED:DFCS_BUTTONCHECK); + end +end type TTSLDataGrid=class(TDrawGrid) {** @ignore() %% @explan(˵)TSLͶչʾ %% **} private - type TGCellBoolRender=class(TGCellRender) - class Function EditType();override; - begin - return "bool"; - end - function CellClick(o,e,d);override; - begin - if not ifarray(d)then return; - i := e.iitem; - j := e.isubitem; - pt := e.ptaction; - indexs := 1; - o.getdata(i,j,cp,indexs); - dv := d["value"]; - o.setvalue(indexs union array("value"),not dv); - rec := o.GetSubItemRect(i,j); - o.InvalidateRect(rec,true); - end - function CellDraw(o,e,d);override; - begin - dc := e.canvas; - DrawBoolButton(dc,e.SubItemRect,d["value"]); - end - function DrawBoolButton(dc,srca,v); - begin - FRbuttonWidth := 20; - src := srca; - src[0]:= src[2]-FRbuttonWidth-10; - src[2]-= 10; - src[1]+= 3; - src[3]-= 3; - //_wapi.DrawFrameControl(dc.Handle,src,DFC_BUTTON,v?DFCS_CHECKED:DFCS_BUTTONCHECK); - dc.Draw("framecontrol",array(src[0:1],src[2:3]),DFC_BUTTON,v?DFCS_CHECKED:DFCS_BUTTONCHECK); - end - end + FCols; Fdata; FObjectData; @@ -4731,7 +4463,7 @@ type TGridCellNaturalEdit = class(TGridPropertyRender,TPropertyNatural) begin if not(FEdit is class(TWincontrol)) then begin - FEdit := new TPopEditCtrl(FGrid);//CreateExtendEdit(FGrid); + FEdit := new TPopEditCtrl(FGrid); FEdit.visible := false; FEdit.OnKeyPress := thisfunction(EditKeyPress); FEdit.parent := FGrid; @@ -5807,106 +5539,7 @@ type UniCheckList = class(TTreeView) // end property OnSelChanged read FOnSelChanged write FOnSelChanged; end -type MultiCheckListPanel = class(TCustomControl) //ѡ - private - Flist; - fbtn; - FIDokClick; - protected - type MultiCheckList = class(TTreeView) - private - Fdata; - public - function Create(AOwner);override; - begin - inherited; - Fdata := array(); - end - function MouseUp(o,e);override; - begin - inherited; - end - function hasFocus();override; - begin - return false; - end - function SetList(lst); - begin - clean(); // - rnd := RootNode; - Fdata := array(); - for i,v in lst do - begin - nd := CreateTreeNode(self); - nd.Caption := v[0]; - nd._tag := v[1]; - nd.Parent := rnd; - Fdata[v[1]] := nd; - end - - end - function SetSelValue(v); - begin - for i,vi in FData do - begin - if vi._tag in v then vi.Checked := true; - //if vi._tag = v then return SetSel(vi); - end - end - function GetSelValue(); - begin - r := array(); - for i,vi in FData do - begin - if vi.Checked then r[rl++] := vi._tag; - end - return r; - end - end - PUBLIC - function Create(AOwner);override; - begin - inherited; - height := 200; - //WsDlgModalFrame := true; - Flist := new MultiCheckList(self); - flist.CheckBox := true; - flist.border := false; - //flist.WsDlgModalFrame := true; - Flist.parent := self; - fbtn := new TBtn(self); - fbtn.height := 25; - fbtn.width := 40; - fbtn.caption := "ȷ"; - fbtn.Parent := self; - fbtn.Onclick := function(o,e)begin - Calldatafunction(FIDokClick,self(true),e); - end - end - function DoControlAlign();override; - begin - if not(FList and fbtn) then return; - rc := ClientRect; - rc[3]-=30; - FList.SetBoundsRect(rc); - fbtn.top := rc[3]+2; - fbtn.left := rc[2]-fbtn.width-3; - end - function SetList(lst); - begin - FList.SetList(lst); - end - function SetSelValue(v); - begin - FList.SetSelValue(v); - end - function GetSelValue(); - begin - return FList.GetSelValue(); - end - property IdOKClick read FIDokClick write FIDokClick; -end //*************zh**property******************************* type tGridCellAlignPos3BoxEdit=class(TOneSelectCell ,TPropertyAlign3) @@ -6419,10 +6052,10 @@ private Fcancelbtn.caption:="ȡ"; setwindow(Fcancelbtn,475,269,65); end - function WMCLOSE(o,e):WM_CLOSE;override;begin + function WMCLOSE(o,e):WM_CLOSE;override; + begin o.visible:=false; - e.skip:=1; - + e.skip:=1; inherited; end function getlazyitems();begin @@ -6447,7 +6080,7 @@ private r+=getnodenum(arr[i]["nodes"]["items"]); return r; end -public + public function create(AOwner);override;begin inherited; Fgrid:=aOwner; @@ -6718,7 +6351,7 @@ type TGridCellAnchorsEdit = class(TMultiSelectCell,TPropertyAnchors) **} function CellDrawLabel(dc,rect,d);override; begin - if ifarray(d) then + if ifarray(d) then begin FListSel := d["value"]; dc.drawtext(FormatTMF(d["value"]),rect); @@ -7458,78 +7091,7 @@ type TEventEditGrid = class(TPropGrid) end end -//ؼڵ -type TComponentTreeNode = class(TTreeNode) -{** - @explan(˵)ڵ %% -**} - private - FComponent; - public - function create(AOwner);override; - begin - inherited; - end - function Recycling();override; - begin - FComponent := nil; - inherited; - end - property Component read FComponent write FComponent; -end -type TComponentTree = class(TTreeView) -{** - @explan(˵)ؼ %% -**} - private - FEventGrid; - FProGrid; - FDesigner; - FLoading; - public - function hasFocus();override; - begin - return true; - end - function SetSel(item);override; - begin - if not FLoading then inherited; - end - function CreateTreeNode();override; - begin - return new TComponentTreeNode(self(true)); - end - function Recycling();override; - begin - FDesigner := nil; - inherited; - end - function create(AOwner);override; - begin - inherited; - FDesigner := AOwner; - end - function GetRootNode();override; - begin - r := inherited; - if not(r.Component) then - begin - c := new TDComponent(); - c.Cwnd := owner; - r.Component := c; - end - return r; - end - //ContextMenu(o,e) - - property EventGrid read FEventGrid write FEventGrid; - property ProGrid read FProGrid write FProGrid; - property Designer read FDesigner ; - property Loading read FLoading write FLoading; - {** - @param(Designer)(TVclDesigner) %% - **} -end + type TDesigImageList = class(TControlImageList) {** @explan(˵) imagelist %% @@ -7552,7 +7114,7 @@ type TDesigImageList = class(TControlImageList) **} if item is Class(TDComponent) then begin - n := item.ClassName; + n := item.dclassname; id := FIconMaps[n]; bmp := item.bitmap(); if (bmp is class(TcustomBitmap)) and bmp.HandleAllocated() then @@ -7576,7 +7138,7 @@ type TDesigImageList = class(TControlImageList) end if v is class(TDComponent) then begin - n := V.ClassName; + n := V.dclassname; end r := FIconMaps[n]; return r?r:0; @@ -7738,253 +7300,8 @@ type TListEidter = class(TPanel) @param(OnApplay)(function[TListEidter]) Ӧðťص %% **} end - -type TvclFormManager = class(TListEidter) -{** - @explan(˵) ڹ %% -**} - private - FOnAddForm; - FOnOpenFrom; - FOnRemoveForm; - FOnSetMainForm; - FSaveEdition; - FOpenEditon; - FAddPanelForm; - FRenameEdition; - FOnSaveWindowEditon; - FOnOpenWindowEditon; - FOnRenameForm; - FOnAddPanelForm; - type TFormList = class(TGridList) - FMainForm; - function SetItem(idx,v); - begin - cs := self.SelectedValue; - if FMainForm = cs then - begin - s := true; - end - inherited; - if s then SetMainForm(v); - end - function SetMainForm(v); - begin - if FMainForm=v then exit; - draw1 := finditemid(FMainForm); - FMainForm := v; - draw2 := finditemid(v); - if draw1>=0 then - begin - GridDrawItem(draw1); - end - if draw2>=0 then - begin - GridDrawItem(draw2); - end - end - function clean();override; - begin - inherited; - FMainForm := nil; - end - function create(AOwner);override; - begin - inherited; - Columns := array(("text":"id","width":40),("text":"","width":150),("text":"main","width":50)); - //FMainForm := "tform2"; - end - function DoDrawSubItem(o,e);override; - begin - j := e.subitemid; - i := e.itemid; - if j in array(1,2) then - begin - dc := e.canvas; - src := e.subItemRect; - fn := List[i]; - if j=2 then - begin - if fn = FMainForm then fn := "**"; - else fn := ""; - end - dc.DrawText(fn,src,DT_VCENTER .| DT_SINGLELINE); - end - else inherited; - end - property MainForm read FMainForm write SetMainForm; - end - public - function clean(); - begin - ListControl.clean(); - end - function create(AOwner);override; - begin - inherited; - caption := "ڹ"; - left := 300; - top := 300; - ed := new TFormList(self); - - FOpenEditon := new TBtn(self); - FRenameEdition := new TBtn(self); - FOpenEditon.parent := self; - FAddPanelForm := new TBtn(self); - FAddPanelForm.caption := "崰"; - FAddPanelForm.parent := self; - FAddPanelForm.onclick := thisfunction(addpanelform); - FRenameEdition.parent := self; - btns := Buttons(); - btns[0].caption := "Ӵ"; - btns[0].OnClick := thisfunction(addform); - btns[1].caption := "Ƴ"; - btns[1].OnClick := thisfunction(removeform); - btns[2].caption := ""; - btns[2].OnClick := thisfunction(openform); - btns[3].Caption := "Ϊ"; - btns[3].width := btns[3].width+10; - btns[3].OnClick := thisfunction(setMainForm); - btns[4].Caption := "洰ڰ汾"; - btns[4].width := btns[4].width+10; - btns[4].OnClick := thisfunction(SaveWindowEdition); - btns[5].Caption := "ԭ汾"; - btns[5].OnClick := thisfunction(openWindowEdition); - btns[6].caption := ""; - btns[6].OnClick := thisfunction(RenameForm); - //btns[5].visible := false; - //btns[4].visible := false; - ed.parent := self; - ListControl := ed; - OnClose := function(o,e) - begin - o.visible := false; - e.skip := true; - end - width := 400; - end - function SaveWindowEdition(o,e); - begin - calldatafunction(OnSaveWindowEditon,self(true)); - end - function OpenWindowEdition(o,e); - begin - calldatafunction(OnOpenWindowEditon,self(true)); - end - function RenameForm(o,e); - begin - calldatafunction(FOnRenameForm,self(true)); - end - function addpanelform(o,e); - begin - calldatafunction(OnAddPanelForm,self(true)); - end - function addform(o,e); - begin - calldatafunction(OnAddForm,self(true)); - end - function removeform(o,e); - begin - calldatafunction(OnRemoveForm,self(true)); - end - function openform(o,e); - begin - calldatafunction(OnOpenFrom,self(true)); - end - function setMainForm(o,e); - begin - calldatafunction(OnSetMainForm,self(true)); - end - function Buttons();override; - begin - r := inherited; - r[length(r)] := FOpenEditon; - r[length(r)] := FRenameEdition; - r[length(r)] := FAddPanelForm; - for i,v in r do if v then v.width := 120; - return r; - end - property OnRenameForm read FOnRenameForm write FOnRenameForm; - property OnSaveWindowEditon read FOnSaveWindowEditon write FOnSaveWindowEditon; - property OnOpenWindowEditon read FOnOpenWindowEditon write FOnOpenWindowEditon; - property OnAddPanelForm read FOnAddPanelForm write FOnAddPanelForm; - property OnAddForm read FOnAddForm write FOnAddForm; - property OnRemoveForm read FOnRemoveForm write FOnRemoveForm; - property OnOpenFrom read FOnOpenFrom write FOnOpenFrom; - property OnSetMainForm read FOnSetMainForm write FOnSetMainForm; -end -type TStrFileer = class() -{** - @explan(˵)ıļд %% -**} - private - FPath; - FData; - FLastError; - function SetPath(v); - begin - if v<>FPath then - begin - FPath := v; - FData := ""; - if not FileExists("",v) then exit; - size:=filesize("",FPath); //ȡļС - if readFile(rwraw(),"",FPath,0,size,FData) then - begin - end - else - begin - FLastError := FData; - FData := ""; - end - end - end - public - function create(); - begin - FOpenOk := false; - end - function clean(); - begin - FPath := nil; - end - function ReWrite(p,d,ch); - begin - {** - @explan(˵) ļд %% - **} - if not ifstring(p) then exit; - if not ifstring(d) then exit; - if not FileExists("",p) then - begin - return writefile(rwraw(),"",p,0,length(d),d); - end - SetPath(p); - if FData<>d then - begin - if FData=d then exit; - if ch and ifstring(ch) then - begin - r := writefile(rwraw(),"",ch,0,length(FData),FData); - end - if length(FData)>length(d) then - begin - FileDelete("",p); - end - return writefile(rwraw(),"",p,0,length(d),d); - end - return true; - end - property Path read FPath write SetPath; - property LastError read FLastError; - property Data read FData; - {** - @param(path)(string) ļ· %% - @param(FData)(string) ļ %% - **} -end -type TToolbars = class(TPageControl) +type TDesignertoolbars = class(TPageControl) private FToolbars; FLabels ; @@ -8047,7 +7364,7 @@ type TToolbars = class(TPageControl) tb := new ttoolbar(self); tb.align := alClient; - if t<>"ǵӿؼ" then + if t<>"ǵӿؼ" then begin st.parent := self; tb.parent := st; @@ -8062,1358 +7379,7 @@ type TToolbars = class(TPageControl) end //********************************************** -type TVclDesigner = class(tvcform) -{** - @explan(˵) ؼ %% -**} - private - - FChmHelper; - tmpcanvas; //canvas - FImageList; //ͼ - FViewBitmap; - FCTrans; - FVariableSelecter; - FFunctionSelecter; - Ftvclform; - //**********˵*************** - FMenu0; - FParser; - //******************************** - FToolBars; - FTree; - FCurrentTreeNode; - FObjInspector; - FPropGrid; - FEventGrid; - - FTempCanvas; - static FClassItems; - //************************************ - FCurrentNode; - FCurrentClikPos; - FComponentCreater; - FRounMenu; - FStopMenu; - FProjectsManager; - FProjectManager; - //*************************** - function WrapProjectTo(); - begin - FProjectManager.WrapTo(); - end - function OpenProjectFromtpj(); //ѡ - begin - SetWndPostWithMouse(FProjectsManager); - FProjectsManager.Show(); - return ; - end - function ShowProjectView(o,e); //ļ - begin - FProjectManager.visible := not FProjectManager.visible; - if o then - begin - FProjectManager._tag := o; - o.Checked := FProjectManager.visible; - end - //FProjectManager.show(); - end - function addtoolbuttons();//ӹ - begin - {** - @explan(˵)ӹ %% - **} - for i,v in FClassItems do - begin - FImageList.RegisterDitem(v); - //if not v.InToolBar() then continue; - tb := new TToolButton(self); - tb.caption := v.HitTip; - tb.Enabled := v.InToolBar(); - ig := FImageList.GetImageId(V.ClassName); - tb.imageid := ig; - v.Imgs := ig; - tb._tag := v; - tb.onclick := thisfunction(OnToolButtonCick); - FToolBars.addbtn(tb,v.classification); - end - end - - function calcheight(twidth); //߶ȼ - begin - //extheight := CaptionHeight()+MenuBarHeight(); - clc := array(); - if FClassItems and ifarray(FClassItems) then - begin - for i,v in FClassItems do - begin - cli := v.classification; - if not(cli and ifstring(cli)) then cli := ""; - if ifnil(clc[cli]) then clc[cli] := 0; - clc[cli]+=1; - end - mx := 0; - for i,v in clc do mx := max(mx,v); - height := (integer(mx*32/twidth)+1)*32+60+30; - end else - height := 90+32; - end - - function TreeNode2tfmsub(lib,node,itemnames);//tmfļַ - begin - if not(node) then - begin - it := FTree.RootItem; - node := (it.items)[0]; - end - if not ifarray(itemnames) then itemnames := array(); - if not ifarray(lib) then lib := array(); - if not node then exit; - tc := node.Component; - wlibs := tc.libs(); - tlibs := array(); - for i,v in wlibs do if v and ifstring(v) then tlibs[length(tlibs)] := lowercase(v); - tclib := lowercase(tc.libs()); - lib union2= tlibs; - r := ""; - tab := " "; - if tc is class(TDComponent) then - begin - tcname := tc.name; - tcclassname := tc.ClassName; - if not(tcclassname and tcname and ifstring(tcname) and ifstring(tcclassname)) then raise "!"; - r+= "object "+ tc.name +":"+tc.ClassName+"\r\n"; - itemnames[length(itemnames)] := array(tc.name,tc.ClassName); - cr := tc.GetChangedPublish(); - for i,v in cr do - begin - if not(v and ifstring(i) and ifstring(v) ) then continue; //ϸж - r+=tab; - r+= i + "=" + v +"\r\n"; - end - for i := 0 to node.ItemCount-1 do - begin - r += tablelines( call(thisfunction,lib,(node.items)[i],itemnames),tab); - end - r += "end"; - end - return r; - //GetChangedPublish - end - - function DeletComponent(comp); //ɾؼ - begin - if comp is class(TDComponent) then - begin - DeleteNode(comp.TreeNode); - end - end - function DeleteNode(node); //ɾڵ - begin - if node Is class(TComponentTreeNode) then - begin - comp := node.Component; - tree := Node.owner; - node.Recycling(); - if tree is class(TComponentTree) then - begin - tree.deleteitem(node); - node.Recycling(); - end - if comp is class(TDComponent) then - begin - wd := comp.Cwnd; - if wd is class(TComponent) then wd.Recycling(); - end - end - end - - function createmainmenubyarray(ms,pm,oer); - begin - if not(ifarray(ms) and ms) then exit; - if ms["type"]="menu" then - begin - if not pm then pm := new TMainmenu(oer); - if ifstring(ms["caption"]) then - begin - mu := new tmenu(oer); - mu.caption := ms["caption"]; - o := ms["onclick"]; - mu.onclick := ms["onclick"]; - mu.parent := pm; - if ms["checked"] =1 then - begin - mu.Checked := true; - end - field := ms["filed"]; - if ms["checked"]=true then - begin - mu.Checked := true; - end else - begin - bp := ms["bitmap"]; - if bp and ifstring(bp) then - begin - bpp := new tbitmap(); - bpp.Readvcon(HexFormatStrToTsl( bp)); - mu.bitmap := bpp; - end - - end - if ms["enabled"]=0 then - begin - mu.Enabled := false; - end - if ifstring(field) then - begin - try - invoke(oer,lowercase(field),1,mu); - except - end ; - end - call(thisfunction,ms["items"],mu,oer); - end - end - else for i,v in ms do - begin - call(thisfunction,v,pm,oer); - end - end - public - function OpenFileFromTpjFile(); //ļ򿪹 - begin - FProjectFileOpener.caption := ""; - if FProjectFileOpener.OpenDlg() then - begin - f := FProjectFileOpener.FileName; - FProjectsManager.OpenFileFromTpjFile(f); - for i := length(f) downto 3 do - begin - if f[i]="\\" then - begin - FProjectFileOpener.initialDir := f[1:(i-1)]; - break; - end - end - end - end - function OpenExaple(); - begin - FProjectFileOpener.caption := "򿪷...."; - f := 0;// tslfilename(); - fio := ioFileseparator(); - if f then - begin - for i := length(f) downto 3 do - begin - if f[i]=fio then - begin - ef := f[1:i]+"examples"; - if filelist("",ef) then - begin - FProjectFileOpener.initialDir := ef; - end - else - begin - FProjectFileOpener.initialDir := f[1:(i-1)]; - end - break; - end - end - end else - begin - f := sysexecname(); - for i := length(f) downto 3 do - begin - if f[i]=fio then - begin - ef := f[1:i]+"designer"+fio+"examples"; - if filelist("",ef) then - begin - FProjectFileOpener.initialDir := ef; - end - else - begin - FProjectFileOpener.initialDir := f[1:(i-1)]; - end - break; - end - end - end - if FProjectFileOpener.OpenDlg() then - begin - //echo ,"\r\n"; - FProjectsManager.OpenFileFromTpjFile(FProjectFileOpener.FileName); - end - end - function CreateTpjFomFile();//½ - begin - FProjectFileOpener.caption := "½"; - if FProjectFileOpener.OpenDlg() then - begin - f := FProjectFileOpener.FileName; - if parseregexpr(".tpj$",f,"",pp1,pp2,pp3)<>1 then f+=".tpj"; - FProjectsManager.CreateTpjFomFile(f); - end - end - function db(o,e): WM_NCLBUTTONDBLCLK;virtual;//󻯴 - begin - e.skip := true; - end - function openclassfile(); //򿪱༭ - begin - FProjectManager.ShowCurrentFormCode();//ShowEditor(); - end - - Function EnabledDesigner(f); - begin - {** - @explan(˵) designerǷ %% - @param(f)(bool) - **} - FObjInspector.Visible := F; - self.Enabled := f; - rt := FTree.RootItem; - if rt and rt.ItemCount>0 then - it := (rt.items)[0]; - if it then itt := it.Component; - if itt then itt.Cwnd.Enabled := f; - end - function TreeNode2tfm(lib,itemnames); //תļ - begin - {** - @explan(˵) ṹתΪļʽ %% - **} - r := TreeNode2tfmsub(lib,nil,itemnames); - if itemnames then itemnames := itemnames[1:]; - return r; - end - - function saveCurrentForm(); //浱ǰ༭ - begin - FProjectManager.saveCurrentEdit(); - end - function mainmenus();virtual; - begin - {** - @explan(˵) ˵ - **} - return array( - ("type":"menu","caption":"ļ","onclick",nil,"items":( - ("type":"menu","caption":"","onclick":thisfunction(saveCurrentForm), - "bitmap":GetSaveFileBitmapInfo()), - ("type":"menu","caption":"༭","onclick":thisfunction(openclassfile), - "bitmap":"0502000000060400000074797065000203000000696D670006040000006461746 -10002EA01000089504E470D0A1A0A0000000D4948445200000018000000180806 -000000E0773DF8000000017352474200AECE1CE90000000467414D410000B18F0 -BFC6105000000097048597300000EC300000EC301C76FA8640000017F49444154 -484BCD944B4B02611885FB412DDBB4ED37740369D1C6F69110B5A89FD0A6562DA -4B21BB8C8F2921214840B4992C0109112BA58511048C55C4FF3CEF78DCE37CD94 -CE2478E0C070E6F53CCEFBE90CA0C7EA23C0ED31101D049AF73CE84C22E0709C9 -558BE5CE5370C95D658D628F0C0D0E9AC389F5FE637DA1201F661F2E70B2BC94C -3353665D9F2F02F59C384FB943DE80648865DBC3626ED92ADB1AFA99D9E40DB0D -6432BF132894A7D01F64718E42FD39C2F801FF727C06D2D969DB35D03E827FA9B -A8D03EEFEB09E8435E769B75A80FCE80DE416EFF01B2F329CE22BCA8ADFF03D0A -11B52A217D05215F39A147C45F4AAB84901AF1FD0725548A39BA6B57CDDAC0C06 -488C016FD7D0AF1A90E78E208776A0A52B26400EC7CD4AFF806CD8D8C71754631 -DD244ACF5CD95F934D4833294BD9259E91F505C815E7A845E7E823C136F01A4A9 -5DE8C5075E1804504B403BA94159C840BF7B87341983B29485FEDCE4654C22A04 -BD141CA912494F502D48D224F45050274A21E03806FF2C7CA7516022D7D000000 -0049454E44AE42608200") - )), - ("type":"menu","caption":"ͼ","items":( - ("type":"menu","caption":"ļ","checked":1,"bitmap":GetWindowMgrBmp(),"onclick":thisfunction(ShowProjectView)), - ("type":"menu","caption":"","checked":true,"onclick":thisfunction(Mobjinspect), - "bitmap":GetDefaultIconInfo()) - )), - ("type":"menu","caption":"","items":( - ("type":"menu","caption":"򿪹","onclick":thisfunction(OpenFileFromTpjFile), - "bitmap":GetOpenFileBitmapInfo()), - ("type":"menu","caption":"½","onclick":thisfunction(CreateTpjFomFile), - "bitmap":"0502000000060400000074797065000203000000696D670006040000006461746 -10002BC02000089504E470D0A1A0A0000000D4948445200000010000000100806 -0000001FF3FF61000000017352474200AECE1CE90000000467414D410000B18F0 -BFC6105000000097048597300000EC300000EC301C76FA8640000025149444154 -384F7D924D48146118C7273C885D5D0A89920D84ECE2A5082F76D93DA478A8DDD -9D99DFD5EAB252AC465D94317B340BD545B4B1D0A619548292F8298618730F2D0 -0795645E2A2F82C57E7F7FCCACFFE679DDA161C97DE0CFBC87F9FFDEF7F93F0F8 -77DCAE373D7E582DBEB84CBA3C8ED80D36D87C325C2E1146177DAD014502E9751 -A95498E85C2A9590CFE791CD66914EA7213AACCD002E66AC56AB4C2AA4582C229 -7CB31804D149A00BC2E66942489A97394635201994C06828D6F00ECEE028B8B40 -28C4FADE0F406D10C062353700A251C0EF0704818546CF568D8DA216788B49035 -0A8CC6C3603BDBD0AC0C17AFE9F994400B3E58206B0B5C56E465F1FA0D7B371D1 -732979926A54FB4FA55230F1E735005946666000525717A4B63665D676D66BA15 -060520164A6DB93C9E43F40A12C63E5F31FBC8A3CC3B713DDD86C6D65CB42F3D6 -4A6B4E24127B804F3F33B8FA78039E075F619958833D308325D1A76C99C89E490 -6129D49648EC7E388C5620A40C960786A13F67BEB308C7EC0A9C02A7A2E3F87F1 -DA13B6A6B46956655968DE16C1AC846662C19191C4421C8A7C81F1E647745F7F8 -BA3BE6574F051740E4E22316F407AFA3876C22D58BFC561798443F4520B7EFF58 -6391A9C58993AB38137C8363BE97382CCCA1BDFF3E0E19C7F06BFA2CB61FEA98F -97590C3CC450E61F10012DB1B75EB5E7181C80A4EFB6771849F82AE3F8C76C318 -C41B4FF17D218477B73BB044370F29669BF20DF6EC6DABA6B8AA2463E4EE024EF -277A01F1CC7958979C8B59AF25F0DEFE702981DD6E191F7205E8C9F835C2DD76D -6A017F012E1003A76A3E2C680000000049454E44AE42608200"), - ("type":"menu","caption":"ʷ","onclick":thisfunction(OpenProjectFromtpj), - "bitmap":GetHostroyBimp()) - , - ("type":"menu","caption":"","onclick":thisfunction(WrapProjectTo), - "bitmap":"0502000000060400000074797065000203000000696D670006040000006461746 -100022D04000089504E470D0A1A0A0000000D4948445200000018000000180806 -000000E0773DF8000000017352474200AECE1CE90000000467414D410000B18F0 -BFC6105000000097048597300000EC300000EC301C76FA864000003C249444154 -484B9D95FF4FD34718C7F987F6C3DC9438E7343A750BC100A211182628884E98E -CBB084215A16C859608A5A3A603265FC6280C1601A15A22158DB4AE0B66E88420 -6E12A4D81629A57C31BC77F7F45A7AA538B25772F97C9EE79E7BDEF7B97BEE3E5 -1F80F56565E63DEEB85CB3D0BC7CC4B385D2ECC793C585A5A12116F664381E5E5 -65B8675F61DA3183B73E3E8743D95AA971BFD3E586CFE71323221351C0E399C79 -0FD313E385A045D432F0E1C2FC38FF766826DCBC17C4CBD70E072553B1415AD18 -7BFA1CABABAB62B4CC3A01AF770119B957A1D475925DACEDC0BB71059240F4210 -592CF56A1ED86154FFF7160FFB152347658283E1C496060E811624EA830CE0685 -C2972854606BBC0263CFA645AF9F6C453DCE14D6E2D1D8A4F0F8218129C72CEBA -C434DF32D7286B3E3489124B02B45297A645E7916B025360FDA0693F03081E6DF -EEE248D6152C2EAD08978CC33987E8C44B92C0FB4925D89EA88075785C44C9D41 -A6F23FE940683B6BF1055A0312233CF20BA6476262BF10E5BFFF025E2F6CEA462 -7AA67C5E2DA2D7E8EAB763172B9081A1C7FE25B258FD15C367CBD135DE4474422 -12AEB7B915ED820250FB43C9D0916DB131CFF564F42FA9FCD34F62B6523D25991 -787DFE7312DCE4B9390F761C568859698517B08F4C20ABD428254F3DFF136E581 -E8A08B083B8C8F6E92276275D6693EA115E3F41819B771E62EF2725F49E94538D -BDA9A598989C21BBA3CF86B3AA4E4A1E97FD037EE9B1929FC337765B7C0195F37 -5B31DB1E965B8C3D63E0009D4349BB127A5981C01BAFAFFA0AFF9B4B09EEC7243 -0F4E29DBA16FB94D362739478BB84C355D27A1F073A1BADA45EF513C095FF38D8 -861338ACD50E39E7D14EADA3EF25DD0B492F8EF7F4E901D89D6EEFB14435FD069 -B2E1C354259C6E0F7586D3697A40C10967AED03357D5227AD633F9C2C5F6F2627 -0D2C13DF0787D54721B956C4BB715EFB1815CA0CE3820BC3227CF1BA8FE27A7DD -C21322108027E0778FC5364AF6FCC2227235BFE2CBEA5B48FCBA8E363AABB40D0 -9A72BA89FD3CE8A602BDBE8A3AC38C28928C093A45D6AC5C9826BD89756864AD3 -04F90E7E56434FDEF20C168A8DCDAC407C8E9E7CE7CADB449635361488D43ECAA -C94ECEF3B46A0EE1A0DDAC535DD22CB1AEB04F4C641E4EBCD52A240DB93561ED1 -CF9BDA68A3C985B34E80C32B21BFEA3ABE6B1B9692F0BB29D4E64DD9741F9A867 -EDAAB48441408D03738820C45130C771D942CF4562D6A1A8242D78DF1BFE57F47 -386F14085071CD8C6FB47D789BFD2A4B8CC3F842D54E076F336C4A80F37CCA899 -8D35530F63E109ECDB16981FF07F02FE5F4C30FC035A3F30000000049454E44AE -42608200" - ) - ) - ), - ("type":"menu","caption":"","items":( - ("type":"menu","caption":"","onclick":thisfunction(editcommandline)), - ("type":"menu","caption":"","onclick":thisfunction(RunProject),"filed":"FRounMenu", - "bitmap":"0502000000060400000074797065000203000000696D670006040000006461746 - 10002DF01000089504E470D0A1A0A0000000D4948445200000010000000100806 - 0000001FF3FF61000000017352474200AECE1CE90000000467414D410000B18F0 - BFC6105000000097048597300000EC300000EC301C76FA8640000017449444154 - 384F85906B6F0151108657575489AD124B5C1AAC452D65DB529754DA34FD692D4 - 5DD4ADDBA71EBFF7CBB3889E8504F321FCECC9B674E86C31F5EB4289E3599BD8E - 43044F33098F5309652DC83AFF43058B10CAF3008A531F4ADF3ED63D0C1194970 - 194165E14666EDC6B22B263179BEC87081E967E1496227273276E353BD4910075 - 6067530A11147F3CC82D1CC8CC045C6B1628A333A4FA16243B3696D8850A166ED - CCCED484FAD502626C4873CE23D23AEDA66249B5696DA420485B9A80B04A43433 - 62231E72DF80708743E48347B47E0AA526B0E40622C8CF5C50A7B6F576796040A - 4CD41AA7308E925D78C88572D2CB98108569757270212035DD033406A70085639 - 842BBAA872C2525B88203B16911E0A50FA66481D5DB0DAFEA6D72B89AEA13F18B - A91F93A87D2B520DAE411AA6D048720935CDF03F5F302899615B1860991779E4D - F64304F9AE176ADB895453BF437DF760FB208242C78FBBA6884CDDC13AFF4304A - 5D625720D2F7B1D03F80599273DB222D313980000000049454E44AE42608200" - ), - ("type":"menu","caption":"ֹͣ","onclick":thisfunction(StopProject),"enabled":false,"filed":"FStopMenu", - "bitmap":"0502000000060400000074797065000203000000696D670006040000006461746 - 100029301000089504E470D0A1A0A0000000D4948445200000010000000100806 - 0000001FF3FF61000000017352474200AECE1CE90000000467414D410000B18F0 - BFC6105000000097048597300000EC300000EC301C76FA8640000012849444154 - 384FCD92496B025110847353DC453DB880A888A888EBFFFF2781104446CC6602C - 9E430F9D2E57B8679971CE2C11434BE81AEEAEA6A6FB810FF4C20D96C60B582E5 - 12E673984EF91A8F8947235EAD0EF6DE4E26BEDB217420F27AED6AB13809301C9 - 2F4FBBCF77A3C0D06ECEC3B8D504093CFE4D90C6C2A46A4D522B67AE97488BA5D - DFEC100AC8F6996C76B1C9B4DB50AFF359AB71B4DF7DB3E99B1D4201595669B2C - 8369146038A45E2528963A54264226904020A4C3B9F6C6BB22727B91C1F56CFF9 - 3C9189A41108286D05A69D65FB879CC9F066F560EF9D39492310D0A994B602D3C - EB2ADC9223F66B344F6BE2F977DB74320A03BEB544A5B816967D9D66491B78502 - 77D5AAEF760804F427D19D752AA5ADC0B4B36C6BB2C8B7BF85F8175C5B00BE01F - F2C4775DEA0B57A0000000049454E44AE42608200"), - ("type":"menu","caption":"","onclick":thisfunction(debugproject)), - - )), - ("type":"menu","caption":"","items":( - ("type":"menu","caption":"ͼƬ","checked":0,"onclick":thisfunction(ViewBitmap)) - )), - ("type":"menu","caption":"","items":( - ("type":"menu","caption":"ʹֲ","onclick":thisfunction(OpenHelp), - "bitmap":"0502000000060400000074797065000203000000696D670006040000006461746 -10002E002000089504E470D0A1A0A0000000D4948445200000010000000100806 -0000001FF3FF61000000017352474200AECE1CE90000000467414D410000B18F0 -BFC6105000000097048597300000EC300000EC301C76FA8640000027549444154 -384FA590494F53611885FD6FC6C48D2B57BA21828808C4401C222444A26200A31 -8A802020151204A903009AD76A02D63A194D2C26DCAD401E8A54C2DBD94C9C7AF -A5704358194F727237E73CF73DDF15FE539700FB877F58D93C666C318E495230C -CC5304B31BCEB7162F193544AD505801C39C6EC51F0860E585857F004A3497BD7 -62B803317A2737F187E3A9F4A9CE01A1DD2374B35196E47DA617B76833F929EB9 -CA7B4638E7ADD0223EE0DA4D5282DA6004BA158AA9502C40E4ED039775908290C -CF872911A53A9D57FC4DC1178ED1391AA0A86D06EDD42A2EDFAE002EB1B377A80 -212E7CDFAF798F46E53DCEEE269D3B4D87B247C9CF21125ED0E8ABED831BB6486 -66130EA980AE7119496C6D14E4C74D760A1A27F16F88CD13010CCE35140130388 -3E4D45878DFEB6666798B8A0EA70A68D0AD88C78A50DCEA20BFC1466EDD88085B -E9B7F9D88AC659DF5268FE2D71BF7A88FC4F56DCBE1DF26B475440558F072910A -1F0AB839C5A2B0F3E5AC8FE6021A21CB22247C9D30C91F94ECF5DE13C8D11977F -9BAC4A930AD0F4483857B6D1F449E4D68C90AD31935565E25EA521E98C0A1D19E -583A4970F50DA3681CD2BF35040CF01BFECAB0CDA0258DD72F2B4B36278771F79 -4721ADEC67D219657DE8A67CB48A396D7A49052482CF1AC6189B97D14EFAC9A93 -692FE464B75973DE944F9CEEB6EBE193D181D016EBDE86735BCA702129A906451 -D26371AD619809F2AA758CACB7036496F7F3BCD98AD6B68C7EDACFF5273F308AE -F99CE01090D8B725A999616DD1CE39E108EE570D2A3F3EBD4F739B951D885DEEE -4BA54F75019050509CF659EBE6F6CB7EAE3DEAE06AC1776E16770BC00C7E39924 -AA9BA04F837C15F4F46800A8EF8DEDF0000000049454E44AE42608200"), - ("type":"menu","caption":"ؼ","onclick":thisfunction(OpenHelp), - "bitmap":"0502000000060400000074797065000203000000696D670006040000006461746 -10002E402000089504E470D0A1A0A0000000D4948445200000010000000100806 -0000001FF3FF61000000017352474200AECE1CE90000000467414D410000B18F0 -BFC6105000000097048597300000EC300000EC301C76FA8640000027949444154 -384F8D924B4C135118852B2AA046431150E303E26B455CB1D3953B162ED818A2C -6850B88441275A126269A687443A54AA251AC411E1B345414E461176881A260C4 -5035D3875230410A0DB543FAB074EEF1DCCE34445CE849BEB4F77F9CB9FFCC6FC -25F1224423E00F35660F23CB064E7394012467E592B0C647216983E0D58D60167 -5601D52CB9B21A682A02B40EE6A3E9CA8C5618C8275F036E6703554C5D261789F -C2F8D9C5B997792A42C4E8BD18C52641C88950056861F93251227D2489AB4F126 -A82461D99016A319C5492B3113193670911A226FE2E348D84766882E596548CE7 -6876C22324CA6C9257295788D18B6113FD1C81F06BFC80B52488CE25BA49E848D -33E40865244874C928E6BCEFA0B49D42C05E81D87C118496A5A7AE938F996613B -4640E7E2A65987C5E8BB81A92ADBA81D2701089BA2CA4BA4A21C673F93AF824C1 -7947990E1A061ACFE1B5D05EAF47AAB314BEE1A7B25537F8565F8AA82D1B9A733 -FC4977C0875339B697496E90B6C9CC9E197CB830815424CE4437B6586BFFFA66E -90585CC00F6B09D4E65C88919D10937C07D11DC01B2E4E0D9BCFADE136EEE6AD4 -8743B84AF00626023A6BAAB748339FF382296022CDCCB81E63043B87983792E4C -B418F844A300F722BE87E75D10B35B38A2195ACF06843ACA918C2DC2E4733D43C -A9A87196B31949643F0741E86C7510ECFD01178472BE0797F94BF95F0BA8EC13B -701CDEDE13F0D94FC2D35E85AF637D30298E46F8EAF62218FC9EBED2FFC8ED1E4 -66B432D42D30A4C0B539FE1AE3B00555D5ECF7F696CCC019BA59A23A8FA57F03B -EE62B0FD069C5DF731D8F50043DD8D187AF910C33D36B824BD8F30D2D794E66D7 -F3369C1C0130BE291107E03B1BD47754EBE98780000000049454E44AE42608200 -"), -("type":"menu","caption":"..","onclick":thisfunction(OpenExaple),"bitmap":"0502000000060400000074797065000203000000696D670006040000006461746 -10002AA01000089504E470D0A1A0A0000000D4948445200000018000000180806 -000000E0773DF8000000017352474200AECE1CE90000000467414D410000B18F0 -BFC6105000000097048597300000EC300000EC301C76FA8640000013F49444154 -484BBD940B4FC2301485F9FF7F49638C898F058C8293E81ECA18E1351C0C64899 -179DDA9AEA9A3CDB8C03CC949BAFBFAB6765BE3E4E699EAF4FF01E2647D546B01 -C79216E08591B43F98FDB9DEC75B80BA2C01AD6EF8EBFE81FE99B305A8FD0C760 -1CC97A97095F606D8FE48B84A6CC0E72613775ED4628D98493B03DED30FBAEEF4 -6471D9C8A1A62CD6139820A6E1100B00BD290D851133890D08270BD950183193D -880EECB98DC7E4459F6258C356226B101BABD36ED3FC40670C506C4494A4E30A5 -CBFB5761AC1133A912808F681825F4E08DE8E2D697C56523871AD4AA1F9E11108 -EE7D4768674D6746541E1BBA781C8C35897F3E8412FF25AC0A9E5C8207CDE72E9 -31FFEF4CE3156D34BF05C490430D6AD55E759604C057ED5EBEBF11CD16FC03470 -F7A31439DD9B0EC80BCFCBD56CFE0506116665A7640DF50A54EEE2F8BDA750000 -000049454E44AE42608200") - -), - - ) - ); - end - public - function DeleFiledFromEdit(n,nn); - begin - if FTree.Loading then return ; - FProjectManager.DeleteAFiled(n,nn); - end - function AddFiledFromEdit(n); - begin - if FTree.Loading then return ; - FProjectManager.AddAFiled(n); - end - function EditerCodeChanged(); //ı - begin - if FTree.Loading then return ; - classinfo := FProjectManager.GetFormClassInfo(); - if classinfo and ifarray(classinfo) then - begin - class(TDComponent).TemporaryNotName := classinfo["members"]; - SetFunctionList(classinfo["funcs"]); - end - end - function LoadProject(n); - begin - FProjectManager.SetProjectInfo(n); - end - private - - function OpenHelp(o,e); - begin - if not FChmHelper then - begin - FChmHelper := new unit(UtslCodeEditor).TTslChmHelp(); - end - case o.caption of - "ʹֲ": - begin - FChmHelper.ChmName := "help\\designerUserGuid.CHM"; - // p := "C:\\Program Files\\Tinysoft\\Analyse.NETplug\\help\\designerUserGuid.pdf" ;//pluginpath()+"..\\help\\designerUserGuid.pdf"; - //_wapi.WinExec(format('cmd.exe /C call "start %s"',p),0); //http://bzjj.sinaapp.com/tslvclhelp/index.html - //_wapi.WinExec(format('start "%s"',p),0); - //_wapi.WinExec('cmd.exe /C start http://bzjj.sinaapp.com/tslvclhelp/index.html',0); - //_wapi.WinExec('cmd.exe /C "start http://bzjj.sinaapp.com/tvcldesignerhelp/tvcldesigner.pdf"',0); - - end - "ÿؼ": - begin - FChmHelper.ChmName := "help\\vclNormalControls.CHM"; - end - "ؼ": - begin - FChmHelper.ChmName := "help\\tslvclhelp.chm"; - - end - - end - FChmHelper.ShowTslLangChm(); - //_wapi.WinExec('cmd.exe /C start http://bzjj.sinaapp.com/tslvclhelp/index.html',0); - end - function ComponentMove(o,e); //ƶ - begin - {** - @explan(˵) ƶ ؼ %% - **} - //setcomponentfocus(o,false); - FPropGrid.SetGridValue("left",O.left,O) ; - FPropGrid.SetGridValue("top",o.top,O); - - end - function ComponentSize(o,e);//Сı - begin - {** - @explan(˵) ؼС %% - **} - FPropGrid.SetGridValue("width",o.width,O); - FPropGrid.SetGridValue("height",o.height,O); - //setcomponentfocus(o,false); - end - function DesignerClose(o,e) //ر - begin - {** - @explan(˵) %% - **} - if _wapi.MessageBoxA(self.Handle,"˳Ӧ","ʾ", MB_YESNO.| MB_ICONWARNING) = IDNO then - begin - e.skip := true; - end - else - begin //̴ - FProjectManager.StopProject(); - FProjectManager.CloseCurrentEdit(); - end - end - function CompClose(o,e); //ؿؼ - begin - {** - @explan(˵) ؼر %% - **} - e.skip := true; - end - function OnDesignerActivate(o,e); - begin - {** - @explan(˵) %% - **} - return ; - if e.wparam = WA_CLICKACTIVE then - begin - end - end - - public - class function GetClassItem(n); - begin - return FClassItems[n]; - end - class function RegestorClassItems(its); - begin - {** - @explan(˵) ע %% - @param(its)(array of TDComponent) %% - **} - if not ifarray(FClassItems) then FClassItems := array(); - for i,v in its do - begin - if (v is class(TDComponent) ) then - begin - n := v.ClassName(); - if n and ifstring(n) then n := lowercase(n); - FClassItems[n]:= createobject(v); - //RegisterComponentType(n,FClassItems[n].ComponentClass()); - end - end - - end - //**************************************** - function CreateComponent(); // - begin - {** - @explan(˵) %% - @return (TDComponent) - **} - if FComponentCreater and FCurrentNode and FCurrentClikPos then - begin - par := FCurrentNode.Component.Cwnd; - r := FComponentCreater.ComponentCreater(FCurrentNode,FCurrentNode.Component.Cwnd); - if not r then exit; - r.CreateName(); - FVariableSelecter.additem(r); - BindCwndMessage(r.Cwnd); - if ifarray(FCurrentClikPos) and (r.Cwnd is class(TControl)) then - begin - if r.Cwnd.Align<>alnone then - begin - //par.DoControlAlign(); - end else - begin - x := FCurrentClikPos[0]; - y := FCurrentClikPos[1]; - if r.Cwnd is class(TControl) then - begin - if ifnumber(x) then r.Cwnd.left := x; - if ifnumber(y) then r.Cwnd.top := y; - end - end - end - FTree.SetSel(r.TreeNode); - end - FCurrentClikPos := nil; - FComponentCreater := nil; - FCurrentNode := nil; - FTree.PopupMenu := nil; - //echo "\r\n ӿؼ"; - return r; - end - function RectToPoints(rc); - begin - {** - @explan(˵) - **} - r := array(); - r := array((rc[0],rc[1]),(rc[2],rc[1]),(rc[2],rc[3]),(rc[0],rc[3]),(rc[0],rc[1])); - return r; - end - function setcomponentfocus(cwnd,fk); - begin - {** - @explan(˵) ƿؼý %% - **} - if not(cwnd is class(TWincontrol)) then exit ; - if not cwnd.HandleAllocated() then exit; - //if cwnd is class(tvcform) then exit; - //if cwnd.WsPopUp then exit; - return cwnd.DesigningSelect(fk); - end - function setcomponentfocus_bk(cwnd,fk); - begin - - if not(cwnd is class(TWincontrol)) then exit ; - if not cwnd.HandleAllocated() then exit; - if cwnd.WsPopUp then exit; - cp := cwnd.parent ; - if not(cp is class(TWincontrol)) then exit; - rec := array(cwnd.left-1,cwnd.top-1,cwnd.left+cwnd.width+1,cwnd.top+cwnd.height+1); - if not fk then - begin - if cwnd is class(TTabSheet) then - begin - tmpcanvas.pen.color := rgb(255,255,255); - goto abcef; - //return o.DoControlAlign(); - end - t := 25; - rec := array(rec[0]-t,rec[1]-t,rec[2]+t,rec[3]+t); - return cp.InvalidateRect(rec,true); - end - tmpcanvas.pen.color := rgb(200,0,0); - label abcef; - tmpcanvas.pen.width := 2; - //tmpcanvas.pen.Style := 1; - pcp := _wapi.GetDC(cp.handle); - if not pcp then exit; - tmpcanvas.Handle := pcp; - vw := RectToPoints(rec); - tmpcanvas.draw("polyline",vw); - tmpcanvas.Handle := 0; - _wapi.ReleaseDC(cp.Handle,pcp); - end - function TreeNodeSelected(n); - begin - {** - @explan(˵) ڵ㱻ѡ %% - @param(n)(TComponentTreeNode) ѡڵ %% - **} - if FCurrentNode=n then exit; - FCurrentNode := n; - if not ifobj(n) then exit; - t := n.Component; - if not t then exit; - mu := t.CreateMenu(); - FTree.PopupMenu := mu; - FPropGrid.Component := t; - FEventGrid.Component := t; - wd := t.cwnd ; - setcomponentfocus(wd,true); - return t.SelectedNode(); - end - private - function RClickComponent(o,e); - begin - {** - @explan(˵)Ҽ˵ %% - **} - nd := o._tag; - if FCurrentNode<>nd then - begin - FTree.SetSel(nd); - TreeNodeSelected(nd); - end - cp := nd.Component; - if cp then - begin - mu := cp.CreateMenu(); - if mu then - begin - //ֱӽ˵ֵؼ,gtkڽ㵼µ˵ - cwnd := cp.Cwnd; - cwnd.PopupMenu := mu; - xy := o.ClientToScreen(e.lolparamsigned,e.hilparamsigned); - _send_(WM_CONTEXTMENU,cwnd.handle,makeposition(xy[0],xy[1]),1); - return ; - uf := TPM_LEFTALIGN .| TPM_TOPALIGN .| TPM_RIGHTBUTTON; - _wapi.TrackPopupMenu(mu.Handle,uf,xy[0],xy[1],0,self.Handle,nil); - end - end - end - //FClickTime; - public - function addandopeneventbyname(nd,n); - begin - if nd then - begin - cp := nd.Component; - if cp then - begin - pe := cp.GetPublishEvents(); - if ifstring(n) and n then - begin - de := cp.geteventfunctionbyname(n); - end else - de := cp.DefaultEvent; - if ifarray(de) and de then - begin - dei := de["event"]; - dvs := pe[dei]; - if ifarray(dvs) then - begin - dv := dvs["value"]; - if not dv then - begin - td := de; - td["name"] := cp.Name+"_"+td["name"]; - if FProjectManager.AddAFunction(td) then - begin - FEventGrid.SetGridValue(dei,td["name"],cp.Cwnd); - FProjectManager.GoToAFunction(td["name"]); - return ; - end - end else - begin - FProjectManager.GoToAFunction(dv); - return ; - end - end - end - end - end - FProjectManager.ShowEditor(); - end - function AddAndOPenEvent(nd); - begin - {** - @explan(˵)ͨڵ򿪺༭ %% - **} - addandopeneventbyname(nd,n); - end - function DBLClickComponent(o,e);//˫ - begin - {** - @explan(˵) ˫ %% - **} - if o then AddAndOPenEvent(o._tag); - if e then e.skip := true; - end - private - function ClickComponent(o,e); //ѡ - begin - {** - @explan(˵) %% - **} - nd := o._tag; - if FCurrentNode<> nd then - begin - wd := o;//nd.Component.Cwnd; - //if wd is class(TWincontrol) then _wapi.BringWindowToTop(wd.Handle); - FTree.SetSel(nd); - TreeNodeSelected(nd); - end; - setcomponentfocus(o,true); - if FComponentCreater and FCurrentNode then - begin - //SetSysParam("cpos_screan",array(e.lolparam,e.hilparam)); - if FComponentCreater is class(TDRootComponent) then - begin - FCurrentNode := (FTree.RootItem.items)[0]; - if not FCurrentNode then exit; - O1 := FCurrentNode.Component.Cwnd; - if not o1 then exit; - end else o1 := o; - xy := array(0,0); - _wapi.GetCursorPos(xy); - FCurrentClikPos := o.ScreenToClient(xy[0],xy[1]); - //FCurrentClikPos := array(e.lolparam,e.hilparam);//o1.screentoclient(e.lolparam,e.hilparam); - r := CreateComponent(); - end - return ; - end - function ClickTreeNode(o,e);//ѡ - begin - {** - @explan(˵) ͨѡڵ %% - **} - od := e.itemold; - if od then - begin - cp := od.Component; - if cp then - begin - setcomponentfocus(cp.Cwnd,false); - end - end - TreeNodeSelected(e.item); - end - - - function SpectorClose(o,e);//objectspector ر - begin - {** - @explan(˵) Ŀ¼ر %% - **} - e.skip := true; - o.visible := false; - if o._Tag is class(tmenu) then o._tag.Checked := false; - end - - function OnToolButtonCick(o,e); // - begin - {** - @explan(˵) ѡ񹤾߰ť %% - **} - cct := o._tag; - //if FComponentCreater=cct then exit; - FComponentCreater := cct; - return ; - fm := (FTree.RootItem.items)[0]; - if not fm then exit; - O1 := fm.Component.Cwnd; - o1.show(); - - end - - function CloseShowForm(); //ڹر - begin - {** - @explan(˵)رյǰ̴%% - **} - FProjectManager.CloseCurrentEdit(); - end - public - function BindCwndMessage(wnd); - begin - {** - @explan(˵) Ϊؼ¼ %% - **} - if wnd is class(tmenu) then wnd.OnDesignClick := thisfunction(ClickComponent); - if wnd is class(TWincontrol) then - begin - wnd.OnDesignClick := thisfunction(ClickComponent); - wnd.OnDesigndblClick := thisfunction(DBLClickComponent); - wnd.OnDesignrClick := thisfunction(RClickComponent); - wnd.onmove := thisfunction(ComponentMove); - wnd.onsize := thisfunction(ComponentSize); - //wnd.Onclose := thisfunction(CompClose); //ֻǺ - wnd.Onclose := function(o,e)begin - e.skip := true; - CloseShowForm(); //洰Ϣ - end ; - wnd.bindmessage(wnd.WM_NCLBUTTONDOWN,thisfunction(ClickComponent)); - //WM_NCLBUTTONUP wnd. - if (wnd is class(TVCForm)) then - begin - {wnd.Onclose := function(o,e)begin - e.skip := true; - CloseShowForm(); - end ;} - wnd.OnMinimize := thisfunction(CompClose); - end - end - end - function UnLoadTreeNode(); - begin - {** - @explan(˵) жtreeĽڵ%% - **} - node := FTree.RootItem; - if node.ItemCount>0 then - begin - DeleteNode((Node.items)[0]); - end - FVariableSelecter.clean(); - FEventGrid.Component := array(); - FPropGrid.Component := array(); - end - private - FLoadInheritedName; - public - function LoadTreeNode(Ptfm,inh); - begin - {** - @explan(˵) treeڵ %% - **} - FLoadInheritedName := inh; - UnLoadTreeNode(); - FTree.Loading := true; - try - prs := array(); - obarray := array(); - loadtfmtotree(Ptfm,Ptfm.gettree,FTree.RootItem,FTree,prs,obarray); - for i,v in prs do - begin - va := obarray[v[2]]; - if va then - begin - v[0].SetComponentProperties(v[1],va.GetTrueComponent()); - end - end - except - end ; - FTree.Loading := nil; - end - function loadtfmtotree(p,d,node,owner,prs,obarray); - begin - {** - @explan(˵) tfmļ %% - **} - if not ifarray(d) then exit; - if not d["type"]=p.TT_COMP then exit; - dcls := d["class"]; - it := GetClassItem(dcls); - if not it then - begin - if ("tdcreateform" in FLoadInheritedName) then - begin - it := NEW TDForm(); - end - else if "tdcreatepanel" in FLoadInheritedName then - it := new TDPanelForm(); - else return ; - it.ClassName(d["class"]); - it.Imgs := FImageList.GetImageId("tvcform"); - FLoadInheritedName := array(); - end - comp := it.ComponentCreater(node,owner); - comp.name := d["name"]; - obarray[d["name"]] := comp; - FVariableSelecter.additem(comp); - BindCwndMessage(comp.Cwnd); - pubs := comp.GetPublishProperties() union comp.GetPublishEvents(); - dprop := d["property"]; - ddp := array(); - for i,v in dprop do - begin - ddp[v["name"]] :=v; - end - if comp.DefaultAlign() then - begin - if ifarray(ddp["align"]) and (ddp["align"]["value"]="alnone") then - begin - comp.Cwnd.align := alnone; - end - end - lazy := array(); - for i,v in pubs do - begin - n := i; - ddpv := ddp[n]; - if not ifarray(ddpv) then continue; - cls := v["class"]; - et := GetPropertyType(cls); - if not et then continue; - setddpv := et.TmfToNode(p.SampleValue(ddpv)); - if et.IfComponent() then - begin - prs[length(prs)]:= array(comp,n,setddpv); - continue; - end - if et.LazyProperty() then - begin - lazy[length(lazy)] := array(n,setddpv); - continue; - end - comp.SetComponentProperties(n,setddpv); - end - for i,v in d["object"] do - begin - call(thisfunction,p,v,comp.TreeNode,comp.Cwnd,prs,obarray); - end - for i,v in lazy do - begin - comp.SetComponentProperties(v[0],v[1]); - end - //comp.DoControlAlign(); - end - function SetFunctionList(v); - begin - {** - @explan(˵) õǰʹõĺ %% - **} - FFunctionSelecter.clean(); - for i,vi in v do - begin - if vi in array("create","destroy","recycling","loadfromtfm") then continue; - FFunctionSelecter.additem(vi); - end - end - - function create(AOwner); - begin - inherited; - tmpcanvas := new tcanvas(AOwner); - top := 10; - left := 10; - rect := _wapi.GetScreenRect(); - twidth := (rect[2]-50); - width := twidth; - calcheight(twidth); - caption := "TVCL"; - FProjectsManager := new TProjectManagerForm(self); - ico := new tbitmap(); - ico.Readvcon(HexFormatStrToTsl( GetHostroyBimp())); - FProjectsManager.FormICon := ico.ToIcon(); - - FProjectsManager.parent := self; - FProjectManager := new TProjectView(self); - ico := new tbitmap(); - ico.Readvcon(HexFormatStrToTsl(GetWindowMgrBmp())); - FProjectManager.FormICon := ico.ToIcon(); - FProjectManager.parent := self; - //FTempCanvas := new - //*********************************************** - FObjInspector := initobjinspector(); - FObjInspector.height := rect[3]-top-height-20; - tparent := new TPairSplitterSide(self); - tparent.border := false; - pparent := new TPairSplitterSide(self); - //********************************** - FTree := new TComponentTree(self); - FTree.onselchanged := thisfunction(ClickTreeNode); - FTree.align := alClient; - //*************޸********************** - pedits := new TPageControl(self); - pedits.align := alclient; - FProp := new TTabSheet(self); - FProp.caption := "propertys"; - FEvent := new TTabSheet(self); - FEvent.caption := "events"; - FPropGrid := new TPropEditGrid(self); - FPropGrid.border := false; - FPropGrid.Component := self; - FEventGrid := new TEventEditGrid(self); - FVariableSelecter := new TListVariableFilter(self); - FVariableSelecter.visible := false; - FVariableSelecter.parent := FPropGrid; - FFunctionSelecter := new TListStr(self); - FFunctionSelecter.visible := false; - FFunctionSelecter.parent := FEventGrid; - FEventGrid.EventEditer := FFunctionSelecter; - FPropGrid.VariabeEditer := FVariableSelecter; - //**************ڹϵ********************* - FObjInspector.parent := self; - tparent.parent := FObjInspector; - pparent.parent := FObjInspector; - FTree.parent := tparent; - pedits.parent := pparent ; - FProp.parent := pedits; - FEvent.parent := pedits; - - FPropGrid.align := alclient; - FEventGrid.align := alclient; - FPropGrid.parent := FProp; - FEventGrid.parent := FEvent; - - Mobjinspect(); - - onactivate := thisfunction(OnDesignerActivate); - FImageList := new TDesigImageList(self); - FTree.Imagelist := FImageList; - //******************toolbar *************** - FToolBars := new ttoolbars(self); - FToolBars.parent := self; - FToolBars.Imagelist := FImageList; - addtoolbuttons(); - //************˵****************************** - createmainmenubyarray(mainmenus(),FMenu0,self); - Mainmenu := FMenu0; - self.onclose := thisfunction(DesignerClose); - ic := new Ticon(); - ic.Readvcon(HexFormatStrToTsl(GetTsIconBitmapInfo())); - self.FormICon := ic; - - //ļ򴰿 - - FProjectFileOpener := new TOpenFileADlg(self); - FProjectFileOpener.filter := array("tvcl":"*.tpj"); - FProjectFileOpener.parent := self; - - end - property VariableSelecter read FVariableSelecter; - private - function ViewBitmap(o,e); - begin - if not FViewBitmap then - begin - FViewBitmap := new TViewBitmap(self); - FViewBitmap.minmaxbox := FALSE; - FViewBitmap.visible := 0; - FViewBitmap.visible := false; - FViewBitmap.onclose := thisfunction(SpectorClose); - FViewBitmap.parent := self; - FViewBitmap._Tag := o; - //FViewBitmap.show(0); - end - FViewBitmap.visible := not FViewBitmap.visible; - if o then o.Checked := FViewBitmap.visible; - end - function StopProject(o,e); - begin - //FRounMenu.Enabled := true; - //FStopMenu.Enabled := false; - FProjectManager.StopProject(); - end - function RunProject(o,e); // - begin - FRounMenu.Enabled := false; - FStopMenu.Enabled := true; - FProjectManager.RunProject(); - FRounMenu.Enabled := true; - FStopMenu.Enabled := false; - end - function editcommandline(); - begin - FProjectManager.ShowExeEditer(); - end - function debugproject(o,e); - begin - FProjectManager.debugproject(); - end - function Mobjinspect(o,e); //лչʾ - begin - {** - @explan(˵) ޸ %% - **} - FObjInspector.Visible := not FObjInspector.Visible; - if FObjInspector.Visible then - begin - FObjInspector.left := width+ Left-FObjInspector.width; - FObjInspector.top := top+height+20; - end - if o then - begin - FObjInspector._tag := o; - o.Checked := FObjInspector.Visible - end - end - function initobjinspector(); - begin - project := new TPairSplitter(self); - project.visible := false; - project.caption := "object inspector"; - project.Onclose := thisfunction(spectorclose); - project.WsPopUp := true; - project.Visible := false; - project.Width := 300;// - project.height := 800; - project.WsCaption := true; - project.WsSysmenu := true; - project.WSSizebox := true; - project.SplitterType := pstVertical; - project.position := 250; - return project; - end - function GetWindowMgrBmp(); - begin - - return "0502000000060400000074797065000203000000696D670006040000006461746 -10002DA01000089504E470D0A1A0A0000000D4948445200000010000000100806 -0000001FF3FF61000000017352474200AECE1CE90000000467414D410000B18F0 -BFC6105000000097048597300000EC300000EC301C76FA8640000016F49444154 -384FA593EB4EC2401484F7790595702FC59710451451047C0C140C218410EA637 -0BFDF2119CF54DA748DBFA0C964DBCDCC7732BBA9C2998F4A96DA48962C24DFBF -65A52C98450B89621BC65B0BF17C13B19706A2B93A22D91AC24F5FC7E8EF23000 -B370C1F650A242100A3D0465C00B1D726A202883CD7255C43E8F11F8016161902 -880B20966F212A8070AE8150B68EA00082993F005300FBFD1E87C3C115BF77BB1 -D369B0D96CB25E6F33926930986C321020F55AD8E32A52BCD1483DEF07ABDB601 -B3D9CC055CA72B5A1D9528B46CF376BB75E50D73FA743AC56834C26030C0E57D4 -5ABA30C39651A57AB951DE2CA6F27CCE9E3F1D806F4FB7DF8EF3EB53A8A5744A3 -A3C562E10639D909737AAFD783CF03601DC503E106CD14DF1D39619A39DD06A43 -EB43A8AA7C90DAF18A0686290EA76BBE8743AF0DD966D8F5347F12A789A415120 -53C5B5F4BA4A57E1173A0D9C485D1C575FAAACD5D1FE8553EA688053EA688053E -A9CF93B033F9EA579B5AA7EC4E00000000049454E44AE42608200"; - end - FProjectFileOpener; -end - -type TGridList = class(TListView) -{** - @explan(˵) tlistview ģ list %% -**} - function clean(); - begin - DeleteAllItems(); - end - function CheckItem(v);override; - begin - {** - @explan(˵) Ŀ %% - **} - return List.indexof(v)<0; - end - function additem(v);virtual; - begin - appenditem(v); - end - function additems(v);virtual; - begin - appenditems(v); - end - function create(AOwner);override; - begin - inherited; - end - function DoDrawSubItem(o,e);override; - begin - dc := e.canvas; - if not dc.Handle then exit; - j := e.subitemid; - if j = 0 then - begin - i := e.itemid; - src := e.subItemRect; - _wapi.DrawFrameControl(dc.Handle,src,DFC_BUTTON,DFCS_BUTTONPUSH); - dc.DrawText(inttostr(i),src,DT_VCENTER .| DT_SINGLELINE); - end - end -end type TBitmapGrid = class(TGridList) {** @explan(˵) imagelist༭ %% @@ -9485,7 +7451,7 @@ type TListVariableFilter = class(TListVariable) if o is class(TDComponent) then begin if not FStyle then return true; - return o.ClassName() =FStyle ; + return o.dclassname() =FStyle ; end end end @@ -9494,16 +7460,6 @@ type TListVariableFilter = class(TListVariable) FFilter.FStyle:=v; dofilter(); return ; - if FFilter.FStyle <> v then - begin - FFilter.FStyle := v; - dofilter(); - end else - if FFirst then - begin - FFirst := false; - dofilter(); - end end public function clean(); @@ -9575,7 +7531,8 @@ type TListVariableFilter = class(TListVariable) if v=FVlist[i] then return ; end FVlist.add(v); - FDesigner.AddFiledFromEdit(v.name+":"+v.ClassName); + FDesigner.AddusesFromEdit(v.libs()); + FDesigner.AddFiledFromEdit(v.name+":"+v.dclassname); FDesigner.EditerCodeChanged(); //echo "\r\nadd:",v.name; //echo "\r\n variable count:",FVlist.Count; @@ -9964,594 +7921,1151 @@ type TIconsEditer = class(TListEidter) end end +//**********red**DControl***************************** -implementation -function includestate(u,s); -begin -{** - @explan(˵) ״̬չ %% -**} - if not ifarray(u) then u := array(); - if ifarray(s) then u union2= s; - else u union2= array( s); - return u; -end -function CreateExtendEdit(AOwner); -begin - r := new tedit(AOwner); - return r; -end -function GetFolderChooseBitmapInfo(); -begin - return "0502000000060400000074797065000203000000696D670006040000006461746 -10002F601000089504E470D0A1A0A0000000D4948445200000018000000180806 -000000E0773DF8000000017352474200AECE1CE90000000467414D410000B18F0 -BFC6105000000097048597300000EC300000EC301C76FA8640000018B49444154 -484BB595CB4AC3401486FB56051114EB9BF8046E5DF800A2088D0FE02BB871D59 -D1BC1B5206D166E6CD2DC9B26E92DEDB167E00CA733939A4833F0431639DF7732 -B774A0E5210497371FD0BD7E3F6A902905A617FE1B313A1DF97C7CC10EDEAA806 -74F4063BBDD8A6C361B28CB12D6EB35AC562B582E97B0582C44E6F33914450179 -9E439665309BCD44D23485E9740A49921C1698E02450E124E0F0388ECD02139C7 -7CFE1BC7B156E1470B8FDD483E14357C6B67A90873F02AE4E0D8793208A225D80 -701220148A4F196F700BEEE0BE12CEBB4778188666014D8D10A46F32A5FB0A76F -F7CEFABD48CAC0B09370AF8BC630104CF8D82352408824017F0451D3E9EEC7557 -2BBB1A82FBBE5F2DC01D83057C0DEA046B08EE799E2EE0DB5108E29746F953407 -02970EE1A056B083E994CAA05789884E0FBAA51B086E0AEEBEA027E5285E0EBB4 -51B006E1950282636CEBF09E3765D43F9370C771AA05754F2A2D289F77828FC76 -35D6082AB971887F31DC3E195020E572F3182ABDD7338EF5E13B4FED36F6F00FC -0241F784DD5ED660EB0000000049454E44AE42608200"; -end -function GetColorChooseBitmapInfo(); -begin - return "0502000000060400000074797065000203000000696D670006040000006461746 -10002AB01000089504E470D0A1A0A0000000D4948445200000019000000190806 -000000C4E98563000000017352474200AECE1CE90000000467414D410000B18F0 -BFC6105000000097048597300000EC300000EC301C76FA8640000014049444154 -484BBDD6CB4DC4301006607745015440177BE5C88D7AB8D2042BF6480B9BF7FBF -D1E3296068D8D13041B63EB972225F127C7F124E2E2015C4BBBF942EE9FDEE1EE -F1EDD0E0980A62BAE8AF914D08796C0F5901EB08CF3784DAB22C32F33CC3344D3 -08E230CC3007DDF43D775326DDB42D33450D7355455056559CA144501799E4396 -653F232680101D208403699A6E23088867A1849E31254DD568A725B089D00C8E4 -092243123081C812010C7F13682EB702B82C026420B2D3ED61B59E07452030F4A -F4D30844516446E84DBA1541200C43BB080241109811DA0F5611DA6CEBD04A87F -3590DBC2A79B98012047CDFB78B20E0799E19A192C101EC872254933880FDB708 -02AEEBEE23BCB252D1E3858F7634BDAAB4D03403041CC731232640AFAC1C20440 -77691BD6F0301FA2C38C0676144FEE547C266246237009F3C80A931F3C228EA00 -00000049454E44AE42608200"; -end -function GetFontChooseBitmapInfo(); -begin - return "0502000000060400000074797065000203000000696D670006040000006461746 -100023C02000089504E470D0A1A0A0000000D4948445200000018000000180806 -000000E0773DF8000000017352474200AECE1CE90000000467414D410000B18F0 -BFC6105000000097048597300000EC300000EC301C76FA864000001D149444154 -484BB595C96A02411086C5E7F0E83BE4ACE4A4375F40F0A65EF49A474A8E21470 -D219018859CDC6E12C16546C7D9D471AF743794943DDD1282D3F0C380EDF71555 -A51383888F10DC3FB4E0AEDAB86938F32C505DF86FC489C5CECFB7173078A4029 -A0B019ED3E924723C1EE17038C07EBF87DD6E07DBED16369B8D481004B05EAF61 -B55AC172B904DFF7453CCF03D775C1719CEB02151C05321C05146EDBB65AA0820 -7EC8B76BF0F8B5E0FAC6E17E69D0ECCDA6D1193C5679FCB70A54086A3C01B8DE0 -BB5A854736B8976412DE733991B76C169EE27130991CE128582C16610187EBFAE -ECFE742D02A972FFA5E4BA7C161405A3D875B96A516E8864A05B4E7D670A8842B -05D786EACD6642D02C95941B837014CC59412101C269F5B831AE690AC1732201F -5544AE4239F3FC369F51C3E63056905329C0A3E0B05D19651A3013FF57AA83508 -37D9FD904086D37D770C4308BE8A45D11655DF39FCAA00E1B47ADC1859A01A2A8 -51BECBE5620C3F940A94037540A9F4EA761810A8E8261AD2604AF990C988381B6 -EF1CAE15205CAEDE607F07AD4AE59C268BC560329C563F994CF4020AC75DD70D9 -5C3E5D670F8783C0E0B5470D58F09E1AABE73B85640E1B4FABF0E95561F1244FE -D28FEE00FC02B599AB32671AF3C00000000049454E44AE42608200"; -end -function GetInputquerysBitmapInfo(); -begin - return "0502000000060400000074797065000203000000696D670006040000006461746 -100020B04000089504E470D0A1A0A0000000D4948445200000030000000300806 -0000005702F987000000017352474200AECE1CE90000000467414D410000B18F0 -BFC6105000000097048597300000EC300000EC301C76FA864000003A049444154 -6843ED995B4F134118867B8DFE0F2FBC3046A31726466FFC05C61310349E1212B -D43241A124550910818D468B840543C444D4C8C070820118D62A0A022B605DA05 -0A2DD0A5F4243D90D7F9B64C335D5AE5B0D9B208C9936FE69D6F76E661D92B4C3 -001464611E8E8E84561E10D4340774D1230D2E539A28489875D030143C0EF3B4F -A0E5DBB4AE4C767CC778E583456769059E7FF2E8C6D4CB56449A3E23925F8E91E -2DB8BCAF87D9B9B5B93056A1BDDBAE129A8468C5D2ABA350FC373672F34130588 -8440C50BA7AE48C5B7E02CAB5D749656E05CBD6408D20A188DD52760949FD52F6 -0B7DB5624FCC26B029962D102269329E90199664D80671CDAACCE8885F4F13955 -0E9F2B9752F5F29C589680887A9DE6F44031E3B958D5B97AAECE399A08281B58C -E1133AA7FEBE395936E2EEE553F9358968098F1F152FBFE3557674B1210E10F51 -67E29C67E9FAA872D43D621F877AC47E62C1022B8D35814CB32690693413700C5 -870F9CE136417DC406ED14DE414D5FC954367AA19557355A40AD9ECDC9CB335C8 -3B7F0B6D1FBFC0294929CF243413385D568FC2BBEF51FEC28C8B8FCD2879DABD7 -49E9851CAEA85475D3871A901365B7FCA3309CD04F6143C42DFE82CE4DFC04400 -980CCEC7ED8BC3D7C7FDF37B085A77B3355F04C8AF6EC1DBB6CE9467129A09EC3 -8F5008E893066636104C351FC8EC4E69845281C273B274F419C530DCE4484FE18 -CBA208B08C9E75B4A211EF3E74A53C93D04C605BFE7D0CBA66109999C5B42F0A7 -F20A6E09D0E2B952ECB331A07827101AA84CF1F532AADFBFC51B62F2E9057FE0E -8D1F7478035B4ED6A37F6C06A1600C1E3982296F54617C22A4409715C71E393CA -F12B447664CB23109E45E6102ED3ABC81CDC7EFC1EA0C419603708EF930C6FE88 -89A11159812E298E5DEC03A0CAC7C4A82BBE8718767A1581ECB2B74C408737B0E -9D83DFC1A0EC1EDF262D0E18134242BD806DC0A7451716C774C62FF81DCC498C3 -F7F50F4E2802074B99801EDFC0C62375E895821896C6D1671983D5E652B058461 -3F0DFB8C5CAE60C1A4B43DEA48CA07DBD3F4714817D256FD0D46E4E7926A199C0 -86C375F8391482B54F4267D720BABBED4998CD2CEBB1A3A7C7111FF32CB1E648E -AEFF86A453010C6DE12FA88757803DB8FDFC6D9DA5E5C7FECC5B587322A1A88A9 -2522B3677850F3CC8FDDA71BD0F9C39AF24C423381D72DEDD87EB412593B4B90B -5AB74D9AC63ACDF7D0957EB5EA53C8FA39940A6F87F04F8C24A65F50A188DD523 -C0FFE3CD03A3911030A6442BFE00B24E924CE37F2F940000000049454E44AE426 -08200"; -end -function GetTsIconBitmapInfo(); -begin - return "0502000000060400000074797065000203000000696D670006040000006461746 -100021E02000089504E470D0A1A0A0000000D4948445200000020000000200806 -000000737A7AF4000000017352474200AECE1CE90000000467414D410000B18F0 -BFC6105000000097048597300000EC300000EC301C76FA864000001B349444154 -5847ED97DB4B024114C6FD0BFB1B7AE8257AED217C28E802DD91422308B388B47 -A903093EE0891614AB145BD88A61851A64268D18D93DFD0C8AE8DEEAC924BB01F -7CECEE396738BF1DCE2CAC8D2A9A751F5147E75C5B8D9E90CD8CE6DCE86D1325D -A690BC002F8DF004E4F982E6FEE686426548D45CF6FE9389AD0D43572D300ABFE -33F621413368CCB9CBE2B842B2104D0174F5AEB0269178923DB702D1F40E4089D -423F5D87DEC5904113CB8D2AC11D93080673D422FAFEFAC1994CE16EA42C8581A -C0B514A6EC7D913548A673D43F1120EFCF1CB402A10B30EC0891529974285F28D -1D4FCBE26CF87510431381DD4D48AAC0B902F96E9E3F38BDCBE13611EAE078123 -5A5B5B6B5D00085B2DCAA9CD213098381D50ED6E896C18C01FBAA09DF035D9473 -7357503935BAC964B061A3604C0870E5ADE38D5D4A5324F542ABFB1FBEE3EAF26 -D7C88600F870418B6B916A8D63E190C57052784CD6D200BC39EE391037063559D -901754CD65200BC79604FF995C74E40E32EF98F8FDA5200504C4957DF5E6D1CD1 -B89211AE95B134403D3DE49E69C8B12D5C2B635D80BFB6056001980F60FACF29C -EB21910E84944F40D9996C7E196BAE5D60000000049454E44AE42608200"; -end -function GetOpenFileBitmapInfo(); -begin - return "0502000000060400000074797065000203000000696D670006040000006461746 -10002FE01000089504E470D0A1A0A0000000D4948445200000018000000180806 -000000E0773DF8000000017352474200AECE1CE90000000467414D410000B18F0 -BFC6105000000097048597300000EC300000EC301C76FA8640000019349444154 -484BB5954B4EC33010867BAB4A8004528FC209107B0E8040482D9BEEB802AAC4A -A3B365C000941166C68D2A479346D1E4DD20E1D8B318EED240D2223FDABDADF37 -766CB7B72FE8383D38BE7C81FEC5FF06995CA01BF0D7B0FA617623D8F33A15882 -909A876BB1DCB76BB85A22820CF73C8B20C369B0DA469CA922409C4710C5114C1 -7ABD86D56AC51286212C974B0882A05EA083934086934084FBBEAF17E8E062F70 -81F8FC7B541B85620C3E5ADA1CE11525524F03C4F15201C63DC0FE0FDB6CF638C -0610B95F8A603299948285BF21DC755DBD00BB4728C4AF3CF6F40AACE90DDFF7A -615205C2BA0AD6182F099A7B09EC0189EF11535AD00E18BC54215D09E3381F350 -99A61520DC719C1AC1DD11EFF6D0E0772301C26DDB560574627082F80D0E099BD -324A0E3C806FB8FAD220A103E9FCF1B04E675AB8802845B96A50AE832B1C19FE7 -AD8273105E2BA08BC4046F27AD8273686B106E9A66B5C018FD9EF943F3313C2DC -167B3992AA09B2ABE8EF20B49CF009E753AEF72E79582BAB79DE0A240868BDD2B -82CEFFF4BB4B0FBE011F9D6134A0D7ECFF0000000049454E44AE42608200"; -end -function GetTrayBitmapInfo(); -begin - return "0502000000060400000074797065000203000000696D670006040000006461746 -10002D401000089504E470D0A1A0A0000000D4948445200000018000000180806 -000000E0773DF8000000017352474200AECE1CE90000000467414D410000B18F0 -BFC6105000000097048597300000EC300000EC301C76FA8640000016949444154 -484BED933D4BC3501486FB83FC01BAB83A7510E9225D0A0E4504ED20BA77A9A83 -838A483830D181C5C623A085182592B4832086A5CD42182D83616ABFDE0D5739A -2B972692A55DA40F5C2EE7BDE13C9C9B248531331124321124F20F04F92D13538 -B876359334B1A52778F6F98CD1FE3E1B9113A470749F88A8ECE6EB0B6677128E3 -BA2E72B95C580D68369BA8D56AB02C8BF72008C293018661F0227E05F5F74F1E4 -7869A67B359A4D369AEDBED362A950A0A8502CAE532344D83A2285C534EE744AC -E0FEA98EB9D5130E755DE7A6994C862542609A26376DB55A701C8727A09D6ACAE -99C8815ACEC5CE0407739A48769098480A0EB28168B28954A50559577AAE9DA04 -11816E7B58D83C45A7DBE7F0AF09049EE7C1F77DD8B6CD3BD53211C1FC868EEBD -B170E6486DF814CB55AE5094423998860FAE7E5BE363E381826EE2B4A2222D8D5 -AEB0BC7D8EAF4E8FC351C2826EAF8FF5FD4B2E46BDF84F0E656363224800F8065 -E0D34316036A3840000000049454E44AE42608200"; -end -function GetImageListBitmapInfo(); -begin - return "0502000000060400000074797065000203000000696D670006040000006461746 -100026001000089504E470D0A1A0A0000000D4948445200000018000000180806 -000000E0773DF8000000017352474200AECE1CE90000000467414D410000B18F0 -BFC6105000000097048597300000EC300000EC301C76FA864000000F549444154 -484BD58F310AC2301486BB4BEFE101D40BB87988BAF5060E1EC0414767A91E40E -9A082B3D845D04170165C159776504462FE426C62EA5BF2163FF848783CF8122F -0C43C1E93779800B32A05EC0A5C20870410670725A1AE0820CD47B6E0232D01AB -A09C8407BEC2620039DA96994CCC5F956178F67253FA3CDC2DAD1056460B02A9C -EDE672E259C6FBD8D8D305646092145ED39A9CD8814BDA30F6740119581E0A9F2 -F5F4EEC00E6FA9E2E2003DB5361762FFF41766F187BBA800CF87DDF494006AAA3 -AA93E01350AA2168C64D27411EC86F92EF40B00E9C04564009BAC7AE93C008285 -480839F014EAD0037FF1E10E20DEF9AF049B9ED69F90000000049454E44AE4260 -8200"; -end -function GetTimerBitmapInfo(); -begin - return "0502000000060400000074797065000203000000696D670006040000006461746 -100020903000089504E470D0A1A0A0000000D4948445200000018000000180806 -000000E0773DF8000000017352474200AECE1CE90000000467414D410000B18F0 -BFC6105000000097048597300000EC300000EC301C76FA8640000029E49444154 -484BC594D96AA24110857D9E79C9C99D51AF024188883E8106340A2E37C625370 -ADE08921830242EE08EB8E0420D5F619B36696784619803C5DF7F2F75AA4E55B7 -47FE312E22B8BBBB936AB52A8D464392C9A4DCDCDC1C56FE8CFF4FB0DD6EE5E5E -545AEAEAE8ED66AB574FE129C25188D46128BC5E4FAFA5AC2E1B08E53A994DCDF -DF4B241211AFD72BF1785CC6E3F1E1841B4E8272B92C3E9F4F32998C7C7C7CC86 -03090E170A8A4D3E954E6F3B97E0B8582040201DD7F0EDF08D0F8F6F65665E876 -BBD2E974D418FFF8294A34994C9464BD5EEB38140AE939174E088824180CCAFBF -BBB46FEF6F626ED765B8DB1C7E3915EAFA72464B0582C64B3D9A8D108954AE5E0 -E9134702B4F4FBFDF2FAFAAACE714A1644FDFCFCAC630858EBF7FB3A6FB2D8EFF -7329BCDF43C32DA381250C46C36AB52102D0E9BCDA6B626C61802D6D84316385D -2E97B2DBEDD4C7E3E3A316DE8612D072740BD1A137D113218EEBF5BA1A6308586 -30F854726F69996858CEE42320325205A5A91438600592E21C0A97D27A2D1A8CA -6CA004DC522422EDBF9108241209F567A004C56251D2E9B416889431536432B18 -B6C9B29B23903F2F9BCFA333866C00D256522A3155D6DCA9CAB4D6D9041AD563B -FC5935E0FA1311170707B42252A037C69839D6EC8B66CB039C35A048549FA8386 -8BA036714D3F554AC562B3D67A401D4836EB48BAE0480FEE56D212A52C70945C4 -21C69839D6D8633B31E03C52DB381290360F17371A5D71424444C817638E3564B -12307E6267F7D5D8F0480B7883705275C7F1C1129E6726AC07ECE3D3D3D1D663E -7142007815D94C445FE122601FFB1F1E1E0E33A7F8460078154997B705695C609 -E75F6B92237701200B4A4F07417AD477FE77239FDF2CF3C05A576BFC3590203F4 -A7AFB93CA55249BFFCBBBAE83B447E01A5FB392686E583230000000049454E44A -E42608200"; -end -function GetSaveFileBitmapInfo(); -begin - return "0502000000060400000074797065000203000000696D670006040000006461746 -100021702000089504E470D0A1A0A0000000D4948445200000018000000180806 -000000E0773DF8000000017352474200AECE1CE90000000467414D410000B18F0 -BFC6105000000097048597300000EC300000EC301C76FA864000001AC49444154 -484BB5954B4E024114455994891B70C63A5C8013062E4017E0CC814E9C191DB80 -09D9A4048909020100C10A0F9FFFF9FABAFE2EDBCFE6A3A50C94D57D255E77477 -55BD8EE1C8CD08CE2E9338BD783F6884690BFC06448D69B198DD3FBCE0077E548 -18E43C0B6DFEF4D76BB1DB6DB2D369B0DD6EB3556AB1596CBA5C962B1C07C3EC7 -6C36C3743AC5643231198FC7188D46180E87E1023F38056E38051A3E180CFC058 -49F9C3FD849A55248A7D3C86432C866B3C8E572B8BA7BC5F5FD1B8AC522E28967 -7C7E590EB8AF403FB916109ACFE7512814502A95EC7BD56AD55CE3892703A7A0D -FEF7B0502F713105A2E9751A95450ABD5EC7BAD56CBEE6B78AFD7F317F0BB7392 -84D07ABD0ECBB2D06EB71D50F635DC57A0179593248476BB5D03916F7DF398349 -185E538815320633D02C2DD82FF46C33B9D4EB040B62327DDBE7CFC198ED57079 -638F8070D9EB9CF49FC6B1020F15E8931A5540B8ECAE40819CD428020D978DE11 -1E83210454078A0807087E0B7F486C52D1078B3D90C1648118B22D0F046A3E115 -E80AC9EAE8AE907AAFBB1795F04041586D27DC7D98345C3FBD4770F49FFEF11AF -00DCA98480ED0E0E3350000000049454E44AE42608200"; -end -function GetMainMenuBitmapInfo(); -begin - return "0502000000060400000074797065000203000000696D670006040000006461746 -100021E01000089504E470D0A1A0A0000000D4948445200000018000000180806 -000000E0773DF8000000017352474200AECE1CE90000000467414D410000B18F0 -BFC6105000000097048597300000EC300000EC301C76FA864000000B349444154 -484BD591310AC4201000FDA0D8D859E547FE48EC03127D809D8F48B3870B064F3 -DD45C725C06A688849DAC21703318608C01A5F432A594383C7204D675ED1A42E8 -EABD876559C018530708211F4D81F2BC3C534A8110029C7375A067FEA52DB5D63 -87CDB361C1EC140EB1ECFC839076B2D0E4E1C815166DE8DBC05F2BB4C967C1518 -E1F20DA239CFDAA0C5B336686D713AB0EFFB90A70333CEF0BB0DF0E1CE7F30CAF -F06669CA1BEE48B797A00E00533D0A5754BB70F010000000049454E44AE426082 -00"; -end -function GetActionListBitmapInfo(); -begin - return "0502000000060400000074797065000203000000696D670006040000006461746 -10002D200000089504E470D0A1A0A0000000D4948445200000020000000200806 -000000737A7AF4000000017352474200AECE1CE90000000467414D410000B18F0 -BFC6105000000097048597300000EC300000EC301C76FA8640000006749444154 -5847ED92510A002108053BA8D7F18A5EC768E185D8A750C2BE818190A0811CFE1 -8063080010C380254750BE2AC6AE6081091CF78799D31AF9AE917709B7E0166B6 -05715635C325ECF705B7E91780BFFAEF12AEC72088B3AA192E210318C080C701E -E13DA99A6670A4C99A90000000049454E44AE42608200"; -end -function GetPopUpMenuBitmapInfo(); -begin - return "0502000000060400000074797065000203000000696D670006040000006461746 -10002F401000089504E470D0A1A0A0000000D4948445200000018000000180806 -000000E0773DF8000000017352474200AECE1CE90000000467414D410000B18F0 -BFC6105000000097048597300000EC300000EC301C76FA8640000018949444154 -484BDD944FCB015114C6E74B8D448842A6B1F401E43358284B7B4B2B595958B05 -3B250B2D3A0AC486489324929911EDD33476E8C3FEF782DDEF757A7EE79EEDC9E -79EE9946C197F98706F178FC47F50A5B8377F9C8405194BBBAE5EF251025F3950 -4A7D309954A85D6BF9A40465555D46AB5EF2410B85C2EC4623184C361561EF376 -023985DBEDC6743A45281442BD5E67D51E5B83C3E1F0B43C1E0FF6FB3DE6F3392 -569341A7CFA1E5B83572512EC763B7A7E3299D055359B4DEA6F719420100860BB -DDF209603C1E231289A0DD6EB372C5D10C82C120369B0D7716A3D1884C3A9D0E2 -B160F0D9E21AE64BD5E7377653018C0E7F3A1DBEDB2E2D0201A8D62B55A716751 -AD56A1691A52A9145AAD16AB0F0C5E95DFEFC762B140AFD743BFDFA773A552099 -94C86D6327706EF7031126F9C4C2649334D9366230F5FE0C8209FCFC3300CFA2F -E9BA4E5F91209BCDA25C2ED3FA8223039962B1885C2E87D96C86743A8D4422C13 -B161F1B88AFC9EBF5D2E00B850296CB25EF587C6C20180E87381E8FDCC90067A0 -D1EA483E13801D0000000049454E44AE42608200"; -end -function GetMessageBoxBitmapInfo(); -begin - return "0502000000060400000074797065000203000000696D670006040000006461746 -100023F02000089504E470D0A1A0A0000000D4948445200000018000000180806 -000000E0773DF8000000017352474200AECE1CE90000000467414D410000B18F0 -BFC6105000000097048597300000EC300000EC301C76FA864000001D449444154 -484BB5954D4B024118C7FD0675280882A0BA77ED0B04D90788A053DF203A44509 -720F3E02D48D0F410E5A9A0023B061D1414B2022F7AC98378F2FDDD5D77D77F3B -23B38C3BA344EC0EFC60F719FDFF1E9E19D1039717156C9D7E60F328ED2824D31 -2C83EF05FE8F278AC67E70566B8AB029E09015BA3D188621806745D87A669180E -875055158AA250068301FAFD3E7ABD1EBADD2E3A9D0EA5DD6EA3D56AA1D96CCE1 -61866B0118D423383593813D8C399800F6F341A7201EBDC88C5E81CF5FBBB89EE -C3E1F054F870A9C01A8BD91D569781930D606509AAF945BE73FB68F8CE99A05EA -F8B02DA39C1EF03BCEBC0CF2EB0BD06EDF2828613649DF32493491A5EABD5E402 -BD5C0616E78137EF58F0BE032CCC412995A49DDBE7CEC2A50272638C5088CEDEC -E3018A4E1B2AE197CF7D56A5514B0EBC81F2A7F63A6CD9D1D2A1F5EA954A60BEC -E17F3D543EBC6C8E5A10D8C3F9EEEDE1B2B993F099824C26E32882209BCD3A8A2 -0C8E7F3C8E572787AB8C1F363843E93DA9E2F85E3EB84C5BE3F25ADF37B044150 -2814F0FD95C655E090F2F539AE9D851288C7E316E45D56E7F70882A064FE988AC -5225E5F6E29E499D40E02699C471216E45D56E7F70882809CBC93080276AF9D62 -42E0FA9FBE7B0BF805EA9D74EABD7884450000000049454E44AE42608200"; -end -function GetClientBitmapInfo(); -begin - return "0502000000060400000074797065000203000000696D670006040000006461746 -100024803000089504E470D0A1A0A0000000D4948445200000020000000200806 -000000737A7AF4000000017352474200AECE1CE90000000467414D410000B18F0 -BFC6105000000097048597300000EC300000EC301C76FA864000002DD49444154 -5847E5974D48625114C7FD2C050D5A0D6582BB206D5704BA2FB086D9369B16D14 -A0884419C4D9B8A362DFA90C036B3ACE508439160B3B195820E2444398892227E -64A5D5301FF59FCE9DB9F5F469D4F4D2C5083FDEC377DFB9BF7BDF79EFDC2BBBF -DA116B95C0E8BC502ABD58ACECE4EA452298C8C8CC06432E1E2E202575757FFCC -B7EFBFA01AF3DD219B9B9BC3432C2C2CA0582CBE9CC0F9F9391EC3F0F0F0CB08F -4F5F58133383888A1A1A1BA747575C16C364B2FA0D7EBC1D9DEDE463C1E6F4822 -91C0E5E565DDC08F452470747404CED9D919C2E13056575725C7E3F12093C9880 -5767676C0C9E7F3585C5C646F415B5B9B64A8542A16331289880584AF5F281462 -021A8D067B7B7BD8DFDF9784E5E56516FF4902E974BAEE337C2A94339B9B9B8D0 -57A7A7AC0A106520B100F0A944A2510272727A8542ACD17585B5B03E7F8F8B8F9 -02949D9C97C801E24181959515705A3203A7A7A720280FE833DB7401FE06188D4 -6D6A0E9027481D3921C502814E0B444C0EFF783C36B41530584E596AA61D305DA -DBDB4150A7548AFFBF246CB9C0ECEC2C38C9649209A8D56ACCCFCF63696949122 -627271B0B704BAADB04090867454A1A0A50C7548EE9787878C816A742B6B6B6AA -CE0D068328B8DD6EAF6A578F42A1D058C0ED76231A8DB2733E2BFC1AD5886C36C -BAEEFEEEEA2BBBB5B2440FB06120806836C10545FE85E1E8F1F494039FA512CE0 -F57AD1DBDB8B582C76D798A0458ACBE562A3D66AB56C8159DB3941E55CA954B2F -CE9E8E8407F7F3F028140552C8204D4AF7D508EFD9190E5723936C2838303F63D -A01B690442736A4323DBD8D8600BCC99991926353D3D0D87C301A7D3C96690127 -77D7D1D3E9F8F2D46CBE5B248E0C7CF6BBC7AFBE96E166434EA8989094C4D4D41 -A7D3B1D10C0C0C546D42E8584BA3FF85083BE65CDFDCC0F6EEF3FD0C08A75188C -D66639BD27A419EC3CDADC0FB0F5FA01AFD9B03F4DC6A3BA7E7393E3ECE36A5F5 -823C0712887C2D42FB86047CF80D6DF21A10823FEDBD0000000049454E44AE426 -08200"; -end -function GetClipboardBitmapInfo(); -begin - return "0502000000060400000074797065000203000000696D670006040000006461746 -100020802000089504E470D0A1A0A0000000D4948445200000020000000200806 -000000737A7AF4000000017352474200AECE1CE90000000467414D410000B18F0 -BFC6105000000097048597300000EC300000EC301C76FA8640000019D49444154 -5847ED97BDAE82401085EF3B51FB083C02ADBDF1052809893D3DB1B1A4A72194D -426141616143674985861CEC4F1EEAE2BFBE35ADCE49EE42430333B7E597659FC -991D753C1EE7AEEB249F4EA747D65D4E00C330CC511469ED0BE10C10C7F1CB8F2 -3869C8F9C1F4168BD004CD3243DDFEBF54AF1CBE522C575E659C018317EBBDD28 -AE930470381C5EA6B82C4BCAE9A65E356A208C11E3ABD56AAEAA8A72AA2480ED7 -64B03D6EBF5D36DDB520ED762539DD334A55A8C117B20C770AA24002EC6B48512 -7A31A04EFF005F07C08EC0A2B45A842680F3F94C395FEBB6A33500E73EB16E3B5 -A01F47D4F71E43F317AA8DBD10A00F70CE02BEE018BFABB005C6B729665541F1C -20499267C3256F361BAA0F0E80930F7193C771A47A5C070570557000ECE7A2288 -CE6D3343800373399C70407C0EAC6BDC94DD3507D7000570507A8EB5AFBCC61E4 -54390188CD201D00377B67555600EAC724BCDFEFB5004B6B80DF7EA2AC0050B4D -BEDA466D8463A00575901BC9308806B5F7B03E04B061F13DCE013F3D9C0B20280 -F0E6B3F973B2E43CCF1FDD7E650DF01DCDF31D7DD4021C9110D40A00000000494 -54E44AE42608200"; -end -function GetServerBitmapInfo(); -begin - return "0502000000060400000074797065000203000000696D670006040000006461746 -100022402000089504E470D0A1A0A0000000D4948445200000020000000200806 -000000737A7AF4000000017352474200AECE1CE90000000467414D410000B18F0 -BFC6105000000097048597300000EC300000EC301C76FA864000001B949444154 -5847E596DF2B436118C7FD916EB840AE2853DBA424AD2C62C50DA1B9212D4949B -9A024CACAC5507EDCB8922DE7D8D62CC6C4D2C3F7FD9173CE76F2EE6CEF99F2A9 -A7534FE73CEFE7BCEFA9F36DA316F3F7057266856EAEDF3C55FAF65D4C71C7556 -07DB940A3FDF7D4D77ED75005BB33B418CB53D6A888C9766A0A0CF566D8C381CE -3445C326CD46B29E6A7AE481C23D7C16442E5265B1C20F55028978813D3037916 -3DBDF0CE233793613524E6C0297A76576231E68049C3D16C37720D95A2BB2D9A9 -E48BE8706C02477B2576D3E1EEB3E878437E3B0B5339D1E152E8E1DBB26213D8D -9E09656732FACCEF363C45B5B41CF790C5A04DCA84B4047290BE82C25015C7594 -B200B64B07BE09C839B85AF14D00336A2DE69B40CB77C00D65015C7594B280CE5 -23E021D5597800E7C13907F43E7AFD7370119E99CC1E65781E37D1E48920725D1 -F106022816B2BE8891F960B39D19C1267075C62319C264B391B9F0FCE45574383 -6010073DCB8B9F248A5A74FD16D0C79B4CEED075502606C80673AC4F2F1A0C11E -F45293C32685BEE33866219E2BC572C976A248D19041C12E3EC04B053AD214193 -46829E61EF15D05FCE2BF0B107D0115A294818AC7913B0000000049454E44AE42 -608200"; -end -function GetQuotationBitmapInfo(); -begin - return "0502000000060400000074797065000203000000696D670006040000006461746 -100023B02000089504E470D0A1A0A0000000D4948445200000020000000200806 -000000737A7AF4000000017352474200AECE1CE90000000467414D410000B18F0 -BFC6105000000097048597300000EC300000EC301C76FA864000001D049444154 -5847ED97394B03511485FD0D76D636967682A56025F692CAD6522C1414042B2DE -C44105404C115D1464923445C10255868E112251A09D9D4108C216872CD992579 -73677C6FB24814F2C1859777CF3D3903F3669226624C9E25A879F6EE570ADE1C5 -B00A7C15A16E76F07A81532CF4680FF1DA073ED512B1532CF8A0388CF0BA7F32D -22F36C04701D20F399A7F193380D1DC4B4EADA7C2AEAB036F7C78EE394CAE68C2 -99D9F3C81EB00FDDEB0A5272BCF6ED898D2117B1CD701860F63969EAC067D5163 -4A47EC71CABA07D66F52B47895D4AAAF7095A60E6B737FF53A65A84BC83C2BBE0 -9A7CE5F8ABABA9C82BA0798BF4C167558CB9079561C00CC5CBC6AA542E6595500 -B7C83C1B01AA0A10497F69A542E65976805C5E3F82BD3BCF451DD6388AE83921F -32C2B802F94A69EED904523167AD070440DC755808FC29B70E2D4FE87A57D39A8 -15DF87163326628FA30CE00DBE53F796F5AA5BE60234ED2F9D7FACB1276A30835 -920EE73A401468FE296CF28CF5E98FCD18CA12E813DF4B89E7B70A401C46A5B7A -503E720134D03A79A038AE020CEC4728F09635146AA0C58C9317471AA06325481 -BB7F6F7BB5B300B0FD193630B8033DEBA704F23855F40898CFA21A3021EF0C297 -DB5FDB44DF6B0BDB1A1CD1EFD70000000049454E44AE42608200"; -end -function GetLoginBitmapInfo(); -begin - return "0502000000060400000074797065000203000000696D670006040000006461746 -100020803000089504E470D0A1A0A0000000D4948445200000020000000200806 -000000737A7AF4000000017352474200AECE1CE90000000467414D410000B18F0 -BFC6105000000097048597300000EC300000EC301C76FA8640000029D49444154 -5847C5963D6B15411486FD1DFE004150886015514965974604D122428CA0A0060 -B3F8BA0285824A098221288123544441182A2588AA820162204AC2408C61051F0 -A3D89D99E37D8E334BEE8733736F72F10903CB99F3BEFBEEEECCDCAC93FFCCAA0 -27C740B3A5643DB01C6ECB80C9647A5A7DC21EB8B8D3AB8A6366AAEF9AE7CB203 -3C772FA5B7D8A537DC5C6C93DDE5809C311774704D8D397AE8CD252BC03DFBB07 -ADA13E69CAF36C35CE843934332C0922C57A6B7EC5D5FFD37F4847EB42992018E -99536A366D677D250DBD68D0A6880678E49EAAD1FE72C857F24183168F18D1009 -7EC989A4CD9DBBE920F1AB478C48806D8531E509317F6B5AFE483062D1E31A201 -36145BD5E487FBE92BF9A0418B478C6880BEB25F4D3A39EDD0A0C5234634C0493 -3A2268FDD335FC9070D5A3C62440384EDD4C911CB918D36B57DA301DEBBF96A1D -B4B310C302448B478C68001837936AB6A5DCE92B69E84583364532000C99E36AD -8536C9757EE8DAF36C31C3DF4A2C9212B00CCBA076ACC183087E5B43D2F57CC84 -0EAEA985797A73C90EB02C5F65B4B6B03615BDD58D1A074F3F61A7E49B7CF7AA3 -4C9005F6ABF69ACE8F05D19FCFEEF2B0FCADE725007D7D4C23CBDEC1CB429A201 -E6EC93EAC67D45BF4CDA6959709FFC6C339FDDA2DCB077B43704E9781BDEB773D -5135DB5D7E597FCF63369E84513F4B173A465000441FCD6BDF3D5F6E10D061F1E -A8154D01C2E9C7582B821F811AA90BC0A209DFBC5573A7F016F1C4BB7161D6050 -8AF9EEFB7D68435C18E5A491580BD4B4256703B0B2E173CF1E61E9C29812A4058 -F56CA36EC136E61E37ED8CAFAC0830608EE8247BB95B7086700F0EAD800628A46 -C9AE816E1C42C6B7FA00116DD92160F99612D76936173B6EE4D6B8079F7418B23 -E6B216BBC9453BAAF7FAFB8F8AC81F0139E1CCDA06E76D0000000049454E44AE4 -2608200 - "; -end -function registerproperties(ps); -begin - //dser := class(TVclDesigner); - for i,v in ps do +type TDedit= class(TDComponent) + function HitTip();override; begin - it := createobject( v,0); - //RegComponentPropertyType(it); - class(TPropGrid).RegCellRender(it); - //dser.REGEditType(v); + return "ıؼ"; + end + function bitmapinfo();override; + begin + return "0502000000060400000074797065000203000000696D670006040000006461746 +10002D201000089504E470D0A1A0A0000000D4948445200000018000000180806 +000000E0773DF8000000017352474200AECE1CE90000000467414D410000B18F0 +BFC6105000000097048597300000EC300000EC301C76FA8640000016749444154 +484BED93B18AC2401445D30BDAA51214044997C6D680A2A435D8DB59FA0D0BFE4 +26C52588B9FB06065C02A453A0B9580A50A12B5D03477796F278B59571CC16CE5 +8107F74E60CE304314A4CC5BF090FF117C0C3F539984E0D53C2598CD6668B7DBA +225511485E7777E4A309D4E619AA6687F136F1C735710451156AB1576BB9D5849 +0A96CB25C230E47C8D9460B15840D775B45A2D94CB650C06035E2741B55A85655 +93C854201B66DF3B71829C17EBFC7F178E44CB252A9C49904994C06411070DF6C +36505515DBED963B2125A0EB711C079D4E874F9CCBE5789D048661708EA9D56A7 +05D57344941AFD743B7DBC57C3EC7E1704808EAF53AE7984AA502DFF7459314D0 +29279309E7F1789C1064B359ACD76BEE9EE7A1582CE272B97027A404A3D108F97 +C1ECD6613FD7E9F1F93A0FFA0D168F0E3D3D5699A96B81E424A40D0A9CEE7B368 +B79C4E2791BEA18DE3CDAFF35DC1ABB811A4313F8234790B1E92B200F80266B31 +3963A1FCCDB0000000049454E44AE42608200"; + end; + function WndClass();override; + begin + return Class(tedit); + end + function Create(AOwner);override; + begin + inherited; + end + function IsContainer();override; + begin + return false; + end +end + +type TDmemo= class(TDComponent) + function HitTip();override; + begin + return "ı"; + end + function bitmapinfo();override; + begin + return "0502000000060400000074797065000203000000696D670006040000006461746 +100027103000089504E470D0A1A0A0000000D4948445200000024000000240806 +000000E1009898000000017352474200AECE1CE90000000467414D410000B18F0 +BFC6105000000097048597300000EC300000EC301C76FA8640000030649444154 +5847ED96DD4F52711CC6A1EEB21B2FEA3FD07FC0D98DAD1BB76EF2A23B6FEAA2B +A68D3CD2D6D6D66EAD6EB48D010255158CA459B93B9C4347039D37005A8883A82 +5E6C1C5FC68B5BE69029439FCEF7B08327E4E086076BCECFF6BBE0EC1CCEE73CC +FF7F04386FF8C132162777717ABDFBF61F9AB0FF1789CFBCC73E4427473C6FB05 +F6B379982E2F87C73583ADADADA498A850A3C12AFDD25B50ABE9852D3F1FE8EE4 +654A5C2DB9212B8ED9F108D46B1B3B39359484AE8E983C1203A3B7530299AF05B +A100535A0A7761219ACF9FC3DA5A984BEA488448666565199393362C2EFEC0C88 +8152F6EDE80A3A000E6BC33E8AAAB83DFEF472412C9BD10C9F8FD2E188D8F303E +FE81139A9E9E82C1A047CDA58B50D754C36EB7836198DC0BF1320B0B173036F60 +C66730FBB06303838C80A1AA1D777C166FB08AFD78B70388BCA8A8A8A0E5C3C09 +9959B8DDC570B95AD819512210B80C8DA606F50D0DE8E979C5C9783C1E6EB6723 +AD4BCCCDC5C31666654EC0D9BD8A365181A3A85D1D1D3B856796F9F0CBDF684E4 +42C29A9C4E257BC3E7ECD1320C0FCB593919B4DA0ADCAA6DDE2743D7119254C6F +3B78C8A9D8B443266B39C1D6419DADB2BB8642A1FEBD3CA10922524AC89662614 +4A2443325353245399ACE96E4B6F5A19421221A10CCD4C20B0571325A3D5EEC95 +032752FCD696588AC2BE3A12F6518773219A14C6A327C4D0D5DEFD2CA10874E68 +7B7B1B86D6EB7863AA4FD63430202E43C9D09E26C6A184E82927462D887826F0B +EAF1DB1D815F4F7CBD98196A1ADAD2AAD0C5D93E9BBB3AE8C564747074C8656C4 +995944662D303DBD0D8743CEFEF8256484E70A674632A154363737F1E46123829 +FCDF8D9A740F79DAB68D33CE036D174C9F0E44CC86AB540A954E27E7515FA5E1B +B9CDD3E974C0E7F3B1F314127DB52513125640D066180A053981F9F9796E935C5 +A62A056AB93E751ADA9E42CA1582C868D8D0DEECF55381CC2FAFA2FAE463A4E1B +A5183913CA16C9848495A52E9D4E97F11C21C73721A9904C28B506B19AD21D177 +27C13928A13A183C85A28974B0C51A17FC5895066803FCD8B95CBA6C573F60000 +000049454E44AE42608200"; + end; + function dclassname();override; + begin + return "tmemo"; + end + function WndClass();override; + begin + return Class(tmemo); + end + function Create(AOwner);override; + begin + inherited; + DefaultEvent := array( + "event":"onchange", + "name":"change", + "param":array("o","e"), + "virtual":true, + "body": +" + {** + @explan(˵) ııص %% + @param(e)(tuievent) Ϣ %% + @param(o)(tmemo) ı %% + **} +" + ); + end + function IsContainer();override; + begin + return false; + end +end +type TDpassword= class(TDComponent) + function HitTip();override; + begin + return ""; + end + function bitmapinfo();override; + begin + return "0502000000060400000074797065000203000000696D670006040000006461746 +10002F300000089504E470D0A1A0A0000000D4948445200000024000000240806 +000000E1009898000000017352474200AECE1CE90000000467414D410000B18F0 +BFC6105000000097048597300000EC300000EC301C76FA8640000008849444154 +5847ED91010A80300845BD795DA48374BA859065C36644A163FFC18789321E4A2 +51910F2809007843CF20A4DCB1A1AE12214C5D8424474C4AA99B00D69094DBF42 +44F3FEBABE6B9ECF41C89B7B29C49FB622583D9D1A9C8CF945883F6D45B07A3A3 +538193396D0D7A4106209895533611BBAA31FA1C808E7219300210F087940A84D +291BB496CCEA5B2547890000000049454E44AE42608200"; + end; + function dclassname();override; + begin + return "tpassword"; + end + + function WndClass();override; + begin + return Class(tpassword); + end + function Create(AOwner);override; + begin + inherited; + end + function IsContainer();override; + begin + return false; + end +end +(** +type TDtrackbar= class(TDComponent) + function HitTip();override; + begin + return ""; + end + function bitmapinfo();override; + begin + return "0502000000060400000074797065000203000000696D670006040000006461746 +100026701000089504E470D0A1A0A0000000D4948445200000024000000240806 +000000E1009898000000017352474200AECE1CE90000000467414D410000B18F0 +BFC6105000000097048597300000EC300000EC301C76FA864000000FC49444154 +5847EDCE310AC2401085E1345676E2592CBC876061A3A59E40B0C8416CAC3C400 +A1B0B0BCBA0206A2A53580882A0A0A006C9E8CAAE923871125835C2FCF020EC66 +E133206531888A41540CA2224146694A4E67E9055996850E038487BD4B3A55006 +4DBF6CB304078D8BB2463103506516310B54810360C101EF62EE9540F5054D9CA +1C45A8897B9D91A0EE708742D43A83ADFC534F2448546FAF504CE376AEBB5820E +FE243B1E5063085E6024E9E2FFFD0572C9068B9F1205F73EE985CD501777D9637 +7A8B0D12F52707C89467D01BEFE589FE12814423F728BF3E130A324D537E3DFBC +69988412AEC4CF41FA05FC6202A065131E87D0057498A8BEBDBFB6A1400000000 +49454E44AE42608200"; + end; + function dclassname();override; + begin + return "ttrackbar"; + end + + function WndClass();override; + begin + return Class(ttrackbar); + end + function Create(AOwner);override; + begin + inherited; + end + function IsContainer();override; + begin + return false; + end +end +**) +type TDcomboBox= class(TDComponent) + function HitTip();override; + begin + return "ѡ"; + end + function bitmapinfo();override; + begin + return "0502000000060400000074797065000203000000696D670006040000006461746 +100023501000089504E470D0A1A0A0000000D4948445200000024000000240806 +000000E1009898000000017352474200AECE1CE90000000467414D410000B18F0 +BFC6105000000097048597300000EC300000EC301C76FA864000000CA49444154 +5847ED92C109C42010452D45F094A385A4A65461135660375EEC220797C92ABBD +90C314AD4ECE0838F8387CF6318E61FC6104AB1139AE7B969300E427772D6D755 +C839B7BD409CB3859665294E04FAD675F5D33479A5D41698E1AF9B1060ADF59CF +32D3003D94277F0DD07225106E82EF4CB65A196C1A8BAA13386508A2221C6D82D +D15A87C60F343654131A42D83D5C8D3126B4E0D0D8504D680861B791132965683 +A42634335A12184DD45698410A1F50D8D0DD5E47F855A066327F40486508A2174 +8EF72FB778FABEB46AB5F60000000049454E44AE42608200"; + end; + function dclassname();override; + begin + return "tcombobox"; + end + function WndClass();override; + begin + return Class(tcomboBox); + end + function Create(AOwner);override; + begin + inherited; + DefaultEvent := array( + "event":"onselchanged", + "name":"sel", + "virtual":true, + "param":array("o","e"), + "body": +" + {** + @explan(˵) itemѡıص %% + @param(e)(tuievent) Ϣ %% + @param(o)(tcomboBox)comboboxؼ %% + **} + MessageBoxA('ѡid:'+tostn(o.itemIndex),'ʾ',0,o); +" + ); + end + function IsContainer();override; + begin + return false; end end -//*************red**register************************ -function redregister(); -begin - classes := array( - class(TDipaddr), - class(TDmessagebox), - class(TDEdit), -// class(TDtrackbar), - class(TDcomboBox), - class(TDradiobtn), - class(TDmemo), - class(TDpassword), - class(TDColorComboBox), - ); - class(TVclDesigner).RegestorClassItems(classes); - ps := array( - class(TGridCellEsAlignEdit), - class(TGridCellTextEdit), - class(TGridCellAlignEdit), - class(TGridCellAnchorsEdit), - class(TGridCellTabAlignEdit), - class(TGridCellStringsEdit), - class(TGridCellIntegersEdit), - class(TGridCellColorBoxEdit), - class(tGridCellMbbtnstyleEdit), - class(tGridCellMbiconstyleEdit) - ); - registerproperties(ps); +type TDColorComboBox= class(TDComponent) + function HitTip();override; + begin + return "ɫѡ"; + end + function bitmapinfo();override; + begin + return "0502000000060400000074797065000203000000696D670006040000006461746 +100023001000089504E470D0A1A0A0000000D4948445200000024000000240806 +000000E1009898000000017352474200AECE1CE90000000467414D410000B18F0 +BFC6105000000097048597300000EC300000EC301C76FA864000000C549444154 +5847EDD1DF09C32010C77147F13513640AD7C81A9DC2453A45B7F0C52D7CB039F +1A0A1FEC9859C49E03EF02392807C6955BC1909EAD904196386AEE42FE84CADFB +E841EFD7F165789FF73E3D019EE941CBFAE9E832B82F8410A7698AD6DA3438C3B +BCB8280732E6AADD3E00CE841A5BF62EFB2DFFB200463003DE804ADFB76078D5C +09EB2FD4F2FC20B5F00C49506D881CC44D827AE8416AFDC4B14C82AACBE841CC2 +4A8871C347F66962109AA0D9183B84950CF738346AE6413740712D416E317FE0C +479C51B569C20000000049454E44AE42608200"; + end; + function dclassname();override; + begin + return "tcolorcombobox"; + end + + function WndClass();override; + begin + return Class(tcolorcombobox); + end + function Create(AOwner);override; + begin + inherited; + end end -function zhregister();begin - classes := array( - class(TDListBox), - class(TDColorBox), - class(TDCalendar), - class(TDProgressBar), - class(TDCheckBtn), - class(TDDateTimePicker), - class(TDTimePicker), - ); - o := class(TVclDesigner); - o.RegestorClassItems(classes); - ps := array( - class(tGridCellDayOfWeekBoxEdit), - class(TGridCellPairIntEdit), - class(TGridCellPairSpliterTypeEdit), - class(tGridCellAlignPosBoxEdit), - class(TGridCellTreeViewDataEdit) - ); - registerproperties(ps); +type TDradiobtn = class(TDComponent) + + function HitTip();override; + begin + return "ѡ"; + end + function bitmapinfo();override; + begin + return "0502000000060400000074797065000203000000696D670006040000006461746 +10002AD02000089504E470D0A1A0A0000000D4948445200000024000000240806 +000000E1009898000000017352474200AECE1CE90000000467414D410000B18F0 +BFC6105000000097048597300000EC300000EC301C76FA8640000024249444154 +5847ED96C96EE2401086E7F5B23C14121C13D63B08DE055022E0C076040408894 +54A2EEC4835FE9CB2C621B6BB1D26520EFEA492ACEAEAF2EFEEEA6AFF915F4622 +C84422C84422C8C44D8296CBA574BB5D69341AAEF1BC5AAD74F47BC416743E9FA +55EAF4BA15090542A15688C2190D8B8C412349D4E259BCDBA2FADD56AD26EB765 +B3D9C8E974726DBD5EBB3EC688C9E572329BCD74B61DD682FAFDBEA4D36929954 +A32994CD41B0E31C5625132998C0C0603F59AB112C4CA20A652A9C87EBF57AF19 +62CBE5B22BCA76A58C82A803B689958923C663B7DBB92B95CFE7E572B9A8371CA +3200A987A188FC7EAF94CB3298EE00FE33908B68F1C14BA09A3204E0C457ACDDB +9BC8DD9D93C0C9E0B7FB7B91F7770DF251AD56DD95321129883EC397753A1DF5F +C23488C670F0F1AE4A3D56AB9B94C7DCA991E0E8D8E241C6D3F6C4D9010BFBDBC +68B0424B2057AFD7534F30CED470BCFA391E8FEAF9E0E9E9AB806B7B7ED660851 +CE432D59133351C267F571045EEE77038DC2EE8D76D19054812AE836B384D4142 +B0C7470DF2E11535C2A270A647C3510D3AF61C6D4E5390981F3BF6E015F668345 +2CF67D81AEAC5B947E5F5559D57788DB119D6397D18057175706BD3FAB7DBAD7A +EDF9EF57072C160BF782E4A2E405B610EB5DAEF3F95CBDD15809027E2148CCD78 +6DD6B7E88219639C3E150BD66AC0501BF102C3DF5409172723835F4298C677C8C +1143ACEDCA78C41204D401CD8DAFE7A541C618056C5333D7C416E48715A179F27 +28C67539F317193A09F2011642211642211148DC85F768426F04BC530CE000000 +0049454E44AE42608200"; + end; + + function dclassname();override; + begin + return "tradiobtn"; + end + + function WndClass();override; + begin + return Class(tradiobtn); + end + function Create(AOwner);override; + begin + inherited; + end +end +type TDipaddr= class(TDComponent) +{** + @explan(˵)ipƿؼ%% +**} + function HitTip();override; + begin + return "ipַؼ"; + end + function bitmapinfo();override; + begin + return "0502000000060400000074797065000203000000696D670006040000006461746 +10002B402000089504E470D0A1A0A0000000D4948445200000020000000200806 +000000737A7AF4000000017352474200AECE1CE90000000467414D410000B18F0 +BFC6105000000097048597300000EC300000EC301C76FA8640000024949444154 +5847B5963D8B14411086E7771819980882B870F88170222A2826228A81707881C +1B1818966C7456AA226FA238C4C04115610111185FB211E9C7A6A20D33353774F +431DDD3DDD3D33BBB3EFF232B3555D55EFCCF4471532005FEA6FB2593D966BE69 +69C3697E4989958728F0D1F6386A053C00FD99167D54B395F5E9523E5F15E642C +31C476212B8024A7CC6AB4481F124B8E1C92026E98BBD1A4F3905C2944059C28C +F45132D4272C6D012C0848A251883E40EE109B85F3D88068E496AB83814C06489 +052C83EEC4B402582EA9D97ED3AC2599F34FCA0BAD5C4A6AE912B502724F9F5A4 +614C9F9C16EF353BE37DB72BDBA93CC6B059C292FB70628870A785EBFB2B6D7CD +1BF9DC7CB5B63DF923EBD5D4CB4B4D507CA83F798E90FA4A5DA80D7F28208C7F5 +BBFB776AEA18FDAC5A36AABE508190A707D5D0234F66FF3AFE5A376C121123A42 +2E228009A7D0B7A6A476D167E35944C056FDD4DAFF1FFC8E96273D1FB50B8E53D +718E33C0256CC456FD379D7CCBC3848EDD105C4F04B7ECB5973C58B8356C0D89F +20C4ACF9286BD58617A3B49F60CC49A87BC093FA854CAB8772DBDCF3C686B4939 +0362AE674D95700F7AEAF8BD42EE8E1624E97CB12406DBB15E7FA3D92868D26FF +11A57EC51001D404A31E464304685CE771CC409E38A42B406D7D05B48E633044F +DA2D4A7078702C0989D708A6187EC0900CBE88895B1CEB82500F4D91D87929C31 +440580313BE4B01376911400D85A53ABA30F8975275C0C590180E542925CDF189 +2B1C4E852CBA153800B7A38DA280E11BE29C729E41E1B3EC6F487C83E6F6E81BB +6E01F9710000000049454E44AE42608200"; + end; + function dclassname();override; + begin + return "tipaddr"; + end + + function WndClass();override; + begin + return Class(tipaddr); + end + function Create(AOwner);override; + begin + inherited; + end + +end +type TDmessagebox = class(TDRootComponent) + function HitTip();override; + begin + return "ʾ"; + end + function bitmapinfo();override; + begin + return GetMessageBoxBitmapInfo(); + end; + + function classification();override; + begin + return "Ի"; + end + function dclassname();override; + begin + return "tmessageboxadlg"; + end + function ComponentClass();virtual; + begin + {** + @explan(˵) ؼ %% + **} + return class(tmessageboxadlg); + end + + function WndClass();override; + begin + return Class(TDMessageboxWindow); + end + function Create(AOwner);override; + begin + inherited; + end +end +type TDMessageboxWindow = class(TDVirutalWindow) +{** + @explan(˵) ɫѡؼ %% +**} + public + function Create(AOwner);override; + begin + inherited; + BindComp := new TMessageboxADlg(self);; + end + function GetPublishEvents();override; + begin + return array(1:nil); + end + function bitmapinfo();override; + begin + return GetMessageBoxBitmapInfo(); + end; +end + +//***********zh**DControl*********************** +type TDListBox=class(TDComponent) + private + FLBItemEdit; + public + function isContainer();override; + begin + return 0; + end + function HitTip();override; + begin + return "б"; + end + function dclassname();override; + begin + return "tlistbox"; + end + function WndClass();override;begin + return Class(tlistbox); + end + function Create(AOwner);override;begin + inherited; + end + function bitmapinfo();override;begin + return "0502000000060400000074797065000203000000696D670006040000006461746 +100025401000089504E470D0A1A0A0000000D4948445200000024000000240806 +000000E1009898000000017352474200AECE1CE90000000467414D410000B18F0 +BFC6105000000097048597300000EC300000EC301C76FA864000000E949444154 +5847ED96410EC2201045390ADB1E86E371122FE0A69C807D37BD451798C192D8F +643156841C24B5E6C884E5E9C6860A6327AD0199B2021C4AD220E413909CD2B1E +344D93D55134884238E756171515C418FB49A5D4FAC937346F5916330C8391525 +AE999CEA2825271F3E679B6AF847B2E1A84880A426B41FA86D37948C4E5DFD0F8 +7C40DB0842EB09897E6528868C0A4AA5FD20B496BD5AEBF5DD47B207A5D27E105 +A11D2373C7B502AED07A1F584FC8B3FC69088CB837C4405A1B5207DC3DD795517 +B42AAFB0D92EF9A97CCEA3101743140FDAF375D09D22364135D083CEE841618C7 +90143F9BE01B37879820000000049454E44AE42608200"; + end +end +type TDColorBox=class(TDComponent) + function isContainer();override;begin + return 0; + end + function HitTip();override;begin + return "ɫб"; + end + function dclassname();override;begin + return "tcolorbox"; + end + + function WndClass();override;begin + return Class(tcolorBox); + end + function Create(AOwner);override;begin + inherited; + end + function bitmapinfo();override;begin + return "0502000000060400000074797065000203000000696D670006040000006461746 +100025B01000089504E470D0A1A0A0000000D4948445200000024000000240806 +000000E1009898000000017352474200AECE1CE90000000467414D410000B18F0 +BFC6105000000097048597300000EC300000EC301C76FA864000000F049444154 +5847ED96B10D833010451985969A822958838D3C49164813295BD0B00585C3593 +AC9266793B33E06059EF48485A5F32B5CB8B227E30EDA2208EAFBBEA8125F4148 +52F30E0F1AC7D1C9E8838665CB37039E4721755D3B390A16D4B6EDA60CCD9BE7D +9364D638D314E5AD3BFC38288699ADC97E0352C4843EC50421F0480E6A594D83D +E8F57C88AA83AA2134872241D22566D75C3348033408C19F0755CB966F064582A +4CBBC96B96690066C10805306A594880675EF2E3087D8A1042C48BAC4BE3E3C0F +F2404305C19EB0B1200D3C0FF3C807E0CFA3108E210E0F5AF37350492582A0337 +0076D7107A5B1F6034F9699CCB1141CEB0000000049454E44AE42608200"; + end +end +type TDCalendar=class(TDComponent) + public + function isContainer();override; + begin + return 0; + end + function HitTip();override; + begin + return ""; + end + function dclassname();override;begin + return "tmonthcalendar"; + end + + function WndClass();override;begin + return Class(tmonthcalendar); + end + function Create(AOwner);override;begin + inherited; + end + function GetPublishEvents();override;begin + r:=inherited; + if r then + reindex(r,array("ondrawitem":nil,"onpaint":nil)); + return r; + end + function bitmapinfo();override;begin + return "0502000000060400000074797065000203000000696D670006040000006461746 +100029901000089504E470D0A1A0A0000000D4948445200000018000000180806 +000000E0773DF8000000017352474200AECE1CE90000000467414D410000B18F0 +BFC6105000000097048597300000EC300000EC301C76FA8640000012E49444154 +484BED94B1AA82501CC6DD7C010D71745268953B2AEE3E40F80A2E977A1371095 +C0D8256C1390209DC5C05373721084104BF8BA77335A2AB51D725FAC187E77F3E +F0770E884CC23098321FC168DE40F0F51D612ADA77BFB160B55A41D775489284F +D7E4F772F6CB75BB27F9DC3E140DB9E41C172B9C466B301C77108C390EE5EF03C +0F8661204DD32E6559D2B66750F08B288A7705A669D2E96F5E12F03C0F5996A16 +91AD6EB359AA6A16DCFD382388E110401922481EFFB98CD66701C87B63D4F0B6E +715D17AAAAD2A9E7DF04EDC7A0280A9D7A0605A7D3094551401004EC763BB2AEE +B9A745114A1AA2AB2CEF39C9CDEB66D325F332898CFE760DA7FC9558EC723E92C +CB02CBB2E476ED73B1589003DD322818E37C3E23CBB2EE26F77849F0081FC1289 +D60BA44F8013782F60023EBD3020000000049454E44AE42608200"; + end +end +type TDProgressBar=class(TDComponent) + public + function isContainer();override;begin + return 0; + end + function HitTip();override;begin + return ""; + end + function dclassname();override;begin + return "tprogressbar"; + end + + function WndClass();override;begin + return Class(tprogressbar); + end + function Create(AOwner);override;begin + inherited; + end + function bitmapinfo();override;begin + return "0502000000060400000074797065000203000000696D670006040000006461746 +100024C02000089504E470D0A1A0A0000000D4948445200000024000000240806 +000000E1009898000000017352474200AECE1CE90000000467414D410000B18F0 +BFC6105000000097048597300000EC300000EC301C76FA864000001E149444154 +5847ED95476E633110447DAB39978FA395749C11A09C73CE3967A907D540CBF46 +75BF46EB46003B57109CDA72A52FEA0371B0FE41A0FE41A0FE41A0FE41A0FE41A +068A4422140A85FEABC0F004C21FB6DB2D9D4EA7A78EC7231D0E07DAEFF7ACDD6 +EC79FD96C36B45EAF9F5AAD56B45C2E69B158D07C3EA7D96CC69A4EA734994C68 +3C1ED36834A2E1704883C180D5EFF7A9D7EB51B7DB65351A0D66F806743E9FE9F +178D0FD7E67DD6E37BA5EAF74B95CD8D34005D20435014D48133008D96AB56C20 +1C04883F9F7F2D0984E60984E601E23749359B4D1B08DF1869688B250DCD93343 +4CF841010B3AE4EA7C3AAD7EB3610224725DA62A944F3A412CD0B429820ED769B +AB423AD56AD50642EC48425B0CEF552DA844F38269088480E032239D52A964032 +17A24A12D96CBA9795289E64925661A0201D56A354EA75028D840381017545B2C +AF44F3A412CD13081344202A950AAB5C2E532E97B381702052D216CB2BD13CA94 +4F38210020208D4542C16399D4C26630321FA5797F3552DA844F3CC3404C204C9 +E7F39C4E3299B48110FD4F3F5CAE57E2AA24082120D96C96D3492412361096BB5 +E832BFA9F0E84D2E934A552294E0300F1789C158BC5281A8D7E077A877FAEE170 +F80BE89DC603B9C603B9C603B9C603B9C603BD1EA27F2BABB3A7A95F430C00000 +00049454E44AE42608200"; + end +end +type TDCheckBtn=class(TDComponent) + public + function isContainer();override;begin + return 0; + end + function HitTip();override;begin + return "ѡ"; + end + function dclassname();override;begin + return "tcheckbtn"; + end + + function WndClass();override;begin + return Class(tcheckbtn); + end + function Create(AOwner);override;begin + inherited; + DefaultEvent := array( + "event":"onclick", + "name":"clk", + "param":array("o","e"), + "virtual":true, + "body": +" + {** + @explan(˵) ص %% + @param(e)(tuievent) Ϣ %% + @param(o)(tcheckbtn)ѡť %% + **} + MessageBoxA(((o.checked)?'ѡ':'ûѡ'),'ʾ',0,o); +" + ); + end + function bitmapinfo();override;begin + return "0502000000060400000074797065000203000000696D670006040000006461746 +100023A02000089504E470D0A1A0A0000000D4948445200000024000000240806 +000000E1009898000000017352474200AECE1CE90000000467414D410000B18F0 +BFC6105000000097048597300000EC300000EC301C76FA864000001CF49444154 +5847EDD64B4EC2501406602638C10487C484810B70EC0274430E7527121640888 +AACC0A9C1F22ECF02A52D85D296D70A7E295822A5F6564E8D0EFA2767D873BFDC +474E23F8670941AC84205642102B9EA09BFB775CDDBE055A564FAF7882AC06ABD +50ACBE5128BC502F3F91CB3D90CA669C2300CE8BA8EE9740A4DD330994C301E8F +A1AA2A46A3111445812CCB902409C3E110A2286230186C7A7A85090A12D3EFF7E +9A02031BD5E8F0E3A162308D2014610043AE818CCEBAB846452472A25EF61BADD +2E1D740C26913010899888460D3C3C58BBB5C5743A1D3AC80DA3AA6C8C5D27272 +6D269718369B7DB74901393CF6BB8BC34C0712A1363553C6EE0E9A9BFC1B45A2D +3AC889393DDD2E747161A050507E8469369B74908D7979D1108BED2F68A13219C +5157376A6AFBFE9ED611A8D061D645FE07C7EB2DB1D56B9ED8C85E1799E0EFAFA +9A72399589F2C2D4EB753AC8F99A9E9F47EBA33B3C223F985AAD4607399FB6350 +E1E1FE503941F4CB55AA5839C187B1C64B3D20EE51753A954E820378C3D0E3219 +11E7E7BA6F4CB95CA683BEC3D8E380E7BBBE31A552890EF2C2D8E3C02FA6582CD +2414162388EA38382C49041BFF1937F7D57F8ECEE1E4FD05F2404B11282580941 +DE013E00FF2B90FB3AF2B1880000000049454E44AE42608200"; + end +end +type TDDateTimePicker=class(TDComponent) +private +public + function isContainer();override;begin + return 0; + end + function HitTip();override;begin + return "ʱѡ"; + end + function dclassname();override;begin + return "tdatetimepicker"; + end + + function WndClass();override;begin + return Class(tdatetimepicker); + end + function Create(AOwner);override;begin + inherited; + end + function bitmapinfo();override;begin + return "0502000000060400000074797065000203000000696D670006040000006461746 +100020E01000089504E470D0A1A0A0000000D4948445200000018000000180806 +000000E0773DF8000000017352474200AECE1CE90000000467414D410000B18F0 +BFC6105000000097048597300000EC300000EC301C76FA864000000A349444154 +484BD58FD10D83300C44D9285B650D6FD14DFACD10198221F2E1F62C8C5C29941 +80C88279D8C2C398F1BF864AE13E49CC362F91178D19B5AAB046C0A88C6AE00DC +945238A524C177B8001091046C0A3CB46EFE0AA26239D4A04597E0F59EDC51BA0 +57B260869C0C3F76CCEB29B0969208F9BB94B20478D3F5DDB2BAE06F28899BA5F +9B20A4412B8AAB81770257034F942EC111EE1544C5B208CEE2E902E60FE420D1B +CC541E3100000000049454E44AE42608200"; + end +end +type TDTimePicker=class(TDComponent) + public + function isContainer();override;begin + return 0; + end + function HitTip();override;begin + return "ʱѡ"; + end + function dclassname();override;begin + return "ttimepicker"; + end + + function WndClass();override;begin + return Class(ttimepicker); + end + function Create(AOwner);override;begin + inherited; + end + function bitmapinfo();override;begin + r := gettimepickerbitmapinfo(); + return r; + end + end -function tablelines(str,n); -begin - lines := str2array(str,"\r\n"); - r := ""; - for i,v in lines do - begin - if not v then continue; - r+=n; - r+= v; - r+="\r\n"; - end - return r; -end -function compileTsl(tsl); -begin - rts := ""; - havekg := 0; - for i := 1 to length(tsl) do +//******************************* +type TDForm = class(TDComponent) +{** + @explan(˵) %% +**} + private + static FClassName; + static FParser; + function savecurrentform(o,e); begin - vi := tsl[i]; - if vi in array(" ","\t","\n","\r") then + cp:=o.Component; + if not cp then exit; + nd := cp.TreeNode; + if nd then d := nd.owner.Designer; + if d then begin - if havekg then - begin - - end else - begin - havekg := true; - rts+=vi; - end - end else - begin - rts+=vi; - havekg := false; + d.saveCurrentForm(); + //d.openclassfile(); end end - return rts; + function OpenClass(o,e); + begin + cp:=o.Component; + if not cp then exit; + nd := cp.TreeNode; + if nd then d := nd.owner.Designer; + if d then + begin + d.openclassfile(); + end + end + public + function menus();override; + begin + r := array(); + //r[0] := array("type":"menu","caption":"洰"); + r[0] := array("type":"menu","caption":"tsfļ","onclick":thisfunction(OpenClass)); + r[1] := array("type":"menu","caption":"浱ǰ","onclick":thisfunction(savecurrentform)); + //r[2] := array("type":"menu","caption":"򿪹Ŀ¼","onclick":thisfunction(openProjectDir)); + return r; + end + function InToolBar();override; + begin + return false; + end + function ComponentCreater(tnode,owner);virtual; + begin + r := inherited; + return r; + end + function classification();override; + begin + return "ǵӿؼ"; + end + function HitTip();override; + begin + return "\r\nڹfile\r\nfile managerй"; + end + function dclassname(v);override; + begin + if ifstring(v) and v then + begin + FClassName := v; + end + if not FClassName then return "tdcreateform"; + return FClassName; + end + function bitmapinfo();override; + begin + return getformbitmapinfo(); + end + + function WndClass();override; + begin + return class(tvcform); + //return class(TDCreateForm); + end + function create(AOwner);override; + begin + inherited; + DefaultEvent := array( + "event":"onclose", + "name":"close", + "virtual":true, + "param":array("o","e"), + "body": + " + {** + @explan(˵) ڹرջص %% + @param(e)(tuievent) Ϣ %% + @param(o)(ttimer) ǰ %% + **} + if MessageBoxA('Ƿرյǰ','ر',MB_YESNO,o)<>IDYES then e.skip := true; +"); + end end -function GetDCompObject(n); -begin - return class(TVclDesigner).GetClassItem(n); -end -function staticInit(); -begin - its := array(class(TDGroupBox){,class(TDCheckGroupBox),class(TDRadioGroupBox)}, - class(TDForm),class(TDPanelForm), - class(TDPanel),class(TDTimer),class(TDSpinEdit), - class(TDPairSplitter),class(TDPairSplitterSide), - class(TDPage),class(TDTabSheet), - {class(TDHotKey),} - class(TDImageList),class(TDMainMenu),class(TDPopUpMenu), - class(TDMenu),class(TDBtn){,class(TDPopMenuBtn)},class(TDTreeView), - class(TDOpenFileADlg),class(TDSaveFileADlg),class(TDInputQuerys), - class(TDColorChoose),class(TDFontChoose),class(TDFolderChoose), - class(TDToolBar),class(TDListView){,class(TDTSLDataGrid)},class(TDToolButton),{class(TDtoolsepbutton),}class(TDStatusBar), - class(TDTray), - class(TDActionList),class(TDAction),class(TDLabel), - //class(TDSocketServer),class(TDSocketClient), - class(TDClipBoard),class(TDQuotations),class(TDtlogincontrol) - ); - o := class(TVclDesigner); - o.RegestorClassItems(its); - ps := array( - class(TGridCellBoolEdit), - class(TGridCellColorEdit), - class(TGridCellDirectoryEdit), - class(TGridCellFileNameEdit), - class(TGridCellNaturalEdit), - class(TGridCellIntegerEdit), - class(TGridCellLazyIntegerEdit), - class(TGridCellStringEdit), - class(TGridCellEventHandleEdit), - class(TGridCellVariableEdit), - class(TGridCellVariableTactionEdit), - class(TGridCellVariableTrayEdit), - class(TGridCellVariabletimagelistEdit), - class(TGridCellVariabletmainmenuEdit), - class(TGridCellVariabletpopupmenuEdit), - class(TGridCellImagesEdit), - class(TGridCellBitmapEdit), - class(TGridCellIconEdit), - class(TGridCellFontEdit), - class(TGridCellhotkeyEdit), - class(TGridCellSysCursorEidt), - class(TGridCellStatusItemsEdit), - class(TGridCellFileFilterEdit) - ); - registerproperties(ps); - redregister(); - zhregister(); +type TDPanelForm = class(TDForm) +{** + @explan(˵) %% +**} + + function WndClass();override; + begin + return class(TpanelForm); + //return class(TDCreatePanel); + end + function create(AOwner);override; + begin + inherited; + end end + +//**************TPanel************************** +type TDPanel = class(TDComponent) + function HitTip();override; + begin + return "ؼ"; + end + + function dclassname();override; + begin + return "tpanel"; + end + function bitmapinfo();override; + begin + return "0502000000060400000074797065000203000000696D670006040000006461746 +10002CA00000089504E470D0A1A0A0000000D4948445200000024000000240806 +000000E1009898000000017352474200AECE1CE90000000467414D410000B18F0 +BFC6105000000097048597300000EC300000EC301C76FA8640000005F49444154 +5847EDD7B109C0300C05D1ECBF812AADA94EC1453A91AB4C1CB80F571ABDD6571 +F36413441B41194991D115B5B37A68DA0F5A0AAB6B66E4C13F42488124409A204 +5182284194204A1025881244FD1B74DC47F1CB09A2097A5FF70DF185865E9BB41 +DE30000000049454E44AE42608200"; + end + + function WndClass();override; + begin + return Class(tpanel); + end + function ComponentCreater(node,pt);override; + begin + r := inherited; + return r; + if r then + begin + r.Cwnd.Color := rgb(240,240,240); + end + return r; + end + function Create(AOwner);override; + begin + inherited; + DefaultEvent := "no"; + end + + +end +//**************groupbox************************** +type TDGroupBox = class(TDComponent) +{** + @explan(˵) groupboxؼ +**} + function HitTip();override; + begin + return ""; + end + function dclassname();override; + begin + return "tgroupbox"; + end + + function bitmapinfo();override; + begin + return "0502000000060400000074797065000203000000696D670006040000006461746 +100020B01000089504E470D0A1A0A0000000D4948445200000018000000180806 +000000E0773DF8000000017352474200AECE1CE90000000467414D410000B18F0 +BFC6105000000097048597300000EC300000EC301C76FA864000000A049444154 +484BCD91510A83301044BD92782B2F90DF9CA11F3D8FED358A7894C8424736B0A +43B89A11978B0129D67922975CE7F04EB732FC2E41284F0B8B04A35FA5D0B9D4C +8058A59A52A4E7BDBDBE4F86E0383ED548F138821863F6B107B740CAE5AC2199E +7E527940012CC5E28410DE3EC80BD035A0009662F94A0867176C0DE81400920C1 +EC8512D4E012C8620B45C15D980289FE9356904CD0239D05299D037BBA604E978 +76D0000000049454E44AE42608200"; + end + + function WndClass();override; + begin + return Class(tgroupbox); + end + function Create(AOwner);override; + begin + inherited; + end + +end +//*****************Check GroupBox************************ +type TDBtn = class(TDComponent) + function HitTip();override; + begin + return "ť"; + end + function IsContainer();override; + begin + return false; + end + function dclassname();override; + begin + return "tbtn"; + end + function bitmapinfo();override; + begin + return getbtnbitmapinfo(); + end; + function WndClass();override; + begin + return Class(tbtn); + end + function Create(AOwner);override; + begin + inherited; + DefaultEvent := array( + "event":"onclick", + "name":"clk", + "virtual":true, + "param":array("o","e"), + "body": +" + {** + @explan(˵) ص %% + @param(e)(tuievent) Ϣ %% + @param(o)(tbtn)ť %% + **} + MessageBoxA(o.caption+':','ʾ',0,o); +" + ); + end + +end +//*****************TPairSplitter******************************* +type TDPairSplitterSide = class(TDComponent) + function HitTip();override; + begin + return "PairSplitterSide\r\nsplitterؼҼ"; + end + function dclassname();override; + begin + return "tpairsplitterside"; + end + function classification();override; + begin + return "ǵӿؼ" ; + end + function menus();override; + begin + r := inherited; + return select * from r where ["caption"]="ɾ" end ; + end + function InToolBar();override; + begin + return false; + end + function bitmapinfo();override; + begin + return getsplitersiderbitmapinfo(); + end + + function WndClass();override; + begin + return Class(TPairSplitterSide); + end + function CheckParentWnd(Pwnd);override; + begin + {** + @explan(˵) ڵж %% + **} + r := Pwnd is class(TPairSplitter); + if (not r) and (Pwnd is class(TWincontrol) ) then Pwnd._wapi.MessageBoxA(Pwnd.Handle,"Ҫ TPairSplitter Ϊ","ʧ",0); + return r; + end + + function Create(AOwner);override; + begin + inherited; + end +end +type TDPairSplitter = class(TDComponent) + function HitTip();override; + begin + return "ɶԷ"; + end + function dclassname();override; + begin + return "tpairsplitter"; + end + function AddsplitterSide(o,e);override; + begin + cp := o.Component; + r := (GetDCompObject("tpairsplitterside")).ComponentCreater(cp.TreeNode,cp.Cwnd); + if not r then exit; + r.CreateName(); + tr := r.TreeNode.owner.Designer; + tr.BindCwndMessage(r.Cwnd); + tr.VariableSelecter.additem(r); + end + function menus();override; + begin + r := inherited; + r[length(r)] := array("type":"menu","caption":"splitterside","onclick":thisfunction(AddsplitterSide)); + return r; + end + function bitmapinfo();override; + begin + return "0502000000060400000074797065000203000000696D670006040000006461746 +100023301000089504E470D0A1A0A0000000D4948445200000018000000180806 +000000E0773DF8000000017352474200AECE1CE90000000467414D410000B18F0 +BFC6105000000097048597300000EC300000EC301C76FA864000000C849444154 +484B63F84F63304C2C983973264E0C02870E1CC4C020804D3D0CC3005E1FC0148 +20CBC7FFF361C97974F028B231B840B0C2E0B40060F0D1F3C7BFB1D4C136B014C +3D368061C18B77DFFF07371C07B3D12DC01544FEB5C7FE3F79FD0DCC46072816C +00CB7C8D907E613EB03907A5C96C02D40369C5C8CCD12B8059913CE61D5442A06 +99830CE8E70310A0691CC0004D53110CD0341F2003622DC00748B2005710E1038 +3CB07645B0052880B8300C80290A1C81804B0A9876118C0EB036A001A5BF0FF3F +008B200E0EE56C49BF0000000049454E44AE42608200"; + end + + function WndClass();override; + begin + return Class(TPairSplitter); + end + function CheckChild(dcmp);override; + begin + return dcmp is Class(TDPairSplitterSide); + end + function Create(AOwner);override; + begin + inherited; + end + function ComponentCreater(tnode,owner);override; + begin + {** + @explan(˵) ½ڵ㴰 %% + @param(tnode)(TComponentTreeNode) ڵ %% + @param(owner)(TWincontrol) %% + @return(TDComponent|0)ɹضʧ0%% + **} + o := inherited; + //if o then o.Cwnd.color := rgb(200,200,200); + return o; + end + +end +type TDTabSheet = class(TDComponent) + function CheckParent(p,pwnd);override; + begin + if not (p is class(TDPage)) then return 0; + return inherited; + end + function HitTip();override; + begin + return "pagesheet\r\npageؼҼ"; + end + function dclassname();override; + begin + return "ttabsheet"; + end + function classification();override; + begin + return "ǵӿؼ"; + end + function SelectedNode();override; + begin + if Cwnd is class(ttabsheet) then + begin + pc := Cwnd.Parent; + if pc is class(TPageControl) then + begin + pc.cursel := Cwnd; + end + end + inherited; + end + function bitmapinfo();override; + begin + return getsheetbitmapinfo(); + end + function menus();override; + begin + r := inherited; + return select * from r where ["caption"]="ɾ" end ; + end + function InToolBar();override; + begin + return false; + end + + function WndClass();override; + begin + return Class(TTabSheet); + end + function Create(AOwner);override; + begin + inherited; + end +end +type TDPage = class(TDComponent) + function HitTip();override; + begin + return "ҳؼ"; + end + function dclassname();override; + begin + return "tpagecontrol"; + end + function addtabsheet(o,e); + begin + cp := o.Component; + r := (GetDCompObject("ttabsheet")).ComponentCreater(cp.TreeNode,cp.Cwnd); + if not r then exit; + r.CreateName(); + cp.TreeNode.expand(); + tr := r.TreeNode.owner.Designer; + tr.BindCwndMessage(r.Cwnd); + tr.VariableSelecter.additem(r); + end + function menus();override; + begin + r := inherited; + r[length(r)] := array("type":"menu","caption":"tabsheet","onclick":thisfunction(addtabsheet)); + return r; + end + function bitmapinfo();override; + begin + return "0502000000060400000074797065000203000000696D670006040000006461746 +100023001000089504E470D0A1A0A0000000D4948445200000024000000240806 +000000E1009898000000017352474200AECE1CE90000000467414D410000B18F0 +BFC6105000000097048597300000EC300000EC301C76FA864000000C549444154 +5847ED97C10A84201400F76BA36E7EB5274F9A969AB9BC43B1CBEAB30EED53706 +02E29398181BE6265F4A0123DA8C419C4188BC330A0C29CA7398360C112E338FE +441E4ED3947C0EDEF9905B413087739E14C6841049AFBCFBA0EEA07DDF51FF1E1 +44240AD2E08DBB8D818F633809F9BFE2B68DB361261ED83BA83BCF72466839C73 +24B61364AD25311BB4AE2B89ED042DCB426236C81843623B415A6B12DB099AE79 +9C46C90528AC47682A49424B61174E5A2F894C9236C2DF4A0123D0827C637259C +FCE218FD50E80000000049454E44AE42608200"; + end + function CheckChild(cd);override; + begin + return cd is class(TDTabSheet); + end + + function WndClass();override; + begin + return Class(TPageControl); + end + function Create(AOwner);override; + begin + inherited; + end +end type TViewBitmap = class(TvcForm) {** @explan(˵) ͼƬϢɼ%% @@ -10581,45 +9095,7 @@ type TViewBitmap = class(TvcForm) end function GetBimpOpenBmp(); begin - return "0502000000060400000074797065000203000000696D670006040000006461746 -10002AE04000089504E470D0A1A0A0000000D4948445200000040000000400806 -000000AA6971DE000000017352474200AECE1CE90000000467414D410000B18F0 -BFC6105000000097048597300000EC300000EC301C76FA8640000044349444154 -785EED97794F135B1887FD307E00FFF25B98F811AE1A1313638C8991B82626AE1 -4D9B4A514011716254A29B4A58085D28D0285B66C054190CB2D704590AD2082BE -F64CCF603BF356A733530BD3F9254F1A867366DEDFD3E9148E408E4715405F733 -6AA00FABA9FB5A54D45C30D2AA0B7694491A802D2151076CF1C48469A1C3052DF -0C43CF1B60B8A611865F5960B42D80AE2548127090F2FDCB02AC159C84E58B475 -1A2D612BAF2571425206ABC8B166759C93B067B0B9374753C8A1140DE7DAC3497 -68E31DBA231EC508D80958D1C25C56F34FD01DF12846C057570D5A98CBCAF5E37 -4473C8A11403EDB58612E9BF557E98E7814238064A3FA025A3A916F61275D1D8F -A204ECCE0CA2A559B8EF3E89A20490EC45C661BDEC1F5EF96D7B055D911CC5096 -043BE16C91D419E0D3FB637E8517E142B40685401AA0055802AE0D008D8D9DB81 -C8C622835C3934026656E7E0ED442B1882750CC14F63F437D2722804CCAE45F68 -B27E25F18A22BC4E7C00B20B73B569E85DC195272A0057C8A7E464B73598C2ED1 -1DE94776014B5BCB609A6C67066B9CB031B76974779BFE3639FA400BE4751AA02 -AD40A8ED9203D1ACFDCFA3CAF682A1AC6CDB0F92D4A77A617590544D617A166D4 -C81BB036768C2B82943E65CE4FE2BEB70E7AE7C3108A3DE0B8E7F8139EFFFCF4C -CE9453601D3ABFF4265E8353A1C4BFD980926963F802160E69567B9E9D4A37B85 -E098F5C33D4FEDFEB92EDBF5B163213A211ED90498A7ECE85018773D1570AEB53 -0A9F8596B01DC761BD0F542D1F8AA92CEC95219B4D229F99145C0FF021F568994 -0DD6407E6CE01BDD6590D7A5055DEC676C5DBA9073611274032666566E6411D03 -71F4487C9069ADE6A5400A1E9BD87993731B20868089BD161B2C5A577A5A80082 -71C2CDCCCC46B280A5AD1574886C72CFFB142D4F38632980A995086D238300E6A -98E0C916DCED9921FB28914F7BDA16D6410E09EEB4707C836A91E862C9D1F034C -1FC902DE8C5BD101B2CDEF3E06846B8E4AD8DAFD2A4DC0987B1ABD3841D7FF024 -ABD5550D86D80626705687B9F4379A0165D9B09B4032FD1E289B44C7AA50918F2 -4CF22E5CE67F098F3ACBE181ED098F87ED5A28EA8ECBE0EECB04173B4AD0E22C5 -762FF878CBAA6C50B18F486932E48DE71AC38C613DFB3A4BD99E096B31C2D9E48 -5FE7A87801FDDEE1FD8B153A0C68D1DF916909857DCFD0D289D86D7EF1027C3D2 -1E6428F7BAAD18242201F19EEE07272C6A2418BB3989A5DD204E807627FD3B7EB -D07242287157A283CBC5F9B622B4388BD1D42D5E80B767088A5D4FD16242D174E -832FAED70D9AE85D3E64729796B728A175067F781C62EFCC1978A22570394FA2C -19E181C30B579B6753526DEA172FA0A3EB23DCB7E9D152E970DB624387FB1B900 -EA205B4754DA185D2E58EF5153ADCDF409200A37D006EB60CCAC2F5963174C04C -234900D98C9DF430A10A5005A8025401AA002902948068014A431520548092E18 -62720D7A20AA0AF399B1C1700F01309B59D2D832D152F0000000049454E44AE42 -608200"; + return getbitmapviewerbitmapinfo(); end function Create(AOwner);override; begin @@ -10699,47 +9175,22 @@ EA205B4754DA185D2E58EF5153ADCDF409200A37D006EB60CCAC2F5963174C04C end end end -function GetHostroyBimp(); +function GetDCompObject(n); begin - return "0502000000060400000074797065000203000000696D670006040000006461746 -100021901000089504E470D0A1A0A0000000D4948445200000010000000100806 -0000001FF3FF61000000017352474200AECE1CE90000000467414D410000B18F0 -BFC6105000000097048597300000EC300000EC301C76FA864000000AE49444154 -384FB591B10A83301884FBFE90277010CCE412870412F00D9C5DB2677472C816A -EFC2196BF1A6AB5F4839FBB1B7204EE01C6388EC57DCFFF0B628C98E719D33465 -A5CC392DA087DE7BA494B252E61C0AF6A794C2BAAEAFA3CC792BD8B0D616070CC -300E71C4208592973AA055AEBE2806559D0751D8410592973AA05FB6F7EA25AD0 -F77D71E7540BA494C55D9C71A36DDBE22ECEB8618C41D334F96ECDC8B93523E7D -68C57F8B1007802C798CF8E2876C2280000000049454E44AE42608200"; + return class(TVclDesigner).GetClassItem(n); end -function GetDefaultIconInfo(); -begin - return "0502000000060400000074797065000203000000696D670006040000006461746 -10002F802000089504E470D0A1A0A0000000D4948445200000018000000180806 -000000E0773DF8000000017352474200AECE1CE90000000467414D410000B18F0 -BFC6105000000097048597300000EC300000EC301C76FA8640000028D49444154 -484BED936F4813611CC785DEF5AE971115F45230712B36A6DBDCD6A84D4D72B69 -486EFCA188D70A1D339655638DC422D6C36470441043333882010234248BBD38D -52DA91FFF722E8DED93004F1DBF35C3BB9C50D37B057F5852FF7F0BBDFEFFBB97 -BEEB922FC65FD238034C7617D680889DA5AC1744D6BF9282760736909A9911124 -EAEA10B75AB1EA74626360009BE130526E37123535885757633514C2462201ECE -C6426B3250BF8DAD58569950A8C5E8FEFDDDD402C266B7A8FF6D05E3A23275940 -2A1A45923CE102797246ABC5ACD18875970B69BA35C4743D67328125F716341A2 -4954A61464E3901298703F0FB05F3CDCD9827301AC85454605EAD065F5A0A1417 -0B4E9595E50F98FB96C4E38E2B5900D1F48D6898185C10E0FCB3161CE93F87A38 -316F4B7D6EF3FE0C0ADD338D8ABC1A1A01EBD3E3B3E9A2AB1E6B88C343931B900 -E99212AC284E916DD362EDC9D34C52B67601457E2502CB0134BC75E244D882939 -E72B4365560D2ACC3944187C5C6467C329BB1A85060454942355A7C309DC57357 -1FDAEF4CC2D8C1C2359CC46B86C78F9FDB99541980D41446EBB66B6308D8BC98D -21A30A3ABC444E77D8CBFE41063C969CDF8D1FB2D34849250B54C4373732693BA -07809AD6E990FDEE328C9DB3C2707DDF67F48CF24228BD5E0A7E4139A91BBC719 -CE95916FA4565015CAC2727C0FF8A7C06E2F6D12D0166F0B2024C0CBDF0600B17 -23102C0BF0BF8BE0F860150E0F98611A6BDA85FD09909AD6C550A96501A2E87FD -036710FC706AD026CDF01525198E3850F7A0FDD770E57A33C7CE3DBB200DBF036 -AA823C2CB73918DA994CC21E00516972ECDEB03C6E44380263600FFD86518018A -A6B6370FD2127F4D17E517901A492C2D4EE19D950A90A0614AAFF803D04FC02CB -EAA6F9D1CC6EB10000000049454E44AE42608200"; + +///////////////////ͼƬԴ////////////////// + +function registerproperties(ps); +begin + for i,v in ps do + begin + it := createobject( v,0); + class(TPropGrid).RegCellRender(it); + end end + function createtslfunction(f); begin n := f["name"]; @@ -10763,6 +9214,146 @@ begin hs := "\r\n\tfunction "+n+"("+ps+");"+vt+"\r\n\tbegin\r\n"+b+"\r\n\tend\r\n"; return hs; end +function staticInit(); +begin + //class(TDSocketServer),class(TDSocketClient), + its := array( + class(TDForm),class(TDPanelForm), + class(TDPanel),class(TDGroupBox), + class(TDPairSplitter),class(TDPairSplitterSide), + class(TDPage),class(TDTabSheet), + class(TDTimer), + class(TDImageList), + class(TDClipBoard), + class(TDMainMenu),class(TDPopUpMenu),class(TDMenu), + class(TDOpenFileADlg),class(TDSaveFileADlg),class(TDInputQuerys), + class(TDColorChoose),class(TDFontChoose),class(TDFolderChoose), + class(TDToolBar),class(TDStatusBar),class(TDToolButton), + class(TDTray), + class(TDActionList),class(TDAction), + class(TDQuotations),class(TDtlogincontrol), + + class(TDmessagebox), + class(TDBtn), + class(TDLabel), + class(TDEdit), + class(TDpassword), + class(TDmemo), + class(TDradiobtn), + class(TDCheckBtn), + class(TDcomboBox), + class(TDListBox), + class(TDListView), + class(TDTreeView), + class(TDProgressBar), + class(TDDateTimePicker), + class(TDTimePicker), + class(TDCalendar), + class(TDSpinEdit), + class(TDipaddr), + class(TDColorComboBox), + class(TDColorBox), + ); + o := class(TVclDesigner); + o.RegestorClassItems(its); + ps := array( + class(TGridCellBoolEdit), + class(TGridCellColorEdit), + class(TGridCellDirectoryEdit), + class(TGridCellFileNameEdit), + class(TGridCellNaturalEdit), + class(TGridCellIntegerEdit), + class(TGridCellLazyIntegerEdit), + class(TGridCellStringEdit), + class(TGridCellEventHandleEdit), + class(TGridCellVariableEdit), + class(TGridCellVariableTactionEdit), + class(TGridCellVariableTrayEdit), + class(TGridCellVariabletimagelistEdit), + class(TGridCellVariabletmainmenuEdit), + class(TGridCellVariabletpopupmenuEdit), + class(TGridCellImagesEdit), + class(TGridCellBitmapEdit), + class(TGridCellIconEdit), + class(TGridCellFontEdit), + class(TGridCellhotkeyEdit), + class(TGridCellSysCursorEidt), + class(TGridCellStatusItemsEdit), + class(TGridCellFileFilterEdit), + + class(TGridCellEsAlignEdit), + class(TGridCellTextEdit), + class(TGridCellAlignEdit), + class(TGridCellAnchorsEdit), + class(TGridCellTabAlignEdit), + class(TGridCellStringsEdit), + class(TGridCellIntegersEdit), + class(TGridCellColorBoxEdit), + class(tGridCellMbbtnstyleEdit), + class(tGridCellMbiconstyleEdit), + + class(tGridCellDayOfWeekBoxEdit), + class(TGridCellPairIntEdit), + class(TGridCellPairSpliterTypeEdit), + class(tGridCellAlignPosBoxEdit), + class(TGridCellTreeViewDataEdit) + ); + registerproperties(ps); + //////////////////////////////////////////////////////////// + //עcomponet + vclini := pluginpath()+"tslvcldesigner.ini"; + if fileexists("",vclini) then + begin + ini := new TIniFileExta("",vclini); + ini.LowerKey := true; + its := array(); + for i,v in ini.ReadSectionValues("components") do //ؼ + begin + if v then + begin + cv := findclass(v); + if cv then + begin + //RegisterComponentType(i,cv); + its[length(its)] := cv; + end + end + end + o := class(TVclDesigner); + o.RegestorClassItems(its); + its := array(); + for i,v in ini.ReadSectionValues("propertys") do // + begin + if v then + begin + cv := findclass(v); + if cv then + begin + its[length(its)] := cv; + end + end + end + registerproperties(its); + end +end +function registereditpropertytodesigner(cls); +begin +{** + @explan(˵) ע༭ %% + @param(cls)(TDComponent) ƿؼ %% +**} + if ifarray(cls) then return registerproperties(cls); + return registerproperties(array(cls)); +end +function registercomponenttodesigner(cls); +begin +{** + @explan(˵) עؼ %% + @param(cls)(TDComponent) ƿؼ %% +**} + if ifarray(cls) then return class(TVclDesigner).RegestorClassItems(cls); + return class(TVclDesigner).RegestorClassItems(array(cls)); +end ////5108321 function initlib(); begin @@ -10771,11 +9362,6 @@ begin **} a := static staticInit(); end -function HtmlHelpA(hwndCaller : pointer; - pszFile:string ; - uCommand:integer; - dwData:pointer ):pointer;stdcall;external "HHCTRL.OCX" name "HtmlHelpA"; -function GetDesktopWindow():pointer;stdcall;external "User32.dll" name "GetDesktopWindow"; initialization initlib(); -end. \ No newline at end of file +end. diff --git a/designer/udesignerproject.tsf b/designer/udesignerproject.tsf index 67d9530..fd23ba9 100644 --- a/designer/udesignerproject.tsf +++ b/designer/udesignerproject.tsf @@ -1,6 +1,10 @@ Unit UDesignerProject; interface -uses utslvclauxiliary,tslvcl,utslmemo,UTslSynMemo,UVCPropertyTypesPersistence,tslvclDesigner,UtslCodeEditor; +{** + @param(˵) ع,ʷ,Ŀ¼,༭ %% + @date(20220518) +**} +uses utslvclauxiliary,tslvcl,utslmemo,UTslSynMemo,UVCPropertyTypesPersistence,UtslCodeEditor,utslvclsyntaxparser; function SetWndPostWithMouse(wnd,lft); type TProjectManagerForm = class(TVCForm) //̹ TCustomControl function Create(AOwner);override; @@ -361,7 +365,7 @@ type TProjectView = class(TVCForm) // end //FTslEditer.Parent := AOwner; FTmfParser := new TTmfParser(); - FTslParser := new tslparser(); + FTslParser := new ttslscripparser(); FTreeTool := new TMyToolBar(self); FTreeTool.parent := self; imgs := New TControlImageList(self); @@ -643,21 +647,29 @@ type TProjectView = class(TVCForm) // end function AddAFiled(n); //ӳԱ begin - if ifstring(n)and FCurrentOpend and(FCurrentOpend["type"]in array("form","panel"))then + if ifstring(n)and FCurrentOpend and(FCurrentOpend["type"] in array("form","panel"))then begin FTslEditer.Addfiled(FOpendFormTSFfilename,n); end end + function adduses(lbs); //ӳԱ + begin + if (lbs) and FCurrentOpend and(FCurrentOpend["type"] in array("form","panel"))then + begin + FTslEditer.adduses(FOpendFormTSFfilename,lbs); + end + end + function DeleteAFiled(n,nn); //ɾԱ begin - if ifstring(n)and FCurrentOpend and(FCurrentOpend["type"]in array("form","panel"))then + if ifstring(n) and FCurrentOpend and (FCurrentOpend["type"]in array("form","panel"))then begin FTslEditer.Delfiled(FOpendFormTSFfilename,n,nn); end end function AddAFunction(ff); //Ӻ begin - if ifarray(ff)and ifstring(ff["name"])and FCurrentOpend and(FCurrentOpend["type"] in array("form","panel"))then + if ifarray(ff) and ifstring(ff["name"])and FCurrentOpend and(FCurrentOpend["type"] in array("form","panel"))then begin s := createtslfunction(ff); r := FTslEditer.AddFunction(FOpendFormTSFfilename,ff["name"],s); @@ -665,7 +677,7 @@ type TProjectView = class(TVCForm) // return r; end end - function GoToAFunction(n); + function GoToAFunction(n); //ת begin r := FTslEditer.GoToFunction(FOpendFormTSFfilename,n); ShowEditor(); @@ -1241,7 +1253,7 @@ type TProjectView = class(TVCForm) // //FTslEditer.CloseEditor(); FDesigner.caption := "TVCL "+FprojName; FDesigner.UnLoadTreeNode(); - class(TDComponent).TemporaryNotName := array(); + //class(TDComponent).TemporaryNotName := array(); FCurrentOpend := nil; FOpendFormTSFfilename := nil; FOpendScriptFileName := nil; @@ -1577,6 +1589,14 @@ BD141CA912494F502D48D224F45050274A21E03806FF2C7CA7516022D7D000000 it.AddFiled(n); end end + function Adduses(fn,lbs); + begin + it := OpenAndGotoFileByName(fn); + if it then + begin + it.adduses(lbs); + end + end function Delfiled(n,fld,nn);//ɾԱ begin it := OpenAndGotoFileByName(n); @@ -1605,718 +1625,6 @@ BD141CA912494F502D48D224F45050274A21E03806FF2C7CA7516022D7D000000 end end -type tsltoken = class(tslparserbase) -{** - @explan(˵) tslԷִ %% -**} - private - FTSLstr; - FTokens; - function SetTslStr(v); - begin - if v <> FTSLstr then - begin - FTSLstr := v; - FTokens := nil; - end - end - public - function create(); - begin - inherited; - end - function tokens(); - begin - if FTokens then return FTokens; - if not ifstring(FTSLstr)then return array(); - str := binary(FTSLstr); - pos :=-1; - len := length(str); - FTokens := array(); - nk := 0; - vs := ""; - hh := 0; - while true do - begin - pos++; - if pos >= len then break; - v := str[pos]; - if v="%" then - begin - kk := 1; - v1 := str[pos+kk]; - if v1="%" then - begin - pls := "%%"; - while true do - begin - kk++; - if pos+kk >= len then break; - if str[pos+kk]in array(" ","\t","\r","\n")then - begin - if str[pos+kk]="\n" then hh++; - break; - end else - pls += str[pos+kk]; - end - pos += kk; - if length(vs)then setdata(FTokens,nk,vs,"",pos,hh); - vs := findstringv2(str,pls,len,pos,hh); - //vs := findstringv(str,pls,len,pos,nil,hh); //str,f,len,pos,zy,hh - setdata(FTokens,nk,vs,"ַ",pos,hh); - vf := 0; - continue; - end - end - if v='"' then - begin - if length(vs)then setdata(FTokens,nk,vs,"",pos,hh); - vs := findstringv(str,'"',len,pos,1,hh); - setdata(FTokens,nk,vs,"ַ",pos,hh); - vf := 0; - end else - if v="'" then - begin - if length(vs)then setdata(FTokens,nk,vs,"",pos,hh); - vs := findstringv(str,"'",len,pos,1,hh); - setdata(FTokens,nk,vs,"ַ",pos,hh); - vf := 0; - end else - if v='{' then - begin - if length(vs)then setdata(FTokens,nk,vs,"",pos,hh); - vs := findstringv(str,'}',len,pos,nil,hh); - lvs := length(vs); - flvs := true; - if lvs>5 then - begin - if vs[1:2]="**" and(vs[3]in array(" ","\t","\r","\n"))and vs[lvs-1:lvs]="**" and(vs[lvs-2]in array(" ","\t","\r","\n"))then - begin - flvs := false; - vv := trim(vs[3:lvs-2]); - if vs[3]="\n" then hh++; - setdata(FTokens,nk,vv,"˵",pos,hh); - if vs[lvs-2]="\n" then hh++; - vs := ""; - end - end - if flvs then setdata(FTokens,nk,vs,"˵0",pos,hh); - vf := 0; - end else - if v="#" then - begin - pos++; - vi := str[pos]; - if vi="!" then - begin - if length(vs)then setdata(FTokens,nk,vs,"",pos,hh); - vs := findstringv(str,'\n',len,pos,nil,hh); - setdata(FTokens,nk,vs,"˵2",pos,hh); - vf := 0; - end else - begin - pos--; - if length(vs)then setdata(FTokens,nk,vs,"",pos,hh); - setdata(FTokens,nk,v,"ָ",pos,hh); - vf := 0; - end - end else - if v="/" then - begin - pos++; - vi := str[pos]; - if vi="/" then - begin - if length(vs)then setdata(FTokens,nk,vs,"",pos,hh); - vs := findstringv(str,'\n',len,pos,nil,hh); - setdata(FTokens,nk,vs,"˵2",pos,hh); - vf := 0; - end else - begin - vs += v; - pos--; - end - end else - if v='(' then - begin - pos++; - vi := str[pos]; - if vi="*" then - begin - if length(vs)then setdata(FTokens,nk,vs,"",pos,hh); - pos++; - while pos <= len do - begin - vi := str[pos]; - if vi="\n" then hh++; - if pos3 then - begin - if vs[1]="*" and(vs[2]in array(" ","\t","\r","\n"))and vs[lvs]="*" and(vs[lvs-1]in array(" ","\t","\r","\n"))then - begin - flvs := false; - vv := trim(vs[2:lvs-1]); - if vs[2]="\n" then hh++; - setdata(FTokens,nk,vv,"˵",pos,hh); - if vs[lvs-1]="\n" then hh++; - vs := ""; - end - end - if flvs then setdata(FTokens,nk,vs,"˵1",pos,hh); - //********************************************************* - vf := 0; - end else - begin - if length(vs)then setdata(FTokens,nk,vs,"",pos-1,hh); - setdata(FTokens,nk,v,"ǰ",pos,hh); - pos--; - continue; - end - end else - if v=")" then - begin - if length(vs)then setdata(FTokens,nk,vs,"",pos,hh); - setdata(FTokens,nk,v,"",pos,hh); - end else - if v="\t" then - begin - if length(vs)then setdata(FTokens,nk,vs,"",pos,hh); - if vf then continue; - vf := 1; - setdata(FTokens,nk,v,"ո",pos,hh); - end else - if v=" " then - begin - if length(vs)then setdata(FTokens,nk,vs,"",pos,hh); - if vf then continue; - vf := 1; - setdata(FTokens,nk,v,"ո",pos,hh); - end else - if v='\n' then - begin - if length(vs)then setdata(FTokens,nk,vs,"",pos,hh); - hh++; - if vf then continue; - vf := 1; - setdata(FTokens,nk,v,"",pos,hh); - end else - if v='\r' then - begin - if length(vs)then setdata(FTokens,nk,vs,"",pos,hh); - if vf then continue; - vf := 1; - setdata(FTokens,nk,v,"س",pos,hh); - end else - if v in array(",",";",".","]","[",":","=","!")then - begin - if length(vs)then setdata(FTokens,nk,vs,"",pos,hh); - setdata(FTokens,nk,v,"ָ",pos,hh); - end else - begin - vs += v; - end - end - if length(vs)then setdata(FTokens,nk,vs,"",pos,hh); - return FTokens; - end - property tslstr read FTSLstr write SetTSLstr; -end -type tslparser = class(tslparserbase) -{** - @explan(˵) tsl %% -**} - private - FTokener; - FTokens; - FCurrentPos; - FTokenLen; - FScriptPath; - function SetScriptPath(v); - begin - size := filesize("",v); //ȡļС - readFile(rwraw(),"",v,0,size,data); - SetScript(data); - end - function SetScript(v); - begin - if FTokener.tslstr <> v then - begin - FTokener.tslstr := v; - FTokens := FTokener.tokens(); - if FTokens then FTokenLen := length(FTokens)-1; - FTokenLen :=-1; - end - end - function tkopok(); - begin - return FCurrentPos>0 and FCurrentPos= 0 then FCurrentPos -= n; - else FCurrentPos--; - end - function btoken(tk,tp,pos,n); - begin - bpos(n); - r := ctoken(tk,tp,pos); - return r; - end - function GetScript(); - begin - return FTokener.tslstr; - end - public - function create(); - begin - inherited; - FTokener := new tsltoken(); - end - //type beg end name - function GetClassAbstract(); - begin - {** - @explan(˵) class ĻϢ %% - @return(array) "name","inherited","uses" Ϣ %% - **} - if not Tokens then array(); - FCurrentPos := 0; - while true do - begin - ctoken(tk,tp,pos); - if ifnil(tk)then return array(); - if tk="type" and tp <> TT_STR then - begin - r := array(); - ctoken(tk,tp,pos); - if tp=TT_IDE then - begin - r["name"]:= tk; - ctoken(tk,tp,pos); - if tk <> "=" then return 0; - ctoken(tk,tp,pos); - if tk <> "class" then return 0; - ctoken(tk,tp,pos); - inh := array(); - if tk="(" then - begin - while true do - begin - ctoken(tk,tp,pos); - if ifnil(tk)then break; - if tk=")" then break; - if tk="," then continue; - else inh[length(inh)]:= tk; - end - r["inherited"]:= inh; - end - while true do - begin - ctoken(tk,tp,pos); - if ifnil(tk)then break; - if tk="uses" and tp <> TT_STR then - begin - ru := array(); - while true do - begin - ctoken(tk,tp,pos); - if ifnil(tk)then break; - if tk="," then continue; - if tk=";" then break; - ru[length(ru)]:= tk; - end - r["uses"]:= ru; - break; - end - end - return r; - end - end else - return array(); - end - end - function GetClassInfo(fi); - begin - {** - @explan(˵) classϸϢ %% - @param(fi)(bool) ǷclassԱλϢ %% - **} - r := array(); - if not Tokens then return r; - FCurrentPos := 0; - while true do - begin - ctoken(tk,tp,pos); - if ifnil(tk)then exit; - if tk="type" and tp <> TT_STR then break; - end - if tk="type" and tp <> TT_STR then - begin - r["beg"]:= pos; - tr := parserclass(fi); - if ifarray(tr)then r union=tr; - r["end"]:= CurrentPos; - return r; - end - return r; - end - function parserclass(fi); - begin - {** - @explan(˵) classϸ %% - @param(fi)(bool) ǷúϢ %% - **} - ctoken(tk,tp,pos); - r := array(); - if tp=TT_IDE then - begin - r["name"]:= tk; - ctoken(tk,tp,pos); - if tk <> "=" then raise ""; - ctoken(tk,tp,pos); - if tk <> "class" then raise ""; - ctoken(tk,tp,pos); - if tk="(" then - begin - pa := array(); - while true do - begin - ctoken(tk,tp,pos); - if tk=")" then break; - if tk <> "," then pa[length(pa)]:= tk; - end - r["inherited"]:= pa; - end else - begin - bpos(); - end - props := array(); - funcs := array(); - funcsinfo := array(); - filed := array(); - priv := "public"; - while true do - begin - ctoken(tk,tp,pos,row); - if ifnil(tk)then break; - if tk in array("private","public","protected")then - begin - priv := tk; - continue; - end - if tk="uses" and tp=TT_IDE then - begin - usb := pos; - pu := array(); - while true do - begin - ctoken(tk,tp,pos); - if tp=TT_IDE then - begin - pu[length(pu)]:= tk; - end else - if tk=";" then break; - end - r["uses"]:= array("row":row,"beg":usb,"end":pos,"info":pu); - end else - if tk="static" and tp=TT_IDE then - begin - if not r["filed"]then r["filed"]:= array(); - sf := parserfiled(); - for i := 0 to length(sf)-1 do - begin - sf[i]["static"]:= true; - sf[i]["staticpos"]:= pos; - sf[i]["priv"]:= priv; - end - filed union=sf; - end else - if tk="function" or tk="procedure" then - begin - bpos(); - bfpos := CurrentPos; - lenf := length(funcsinfo); - tfn := parserfunction(); - if priv="public" then funcs[length(funcs)]:= tfn; - if fi then - begin - funcsinfo[lenf]["name"]:= tfn; - funcsinfo[lenf]["startpos"]:= getTokenPos(bfpos); - funcsinfo[lenf]["endpos"]:= getTokenPos(self.CurrentPos)-1; - funcsinfo[lenf]["row"]:= row; - end - end else - if tk="property" then - begin - props[length(props)]:= parserproperty(); - end else - if tk="class" and tp=TT_IDE then - begin - if priv="public" then funcs[length(funcs)]:= parserfunction(); - end else - if tk=";" then continue; - else if tk="end" and tp=TT_IDE then break; - else if tk="type" then - begin - cr := array(); - cr["type"]:= "class"; - cr["beg"]:= pos; - cr["info"]:= parserclass(fi); - cr["end"]:= CurrentPos; - end else - if tk="type" then break; - else - begin - bpos(); - filed union=parserfiled(priv); - end - end - end - r["prop"]:= props; - r["funcs"]:= funcs; - r["filed"]:= filed; - r["funcsinfo"]:= funcsinfo; - prn := array(); - if filed then prn := filed[:,"name"]; - r["members"]:=(prn union2 funcs)union2 props; - return r; - end - function parsertype(); - begin - ctoken(tk,tp,pos); - tarray := ""; - if tk="array" then - begin - tarray := "array "; - ctoken(tk,tp,pos); - if tk=";" then - begin - return tarray; - end else - if tk="of" then - begin - tarray += "of "; - ctoken(tk,tp,pos); - end - end - return tarray+tk; - end - function parserfiled(priv); - begin - rcount := 0; - r := array(); - while true do - begin - ctoken(tk,tp,pos); - if tk=";" then - begin - if rcount then - begin - r[rcount]["last"]:= true; - end - r[rcount]["end"]:= pos; - return r; - end else - if tk="," then - begin - if rcount>0 then - begin - r[rcount]["nextcomma"]:= pos; - end else - r[rcount]["first"]:= true; - rcount++; - r[rcount]["precomma"]:= pos; - end else - if tk=":" then - begin - tpv := parsertype(); - for i := 0 to length(r)-1 do - begin - r[i]["type"]:= tpv; - end - continue; - ctoken(tk,tp,pos); - tarray := ""; - if tk="array" then - begin - tarray := "array "; - ctoken(tk,tp,pos); - if tk=";" then - begin - for i := 0 to length(r) do - begin - r[i]["type"]:= "array"; - end - return r; - end else - if tk="of" then - begin - tarray += "of "; - ctoken(tk,tp,pos); - end - end - end else - begin - r[rcount]["name"]:= tk; - r[rcount]["beg"]:= pos; - r[rcount]["id"]:= rcount; - r[rcount]["priv"]:= priv; - end - end - return r; - end - function parserproperty(); - begin - r := ""; - while true do - begin - ctoken(tk,tp,pos); - if not r then r := tk; - if tk=";" then return r; - end - return r; - end - function parserfunction(); - begin - ctoken(tk,tp,pos); - ctoken(tk,tp,pos); - fn := ""; - if tk <> "(" then fn := tk; - while true do - begin - if tk="begin" then - begin - //return parserstatement(); - parserstatement(); - break; - end else - if tk="(" then - begin - while true do - begin - ctoken(tk,tp,pos); - if tk=")" and tp <> TT_STR then - begin - break; - end - end - parserfunctionplus(); - break; - end else - if tk=":" then - begin - bpos(); - parserfunctionplus(); - break; - end else - if tk="." then - begin - ctoken(tk,tp,pos); - fn := tk; - end else - if tk=";" then - begin - parserfunctionplus(); - break; - end - ctoken(tk,tp,pos); - end - return fn; - end - function parserfunctionplus(); - begin - ctoken(tk,tp,pos); - if ifnil(tk)then return; - if tk=";" then - begin - parserfunctionplus(); - end else - if tk=":" then - begin - parsertype(); - parserfunctionplus(); - end else - if tk="begin" then - begin - return parserstatement(); - end else - if tk="name" then - begin - ctoken(tk,tp,pos); - end else - if tk in array("virtual","cdecl","stdcall","external","override","overload")then - begin - ctoken(tk,tp,pos); - parserfunctionplus(); - end else - begin - bpos(); - end - end - - function parserstatement(); - begin - while true do - begin - ctoken(tk,tp,pos); - if ifnil(tk)then return; - if tk="end" and tp <> TT_STR then - begin - n := 0; - while true do - begin - n++; - ctoken(tk,tp,pos); - if ifnil(tk)then return; - if tk <> ";" then - begin - bpos(n); - return; - end - end - return array(pos+3); - end else - if tp <> TT_STR and(tk in array("begin","select","sselect", - "mselct","vselect","try","case","update"))then - begin - parserstatement(); - end - end - end - property Script read GetScript write SetScript; - property ScriptPath read FScriptPath write SetScriptPath; - property Tokens read FTokens; - property CurrentPos read FCurrentPos write FCurrentPos; -end //************************************ implementation @@ -2357,120 +1665,7 @@ type TDesignerProjectsRecoder = class() // end //**********tsl parser token**************************** -type tslparserbase= class -{** - @explan(˵) tslԽ %% -**} - static TT_IDE; //ʾ - static TT_STR; //ַ - static TT_SYM; //ָ - static TT_OK; - function create(); - begin - if not TT_OK then - begin - TT_IDE := "ʾ"; - TT_STR := "ַ"; - TT_SYM := "ָ"; - TT_OK := true; - end - end - function setdata(ret,nk,vs,tp,idx,hh) // - begin - {** - @explan(˵) - **} - if tp="ո" or tp="س" or tp="" then return; - if tp in array("˵0","˵1","˵2","˵")then - begin - vs := ""; - return; - end - if tp="" then // - begin - vs := lowercase(trim(vs)); - end - //if vs in array("of","array") then tp := "ؼ"; - ret[nk,0]:= vs; - ret[nk,1]:= tp; - if ifnumber(idx)and tp="" then ret[nk,2]:= idx-length(vs); - else if ifnumber(idx)and tp <> "ַ" then ret[nk,2]:= idx; - case tp of - "":ret[nk,1]:= TT_IDE; - "ַ":ret[nk,1]:= TT_STR; - else ret[nk,1]:= TT_SYM; - end; - vs := ""; - ret[nk,3]:= hh; - nk++; - end; - function findstringv2(str,fg,len,pos,hh); - begin - fgl := length(fg); - pfg := 0; - vs := ""; - while pos fg[i2]then break; - pfg := i2; - if pos=len then break; - end - if pfg=fgl then - begin - pos += fgl; - break; - end - vs += vi; - pos++; - end - return vs; - end - function findstringv(str,f,len,pos,zy,hh); - begin - {** - @explan(˵)fβַ - **} - pos++; - vs := ""; - if not(hh >= 0)then hh := 0; - while posFMaxCoder then - begin - deleteItem(FMaxCoder); - end - end - property OnEnterUp read FOnEnterUp write FOnEnterUp; - property MaxCoder read FMaxCoder write FMaxCoder; - private - FMaxCoder; - FOnEnterUp; -end -type TFindWnd=class(TPage) - type TFindBtn=class(TBtn) - function Create(AOwner); - begin - inherited; - left := 425; - width := 160; - height := 25; - end - end - type TFindCheck=class(TCheckBtn) - function Create(AOwner); - begin - inherited; - left := 25; - width := 160; - height := 25; - end - end - function CreateWndInfo(btn,sec); // - begin - r := GetInfo(); - if sec then r["section"]:= sec; - r["btn"]:= btn; - end - function Create(AOwner);override; - begin - inherited; - OnClose := function(o,e) - begin - Parent.EndFind(); - o.visible := false; - e.Skip := true; - end - WsDlgModalFrame := true; - Visible := false; - WsPopUp := true; - WsCaption := true; - WSsYSMenu := true; - //WsSizeBox := true; - caption := ""; - SetBoundsRect(array(300,300,920,680)); - IncPaintLock(); - for i,v in array("","滻","ļ") do - begin - it := CreateApageItem(); - it.Caption := v; - PageItems.Push(it); - end - DecPaintLock(); - lg := 30; - FEdit_Target := new TEditList(self); - FEdit_repace := new TEditList(self); - FEdit_Type := new TEditList(self); - FEdit_dir := new TEditList(self); - FDirChooser := new TFolderChooseADlg(self); - FEdit_dir_btn := new TBtn(self); - flabels := array(); - for i,v in array("Ŀ:"," 滻Ϊ:","ļ:"," Ŀ¼:") do - begin - lb := new TLabel(self); - lb.TextAlign := AL9_CENTERRIGHT; - lb.caption := v; - lb.Top :=(i+1) * lg; - lb.Height := 25; - lb.Left := 20; - lb.Width := 120; - lb.Parent := self; - //lb.border := true; - flabels[i]:= lb; - end - FEdit_Target.left := 140; - FEdit_Target.top := lg; - FEdit_target.parent := self; - FEdit_target.Editer.OnKeyPress := thisfunction(EditerEnter); - FEdit_repace.left := 140; - FEdit_repace.top := lg+lg; - FEdit_repace.parent := self; - FEdit_type.left := 140; - FEdit_type.top := lg+lg+lg; - FEdit_type.Editer.Text := "*.tsf;*.tsl;"; - FEdit_type.parent := self; - FEdit_dir.left := 140; - FEdit_dir.Width := FEdit_dir.Width-20; - FEdit_dir_btn.Caption := ".."; - FEdit_dir_btn.top := lg+lg+lg+lg; - FEdit_dir_btn.Width := 18; - FEdit_dir_btn.left := 140+FEdit_dir.Width+2; - FEdit_dir_btn.height := 24; - FEdit_dir.top := lg+lg+lg+lg; - FEdit_dir.parent := self; - FEdit_dir_btn.OnClick := function(o,e) - begin - if FDirChooser.OpenDlg()then - begin - FEdit_dir.Editer.text := FDirChooser.Folder; - end - end - FBtn_Find := new TFindBtn(self); - FBtn_replace := new TFindBtn(self); - FBtn_Count := new TFindBtn(self); // - FBtn_replaceall := new TFindBtn(self); - FBtn_Find.caption := ""; - FBtn_replace.caption := "滻"; - FBtn_Count.caption := "ȫ"; - FBtn_replaceall.caption := "ȫ滻"; - FBtn_Find.top := lg; - FBtn_Find.parent := self; - FBtn_replace.top := lg+lg; - FBtn_replace.parent := self; - FBtn_replaceall.top := lg+lg+lg; - FBtn_replaceall.parent := self; - FBtn_Find.OnClick := thisfunction(FindBtnClick); - FBtn_replace.OnClick := thisfunction(FindBtnClick); - FBtn_Count.OnClick := thisfunction(FindBtnClick); - FBtn_replaceall.OnClick := thisfunction(FindBtnClick); - FBtn_Count.top := lg+lg+lg+lg; - FBtn_Count.parent := self; - FDirChooser.parent := self; - FCheck_revers := new TFindCheck(self); - FCheck_wrap := new TFindCheck(self); - FCheck_case := new TFindCheck(self); - FCheck_cycle := new TFindCheck(self); - FCheck_reg := new TFindCheck(self); - FCheck_subdir := new TFindCheck(self); - FCheck_gt := new TFindCheck(self); - FCheck_subdir.checked := true; - FCheck_subdir.Left := 425; - FCheck_subdir.top := lg+lg+lg+lg; - FCheck_subdir.Caption := "Ŀ¼"; - FCheck_revers.caption := ""; - FCheck_revers.top := lg * 5; - FCheck_revers.parent := self; - FCheck_wrap.caption := "ȫƥ"; - FCheck_wrap.top := lg * 6; - FCheck_wrap.parent := self; - FEdit_dir_btn.parent := self; - FCheck_case.caption := "ԴСд"; - FCheck_case.Checked := true; - FCheck_case.top := lg * 7; - FCheck_case.parent := self; - FCheck_cycle.caption := "ѭ"; - FCheck_cycle.Checked := true; - FCheck_cycle.top := lg * 8; - FCheck_cycle.parent := self; - FCheck_reg.caption := "ƥ"; - FCheck_reg.Enabled := false; - FCheck_reg.top := lg * 9; - FCheck_reg.parent := self; - FCheck_gt.caption := "\\tתtab"; - FCheck_gt.Checked := false; - FCheck_gt.top := lg * 9; - FCheck_gt.Left := FCheck_reg.width+FCheck_reg.Left+10; - FCheck_gt.parent := self; - FCheck_subdir.parent := self; - FCheck_reg.OnClick := function(o,e) - begin - FCheck_revers.Enabled := not(o.Checked); - FCheck_wrap.Enabled := not(o.Checked); - FCheck_case.Enabled := not(o.Checked); - end - FStatus := new TStatusBar(self); - //FStatus.Align := alNone; - FStatus.Items := array(("text":"","width":700)); - FStatus.Parent := self; - OnSelChanged := thisfunction(DoSelChanged); - ItemIndex := 0; - //SetStatusText(""); - end - function FindBtnClick(o,e); - begin - r := GetInfo(); - r["btn"]:= o.Caption; - Owner.DoFind(r,self); - end - function EditErEnter(o,e); - begin - if e.CharCode=13 then - begin - e.skip := true; - r := GetInfo(); - r["btn"]:= ""; - OWner.DoFind(r,self); - end - end - function GetInfo(); - begin - r := array(); - r["section"]:= CurrentITem.Caption; - s := FEdit_target.Editer.Text; - if FCheck_gt.Checked then - begin - s := Replacestr(s,"\\t","\t"); - end - r["target"]:= s; - s := FEdit_repace.Editer.Text; - if FCheck_gt.Checked then - begin - s := Replacestr(s,"\\t","\t"); - end - r["replace"]:= s; - r["filetype"]:= FEdit_type.Editer.Text; - r["dir"]:= FEdit_dir.Editer.Text; - r["c_revers"]:= FCheck_revers.Checked; - r["c_cycle"]:= FCheck_cycle.Checked; - r["c_wrap"]:= FCheck_wrap.Checked; - r["c_case"]:= FCheck_case.Checked; - r["c_reg"]:= FCheck_reg.Checked; - r["c_dir"]:= FCheck_subdir.Checked; - return r; - end - function SetStatusText(s); - begin - if ifstring(s)then FStatus.SetItemText(s,0); - end - function OpenFind(); - begin - ItemIndex := 0; - end - function OpenReplace(); - begin - ItemIndex := 1; - end - function Show(f);override; - begin - it := Owner.GetCurrentEditer(); - if it then - begin - s1 := it.SelText; - if s1 and length(s1)<20 and not(pos("\n",s1))then - begin - s := s1; - end else - s := it.CaretWords(); - if s then SetFindText(s); - FEdit_target.Editer.SetFocus(); - end - inherited; - end - Function SetFindText(s); //òҵַ - begin - FEdit_target.Editer.Text := s; - FEdit_target.Editer.SetSel(0,length(s)); - end - function SaveCurrentEditer(); //һ - begin - for i,v in array(FEdit_target,FEdit_dir,FEdit_type,FEdit_repace) do - begin - v.PushItem(v.Editer.Text); - end - //if e then e.PushItem(e.Editer.Text); - end - function DoSelChanged(o,e); - begin - if CurrentItem then Caption := CurrentItem.Caption; - case Caption of - "": - begin - for i := 1 to 3 do flabels[i].Visible := false; - FEdit_dir.visible := false; - FEdit_dir_btn.visible := false; - FEdit_type.visible := false; - FEdit_repace.visible := false; - FBtn_replace.visible := false; - FBtn_count.Visible := true; - FBtn_Replaceall.Visible := false; - FCheck_subdir.visible := false; - FCheck_Revers.visible := true; - FCheck_cycle.Visible := true; - end - "滻": - begin - flabels[1].Visible := true; - for i := 2 to 3 do flabels[i].Visible := false; - FEdit_dir.visible := false; - FEdit_dir_btn.visible := false; - FEdit_type.visible := false; - FEdit_repace.visible := true; - FBtn_replace.visible := true; - FBtn_count.Visible := false; - FBtn_Replaceall.Visible := true; - FCheck_subdir.visible := false; - FCheck_Revers.visible := false; - FCheck_cycle.Visible := true; - end - "ļ": - begin - for i := 1 to 3 do flabels[i].Visible := true; - FEdit_dir.visible := true; - FEdit_dir_btn.Visible := true; - FEdit_type.visible := true; - FEdit_repace.visible := true; - FBtn_replace.visible := false; - FBtn_count.Visible := false; - FBtn_Replaceall.Visible := true; - FCheck_subdir.visible := true; - FCheck_Revers.visible := false; - FCheck_cycle.Visible := false; - end - end - end - function DoControlAlign();override; - begin - inherited; - if not FStatus then return; - rc := ClientRect; - rc[1]:= rc[3]-30; - FStatus.SetBoundsRect(rc); - end - function recycling();override; - begin - inherited; - FStatus := nil; - end - function GetHistory(); - begin - r := array(); - r["finds"]:= FEdit_Target.Items; - r["repalces"]:= FEdit_repace.Items; - r["dirs"]:= FEdit_dir.items; - r["findfiletyps"] := FEdit_Type.items; - return r; - end - function SetHistory(d); - begin - if not ifarray(d)then return; - fds := d["finds"]; - if ifarray(fds)then - begin - FEdit_Target.Items := fds; - end - rps := d["repalces"]; - if ifarray(rps)then - begin - FEdit_repace.Items := rps; - end - dirs := d["dirs"]; - if ifarray(dirs)then - begin - FEdit_dir.items := dirs; - end - dirs := d["findfiletyps"]; - if ifarray(dirs)then - begin - FEdit_Type.items := dirs; - end - end - private - FStatus; - FDirChooser; - // - FEdit_Target; - FEdit_repace; - FEdit_type; - FEdit_dir; - FEdit_dir_btn; - FBtn_Find; - FBtn_replace; - FBtn_Replaceall; - FBtn_Count; // - flabels; - FCheck_revers; - FCheck_wrap; - FCheck_case; - FCheck_cycle; - FCheck_reg; - FCheck_subdir; - FCheck_gt; -end -type TListPages=class(TListBox) - function Create(AOwner);override; - begin - inherited; - Visible := false; - WsPopUp := true; - end - function PaintIdx(idx,rc_,cvs);override; - begin - {** - @explan(˵) %% - @param(item)(TCustomListItem) %% - @param(rc)(array) %% - @param(cvs)(tcanvas) %% - **} - inherited; - if idx=getCurrentSelection()then - begin - rc := rc_; - rc[2:3]-= 1; - cvs.pen.Color := rgb(30,144,255); - cvs.draw("Polyline",array(rc[0:1],(rc[2],rc[1]),(rc[2],rc[3]),(rc[0],rc[3]),rc[0:1])); - end - end - function MouseUp(o,e);override; - begin - inherited; - visible := false; - end - function SetData(d);override; - begin - if not ifarray(d)then return; - height := ItemHeight * (1+min(15,length(d))); - x := 10; - for i,v in d do - begin - x := max(x,length(v)); - end - width := font.Width * (x+3); - inherited; - end - function InsureItemVisible(idx); //ƶǰĸ - begin - rc := GetIdxRect(idx); - c := ClientRect; - if rc[1]c[3]then - begin - SetYpos(1+GetYPos()+(rc[3]-c[3]+1)/GetYScrollDelta()); - end - end - function GetSelFileName; - begin - r := GetItem(getCurrentSelection()); - if pos("*",r)then - begin - return r[2:]; - end - return r; - end - function IncIndex(f); - begin - if ifnil(f)then f :=-1; - idx := getCurrentSelection(); - ct := ItemCount; - nidx := idx-f; - if idx=ct-1 then nidx := 0; - else if idx=-1 then nidx := 1; - SetCurrentSelection(nidx); - InsureItemVisible(nidx); - end -end -type tagCOMPOSITIONFORM=class(tslcstructureobj) - private - static SSTRUCT; - class function getstruct() - begin - if not SSTRUCT then SSTRUCT := MemoryAlignmentCalculate(array( - ("dwstyle","int",4), - ("ptcurrentpos","intptr",0), - ("rcarea","int[4]",array(0,0,0,0))),nil,nil,1); - return SSTRUCT; - end - public - function create() - begin - inherited create(getstruct(),ptr); - FPonter := new TCPoint(); - _setvalue_("ptcurrentpos",FPonter._getptr_()); - end - property dwstyle index "dwstyle" read _getvalue_ write _setvalue_; - property ptcurrentpos read FPonter; - property rcarea index "rcarea" read _getvalue_ write _setvalue_; - private - FPonter; -end -type TFTSLScriptMemo=class(TSYNmemoNorm) - function Create(AOwner);override; - begin - inherited; - WsDlgModalFrame := true; - FChangedFlag := false; - FChangedLock := false; - Lineinterval := 3; - FCOMPOSITIONFORM := new tagCOMPOSITIONFORM(nil); - font := array("height":18,"width":9,"escapement":0,"orientation":0,"weight":400,"italic":0,"underline":0,"strikeout":0, - "charset":0,"outprecision":0,"clipprecision":0,"quality":1,"pitchandfamily":1,"facename":"Courier New","color":0); - //134 - //font := array("facename":"Courier New"); - end - function DoCaretPosChanged();override; - begin - if HandleAllocated()then calldatafunction(FOnCaretChanged,self(true),new tuieventbase(0,0,0,0)); - //echo tostn(self.CaretXY); - end - function WMIMESTARTCOMPOSITION(o,e):WM_IME_STARTCOMPOSITION;virtual; - begin - ime := ImmGetContext(self.Handle); - FCOMPOSITIONFORM.ptcurrentpos.cx := 200; - FCOMPOSITIONFORM.ptcurrentpos.cy := 200; - ImmSetCompositionWindow(ime,FCOMPOSITIONFORM._getptr_()); - ImmReleaseContext(self.Handle,ime); - end - {$ifdef linux} - function ImmReleaseContext(); - begin - end; - function ImmGetContext(); - begin - end; - function ImmSetCompositionWindow(); - begin - end; - function ImmSetStatusWindowPos(); - begin - end; - {$else} - function ImmReleaseContext(h:pointer;ime:pointer):integer;stdcall;external "Imm32.dll" name "ImmReleaseContext"; - function ImmGetContext(h:pointer):pointer;stdcall;external "Imm32.dll" name "ImmGetContext"; - function ImmSetCompositionWindow(h:pointer;s:pointer):integer;stdcall;external "Imm32.dll" name "ImmSetCompositionWindow"; - function ImmSetStatusWindowPos(h:pointer;s:pointer):integer;stdcall;external "Imm32.dll" name "ImmSetStatusWindowPos"; - {$endif} - function InvalidateLines(FirstLine,LastLine:integer);override; - begin - //return inherited; - if not HandleAllocated()then return; - if HighLighter is class(TTslSynHighLighter)then - begin - fy :=(FirstLine-TopLine) * TextHeight; - r := ClientRect; - if fyr[3]then return; - r[0]:= GutterWidth; - r[1]:= max(0,fy); - InvalidateRect(r,false); - end else - return inherited; - end - function MouseUp(o,e);override; - begin - inherited; - end - function InsertChars(s);override; - begin - if(s="\r\n")then - begin - y := CaretY; - x := CaretX; - sl := Lines.GetStringByIndex(y-1); - if ifstring(sl)and sl then - begin - ins := ""; - for i := 1 to x-1 do - begin - si := sl[i]; - if si="\t" or si=" " then - begin - ins += si; - end else - break; - end - if ins then - begin - return inherited InsertChars(s+ins); - end - end - end - return inherited; - end - function KeyUp(o,e);override; - begin - e.Result := 1; - if Calldatafunction(FQuckKeys,self,e)then return; - inherited; - end - function ContextMenu(o,e);override; - begin - inherited; - e.skip := true; - end - function SwitchMarkLine(L); //˴ϵ - begin - if not(L >= 0)then - begin - L := self.CaretY-1; - end - it := Lines[L]; - if it then - begin - it.FMarked := not(it.FMarked); - r := ClientRect; - r[2]:= GutterWidth()-1; - InValidateRect(r,false); - if _Tag then _Tag.markline(L,it.FMarked); - end - end - function KeyDown(o,e);override; - begin - e.Result := 0; - qc := Calldatafunction(FQuckKeys,self,e); - if qc then return; - if e.CharCode=VK_F5 then - begin - L := self.CaretY-1; - SwitchMarkLine(L); - return; - end - if e.CharCode=VK_F2 and(ssCtrl in e.shiftState())then - begin - L := self.CaretY-1; - SwitchMarkLine(L); - return; - end - if not(ssCtrl in e.shiftstate())and not(ssShift in e.shiftstate())then - begin - if e.CharCode=VK_F2 then - begin - y := CaretY-1; - len := Lines.length(); - for i := y+1 to len+y-1 do - begin - idx :=(i+len)mod len; - it := Lines[idx]; - if it and it.FMarked then - begin - return ExecuteCommand(ecGotoXY,array(idx+1,1)); - end - end - return; - end - end - inherited; - end - function WMSYSKEYUP(o,e):WM_SYSKEYUP;override; - begin - e.Result := 1; - if CallDatafunction(FQuckKeys,self,e)then return; - inherited; - end - Function WMSYSKEYDOWN(o,e):WM_SYSKEYDOWN;override; - begin - e.Result := 0; - if CallDatafunction(FQuckKeys,self,e)then return; - inherited; - end - function WMSETFOCUS(o,e):WM_SETFOCUS;override; - begin - inherited; - CallDataFunction(FOnTextSetFocus,self(true),e); - end - function DoTextChanged(p);override; - begin - n := Lines.Length(); - ccnt := GutterCharCnt; - nccnt := max(integer(n~10)+3,4); - if ccnt <> nccnt then - begin - GutterCharCnt := nccnt; - end - inherited; - SetChangeFlag(true); - end - function Recycling();override; - begin - FQuckKeys := nil; - FOnTextChanged := nil; - FOnTextSetFocus := nil; - FPageItem := nil; - FOnCaretChanged := nil; - inherited; - end - published - property OnCaretChanged read FOnCaretChanged write FOnCaretChanged; - property PageItem read FPageItem write FPageItem; - property OnTextChanged read FOnTextChanged write FOnTextChanged; //ıı - property QuckKeys read FQuckKeys write FQuckKeys; //ݼ - property ChangedFlag read FChangedFlag write SetChangeFlag; - property ChangedLock read FChangedLock write FChangedLock; - property OnTextSetFocus read FOnTextSetFocus write FOnTextSetFocus; - private - function SetChangeFlag(v); - begin - nv := v?true:false; - if nv <> FChangedFlag then - begin - FChangedFlag := nv; - if FChangedLock then return; - calldatafunction(OnTextChanged,self(true),nv); - end - end - FPageItem; - FChangedLock; - FChangedFlag; - FOnTextChanged; - FOnTextSetFocus; - FQuckKeys; - FCOMPOSITIONFORM; - FOnCaretChanged; -end + end +end type TPageEditerItem=class(TPageItem) FPageOrderId; //еʹ FEditer; //༭ @@ -1897,7 +1150,7 @@ type TPageEditerItem=class(TPageItem) nt := str2array(nfld,":"); nfld := nt[0]; nfldt := nt[1]; - d := GetClassInfo(); + d := GetClassInfo(); if not(d and ifarray(d))then return 0; for i,v in d["filed"] do begin @@ -1914,6 +1167,45 @@ type TPageEditerItem=class(TPageItem) end end end + function adduses(libs);//uses + begin + if not FTslParser then return 0; + if not(libs and ifarray(libs))then return; + d := GetClassInfo(); + if not(d and ifarray(d))then return 0; + usd := d["uses"]; + if usd then //uses + begin + adu := lowercase(libs) minus (usd["info"]) ; + if adu then + begin + adus := array2str(adu,","); + if adus then + begin + usd["beg"]+=5; + adus +=","; + rec := GetInfoRowCol2(usd); + p := rec[0]; + if ifarray(p) then + begin + FEditer.ExecuteCommand(FEditer.ecGotoXY,rec[0]); + FEditer.ExecuteCommand(FEditer.ecString,adus); + end + end + end + end { else + begin + adus := array2str(lowercase(libs),","); + ups := d["inheritedendpos"]; + if adus and ups>0 then + begin + ups +=1; + adus+=";"; + //uses + end + + end } + end function GetCreateFunctionRec(d); //ò뺯Ϊλ begin fi := d["funcsinfo"]; @@ -2040,54 +1332,6 @@ type TPageEditerItem=class(TPageItem) if cp then cp.PrePareCompletion(t); RepreComple := false; end - function IsTextUTF8(str) - begin - {utf8 - ֽ: 0xxxxxxx - ֽ 110xxxxx 10xxxxxx - ֽ 1110xxxx 10xxxxxx 10xxxxxx - ֽ 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx - ֽ 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx - ֽ 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx - } - // 0 Ϊansi ,1 Ϊutf8 -1 ȷʲô - nBytes := 0; //UFT81-6ֽڱ,ASCIIһֽ - DY := 0; - chr := ""; - bAllAscii := TRUE; //ȫASCII, ˵UTF-8 - for i := 1 to length(str) do - begin - chr := ord(str[i]); - if((chr .& 0x80)<> 0)then - begin // жǷASCII,,˵пUTF-8,ASCII7λ,һֽڴ,λΪ0,o0xxxxxxx - bAllAscii := FALSE; - end - if(nBytes=0)then //ASCII,ӦǶֽڷ,ֽ - begin - if(chr >= 0x80)then - begin - if(chr >= 0xFC and chr <= 0xFD)then nBytes := 6; - else if(chr >= 0xF8)then nBytes := 5; - else if(chr >= 0xF0)then nBytes := 4; - else if(chr >= 0xE0)then nBytes := 3; - else if(chr >= 0xC0)then nBytes := 2; - else return 0; - DY := MAX(nBytes,DY); - nBytes--; - end - end else //ֽڷķֽ,ӦΪ 10xxxxxx - begin - if((chr .& 0xC0)<> 0x80)then return-1; - nBytes--; - end - end; - if(nBytes>0)then //Υ - return-1; - if(bAllAscii)then //ȫASCII, ˵UTF-8 - return 0; - //return 1; - return DY>2; - end function ToUnicode_big(); begin if FEnCode="UCS2-big" then return; @@ -2207,7 +1451,7 @@ type TPageEditerItem=class(TPageItem) if lcs1 in array("tdcreateform","tdcreatepanel")then begin try - if not FTslParser then FTslParser := new unit(UDesignerProject).tslparser(); #! end + if not FTslParser then FTslParser := new ttslscripparser(); #! end except end; return; // @@ -2376,1921 +1620,11 @@ type TTslChmHelp=class FHanle; FChmName; end -type TEditerEchoWnd=class(TSynMemoNorm) // - function Create(AOwner);override; - begin - inherited; - FDoLockTime := 0; - FIsLocked := false; - height := 250; - ReadOnly := true; - WsSizeBox := true; - WsSysMenu := true; - OnClose := function(o,e) - begin - o.visible := false; - e.skip := true; - end - m := new TPopUpMenu(self); - m1 := new TMenu(self); - m1.Caption := ""; - m1.parent := m; - {m2 := new TMenu(self); - m2.Caption := "ѡַ"; - m2.Checked := false; - m2.OnClick := function(o,e)begin - o.Checked := not(o.Checked); - self.HighLighter := (o.Checked) ?F_Highlighter :false; - end - m2.Parent := m;} - PopUpMenu := m; - m1.OnClick := function(o,e) - begin - ClearAll(); - AppendString("ctrl+z ֹͣ;ctrl+c ѡ\r\n"); - end; - FProcess := new TCreateProcessA(); - FProcess.BufSize := 1024 * 5; - FProcess.OnEcho := thisfunction(TEchoToString); - AppendString("ctrl+z ֹͣ;ctrl+c ѡ\r\n"); - F_Highlighter := new TSynHighLighter(self); - //Highlighter := new TSynHighLighter(self); - end - function TEchoToString(o,s); - begin - //t := now(); - {if (t-FDoLockTime)>(0.3E-5) then - begin - FDoLockTime := t; - if FIsLocked then - begin - FIsLocked := false; - DecPaintLock(); - end else - begin - FIsLocked := true; - IncPaintLock(); - end - end } - AppendString(s); - //Visible := true; - return true; - end - function Exec(exe,cmd,h); - begin - //AppendString(format('"%s" %s\r\n',exe,cmd)); - self.HighLighter := nil; - AppendString(format('%s %s\r\n',exe,cmd)); - //EndExe(); - r := FProcess.CreateProcessWaitRead(exe,cmd,h); - AppendString(format("\r\nִн:endcode:%d\r\n",r)); - {if FIsLocked then - begin - FIsLocked := false; - DecPaintLock(); - end } - self.HighLighter := F_Highlighter; - h := 0; - return r; - end - function Exeing(); - begin - return FProcess.LastExeHandle; - end - function EndExe(); - begin - if FProcess.LastExeHandle then - begin - r := 1; - SysTerminate(r,FProcess.LastExeHandle); - end - end - function KeyDown(o,e);override; - begin - if ssCtrl in e.shiftstate then - begin - case e.charcode of - ord("Z"): - begin - EndExe(); - return; - end - ord("C"): - begin - ExecuteCommand(ecCopy); - return; - end - end - end - inherited; - end - function AppendString(s); - begin - if not(ifstring(s)and s)then return; - ct := Lines.Length(); - if ct>0 then - begin - ExecuteCommand(ecGoToXY,array(ct,1)); - ExecuteCommand(ecLineEnd); - ExecuteCommand(ecString,s); - end - end - FExeHandle; - FProcess; - FIsLocked; - FDoLockTime; - F_Highlighter; -end -type TTslDebug=class(TCustomControl) - private //Ա - FRuningfile; //ִнűļ - FRuningItem; //ִеpageitem - FCurrentgotoitem; //ǰеpageitem - FDebughandle; //Եľ - FDebugExe; //Թܵexe - FConnectchannel; //Ե ͨ - FDebugaddr; //ַ - FDebugport; //ԵĶ˿ - FDebugUsr; //û - FDebugPwd; // - FDebugtsfs; //ǰ̶Ӧtsfļ - FBtns; - FAttchedid; - FDebugtype; - fdbgselwnd; - FRemoteWait; //Զ̵Եȴ - FValewnd; - FCmdHistory; - FCmdHistoryid; - FCmdHistorycount; - //////////////////// - Fdbgssybs; - Fdbgsybs; - Fdbgstack; - fdefaultdbger; //༭ĵ - type tdbgwnd=class(TPanel) - uses tslvcl; - function Create(AOwner); - begin - inherited; - WsDlgModalFrame := false; - p1 := new TPairSplitter(self); - p1.Position := 310; - p2 := new TPairSplitter(self); - p2.Position := 310; - sd1 := new TPairSplitterSide(self); - sd2 := new TPairSplitterSide(self); - sd3 := new TPairSplitterSide(self); - sd3 := new TPairSplitterSide(self); - sd4 := new TPairSplitterSide(self); - p1.Align := alClient; - sd1.WsDlgModalFrame := false; - sd2.WsDlgModalFrame := false; - sd3.WsDlgModalFrame := false; - sd4.WsDlgModalFrame := false; - p1.WsDlgModalFrame := false; - p2.WsDlgModalFrame := false; - p1.parent := self; - sd1.parent := p1; - sd1.Border := false; - sd2.parent := p1; - p2.Align := alClient; - p2.parent := sd2; - sd3.parent := p2; - sd4.parent := p2; - sd4.Border := false; - fside1 := sd1; - fside2 := sd3; - fside3 := sd4; - end - function addwnds(stk,vlist,cmd,cmdshow); - begin - stk.Align := alClient; - stk.parent := fside1; - vlist.Align := alClient; - vlist.parent := fside2; - cmd.Align := alBottom; - cmd.parent := fside3; - cmdshow.Align := alClient; - cmdshow.parent := fside3; - end - function Recycling();override; - begin - inherited; - fside1 := nil; - fside2 := nil; - fside3 := nil; - end - fside1; - fside2; - fside3; - end - function cmdkeyup(o,e); - begin - case e.charcode of - VK_UP: - begin - //return ; - if FCmdHistoryid <= 0 then return o.text := ""; - FCmdHistoryid--; - txt := FCmdHistory[FCmdHistoryid]; - if ifstring(txt)and txt then o.text := txt; - end - VK_DOWN: - begin - if FCmdHistoryid >= Length(FCmdHistory)then return o.text := ""; - FCmdHistoryid++; - txt := FCmdHistory[FCmdHistoryid]; - if ifstring(txt)and txt then o.text := txt; - end - 13: - begin - //return ExecuteCommand("docmd"); - txt := trim(o.Text); - if txt then - begin - if length(FCmdHistory)>FCmdHistorycount then - begin - for i := 0 to FCmdHistorycount-1 do - begin - FCmdHistory[i]:= FCmdHistory[i+1]; - end - end - FCmdHistory[length(FCmdHistory)]:= txt; - FCmdHistoryid := length(FCmdHistory); - ExecuteCommand("docmd"); - end - e.skip := true; - end - end - end - function getvalewnd(cp); - begin - if not FValewnd then - begin - FValewnd := new TTSLDataGrid(self); - FValewnd.Visible := false; - FValewnd.Caption := "Value"; - FValewnd.left := owner.left+100; - FValewnd.Width := 600; - FValewnd.Height := 500; - FValewnd.WSpOPUp := true; - FValewnd.WSsYSMenu := true; - FValewnd.WsSizeBox := true; - FValewnd.Parent := self; - FValewnd.OnClose := function(o,e) - begin - o.Visible := false; - o.TSLdata := array(); - end - end - if ifstring(cp)then FValewnd.Caption := cp; - return FValewnd; - end - function deletefuncacheini(); - begin - plg := pluginpath(); - {$ifdef linux} - sp := "/"; - {$else} - sp := "\\"; - {$endif} - for i := length(plg)-1 downto 1 do - begin - if plg[i]=sp then - begin - fn := plg[1:i]+"FunCache.ini"; - r := filedelete("",fn); - return r; - end - end - end - public - function addbtns(btns); //Ӳ˵ - begin - FBtns := btns; - for i,v in Fbtns do - begin - v.onClick := thisfunction(Dbgtooldo); - if v.Caption="/ɾϵF5" then continue; - v.Visible := false; - end - end - function DbgNextLine(); //һ - begin - ExecuteCommand("dbgstepover"); - end - function serwnd_cclk(o,e); //ȡ - begin - FRemoteWait := false; - cancelremotedbg(o,e,"ȡ"); - return; - end - function serwnd_oclk(o,e); //ԶӰť - begin - d := fdbgselwnd.GetData(); - addr := d["addr"]; - port := d["port"]; - if not(addr and port)then return MessageboxA("Զ̷Ϣȫ","ʾ",0,self.Handle); - port := StrToIntDef(port,443); - usr := d["usr"]; - pwd := d["pwd"]; - //ж - if checkconnected()then - begin - disconnectserver(); - end - if FDebugtype="remotewait" then //Զ̵ȴ - begin - FDebugaddr := addr; - FDebugport := port; - FDebugUsr := usr; - FDebugPwd := pwd; - FRemoteWait := true; - fdbgselwnd.Visible := false; - return _send_(WM_USER,0,0,1); - end - if 0 <> connectserver(addr,port)then return MessageboxA("Զ̷ʧ","ʾ",0,self.Handle); - if(usr and pwd)and 0 <> dbglogin(usr,pwd)then - begin - return MessageboxA("½ûʧ","ʾ",0,self.Handle); - end - ExecuteCommand("dbgcreatechannel"); //channel - if FConnectchannel then - begin - dbglist(FConnectchannel); - end - end - function dbg_clk(o,e); - begin - file := o.getstartfilename(d); - item := nil; - if file=0 then //ڽű - begin - if 1 <> MessageboxA("ûҵضӦtsl\r\nǷ","ʾ",1,self.Handle)then - begin - return serwnd_cclk(); - end - end else - begin - item := owner.OpenAndGotoFileByName(file,1); - end - o.Visible := false; - FRuningItem := item; - FCurrentgotoitem := item; - parsercurrentitem(item); - FAttchedid := d; - dbgattach(FConnectchannel,d["id"]); - //echo tostn(d); - end - function Debugremote(flg); - begin - {$ifdef linux} - return MessageboxA("linuxĿǰֵ֧","ʾ",0,self.Handle); - {$endif} - if FRemoteWait then - begin - if flg then - begin - if 1=MessageboxA("Զ̵Եȴ...\r\nȷֹͣȴ..","ʾ",1,self.Handle)then - begin - FRemoteWait := false; - disconnectserver(); - end - return; - end else - begin - return MessageboxA("Զ̵Եȴ...","ʾ",0,self.Handle); - end - end else - begin - //if flg then return ; - if FConnectchannel then - begin - return MessageboxA("ڵ...","ʾ",0,self.Handle); - end - end - if not fdbgselwnd then - begin - fdbgselwnd := new tdbgselwnd(self); - fdbgselwnd.Parent := self; - fdbgselwnd.FHistoryDir := owner.FHistoryDir; - fdbgselwnd.loaddata(); - fdbgselwnd.OnClose := thisfunction(serwnd_cclk); - fdbgselwnd.save_clk := thisfunction(serwnd_oclk); - fdbgselwnd.cancel_clk := thisfunction(serwnd_cclk); - fdbgselwnd.dbg_clk := thisfunction(dbg_clk); - end - fdbgselwnd.setlist(); - if flg then - begin - FDebugtype := "remotewait"; - fdbgselwnd.setattachwait(true); - end else - begin - FDebugtype := "remote"; - fdbgselwnd.setattachwait(false); - end - fdbgselwnd.show(); - return; - end - function Debuglocal(item); //Խű - begin - {$ifdef linux} - return MessageboxA("linuxĿǰֵ֧","ʾ",0,self.Handle); - {$endif} - if not item then return 0; - if FConnectchannel then return MessageboxA("ڵ","ʾ",0,self.Handle); - if FRemoteWait then return MessageboxA("Զ̵Եȴ...","ʾ",0,self.Handle); - FDebugtype := "local"; - if checkconnected()then disconnectserver(); //Ͽ - FAttchedid := 0; - FDebugport := randomfrom(1 -> 600)+20000; - FDebugaddr := '127.0.0.1'; - FRuningItem := item; - FCurrentgotoitem := item; - dirs := owner.getlibpathstr(); - parsercurrentitem(item); - fio := ioFileseparator(); - FDebugUsr := 0; - FDebugPwd := 0; - deletefuncacheini(); - getdebuger(pms); - exestr := format('"%s" "%s" -DEBUGSERVER -DEBUGLOGIN 0 -WAITATTACH -DEBUGPORT %d -libpath "%s" ',FDebugExe,FRuningfile,FDebugport,dirs); - exestr += pms; - FDebughandle := sysexec(FDebugExe,exestr,nil,0,rcode,0); - if FDebughandle then - begin - ExecuteCommand("dbgcreatechannel"); - ExecuteCommand("showeval","Գ:"+FDebugExe); - if FConnectchannel then - begin - dbgattachwait(FConnectchannel); - end - end - end - function wmuser(o,e):WM_USER;virtual; - begin - if FRemoteWait and not(checkconnected())then - begin - if(0 <> connectserver(FDebugaddr,FDebugport))then - begin - FRemoteWait := false; - messageboxa("ӷʧ","",0,self); - return; - //sleep(100); - //_send_(WM_USER,0,0,1); - end else - begin - FRemoteWait := false; - FConnectchannel := dbgcreatechannel(); - setgdbcallback(); - if(FDebugUsr and FDebugPwd)and(0 <>(lgg := dbglogin(FDebugUsr,FDebugPwd)))then - begin - messageboxa("½ʧ\r\nû","½ʧ",0,self); - return disconnectserver(); - end - dbgattachwait(FConnectchannel); - FBtns["ֹ"].Visible := true; - end - end - end - function Create(AOwner); - begin - inherited; - FCmdHistory := array(); - FCmdHistoryid := 0; - FCmdHistorycount := 10; - FDebugExe := ""; - Caption := "tsl debug ..."; - {fimgelist := new tcontrolimagelist(self); - fimgelist.Width := 24; - fimgelist.height := 24; - fimgelist.DrawBimpFirst := true; - FToolbar := new TToolBar(self); - FToolbar.Visible := false; - idx := 0; - for i,v in dbugicos() do // - begin - bmp := new TBitmap(); - bmp.ReadVcon(HexformatStrToTsl( v)); - fimgelist.addbmp(bmp); - iti := new TToolButton(self); - iti.OnClick := thisfunction(Dbgtooldo); - iti.Caption := i; - iti.imageid := idx; - iti.Parent := FToolbar; - idx++; - end - - FToolbar.ImageList := fimgelist; - FToolbar.Parent := self; - } - dbwnd := new tdbgwnd(self); - dbwnd.Align := alClient; - dbwnd.Parent := self; - FStackList := new TListView(self); // new TListBox(self); //new tmemo(self);// - FStackList.ItemHeight := 23; - FStackList.Columns := array(("text":"line","width":40), - ("text":"function","width":250) //,("text":"type","width":70) - ); - //FStackList.ReadOnly := true; - //FStackList.Width := 300; - FStackList.Border := true; - //FStackList.Align := alLeft; - //FStackList.Parent := self; - FVaraiblesList := new TGroupGridA(self); - FVaraiblesList.Border := false; - FVaraiblesList.ItemHeight := 23; - FVaraiblesList.Columns := array(("text":"name","width":95), - ("text":"value","width":135), - ("text":"type","width":50) - ); - FCommandtext := new TEdit(self); - //FCommandtext.Border := true; - FCommandtext.placeholder := ""; - FCommandtext.Height := 23; - //FCommandtext.Align := alBottom; - //FCommandtext.Parent := self; - FCommandtext.onkeyup := thisfunction(cmdkeyup); - FShowText := new tmemo(self); - FShowText.ReadOnly := true; - FShowText.Border := true; - //FShowText.Align := alClient; - //FShowText.Parent := self; - pmenu := new TPopUpMenu(self); - cmu := new TMenu(self); - cmu.OnClick := function(o,e) - begin - FShowText.Text := ""; - end; - cmu.Caption := ""; - cmu.Parent := pmenu; - FShowText.PopUpMenu := pmenu; - dbwnd.addwnds(FStackList,FVaraiblesList,FCommandtext,FShowText); - ExecuteCommand("clearall"); - getdefaultdbger(); - end - function addbreak(item,idx,n); //Ӷϵ - begin - if not FConnectchannel then return; - parseriteminfo(item,idx,n,usr); - if n then - begin - //echo "\r\n====add:",usr,"====",n,"===",idx; - dbgsetbreak(FConnectchannel,usr,n,idx+1); - end - end - function removebreak(item,idx); //Ƴϵ - begin - if not FConnectchannel then return; - parseriteminfo(item,idx,n,usr); - if n then - begin - //echo "\r\n====remove:",usr,"====",n,"===",idx; - dbgunsetbreak(FConnectchannel,usr,n,idx+1); - end - end - function Dbgtooldo(o,e) - begin - cp := o.Caption; - case cp of - "": - begin - //echo ""; - it := Owner.GetCurrentItem(); //Owner.GetAllPageItems(); - Debuglocal(it); - end - "/ɾϵF5": - begin - it := Owner.GetCurrentItem(); - if it then - begin - it.FEditer.SwitchMarkLine(); - end - end - "ͣ": - begin - ExecuteCommand("dbgpause"); - end - "": - begin - ExecuteCommand("dbgstep") - end - "": - begin - //dbgstep(); - end - "һ(F8)": - begin - ExecuteCommand("dbgstepover"); - end - "": - begin - ExecuteCommand("dbgstepout"); - end - "": - begin - toolbtnState(""); - if FCurrentgotoitem and FCurrentgotoitem.FEditer then FCurrentgotoitem.FEditer.ExecuteCommand("ecruningto",nil); - ExecuteCommand("dbgrun"); - end - "ֹ": - begin - ExecuteCommand("dbgreset"); - end - "": - begin - end - "ˢ·ű": - begin - ExecuteCommand("dbggetallvalue"); - end - "ˢµǰ": - begin - ExecuteCommand("dbggetcurrentnode"); - end - "ı": - begin - FShowText.Text := ""; - end - end; - end - function dbgeventcall(d); //ص - begin - global g_tsldbgcallback_handle; - if not ifarray(d)then return; - if d["channel"]<> FConnectchannel then return; - recvtype := d["recvtype"]; - if recvtype=0 then - begin - FRemoteWait := 0; - ExecuteCommand("showeval","Խ"); - if FConnectchannel then dbgdeletechannel(FConnectchannel); - FConnectchannel := 0; - g_tsldbgcallback_handle := nil; - if FCurrentgotoitem and FCurrentgotoitem.FEditer then FCurrentgotoitem.FEditer.ExecuteCommand("ecruningto",nil); - FDebughandle := 0; - toolbtnState("ֹͣ"); - return; - end - //echo "\r\nrectype",format("0x%x",recvtype); - if 0x0401=recvtype then - begin - owner.echoAppendString(d["errmsg"]); - return; - end - if recvtype <> 0x402 then - begin - return; - end - case magicgetarray(d,array("result","CmdType"))of - "attachlist": - begin - r := magicgetarray(d,array("result","CmdData")); - r :: - begin - if mcol="createtm" then - begin - mcell := datetimetostr(mcell); - end - end - return fdbgselwnd.setlist(r); - //return echo tostn(r); - end - "attachwaitok","attachok": // ,Ĭ - begin - debuginitok(); - FVaraiblesList.SetNodeData(array()); - FStackList.DeleteAllItems(); - //dbgeval(FConnectchannel,getobjtransfunc()); - return; - end - "DebugInfo": //Ϣ - begin - if "dbgdetach"=remotewaitinit(d)then return; - toolbtnState("ͣ"); - stk := magicgetarray(d,array("result","CmdData","CallStack")); // - sybs := magicgetarray(d,array("result","CmdData","SymbolInfo")); // - ssybs := magicgetarray(d,array("result","CmdData","EnvInfo")); //ϵͳ - {if (ssybs = Fdbgssybs) and (sybs = Fdbgsybs) and (stk=Fdbgstack) then //ֵû - begin - return ; - end } - if(ssybs <> Fdbgssybs)or(sybs <> Fdbgsybs)then - begin - FVaraiblesList.SetNodeData(array()); - ddd := formatsysvlist(ssybs,nil); - FVaraiblesList.SetNodeData(ddd,true); - Fdbgssybs := ssybs; - ddd := formatvlist(sybs); - FVaraiblesList.SetNodeData(ddd,true); - Fdbgsybs := sybs; - end - if stk <> Fdbgstack then - begin - FStackList.DeleteAllItems(); - FStackList.appendItems(stk[:,array("LINE","NAME","USER")]); - //FStackList.text := array2str(stks,"\r\n"); - Fdbgstack := stk; - end - if ifarray(stk)then - begin - FVaraiblesList.celldbclk := thisfunction(vdbclk); - FVaraiblesList.celledit := thisfunction(vdoedit); - FVaraiblesList.Showarray := thisfunction(vdoshowarray); - FStackList.OnDblClick := thisfunction(stkdbclk); - it := opengoto(stk[0]); - //if not it then return; - if it and it <> FCurrentgotoitem then - begin - if FCurrentgotoitem and FCurrentgotoitem.FEditer then - begin - FCurrentgotoitem.FEditer.ExecuteCommand("ecruningto",nil); - end - FCurrentgotoitem := it; - end - if FCurrentgotoitem then - begin - FCurrentgotoitem.FEditer.ExecuteCommand("ecruningto",stk[0,"LINE"]-1); - end - end - return; - end - "detached": - begin - if FConnectchannel then - begin - dbgdeletechannel(FConnectchannel); - FConnectchannel := 0; - g_tsldbgcallback_handle := nil; - FAttchedid := 0; - end - FRemoteWait := 0; - if FCurrentgotoitem and FCurrentgotoitem.FEditer then FCurrentgotoitem.FEditer.ExecuteCommand("ecruningto",nil); - ExecuteCommand("showeval","Խ"); - toolbtnState("ֹͣ"); - return; - end - "DebugSysParamValue": - begin - CmdTypeAux := magicgetarray(d,array("result","CmdTypeAux")); - ev := magicgetarray(d,array("result","CmdData")); - cp := magicgetarray(d,array("result","CmdParam")); - len :=-1; - if ifnumber(CmdTypeAux)and(CmdTypeAux .& 0x80000000)then - begin - len := _shr((int(CmdTypeAux).& 0xFFF0),4); - end - //echo "\r\n***",len," ",cp," ",tostn(ev); - if(cp="#DebugEval")or(cp="#Error")then - begin - return showevaldata(nil,ev); - end - if ifarray(ev)then - begin - ddd := formatsysvlist(array(cp:ev),len); - FVaraiblesList.SetNodeData(ddd,true); - for i,v in ev do - begin - if ifstring(i)then - begin - ncp := tostn(i); - ncp := replacetext(ncp,".","\\o"); - ncp := cp+".["+ncp+"]"; - end else - begin - ncp := cp+".["+tostn(i)+"]"; - end - magicsetarray(d,array("result","CmdParam"),ncp); - magicsetarray(d,array("result","CmdData"),v); - dbgeventcall(d); - end - return; - end else - begin - ddd := formatsysvlist(array(cp:ev),len); - FVaraiblesList.SetNodeData(ddd,true); - end - end - "DebugValue": - begin - cp := magicgetarray(d,array("result","CmdParam")); - ev := magicgetarray(d,array("result","CmdData")); - if(cp="#DebugEval")or(cp="#Error")then - begin - return showevaldata(nil,ev); - end - if ifarray(ev)then - begin - //showevaldata(cp,ev); - ddd := formatvlist(array(cp:ev)); - FVaraiblesList.SetNodeData(ddd,true); - for i,v in ev do - begin - if ifstring(i)then - begin - ncp := tostn(i); - ncp := replacetext(ncp,".","\\o"); - ncp := cp+".["+ncp+"]"; - end else - begin - ncp := cp+".["+tostn(i)+"]"; - end - magicsetarray(d,array("result","CmdParam"),ncp); - magicsetarray(d,array("result","CmdData"),v); - dbgeventcall(d); - end - return; - end else - begin - ddd := formatvlist(array(cp:ev)); - FVaraiblesList.SetNodeData(ddd,true); - end - end - "noattachederror": - begin - return disconnectserver(); - FRemoteWait := 0; - ExecuteCommand("showeval","noattachederror"); - d["recvtype"]:= 0; //˳ - dbgeventcall(d); - return; - end else - begin - //echo tostn(d); - end - end - return; - end - function showevaldata(cp_,ev); - begin - cp := cp_; - if cp then - begin - if parseregexpr("\\(\\w+\\)\\.",cp,"r", function(a) - begin - return ""; - end - ,s)=1 then - begin - cp := s; - end - end - if ev and ifarray(ev)then - begin - fwnd := getvalewnd(cp); - fwnd.TSLdata := ev; - fwnd.Show(); - end else - begin - if cp then FShowText.Text += ">>"+cp+"\r\n"; - ExecuteCommand("showeval",ev); - end - end - function ExecuteCommand(cmd,p);override; - begin - case cmd of - "dbgstate": - begin - if ifnil(p)then return FdebugState; - end - "execommand": - begin - case p of - "#127": - begin - FShowText.Text := ""; - end - end; - end - "docmd": - begin - s := FCommandtext.Text; - if not s then return; - FCommandtext.Text := ""; - if s="#cls" then return ExecuteCommand("execommand",s); - FShowText.Text += ">>"+s+"\r\n"; - ExecuteCommand("dbgeval",s); - end - "clearall": // - begin - //FStackList.items := array(); - //FStackList.text := ""; - FStackList.DeleteAllItems(); - FVaraiblesList.SetNodeData(array()); - if p then - begin - FShowText.Text := ""; - FCommandtext.Text := ""; - end - end - "showeval": - begin - FShowText.Text += "ans="+tostn(p)+"\r\n"; - FShowText.ExecuteCommand(FShowText.ecGotoXY,array(100000,1)); - end - "dbgcreatechannel": - begin - if not FConnectchannel then - begin - idx := 0; - if not checkconnected()then - begin - while(FDebugtype="local")and(0 <> connectserver(FDebugaddr,FDebugport)) do - begin - sleep(100); - idx++; - if idx>20 then - begin - return ExecuteCommand("debugconnecterr"); - end; - end - end - FConnectchannel := dbgcreatechannel(); - setgdbcallback(); - end - end - "dbggetallvalue": - begin - if FConnectchannel then - begin - dbggetallvalue(FConnectchannel); - end - end - "dbggetcurrentnode": - begin - FVaraiblesList.getcurrentnodedata(); - end - "dbgreset": //ֹͣ - begin - if FConnectchannel then - begin - if FDebughandle then - begin - return SysTerminate(-1,FDebughandle); - end - if FAttchedid then - begin - //echo "\r\nֹ"; - return dbgdetach(FConnectchannel); - end else - begin - if FDebugtype="remotewait" then //Զ,Ͽ - begin - return disconnectserver(); - end - return dbgdetach(FConnectchannel); - //return dbgreset(FConnectchannel); - end - end - end - "dbgrun": // - begin - if FConnectchannel then dbgrun(FConnectchannel); - end - "dbgstep": - begin - if FConnectchannel then dbgstep(FConnectchannel); - end - "dbgpause": //ͣ - begin - if FConnectchannel then dbgpause(FConnectchannel); - end - "dbgstepover": //һ - begin - if FConnectchannel then dbgstepover(FConnectchannel); - end - "dbgstepout": // - begin - if FConnectchannel then dbgstepout(FConnectchannel); - end - "dbgeval": //ִ - begin - if FConnectchannel and p and ifstring(p)then - begin - getvalewnd("ans"); - dbgeval(FConnectchannel,p); - end - end - end - end - function Recycling();override; - begin - global g_tsldbgcallback_handle; - stopdebug(); - inherited; - FStackList := nil; - FVaraiblesList := nil; - FToolbar := nil; - FCommandtext := nil; - FShowText := nil; - fimgelist := nil; - FBtns := nil; - g_tsldbgcallback_handle := nil; - fdbgselwnd := nil; - end - private - function getdefaultdbger(); - begin - fdefaultdbger := gettslexe(); - end - function getdebuger(pms); //õԳ - begin - p := static pluginpath(); - FDebugExe := inireadstring("",p+"localediter.ini","debug","debuger",""); - pms := " "; - //if FDebugExe="1" then //Ĭϻȡ - // begin - ps := owner.getexecuteparams(FRuningfile); - if ps then - begin - psi := ps[0]; - if fileexists("",psi)then - begin - cmdexe := psi; - end else - begin - if FDebugExe="1" then - ExecuteCommand("showeval","ǰִָг򲻴!!"); - end - psi := ps[1]; - if psi and fileexists("",psi)then - begin - end else - begin - pms += " "+tostn(psi); - end - idx := 2; - while idx"); - end else - if fileexists("",FDebugExe)then - begin - ExecuteCommand("showeval","<ļĵ>"); - end else - begin - FDebugExe := fdefaultdbger; - ExecuteCommand("showeval","<ñ༭Դĵb:>"); - end - end - function remotedbugok(); - begin - if FAttchedid then - begin - ExecuteCommand("showeval","Զű:"+FAttchedid["info"]); - end - end - function remotewaitinit(d); - begin - if FDebugtype <> "remotewait" then return; - if FAttchedid then return; - FAttchedid := magicgetarray(d,array("result","CmdData","StartInfo")); - file := fdbgselwnd.getstartfilename(FAttchedid); - item := nil; - if file=0 then //ڽű - begin - if 1 <> MessageboxA("ûҵضӦtsl\r\nǷ","ʾ",1,self.Handle)then - begin - dbgdetach(FConnectchannel); - return "dbgdetach"; - //return serwnd_cclk(); - end - end else - begin - item := owner.OpenAndGotoFileByName(file,1); - end - FRuningItem := item; - FCurrentgotoitem := item; - parsercurrentitem(item); - setbrks(); //öϵ - remotedbugok(); - end - function debuginitok(); - begin - if FDebugtype <> "remotewait" then setbrks(); //öϵ - //showbtns(); //ʾť - ExecuteCommand("showeval","ʼ"); - //toolbtnState("ͣ"); - remotedbugok(); - return; - end - function opengoto(v); - begin - cn := v["NAME"]; - cnn := ""; - for ii := 1 to length(cn) do - begin - if cn[ii]in array(".",":")then - begin - cn := cnn; - break; - end - cnn += cn[ii]; - end - f := FDebugtsfs[lowercase(cn)]; - if not f then - begin - return ExecuteCommand("showeval","Ҳ:"+cn); - end - it := owner.OpenAndGotoFileByName(f,v["LINE"]); - return it; - end - function cancelremotedbg(o,e,s); - begin - fdbgselwnd.Visible := false; - if e then e.skip := true; - if FConnectchannel then dbgdeletechannel(FConnectchannel); - FConnectchannel := 0; - ExecuteCommand("showeval",ifstring(s)?s:"ȡԶ̵..."); - end - function stkdbclk(o,e); - begin - //echo "\r\n",o.SelectedId; - id := o.SelectedId; - if id >= 0 then - begin - d := o.GetItem(id); - if d then - begin - return opengoto(d); - end - end - end - function vdoshowarray(d); - begin - //echo tostn(d); - try - gp := d[3]; - if(gp[length(gp)]="+")and parseregexpr("\\+$",gp,"r", function(a) - begin - return ""; - end - ,sgp)=1 then - begin - gp := "sysparams:"+sgp; - end - showevaldata(gp,d[1]["value"]); - except - end; - end - function vdoedit(d,s); - begin - if not FConnectchannel then return; - gp := d[1][3]; - try - v := eval(&s); - except - v := nil; - end - if(gp[length(gp)]="+")and parseregexpr("\\+$",gp,"r", function(a) - begin - return ""; - end - ,sgp)=1 then - begin - dbgsetvalue(FConnectchannel,sgp,d[1][5],v); - sleep(20); - dbggetvalue(FConnectchannel,sgp,d[1][5]); - end else - begin - //echo "\r\nset: ",gp," ",v; - dbgsetvalue(FConnectchannel,gp,0,v); - sleep(20); - dbggetvalue(FConnectchannel,gp,0); - end - end - function vdbclk(o,e); - begin - if not FConnectchannel then return; - if(e[0]=1)and(e[1][2]="*")then - begin - gp := e[1][3]; - if gp="sysparams+" then return; - if(gp[length(gp)]="+")and parseregexpr("\\+$",gp,"r", function(a) - begin - return ""; - end - ,sgp)=1 then - begin - dbggetvalue(FConnectchannel,sgp,e[1][5]); - end else - begin - dbggetvalue(FConnectchannel,gp,0); - end - end - end - function parsercurrentitem(item); //غ - begin - FDebugtsfs := class(TTSLCompletion).getdirtsfs(); - if item then - begin - FRuningfile := item.OrigScriptPath; // %% E:\TSUIGROUP\script\tgdb.tsl%%; - FDebugtsfs["__main__"]:= FRuningfile; - ls := item.FEditer.lines; - d := tsl_tokenizeex_2_(item.FEditer.Text,0xffff); - for i,v in d["blcks"] do - begin - s := ls.GetStringByIndex(v["mbeg"]-1); - ctls := 0; - case v["mtype"]of // - 11: - begin - ctls := "function\\s+(\\w+)\\("; - end - 3: - begin - ctls := "type\\s+(\\w+)\\s*=\\s*class" // - end - end; - if s and ctls and(parseregexpr(ctls,s,"si",m,mp,ml)=1)then - begin - n := lowercase(m[0,1]); - FDebugtsfs[n]:= FRuningfile; - end - end - end - end - function toolbtnState(flg); - begin - case flg of - "","ͣ": - begin - showbtns(); - FBtns["ͣ"].Visible := false; - FBtns["ˢ·ű"].Visible := true; - FBtns["ˢµǰ"].Visible := true; - end - "": - begin - // - FBtns[""].Visible := false; - FBtns[""].Visible := false; - FBtns[""].Visible := false; - FBtns["һ(F8)"].Visible := false; - //FBtns[""].Visible := false; - FBtns["ֹ"].Visible := false; - FBtns["ͣ"].Visible := true; - FBtns["ˢ·ű"].Visible := false; - FBtns["ˢµǰ"].Visible := false; - end - "ֹͣ": - begin - hiddenbtns(); - end - end - end - function showbtns(); //ʾ - begin - for i,v in FBtns do - begin - V.Visible := true; - end - //FToolbar.Visible := true; - end - function hiddenbtns(); // - begin - for i,v in FBtns do - begin - if v.Caption="/ɾϵF5" then continue; - v.Visible := false; - end - //FToolbar.Visible := false; - end - function stopdebug(); // - begin - if FDebughandle then - begin - SysTerminate(-1,FDebughandle); - FDebughandle := 0; - end - end - function parseriteminfo(item,idx,n,usr); - begin - if item=FRuningItem then - begin - usr := "local"; - n := "__main__"; - end else - begin - usr := "system"; - end - if not n then - begin - n := getscriptname(item.OrigScriptPath); - end - end - function getscriptname(nn); - begin - fio := ioFileseparator(); - n := ""; - for i := Length(nn)-1 downto 1 do - begin - if fio=nn[i]then - begin - n := nn[i+1:]; - idx := pos(".",n); - if idx then - begin - n := lowercase(n[1:idx-1]); - end - break; - end - end - return n; - end - function setbrks(); //Ӷϵ - begin - its := owner.GetAllPageItems().data; - for i,v in FDebugtsfs do - begin - delii :=-1; - for ii,vv in its do - begin - ifok := vv.ScriptPathIs(v); - if ifok then - begin - delii := ii; - lines := vv.FEditer.Lines; - for idx := 0 to Lines.Length()-1 do - begin - if Lines[idx].FMarked then addbreak(vv,idx,i); - end - break; - end - end - if delii <> 0 then - begin - reindex(its,array(delii:nil)); - end - end - if FRuningItem then - begin - lines := FRuningItem.FEditer.Lines; - for idx := 0 to Lines.Length()-1 do - begin - if Lines[idx].FMarked then addbreak(FRuningItem,idx,"__main__"); - end - end - end - function setgdbcallback(); //ûص - begin - global g_tsldbgcallback_handle; - g_tsldbgcallback_handle := thisfunction(dbgeventcall); - dbgsetcallback(FConnectchannel,"return unit(UtslCodeEditor).tdbgcallback();"); - end - function formatvlist(d); - begin - r := array(); - ncs := array(); - { - ddd := array(); - for i,v in dd do - begin - ddd[i]["id"] := v["n"]; - ddd[i]["data"] := array(v["c"],v["v"],v["t"],v["n"]); - ddd[i]["pid"] := v["p"]; - - end - } - idx := 0; - for i,v in d do - begin - ri := parservname(i,v); - for j,vj in ri do - begin - id := vj["n"]; - if ncs[id]then continue; - ncs[id]:= true; - r[idx]["id"]:= id; - vjt := vj["t"]; - vjv := vj["v"]; - if vjt="*" then - begin - vval := array("value":vjv,"font":("color":0xff0000)); - end else - if ifarray(vjv)then - begin - vval := array("value":vjv,"font":("color":0)); - end else - if ifstring(vjt)and(vjt <> "nil")then - begin - vval := array("value":tostn(vjv),"font":("color":0)); - end else - begin - vval := array("value":"","font":("color":0)); - end - r[idx]["data"]:= array(vj["c"],vval,vj["t"],vj["n"],id); - r[idx]["pid"]:= vj["p"]; - r[idx]["nnp"]:= vj["nnp"]; - idx++; - end - end - return r; - end - function formatsysvlist(d,len); - begin - r := array(); - ncs := array(); - idx := 0; - for i,v in d do - begin - ri := parsersysname(i,v,len); - for j,vj in ri do - begin - id := vj["n"]; - if ncs[id]then continue; - ncs[id]:= true; - r[idx]["id"]:= id; - vjt := vj["t"]; - vjv := vj["v"]; - if vjt="*" then - begin - vval := array("value":vjv,"font":("color":0xff0000)); - end else - if ifarray(vjv)then - begin - vval := array("value":vjv,"font":("color":0)); - end else - if ifstring(vjt)and(vjt <> "nil")then - begin - vval := array("value":tostn(vjv),"font":("color":0)); - end else - begin - vval := array("value":"","font":("color":0)); - end - r[idx]["data"]:= array(vj["c"],vval,vjt,vj["n"],id,vj["len"]); - r[idx]["pid"]:= vj["p"]; - r[idx]["nnp"]:= vj["nnp"]; - idx++; - end - end - return r; - end - function gettypename(ev); - begin - case datatype(ev)of - 0:t := "int"; //͵ - 20:t := "int64"; - 24:t := "lstr"; - 1:t := "double"; - 2:t := "str"; - 5:t := "array"; - else t := "nil"; - end; - return t; - end - function parsersysname(ostring,ev,nlen); - begin - len := length("*TSL_UNComplete*"); - ucp := false; - if pos("*TSL_UNComplete*",ostring)=1 then - begin - ucp := true; - if Length(ostring)=len then //մ - begin - nstr := ""; - return array(); - end else - nstr := ostring[len+1:]; - end else - nstr := ostring; - r := array(); - if ucp then t := "*"; - else t := gettypename(ev); - nid := ""; - r[0]:= array("n":"sysparams+", - "c":array("font":("color":0x0000ff,"italic":1),"value":"sysparams") - ); - if nlen >= 0 then - begin - nnl := 0x80000000+_shl(nlen,4)+1; - cn := ""; - if nlen=0 then - begin - r[1]:= array("n":"+", - "c":tostn(""), - "len":nnl, - "p":"sysparams+" - ); - end else - begin - cn := nstr[1:nlen]; - r[1]:= array("n":cn+"+", - "c":cn, - "len":nnl, - "p":"sysparams+" - ); - if nlen"; -o := o_; -obk := o; -try - stk := array(); - idx :=0; - while idx<(ct>0?ct:3) do - begin - mus[length(mus)] := o; - d := o.classinfo(); - stk[idx,0] := o; - stk[idx,1] := d; - inh := d["inherited"]; - if not inh then break; - o := findclass(inh[0],o); - idx++; - end - for idx := length(stk)-1 downto 0 do - begin - o:=stk[idx,0]; - for i,v in stk[idx,1,"properties"] do - begin - n := v["name"]; - if v["read"] and (v["access"] in array(0,1)) then - begin - r[n] := 0; - - end else - begin - reindex(r,array(n:nil)); - end - end - for i,v in stk[idx,1,"members"] do - begin - n := v["name"]; - if v["access"] in array(0,1) then - begin - r[n] := 0; - - end else - begin - reindex(r,array(n:nil)); - end - end - end - rs := mrows(r,1) ; - for i := length(rs)-1 downto 0 do - begin - v := rs[i]; - nv := invoke(obk,v); - if datatype(nv)=7 then r[v] := ""; - else if ifarray(nv) then r[v] := _show_dbg_obj(nv,ct,mus); - else if ifobj(nv) then r[v] := _show_dbg_obj(nv,ct,mus); - else r[v] := _show_dbg_obj(nv,ct,mus); - end -except - return r; -end; -return r; -end - %%; - end - FStackList; - FVaraiblesList; - FToolbar; - FCommandtext; - FShowText; - fimgelist; -end -type TFindListWnd=class(TListBox) //ҵĵط - function Create(AOwner); - begin - inherited; - end - function CheckListItem(s);override; - begin - return ifarray(s); - end - function GetItemText(i);override; - begin - it := GetItem(i); - if it then r := it["caption"]; - if not ifstring(r)then return ""; - return r; - end - Published - private -end -type TGoToLineWnd=class(TVCForm) //ת - function Create(AOwner);override; - begin - inherited; - wssizebox := false; - minmaxbox := false; - WsDlgModalFrame := true; - width := 300; - height := 80; - caption := "ת.."; - FLabel := new TLabel(self); - FLabel.SetBoundsRect(array(3,10,70,35)); - FEdit := new TEdit(self); - FEdit.SetBoundsRect(array(75,10,200,35)); - FBtn := new TBtn(self); - FBtn.SetBoundsRect(array(210,10,280,35)); - FLabel.Caption := "Ŀλ:"; - FBtn.Caption := "λ"; - FLabel.parent := self; - FEdit.parent := self; - FEdit.OnKeyPress := function(o,e) - begin - if e.CharCode=13 then - begin - e.skip := true; - GotoTextInteger(); - end - end - OnClose := function(o,e) - begin - o.visible := false; - e.skip := true; - end - FBtn.parent := self; - FBtn.OnClick := function(o,e) - begin - GotoTextInteger(); - end - end - function DoControlAlign();override; - begin - end - function ShowGoto(); - begin - show(); - FEdit.SetFocus(); - FEdit.Text := ""; - end - private - function GotoTextInteger(); - begin - id := FEdit.Text; - id := StrToIntDef(id,0); - if id>0 then - begin - it := Owner.GetCurrentItem(); - Visible := false; - Owner.OpenAndGotoFileByName(it.ScriptPath,id); - //it.SetFocus(); - //return ; - it := Owner.GetCurrentEditer(); - if not it then return; - //it.ExecuteCommand(it.ecGotoXY,array(id,1)); - //Visible := false; - it.SetFocus(); - end - end - FEdit; - FBtn; -end -type TTslCodeMap=class(TTreeView) //tslͼ - function Create(AOwner); - begin - inherited; - caption := ":֧[////enter]"; - width := 400; - height := 800; - WsPopUp := true; - WsSysMenu := true; - WsSizeBox := true; - OnClose := function(o,e) - begin - o.visible := false; - e.skip := true; - if not FTreeEditer then return; - FTreeEditer.SetFocus(); - end - OnActivate := function(o,e) - begin - if not e.wparam then CodeMapLive(o,e); - {o.Visible := false; - if not FTreeEditer then return; - FTreeEditer.SetFocus();} - end - onKeyPress := thisfunction(CodeMapLive); - //OnDblClick := thisfunction(SynNodeSelected); - OnSelChanged := thisfunction(SynNodeSelected); - end - function CodeMapLive(o,e); - begin - o.Visible := false; - if not FTreeEditer then return; - FTreeEditer.SetFocus(); - end - function SynNodeSelected(o,e); - begin - //˫ - if not FTreeEditer then return; - nd := CurrentNode; - line := nd._tag; - if line>0 then - begin - FTreeEditer.ExecuteCommand(FTreeEditer.ecGoToXY,array(line,1)); - end - end - function hasFocus();override; - begin - return true; - end - function ShowMap(); - begin - FTreeEditer := nil; - it := Owner.GetCurrentItem(); - if not it then return; - //caption := "codemap:"+it.ScriptPath; - FTreeEditer := it.FEditer; - s := FTreeEditer.Text; - if FString <> s then - begin - FString := s; - LoadString(s,FTreeEditer.CaretY); - end else - GoToTheNode(FTreeEditer.CaretY); - end - function Recycling();override; - begin - inherited; - FTempNodes := nil; //ڵ - FEditer := nil; - FString := nil; - FTreeEditer := nil; - end - private - function LoadString(s,line); - begin - { - #define Block_TypeClass 1 - #define Block_Function 2 - #define Block_Statements 4 - #define Block_If 8 - #define Block_Else 16 - #define Block_SubCase 32 - #define Block_Goto_Label 64 - #define Block_Empty_Begin_End 128 - #define Block_Try 256 - #define Block_NeedSql 512 - #define Block_UnitStruct 1024 - } - if s then r := tsl_tokenizeex_2_(s,1+2+4+8+16+32+256+1024+2048+4096); - else r := array(); - RootNode.RecyclingChildren(); - FTempNodes := array(); - ScriptDelBlocks(r["blcks"],str2array(s,"\r\n"),self.RootNode,0); - GoToTheNode(line); - end - function GoToTheNode(line); - begin - nd := FTempNodes[0]; - for i,v in FTempNodes do - begin - if v._tag <= line then - begin - nd := v; - end else - if v._tag >= Line then - begin - SetSel(nd); - break; - end - end - Show(); - if _wapi.GetFocus()<> Handle then - begin - SetFocus(); - end - end - function ScriptDelBlocks(blcks,strs,Node,ct); - begin - if not blcks then return; - for i,v in blcks do - begin - if v["mtype"]<> 1 then - begin - cnd := CreateTreeNode(); - cnd.Caption := trim(strs[v["mbeg"]-1]); - cnd._tag := v["mbeg"]; - FTempNodes[length(FTempNodes)]:= cnd; - cnd.parent := node; - end - if not cnd then cnd := node; - ScriptDelBlocks(v["msub"],strs,cnd,ct+1); - end - end - FTempNodes; //ڵ - FString; //ַ - FTreeEditer; //༭ -end + + + + type TEditer=class(TCustomcontrol) //,״̬,, function Create(AOwner);override; begin @@ -6755,312 +4089,869 @@ B27F0502A7117403C6D9CC26356E2328078DE3A830F4889DB00E265FB1C3E92B8 end end implementation -type tdbgselwnd=class(tdcreateform) - uses tslvcl; - label1:tlabel; - furl:tedit; - label2:tlabel; - fport:tedit; - label3:tlabel; - fusr:tedit; - label4:tlabel; - label5:tlabel; - fpwd:tpassword; - fdir:tedit; - fdiag:tfolderchooseadlg; - flist:tlistview; - fcbtn:tbtn; - flogout:tbtn; - flogin:tbtn; - fdbg:tbtn; - cancel_clk; - save_clk; - dbg_clk; - fhistorydir; - function Create(AOwner);override; // + +type TEditList=class(TComboBox) + function Create(AOwner);override; + begin + inherited; + width := 280; + maxListItemShow := 30; + FMaxCoder := 20; + ReadONly := false; + Editer.OnKeyDown := function(o,e) + begin + case e.charcode of + VK_UP: + begin + ItemIndex -= 1; + e.skip := true; + end + VK_DOWN: + begin + ItemIndex += 1; + e.skip := true; + end + 13: + begin + Calldatafunction(OnEnterUp,self(true),e); + e.skip := true; + end + VK_ESCAPE: + begin + oer := o.owner.owner; + if oer then oer.Visible := false; + end + ord("A"): + begin + if ssCtrl in e.Shiftstate()then + begin + e.skip := true; + o.SetSel(0,length(o.text)); + end + end + end; + end + end + function Recycling();override; + begin + inherited; + FOnEnterUp := nil; + end + function Pushitem(s); + begin + if not ifstring(s)and s then return; + if s in Items then return 0; + insertItem(s,0); + if getItemCount()>FMaxCoder then + begin + deleteItem(FMaxCoder); + end + end + property OnEnterUp read FOnEnterUp write FOnEnterUp; + property MaxCoder read FMaxCoder write FMaxCoder; + private + FMaxCoder; + FOnEnterUp; +end +type TEditerEchoWnd=class(TSynMemoNorm) // + function Create(AOwner);override; + begin + inherited; + FDoLockTime := 0; + FIsLocked := false; + height := 250; + ReadOnly := true; + WsSizeBox := true; + WsSysMenu := true; + OnClose := function(o,e) + begin + o.visible := false; + e.skip := true; + end + m := new TPopUpMenu(self); + m1 := new TMenu(self); + m1.Caption := ""; + m1.parent := m; + {m2 := new TMenu(self); + m2.Caption := "ѡַ"; + m2.Checked := false; + m2.OnClick := function(o,e)begin + o.Checked := not(o.Checked); + self.HighLighter := (o.Checked) ?F_Highlighter :false; + end + m2.Parent := m;} + PopUpMenu := m; + m1.OnClick := function(o,e) + begin + ClearAll(); + AppendString("ctrl+z ֹͣ;ctrl+c ѡ\r\n"); + end; + FProcess := new TCreateProcessA(); + FProcess.BufSize := 1024 * 5; + FProcess.OnEcho := thisfunction(TEchoToString); + AppendString("ctrl+z ֹͣ;ctrl+c ѡ\r\n"); + F_Highlighter := new TSynHighLighter(self); + //Highlighter := new TSynHighLighter(self); + end + function TEchoToString(o,s); + begin + //t := now(); + {if (t-FDoLockTime)>(0.3E-5) then + begin + FDoLockTime := t; + if FIsLocked then + begin + FIsLocked := false; + DecPaintLock(); + end else + begin + FIsLocked := true; + IncPaintLock(); + end + end } + AppendString(s); + //Visible := true; + return true; + end + function Exec(exe,cmd,h); + begin + //AppendString(format('"%s" %s\r\n',exe,cmd)); + self.HighLighter := nil; + AppendString(format('%s %s\r\n',exe,cmd)); + //EndExe(); + r := FProcess.CreateProcessWaitRead(exe,cmd,h); + AppendString(format("\r\nִн:endcode:%d\r\n",r)); + {if FIsLocked then + begin + FIsLocked := false; + DecPaintLock(); + end } + self.HighLighter := F_Highlighter; + h := 0; + return r; + end + function Exeing(); + begin + return FProcess.LastExeHandle; + end + function EndExe(); + begin + if FProcess.LastExeHandle then + begin + r := 1; + SysTerminate(r,FProcess.LastExeHandle); + end + end + function KeyDown(o,e);override; + begin + if ssCtrl in e.shiftstate then + begin + case e.charcode of + ord("Z"): + begin + EndExe(); + return; + end + ord("C"): + begin + ExecuteCommand(ecCopy); + return; + end + end + end + inherited; + end + function AppendString(s); + begin + if not(ifstring(s)and s)then return; + ct := Lines.Length(); + if ct>0 then + begin + ExecuteCommand(ecGoToXY,array(ct,1)); + ExecuteCommand(ecLineEnd); + ExecuteCommand(ecString,s); + end + end + FExeHandle; + FProcess; + FIsLocked; + FDoLockTime; + F_Highlighter; +end +type TTslCodeMap=class(TTreeView) //tslͼ + function Create(AOwner); + begin + inherited; + caption := ":֧[////enter]"; + width := 400; + height := 800; + WsPopUp := true; + WsSysMenu := true; + WsSizeBox := true; + OnClose := function(o,e) + begin + o.visible := false; + e.skip := true; + if not FTreeEditer then return; + FTreeEditer.SetFocus(); + end + OnActivate := function(o,e) + begin + if not e.wparam then CodeMapLive(o,e); + {o.Visible := false; + if not FTreeEditer then return; + FTreeEditer.SetFocus();} + end + onKeyPress := thisfunction(CodeMapLive); + //OnDblClick := thisfunction(SynNodeSelected); + OnSelChanged := thisfunction(SynNodeSelected); + end + function CodeMapLive(o,e); + begin + o.Visible := false; + if not FTreeEditer then return; + FTreeEditer.SetFocus(); + end + function SynNodeSelected(o,e); + begin + //˫ + if not FTreeEditer then return; + nd := CurrentNode; + line := nd._tag; + if line>0 then + begin + FTreeEditer.ExecuteCommand(FTreeEditer.ecGoToXY,array(line,1)); + end + end + function hasFocus();override; + begin + return true; + end + function ShowMap(); + begin + FTreeEditer := nil; + it := Owner.GetCurrentItem(); + if not it then return; + //caption := "codemap:"+it.ScriptPath; + FTreeEditer := it.FEditer; + s := FTreeEditer.Text; + if FString <> s then + begin + FString := s; + LoadString(s,FTreeEditer.CaretY); + end else + GoToTheNode(FTreeEditer.CaretY); + end + function Recycling();override; + begin + inherited; + FTempNodes := nil; //ڵ + FEditer := nil; + FString := nil; + FTreeEditer := nil; + end + private + function LoadString(s,line); + begin + { + #define Block_TypeClass 1 + #define Block_Function 2 + #define Block_Statements 4 + #define Block_If 8 + #define Block_Else 16 + #define Block_SubCase 32 + #define Block_Goto_Label 64 + #define Block_Empty_Begin_End 128 + #define Block_Try 256 + #define Block_NeedSql 512 + #define Block_UnitStruct 1024 + } + if s then r := tsl_tokenizeex_2_(s,1+2+4+8+16+32+256+1024+2048+4096); + else r := array(); + RootNode.RecyclingChildren(); + FTempNodes := array(); + ScriptDelBlocks(r["blcks"],str2array(s,"\r\n"),self.RootNode,0); + GoToTheNode(line); + end + function GoToTheNode(line); + begin + nd := FTempNodes[0]; + for i,v in FTempNodes do + begin + if v._tag <= line then + begin + nd := v; + end else + if v._tag >= Line then + begin + SetSel(nd); + break; + end + end + Show(); + if _wapi.GetFocus()<> Handle then + begin + SetFocus(); + end + end + function ScriptDelBlocks(blcks,strs,Node,ct); + begin + if not blcks then return; + for i,v in blcks do + begin + if v["mtype"]<> 1 then + begin + cnd := CreateTreeNode(); + cnd.Caption := trim(strs[v["mbeg"]-1]); + cnd._tag := v["mbeg"]; + FTempNodes[length(FTempNodes)]:= cnd; + cnd.parent := node; + end + if not cnd then cnd := node; + ScriptDelBlocks(v["msub"],strs,cnd,ct+1); + end + end + FTempNodes; //ڵ + FString; //ַ + FTreeEditer; //༭ +end +type TListPages=class(TListBox) + function Create(AOwner);override; begin inherited; Visible := false; - Loader.LoadFromTfmScript(self,getinfo()); - flist.Columns := array( - ("text":"ID","width":150), - ("text":"Ϣ","width":300), - ("text":"ʱ","width":100) - ); - flogout.top := 140; - flogout.OnClick := function(o,e) - begin - calldatafunction(cancel_clk,self,e); - end - flogin.OnClick := function(o,e) - begin - if fhistorydir and ifstring(fhistorydir)then - begin - Fremotepath := fhistorydir+"remoteinfo.tsm"; - d := getdata(); - Exportfile(ftstream(),"",Fremotepath,d); - end - calldatafunction(save_clk,self,e); - end - fdbg.onclick := function(o,e) - begin - calldatafunction(dbg_clk,self,e); - end - setlist(); + WsPopUp := true; end - function setattachwait(flg); //õ½ʽ + function PaintIdx(idx,rc_,cvs);override; begin - if flg then + {** + @explan(˵) %% + @param(item)(TCustomListItem) %% + @param(rc)(array) %% + @param(cvs)(tcanvas) %% + **} + inherited; + if idx=getCurrentSelection()then begin - Height := 210; - end else - begin - Height := 550; + rc := rc_; + rc[2:3]-= 1; + cvs.pen.Color := rgb(30,144,255); + cvs.draw("Polyline",array(rc[0:1],(rc[2],rc[1]),(rc[2],rc[3]),(rc[0],rc[3]),rc[0:1])); end end - function loaddata(); // - begin - if fhistorydir and ifstring(fhistorydir)then - begin - Fremotepath := fhistorydir+"remoteinfo.tsm"; - if fileexists("",Fremotepath)and(1=importfile(ftstream(),"",Fremotepath,d))then - begin - setdata(d); - end - end - end - function getdata(); - begin - r := array(); - r["addr"]:= furl.text; - r["port"]:= fport.text; - r["usr"]:= fusr.text; - r["pwd"]:= fpwd.text; - r["dir"]:= fdir.text; - return r; - end - function tserlogersimplewnd1_close(o;e);virtual; - begin - e.skip := true; - end - function Recycling();override; //ձ + function MouseUp(o,e);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 + visible := false; end - function getdir(); - begin - if fdiag.ChooseDlg()then - begin - fdir.text := fdiag.Folder; - end - end - function setlist(d); - begin - FList.DeleteAllItems(); - fdbg.Enabled := false; - if d and ifarray(d)then - begin - FList.appendItems(d); - FList.SelectedId := 0; - fdbg.Enabled := true; - end - end - function getstartfilename(sv); - begin - dirt := fdir.Text; - if not sv then sv := FList.SelectedValue; - if dirt and sv then - begin - if sv then - begin - fs := sv["info"]; - if fs then - begin - for i := length(fs)-1 downto 1 do - begin - if fs[i]in array("\\","/")then - begin - fs := fs[i+1:]; - break; - end - end - return gettruefile(dirt,fs,ioFileseparator()); - end - end - end - end - private - function getinfo(); - begin - return %% -object tserlogersimplewnd1:tserlogersimplewnd - 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 - function setdata(d); + function SetData(d);override; begin if not ifarray(d)then return; - furl.text := d["addr"]; - fport.text := d["port"]; - fusr.text := d["usr"]; - fpwd.text := d["pwd"]; - fdir.text := d["dir"]; - end - function gettruefile(dir,n,fio); - begin - if dir and ifstring(dir)then + height := ItemHeight * (1+min(15,length(d))); + x := 10; + for i,v in d do begin - rfile := dir+fio+n; - if fileexists("",rfile)then return rfile; - for i,v in FileList("",dir+fio+"*") do + x := max(x,length(v)); + end + width := font.Width * (x+3); + inherited; + end + function InsureItemVisible(idx); //ƶǰĸ + begin + rc := GetIdxRect(idx); + c := ClientRect; + if rc[1]c[3]then + begin + SetYpos(1+GetYPos()+(rc[3]-c[3]+1)/GetYScrollDelta()); + end + end + function GetSelFileName; + begin + r := GetItem(getCurrentSelection()); + if pos("*",r)then + begin + return r[2:]; + end + return r; + end + function IncIndex(f); + begin + if ifnil(f)then f :=-1; + idx := getCurrentSelection(); + ct := ItemCount; + nidx := idx-f; + if idx=ct-1 then nidx := 0; + else if idx=-1 then nidx := 1; + SetCurrentSelection(nidx); + InsureItemVisible(nidx); + end +end +type TFindListWnd=class(TListBox) //ҵĵط + function Create(AOwner); + begin + inherited; + end + function CheckListItem(s);override; + begin + return ifarray(s); + end + function GetItemText(i);override; + begin + it := GetItem(i); + if it then r := it["caption"]; + if not ifstring(r)then return ""; + return r; + end + Published + private +end +type TFindWnd=class(TPage) + type TFindBtn=class(TBtn) + function Create(AOwner); + begin + inherited; + left := 425; + width := 160; + height := 25; + end + end + type TFindCheck=class(TCheckBtn) + function Create(AOwner); + begin + inherited; + left := 25; + width := 160; + height := 25; + end + end + function CreateWndInfo(btn,sec); // + begin + r := GetInfo(); + if sec then r["section"]:= sec; + r["btn"]:= btn; + end + function Create(AOwner);override; + begin + inherited; + OnClose := function(o,e) + begin + Parent.EndFind(); + o.visible := false; + e.Skip := true; + end + WsDlgModalFrame := true; + Visible := false; + WsPopUp := true; + WsCaption := true; + WSsYSMenu := true; + //WsSizeBox := true; + caption := ""; + SetBoundsRect(array(300,300,920,680)); + IncPaintLock(); + for i,v in array("","滻","ļ") do + begin + it := CreateApageItem(); + it.Caption := v; + PageItems.Push(it); + end + DecPaintLock(); + lg := 30; + FEdit_Target := new TEditList(self); + FEdit_repace := new TEditList(self); + FEdit_Type := new TEditList(self); + FEdit_dir := new TEditList(self); + FDirChooser := new TFolderChooseADlg(self); + FEdit_dir_btn := new TBtn(self); + flabels := array(); + for i,v in array("Ŀ:"," 滻Ϊ:","ļ:"," Ŀ¼:") do + begin + lb := new TLabel(self); + lb.TextAlign := AL9_CENTERRIGHT; + lb.caption := v; + lb.Top :=(i+1) * lg; + lb.Height := 25; + lb.Left := 20; + lb.Width := 120; + lb.Parent := self; + //lb.border := true; + flabels[i]:= lb; + end + FEdit_Target.left := 140; + FEdit_Target.top := lg; + FEdit_target.parent := self; + FEdit_target.Editer.OnKeyPress := thisfunction(EditerEnter); + FEdit_repace.left := 140; + FEdit_repace.top := lg+lg; + FEdit_repace.parent := self; + FEdit_type.left := 140; + FEdit_type.top := lg+lg+lg; + FEdit_type.Editer.Text := "*.tsf;*.tsl;"; + FEdit_type.parent := self; + FEdit_dir.left := 140; + FEdit_dir.Width := FEdit_dir.Width-20; + FEdit_dir_btn.Caption := ".."; + FEdit_dir_btn.top := lg+lg+lg+lg; + FEdit_dir_btn.Width := 18; + FEdit_dir_btn.left := 140+FEdit_dir.Width+2; + FEdit_dir_btn.height := 24; + FEdit_dir.top := lg+lg+lg+lg; + FEdit_dir.parent := self; + FEdit_dir_btn.OnClick := function(o,e) + begin + if FDirChooser.OpenDlg()then begin - fn := v["FileName"]; - if pos("D",v["Attr"])and not(fn in array(".",".."))then - begin - rfile := gettruefile(dir+fio+fn,n,fio); - if rfile then return rfile; - end + FEdit_dir.Editer.text := FDirChooser.Folder; + end + end + FBtn_Find := new TFindBtn(self); + FBtn_replace := new TFindBtn(self); + FBtn_Count := new TFindBtn(self); // + FBtn_replaceall := new TFindBtn(self); + FBtn_Find.caption := ""; + FBtn_replace.caption := "滻"; + FBtn_Count.caption := "ȫ"; + FBtn_replaceall.caption := "ȫ滻"; + FBtn_Find.top := lg; + FBtn_Find.parent := self; + FBtn_replace.top := lg+lg; + FBtn_replace.parent := self; + FBtn_replaceall.top := lg+lg+lg; + FBtn_replaceall.parent := self; + FBtn_Find.OnClick := thisfunction(FindBtnClick); + FBtn_replace.OnClick := thisfunction(FindBtnClick); + FBtn_Count.OnClick := thisfunction(FindBtnClick); + FBtn_replaceall.OnClick := thisfunction(FindBtnClick); + FBtn_Count.top := lg+lg+lg+lg; + FBtn_Count.parent := self; + FDirChooser.parent := self; + FCheck_revers := new TFindCheck(self); + FCheck_wrap := new TFindCheck(self); + FCheck_case := new TFindCheck(self); + FCheck_cycle := new TFindCheck(self); + FCheck_reg := new TFindCheck(self); + FCheck_subdir := new TFindCheck(self); + FCheck_gt := new TFindCheck(self); + FCheck_subdir.checked := true; + FCheck_subdir.Left := 425; + FCheck_subdir.top := lg+lg+lg+lg; + FCheck_subdir.Caption := "Ŀ¼"; + FCheck_revers.caption := ""; + FCheck_revers.top := lg * 5; + FCheck_revers.parent := self; + FCheck_wrap.caption := "ȫƥ"; + FCheck_wrap.top := lg * 6; + FCheck_wrap.parent := self; + FEdit_dir_btn.parent := self; + FCheck_case.caption := "ԴСд"; + FCheck_case.Checked := true; + FCheck_case.top := lg * 7; + FCheck_case.parent := self; + FCheck_cycle.caption := "ѭ"; + FCheck_cycle.Checked := true; + FCheck_cycle.top := lg * 8; + FCheck_cycle.parent := self; + FCheck_reg.caption := "ƥ"; + FCheck_reg.Enabled := false; + FCheck_reg.top := lg * 9; + FCheck_reg.parent := self; + FCheck_gt.caption := "\\tתtab"; + FCheck_gt.Checked := false; + FCheck_gt.top := lg * 9; + FCheck_gt.Left := FCheck_reg.width+FCheck_reg.Left+10; + FCheck_gt.parent := self; + FCheck_subdir.parent := self; + FCheck_reg.OnClick := function(o,e) + begin + FCheck_revers.Enabled := not(o.Checked); + FCheck_wrap.Enabled := not(o.Checked); + FCheck_case.Enabled := not(o.Checked); + end + FStatus := new TStatusBar(self); + //FStatus.Align := alNone; + FStatus.Items := array(("text":"","width":700)); + FStatus.Parent := self; + OnSelChanged := thisfunction(DoSelChanged); + ItemIndex := 0; + //SetStatusText(""); + end + function FindBtnClick(o,e); + begin + r := GetInfo(); + r["btn"]:= o.Caption; + Owner.DoFind(r,self); + end + function EditErEnter(o,e); + begin + if e.CharCode=13 then + begin + e.skip := true; + r := GetInfo(); + r["btn"]:= ""; + OWner.DoFind(r,self); + end + end + function GetInfo(); + begin + r := array(); + r["section"]:= CurrentITem.Caption; + s := FEdit_target.Editer.Text; + if FCheck_gt.Checked then + begin + s := Replacestr(s,"\\t","\t"); + end + r["target"]:= s; + s := FEdit_repace.Editer.Text; + if FCheck_gt.Checked then + begin + s := Replacestr(s,"\\t","\t"); + end + r["replace"]:= s; + r["filetype"]:= FEdit_type.Editer.Text; + r["dir"]:= FEdit_dir.Editer.Text; + r["c_revers"]:= FCheck_revers.Checked; + r["c_cycle"]:= FCheck_cycle.Checked; + r["c_wrap"]:= FCheck_wrap.Checked; + r["c_case"]:= FCheck_case.Checked; + r["c_reg"]:= FCheck_reg.Checked; + r["c_dir"]:= FCheck_subdir.Checked; + return r; + end + function SetStatusText(s); + begin + if ifstring(s)then FStatus.SetItemText(s,0); + end + function OpenFind(); + begin + ItemIndex := 0; + end + function OpenReplace(); + begin + ItemIndex := 1; + end + function Show(f);override; + begin + it := Owner.GetCurrentEditer(); + if it then + begin + s1 := it.SelText; + if s1 and length(s1)<20 and not(pos("\n",s1))then + begin + s := s1; + end else + s := it.CaretWords(); + if s then SetFindText(s); + FEdit_target.Editer.SetFocus(); + end + inherited; + end + Function SetFindText(s); //òҵַ + begin + FEdit_target.Editer.Text := s; + FEdit_target.Editer.SetSel(0,length(s)); + end + function SaveCurrentEditer(); //һ + begin + for i,v in array(FEdit_target,FEdit_dir,FEdit_type,FEdit_repace) do + begin + v.PushItem(v.Editer.Text); + end + //if e then e.PushItem(e.Editer.Text); + end + function DoSelChanged(o,e); + begin + if CurrentItem then Caption := CurrentItem.Caption; + case Caption of + "": + begin + for i := 1 to 3 do flabels[i].Visible := false; + FEdit_dir.visible := false; + FEdit_dir_btn.visible := false; + FEdit_type.visible := false; + FEdit_repace.visible := false; + FBtn_replace.visible := false; + FBtn_count.Visible := true; + FBtn_Replaceall.Visible := false; + FCheck_subdir.visible := false; + FCheck_Revers.visible := true; + FCheck_cycle.Visible := true; + end + "滻": + begin + flabels[1].Visible := true; + for i := 2 to 3 do flabels[i].Visible := false; + FEdit_dir.visible := false; + FEdit_dir_btn.visible := false; + FEdit_type.visible := false; + FEdit_repace.visible := true; + FBtn_replace.visible := true; + FBtn_count.Visible := false; + FBtn_Replaceall.Visible := true; + FCheck_subdir.visible := false; + FCheck_Revers.visible := false; + FCheck_cycle.Visible := true; + end + "ļ": + begin + for i := 1 to 3 do flabels[i].Visible := true; + FEdit_dir.visible := true; + FEdit_dir_btn.Visible := true; + FEdit_type.visible := true; + FEdit_repace.visible := true; + FBtn_replace.visible := false; + FBtn_count.Visible := false; + FBtn_Replaceall.Visible := true; + FCheck_subdir.visible := true; + FCheck_Revers.visible := false; + FCheck_cycle.Visible := false; end end end + function DoControlAlign();override; + begin + inherited; + if not FStatus then return; + rc := ClientRect; + rc[1]:= rc[3]-30; + FStatus.SetBoundsRect(rc); + end + function recycling();override; + begin + inherited; + FStatus := nil; + end + function GetHistory(); + begin + r := array(); + r["finds"]:= FEdit_Target.Items; + r["repalces"]:= FEdit_repace.Items; + r["dirs"]:= FEdit_dir.items; + r["findfiletyps"] := FEdit_Type.items; + return r; + end + function SetHistory(d); + begin + if not ifarray(d)then return; + fds := d["finds"]; + if ifarray(fds)then + begin + FEdit_Target.Items := fds; + end + rps := d["repalces"]; + if ifarray(rps)then + begin + FEdit_repace.Items := rps; + end + dirs := d["dirs"]; + if ifarray(dirs)then + begin + FEdit_dir.items := dirs; + end + dirs := d["findfiletyps"]; + if ifarray(dirs)then + begin + FEdit_Type.items := dirs; + end + end + private + FStatus; + FDirChooser; + // + FEdit_Target; + FEdit_repace; + FEdit_type; + FEdit_dir; + FEdit_dir_btn; + FBtn_Find; + FBtn_replace; + FBtn_Replaceall; + FBtn_Count; // + flabels; + FCheck_revers; + FCheck_wrap; + FCheck_case; + FCheck_cycle; + FCheck_reg; + FCheck_subdir; + FCheck_gt; end -function tdbgcallback(); -begin - global g_tsldbgcallback_handle; - if g_tsldbgcallback_handle then call(g_tsldbgcallback_handle,sysparams); + +type TGoToLineWnd=class(TVCForm) //ת + function Create(AOwner);override; + begin + inherited; + wssizebox := false; + minmaxbox := false; + WsDlgModalFrame := true; + width := 300; + height := 80; + caption := "ת.."; + FLabel := new TLabel(self); + FLabel.SetBoundsRect(array(3,10,70,35)); + FEdit := new TEdit(self); + FEdit.SetBoundsRect(array(75,10,200,35)); + FBtn := new TBtn(self); + FBtn.SetBoundsRect(array(210,10,280,35)); + FLabel.Caption := "Ŀλ:"; + FBtn.Caption := "λ"; + FLabel.parent := self; + FEdit.parent := self; + FEdit.OnKeyPress := function(o,e) + begin + if e.CharCode=13 then + begin + e.skip := true; + GotoTextInteger(); + end + end + OnClose := function(o,e) + begin + o.visible := false; + e.skip := true; + end + FBtn.parent := self; + FBtn.OnClick := function(o,e) + begin + GotoTextInteger(); + end + end + function DoControlAlign();override; + begin + end + function ShowGoto(); + begin + show(); + FEdit.SetFocus(); + FEdit.Text := ""; + end + private + function GotoTextInteger(); + begin + id := FEdit.Text; + id := StrToIntDef(id,0); + if id>0 then + begin + it := Owner.GetCurrentItem(); + Visible := false; + Owner.OpenAndGotoFileByName(it.ScriptPath,id); + //it.SetFocus(); + //return ; + it := Owner.GetCurrentEditer(); + if not it then return; + //it.ExecuteCommand(it.ecGotoXY,array(id,1)); + //Visible := false; + it.SetFocus(); + end + end + FEdit; + FBtn; end + + + function filenameIsTheSame(p1,p2); begin if not(ifstring(p1)and ifstring(p2))then return 0; @@ -7111,1036 +5002,15 @@ type TMouseMoveList=class(TListBox) private FCurrentIndex; end -type TTSLDataGrid=class(TDrawGrid) - {** - @explan(˵)TSLͶչʾ %% - **} - private - static FHGS; - ftext; - FCols; - Fdata; - FMRWD; - FGridControl; - FRows; - FShowTwo; - FCControls; - FColumnWidth; - FRowHeader; - FControlIndex; - FStringAlign; - FNumberAlign; - FDefAlign; - FCanedit; - function showstring(f); - begin - if ifarray(Fdata)then - begin - gettxtobj(); - ftext.text := ""; - if f then - begin - ftext.HighLighter := FHGS[1]; //FHGS[1]; - ftext.Caption := "json"; - ftext.text := ejsonformat(Fdata); - end else - begin - ftext.HighLighter := FHGS[0]; - ftext.Caption := "ԭ...."; - ftext.text := tostn(Fdata); - end - ftext.show(); - end - end - function getdata(i,j,cp,indexs); - begin - {** - @explan(˵) ȡ - **} - if j=0 and FRowHeader then return FRows[i]; - r := FRows[i]; - if FCols and FShowTwo then - begin - if FRowHeader then c := FCols[j-1]; - else c := FCols[j]; - d := FData[r][c]; - if cp then cp := "["+tostn(r)+"]"; - if cp then cp += "["+tostn(c)+"]"; - if indexs then indexs := array(r,c); - end else - begin - d := FData[FRows[i]]; - if cp then - begin - cs := r; - if ifstring(cs)then cs := replacetext(cs,".","\\o"); - cp := "["+tostn(cs)+"]"; - end - if indexs then indexs := array(r); - end - return d; - end - function SetStringAlign(v); - begin - if v <> FStringAlign then - begin - FStringAlign := v; - InvalidateRect(nil,true); - end - end - function SetNumberAlign(v); - begin - if v <> FNumberAlign then - begin - FNumberAlign := v; - InvalidateRect(nil,true); - end - end - function SetdefAlign(v); - begin - if v <> FDefAlign then - begin - FDefAlign := v; - InvalidateRect(nil,true); - end - end - function GetTSLData(); - begin - return FData; - end - function StrToNumber(s); - begin - if pos(".",s)then - begin - return StrToFloatDef(s,0); - end else - begin - return StrToIntDef(s,0); - end - end - function SetRowHeader(v); - begin - nv := v?true:false; - if FRowHeader <> nv then - begin - FRowHeader := nv; - FD := FData; - SetData(array()); - SetData(FD); - end - end - function SetTwoD(v); - begin - //if parent is class(TTSLDataGrid)then exit; - nv := v?true:false; - if nv <> FShowTwo then - begin - if FCanedit and nv then return; //༭ - FD := FData; - SetData(array()); - FShowTwo := nv; - SetData(FD); - end - end - function setdatap(); - begin - if not Fdata then exit; - FCols := nil; - FRows := mrows(Fdata,1); - FCL := mcols(Fdata,1); - allFCL := true; - if FShowTwo then - begin - for i,v in FData do - begin - if not ifarray(v)then - begin - allFCL := false; - break; - end - end - end - fcs := array(); - wd := 150; - for i,v in FRows do - begin - if ifstring(v)then - begin - wd := max(wd,length(v) * 9); - if wd>200 then break; - end - end - if RowHeader then - begin - fcs[0]:= array("text":" ","width":min(200,wd)); - end - 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":FMRWD); - end - end else - begin - fcs[length(fcs)]:= array("text":" ","width":ColumnWidth>20?ColumnWidth:150); - end - Columns := fcs; - ItemCount := length(FRows); - end - function gettxtobj(); - begin - if not ftext then - begin - FText := new TFTSLScriptMemo(self); //tmemo(self); - //ftext.HighLighter := FHGS[0]; - ftext.readonly := true; - ftext.left := left+20; - ftext.top := top+20; - ftext.width := 500; - ftext.height := 400; - ftext.wspopup := true; - FText.WsSysMenu := true; - ftext.WsSizeBox := true; - FText.onclose := function(o,e) - begin - e.skip := true; - o.visible := false; - end - FText.parent := self; - end - return ftext; - end - function SetData(data,f); - begin - if Fdata=data then return; - DeleteAllColumns(); - if ftext then ftext.Visible := false; - for i,v in mrows(FCControls,1) do - begin - obj := FCControls[v]; - obj.TSLdata := nil; - obj.Visible := false; - obj.Parent := nil; - end - FCControls := array(); - FData := data; - setdatap(); - end - function itemishow(r,r2); - begin - return r[2]r2[2]; - end - function getdtobject(); - begin - global Fdtobjects; - if not ifarray(Fdtobjects)then Fdtobjects := array(); - for i,v in Fdtobjects do - begin - p := v.Parent; - if not p then - begin - return v; - end - end - o := new TTSlDataGrid(initializeapplication()); - o.ControlIndexs(idexs); - o.height := 500; - o.width := 500; - o.Twodimensional := Twodimensional; - o.Visible := false; - o.wspopup := true; - o.WsSysMenu := true; - o.WsSizeBox := true; - o.onclose := thisfunction(ShowDataClose); - Fdtobjects[length(Fdtobjects)]:= o; - return o; - end - function getitemcontrol(d,p,i,j,tp,cp,idexs); - begin - idx := format("%d*%d",i,j); - o := FCControls[idx]; - if tp="grid" then - begin - if not o then - begin - o := getdtobject(); - o.parent := self; - FCControls[idx]:= o; - end - //o.Twodimensional := Twodimensional; - if o.wspopup then p := ClientToScreen(p[0],p[1]); - o.left := p[0]-20; - o.top := p[1]-20; - o.caption := caption+"."+cp; - o.TSLdata := d; - o.show(); - end - end - public - function create(AOwner);override; - begin - inherited; - if not fhgs then - begin - FHGS := array(); - FHGS[0]:= new TTslSynHighLighter(initializeapplication()); - FHGS[1]:= new TJsonSynHighLighter(initializeapplication()); - end - GridLine := true; - FCControls := array(); - FRowHeader := true; - FixedColumns := 1; - itemheight := 25; - caption := ""; - FMRWD := 150; - FShowTwo := false; - OndblClick := thisfunction(GridCellDblClick); - FNumberAlign := AL9_CENTERRIGHT; - FStringAlign := AL9_CENTERLEFT; - FDefAlign := AL9_CENTER; - mu := new TPopupmenu(self); - for i,v in array("һά","ά","ԭ","json") do - begin - mi := new TMenu(self); - mi.parent := mu; - mi.caption := v; - mi.OnClick := function(o,e) - begin - case o.caption of - "һά": - begin - Twodimensional := false; - end - "ά": - begin - if FCanedit then return; - Twodimensional := true; - end - "ԭ": - begin - showstring(); - end - "json": - begin - showstring(1); - end - end - end - end - PopupMenu := mu; - end - function DoDrawSubItem(o,e);override; - begin - inherited; - if e.skip then exit; - dc := e.canvas; - i := e.itemid; - j := e.subitemid; - d := getdata(i,j); - src := e.SubItemRect; - if j=0 and FRowHeader then - begin - //_wapi.DrawFrameControl(dc.Handle,src,DFC_BUTTON,DFCS_BUTTONPUSH); - dc.Draw("framecontrol",array(src[0:1],src[2:3]),DFC_BUTTON,DFCS_BUTTONPUSH); - end - ds := ""; - dc.font.color := 0; - if ifarray(d)then - begin - ds := format("",length(d)); - //dc.drawtext(ds,src); - class(TLabel).CanvasDrawAlignText(dc,src,ds,FDefAlign); - end else - if ifstring(d)then - begin - ds := d; - //dc.drawtext(ds,src); - class(TLabel).CanvasDrawAlignText(dc,src,ds,FStringAlign); - end else - begin - ds := tostn(d); - if d<0 then dc.font.color := rgb(200,0,0); - if ifnumber(d)and j>0 then - begin - //dc.drawtext(ds,src,DT_RIGHT); - class(TLabel).CanvasDrawAlignText(dc,src,ds,FNumberAlign); - end else - begin - //dc.drawtext(ds,src); - if not ifnil(d)then class(TLabel).CanvasDrawAlignText(dc,src,ds,FStringAlign); - end - end - end - function GridCellDblClick(o,e);virtual; - begin - cp := 1; - cl := e.isubitem; - if cl<1 and FRowHeader then exit; - indexs := 1; - d := getdata(e.iitem,cl,cp,indexs); - p := e.ptaction; - if ifarray(d)then - begin - if d then getitemcontrol(d,p,e.iitem,cl,"grid",cp,indexs); - end else - begin - gettxtobj(); - ftext.caption := Caption+"."+cp; - FText.text := tostn(d); - FText.show(); - end - end - function ShowDataClose(o,e); - begin - o.show(false); - o.TSLdata := array(); - e.skip := true; - end - function Recycling();override; - begin - inherited; - ftext := nil; - FCols := nil; - Fdata := nil; - FControls := array(); - end - function ControlIndexs(dx); - begin - {** - @ignore() %% - **} - if dx then FControlIndex := dx; - return FControlIndex; - end - property Twodimensional:bool read FShowTwo write SetTwoD; - property TSLdata:variable read GetTSLData write SetData; - property ColumnWidth:integer read FColumnWidth write FColumnWidth; - property RowHeader:bool read FRowHeader write SetRowHeader; - property StringAlign:AlignStyle9 read FStringAlign write SetStringAlign; - property NumberAlign:AlignStyle9 read FNumberAlign write SetNumberAlign; - property DefAlign:AlignStyle9 read FDefAlign write SetdefAlign; - {** - @param(Twodimensional)(BOOL) Ƿάǿƶάչʾ %% - @param(TSLdata)(array) tsl %% - **} -end -type TGroupGridA=class(TDrawGrid) - {** - @explan(˵)㼶ܵı %% - **} - {** - @expample() - FGrid := new TGroupGridA(self); - FGrid.border := true; - FGrid.OddLineBKColor := 0xFF0000; //бɫ - FGrid.EvenLineBKColor := 0x00FF00;//żбɫ - cls := array(("text":"a","width":300),("text":"b","width":30)); //ñ - FGrid.Columns := cls; - d := array( - ("id":1,"data":("",true)), - ("id":2,"data":("a",false)), - ("id":3,"pid":1,"data":(("value":"a","type":"string","font":("color":rgb(200,0,0))),true)), - ("id":4,"pid":1,"data":("a",false)), - ("id":5,"pid":3,"data":("a",false)) - ); - FGrid.SetNodeData(d); // - //ʹ FGrid.GetNodeData(); - **} - uses tslvcl; - function Create(AOwner);override; - begin - inherited; - GridLine := true; - FOddLineBKColor := 0xFAF3F1; - FEvenLineBKColor := 0xFFFFFF; - FNodeManger := new TGroupManger(); - GridLine := true; - FNodes := array(); - FCellediter := new tedit(self); - FCellediter.Visible := false; - FCellediter.Parent := self; - FCellediter.onkeyup := thisfunction(doeditcell); - FCellediter.onKillFocus := function(o,e) - begin - o.Visible := false; - end - //inherited SetColumns(array(("text":"","width":25))); - end - function doeditcell(o,e); - begin - //echo "\r\nkey up:",e.charcode; - case e.charcode of - 13: - begin - e.skip := true; - o.Visible := false; - callDatafunction(FCelledit,o._Tag,o.text); - end - end; - end - function SetNodeData(d,ncls); // - begin - FCellediter.Visible := false; - if not ncls then - begin - FCurrentNode_a := nil; - FNodeManger.RootNode.RecyclingChildren(); - FNodeData := array(); - FNodeIds := array(); - end - for i,v in d do - begin - id := v["id"]; - nd := FNodeData[id]; - if nd then - begin - for j,vj in v["data"] do - begin - nd[j]:= vj; - end - continue; - end - pid := v["pid"]; - nd := CreateNode(); - nd.FNodeid := id; - nd.FNNNODE := V["nnp"]; - nd.Expanded := false; - pnd := FNodeData[pid]; - for j,vj in v["data"] do - begin - nd[j]:= vj; - end - if not(pnd)then AppendNode(nd); - else AppendNode(nd,pnd); - FNodeData[id]:= nd; - FNodeIds[id]:= pid; - end - UpdateWindow(); - InValidateRect(nil,false); - end - function GetNodeData(); // - begin - r := array(); - ri := 0; - for i,v in FNodeData do - begin - r[ri,"id"]:= i; - r[ri,"pid"]:= FNodeIds[i]; - r[ri,"data"]:= v.FData; - ri++; - end - return r; - end - function getcurrentnodedata(); - begin - if FCurrentNode_a then - begin - d := FCurrentNode_a.Fdata; - if d[3]="sysparams+" then return; - d[2]:= "*"; - FNodeManger.getcdnodes(FCurrentNode_a,r); - reindex(FNodeData,r); - reindex(FNodeIds,r); - FCurrentNode_a.RecyclingChildren(); - FCurrentNode_a.Expanded := false; - calldatafunction(FCelldbclk,self,array(1,d,FCurrentNode_a)); - end - end - function MouseDown(o,e);override; - begin - // - inherited; - if e.shiftdouble()then - begin - r := HitTestItem(e.xpos,e.ypos); - if r[0]>= 0 and r[1]=1 then - begin - nd := FNodes[r[0]]; - d := nd.Fdata; - if d[2]in array("str","int","lstr","double","nil","int64")then - begin - try - rc := o.GetSubItemRect(r[0],r[1]); - FCellediter.SetBoundsRect(rc); - try - FCellediter.Text := d[1]["value"]; - except - FCellediter.Text := ""; - end; - FCellediter._Tag := array(r[1],d,nd); - FCellediter.show(); - FCellediter.SetFocus(); - except - end; - return; - end else - if d[2]="array" then - begin - calldatafunction(FShowarray,d); - return; - end - calldatafunction(FCelldbclk,o,array(r[1],d,nd)); - end - end - FCellediter.Visible := false; - end - function MouseUp(o,e);override; //չ۵ - begin - inherited; - r := HitTestItem(e.xpos+5,e.ypos); - if r[0]>= 0 then - begin - nd := FNodes[r[0]]; - if FCurrentNode_a <> nd then - begin - FCurrentNode_a := nd; - InValidateRect(nil,false); - end - if r[1]=0 then - begin - if nd and nd.NodeCount>0 then - begin - if nd.Expanded then nd.UnExpand(); - else nd.Expand(); - UpDateWindow(); - end - return; - end - v := nd[r[1]]; - if ifarray(v)then - begin - if v["type"]="link" then - begin - //return CallMessgeFunction(OnLinkCellClik,o,v); - end - end - end - end - function AppendNode(nd,pnd); //ڸڵ׷ӽڵ - begin - if not(pnd is class(TNode))then _pnd := FNodeManger.RootNode; - else _pnd := pnd; - _pnd.AppendNode(nd); - end - function InsertNode(nd,idx,pnd); //ڵ - begin - if not(pnd is class(TNode))then _pnd := FNodeManger.RootNode; - else _pnd := pnd; - _pnd.InsertNode(nd,idx); - end - function CreateNode(); //ڵ - begin - return FNodeManger.CreateNode(); - end - function InsertNodes(nds,idx,pnd); //ӽڵ - begin - if not(pnd is class(TNode))then _pnd := FNodeManger.RootNode; - else _pnd := pnd; - _pnd.InsertNodes(nds,idx); - end - function GetNodeByIndex(idx); //ͨŻýڵ,update - begin - return FNodes[idx]; - end - function UpDateWindow(); //updateڵ - begin - //´ - FNodes := FNodeManger.ListNodes(); - ItemCount := length(FNodes); - end - function DoDrawItem(o,e);override; //ƵԪ - begin - inherited; - j := e.Subitemid; - i := e.itemid; - DObject := FNodes[i]; - if not DObject then return; - dc := e.canvas; - e.rcitem := rec; - rec := e.SubItemRect; - wd := 4; - if FCurrentNode_a=DObject then - begin - dc.Brush.Color := 0xffce87; - end else - begin - if i mod 2 then - begin - dc.Brush.Color := FOddLineBKColor; // FOddLineBKColor := 0xFAF3F1; - end else - dc.Brush.Color := FEvenLineBKColor; // FEvenLineBKColor := 0xFFFFFF; - end - dc.FillRect(rec); - dc.pen.color := 0xa8a8a8; - //dc.pen.style := PS_DASHDOT; - dc.pen.width := 2; - dc.moveto(array(rec[2],rec[1])); - dc.LineTo(array(rec[2],rec[3])); - if j=0 then - begin - cj :=-1; - pd := DObject.Parent; - while pd do - begin - if not(pd.FNNNODE)then cj++; - pd := pd.Parent; - end - wd := cj * 20+4; - if DObject.NodeCount>0 then - begin - if DObject.Expanded then bmp := FBmpExpand; - else bmp := FBmpUnexpand; - bmp.Draw(dc,rec[0]+wd+1,rec[1]+10,SRCAND); - //dc.stretchdraw(array(rec[0]+2+wd,rec[1]+2,rec[0]+15+wd,rec[1]+15),bmp); - end - //rec[0]+=wd+4+18; - rec[0]+= wd+16; - end - if j >= 0 and DObject then - begin - rec[0]+= 4; - v := DObject[j]; - if ifstring(v)then - begin - //if j=0 and v="sysparams" then dc.font.color := 0x0000ff; - //else dc.font.color := 0; - dc.DrawText(v,rec,DT_SINGLELINE .| DT_VCENTER); - end else - begin - if ifarray(v)then - begin - val := v["value"]; - typ := v["type"]; - ft := v["font"]; - rebk := false; - if ifarray(ft)and ft then - begin - bf := dc.font.fontinfo(); - dc.font.setvalues(ft); - rebk := true; - end - if typ="link" then - begin - udl := dc.font.underline; - fcl := dc.Font.Color; - dc.font.underline := true; - dc.Font.Color := rgb(0,0,254); - end - if ifstring(val)then - begin - dc.drawtext(val,rec,DT_SINGLELINE .| DT_VCENTER .| DT_NOPREFIX); - end else - if ifarray(val)then - begin - dc.drawtext(format("ARRAY<[%d]>",Length(val)),rec,DT_SINGLELINE .| DT_VCENTER .| DT_NOPREFIX); - end - //ԭ - if rebk then - begin - dc.font.SetValues(bf); - end else - if typ="link" then - begin - dc.font.underline := udl; - dc.Font.Color := fcl; - end - end else - begin - if not ifnil(v)then dc.drawtext(tostn(v),rec,DT_SINGLELINE .| DT_VCENTER .| DT_NOPREFIX); - end - end - end - end - function Recycling();override; - begin - inherited; - FCurrentNode_a := nil; - FCelldbclk := nil; - FShowarray := nil; - FCelledit := nil; - FOnLinkCellClik := nil; - FBoolColumns := nil; - FOddLineBKColor := nil; - FEvenLineBKColor := nil; - FNodeData := nil; - FNodeIds := nil; - FCellediter := nil; - end - published // - property OddLineBKColor read FOddLineBKColor write FOddLineBKColor; - property EvenLineBKColor read FEvenLineBKColor write FEvenLineBKColor; - property BoolColumns read FBoolColumns write FBoolColumns; - property OnLinkCellClik read FOnLinkCellClik write FOnLinkCellClik; - property celldbclk read FCelldbclk write FCelldbclk; - property celledit read FCellEdit write FCelledit; - property Showarray read FShowarray write FShowarray; - private - function GetChildAllChecked(nd,j,ck); - begin - nck := not(ck); - for i := 0 to nd.NodeCount-1 do - begin - cnd := nd.GetNodeByIndex(i); - if ifobj(cnd)then - begin - if cnd.NodeCount=0 then - begin - if cnd[j]=nck then return 0; - end - if 0=GetChildAllChecked(cnd,j,ck)then return 0; - end - end - return 1; - end - function CheckAllChild(nd,j,ck); - begin - for i := 0 to nd.NodeCount-1 do - begin - cnd := nd.GetNodeByIndex(i); - if ifobj(cnd)then - begin - vi := nd[j]; - if vi=0 or vi=1 then cnd[j]:= ck; - CheckAllChild(cnd,j,ck); - end - end - end - FBoolColumns; - FOddLineBKColor; - FEvenLineBKColor; - FNodeData; - FNodeIds; - FOnLinkCellClik; - FCelldbclk; - FCelledit; - FShowarray; - FCellediter; - protected - type TGroupNode=class(TNode) //groupgridڵ - uses tslvcl; - function Create(); - begin - inherited; - FData := array(); - end - function Operator[](idx); - begin - return FData[idx]; - end - function Operator[1](idx,val); - begin - return FData[idx]:= val; - end - FNodeid; - FNNNODE; - //private - FData; - end - type TGroupManger=class(TNodeManger) //groupڵ - function Create(); - begin - inherited; - end - function CreateNode();override; - begin - return new TGroupNode(); - end - end - class function Sinit();override; - begin - inherited; - GetSJPng(); - end - private - FCurrentNode_a; - FNodes; - FNodeManger; - static FBmpExpand; - static FBmpUnexpand; - class function GetSJPng(); - begin - if not FBmpExpand then - begin - FBmpExpand := new TBitmap(); - FBmpExpand.readvcon(HexFormatStrToTsl("0502000000060400000074797065000203000000696D670006040000006461746 -10002C700000089504E470D0A1A0A0000000D494844520000000A0000000A0806 -0000008D32CFBD000000017352474200AECE1CE90000000467414D410000B18F0 -BFC6105000000097048597300000EC300000EC301C76FA8640000005C49444154 -285363F84F24204DE1EA7DF8F1ABF740851FBFFEFF9FD9F3FF7F443D6E7CF53ED -4C41B0FFFFF8F6FC1AEE8D005900A24379EBA86A968D729A82410A07866F76984 -A2CD47A1825080E16B9807D00186425C804885FFFF030081696EBEB08C861D000 -0000049454E44AE42608200")); - end - if not FBmpUnexpand then - begin - FBmpUnexpand := new TBitmap(); - FBmpUnexpand.readvcon(HexFormatStrToTsl("0502000000060400000074797065000203000000696D670006040000006461746 -10002BF00000089504E470D0A1A0A0000000D494844520000000A0000000A0806 -0000008D32CFBD000000017352474200AECE1CE90000000467414D410000B18F0 -BFC6105000000097048597300000EC300000EC301C76FA8640000005449444154 -285363F88F0672FAFEFF3F7A09CA4102180A23EA2178DF39A80014E05408C23B4 -E40058100AF4210DE7404224E502108AFDE474D852045208057214C1108E05488 -AC08043014164DC654F4FFFFFFFF0022DF66E2EA30F3BB0000000049454E44AE4 -2608200")); - end - end -end -type TNodeManger=class //ڵ - uses tslvcl; - function Create(); - begin - FRootNode := CreateNode(); - end - function CreateNode();virtual; - begin - return new TNode(); - end - function ListNodes();virtual; - begin - r := array(); - GetExpandedNodes(FRootNode,r,0); - return r; - end - function GetNodeByListIndex(id);virtual; - begin - return GetExpandedNodeById(FRootNode,0,id); - end - function getcdnodes(nd,r); - begin - if not ifarray(r)then r := array(); - for i := 0 to nd.NodeCount-1 do - begin - cnd := nd.GetNodeByIndex(i); - r[cnd.FNodeid]:= nil; - getcdnodes(cnd,r); - end - end - Property RootNode read FRootNode; - Private - function GetExpandedNodes(nd,r,ct); - begin - for i := 0 to nd.NodeCount-1 do - begin - cnd := nd.GetNodeByIndex(i); - r[ct++]:= cnd; - if cnd.NodeCount>0 and cnd.Expanded then GetExpandedNodes(cnd,r,ct); - end - end - function GetExpandedNodeById(nd,ct,id); - begin - for i := 0 to nd.NodeCount-1 do - begin - cnd := nd.GetNodeByIndex(i); - if ct=id then return cnd; - ct++; - if cnd.NodeCount>0 and cnd.Expanded then - begin - r := GetExpandedNodeById(cnd,ct,id); - if r then return r; - end - end - end - private - FRootNode; -end -function getdebugicons(); -begin - r := array(); - r[""]:= "0502000000060400000074797065000203000000696D670006040000006461746 -100021003000089504E470D0A1A0A0000000D4948445200000018000000180806 -000000E0773DF8000000017352474200AECE1CE90000000467414D410000B18F0 -BFC6105000000097048597300000EC300000EC301C76FA864000002A549444154 -484BAD958952DA501486592ACAA652A4E2C6BE18A22202A540DDA6639FABCB540 -58D200AA22C21019EAF8FF0F704AE89B59A9982DFCC9924E4DEF3DD73C84D0C60 -7CED7238E96CB2ABB743157C11E314511C53BC25AAE044A2E4BD108EC4200EBB0 -1F6EBF46815C8611CCB945CF2E340F461BFBBC1EE4C872A381E0470D8A7C4FD75 -14A555E4452FF22D2FBB3B39AAE068E8C7FE601D85FE0AF2D2077CEC2D21DB762 -37BBFC4464C862A38186EE0F380920F3CC8C8EF91E92D22DD5944AAB580BD3B17 -1BF5FFA882FDE11A0AC36564FB6EA4E505A47A4EECB41D483ED8B1DDA0E3ED3C1 -BF92FBF396E14CFCF15544171B88ADCD083ECC08594E4C0B668C5567B167C93A2 -318BC48D157CD5C146BFCCD3C48FA802A53DB901ADBE3F8F64CF06BE330BAEFD0 -EF1A609F1BA199BB5197095396C09AF4B7405C5A177D49E3D995A23CE21D19941 -ECDE8448C38048CD8068D584A8402281AA29BF2CD115140624905DD895ECE0BBB -4FA0733227794FCDA80B06040F0928E17242A5355E7566C979C6CA686BE405E46 -5A2281E800DFB62046AD89DE8C93874A2438A5E319C5B911B1730B36CF6C6CA68 -6AEE093444F50CF8564DB8EC403B5A76142A8AA250FFE64F18BAA3A35B3597FA3 -2B50766EA64B15B49C48DC5910AD1B11BE52563C4E1CF83E0EE5FC35F42BE890A -0E5C64E93047512DC90807A1EA0D58F927F1B871EFA15D07B27D37423D97082AB -CD21563523541EB74411F874922B891F933F3D57D02AB85F41A64102DAB1FCB50 -D316106E1B2712CF8A1BF723DD499B90609EA1EECD616C05FD910BFB4205232D3 -1F6C642326436BD1ED1AB2B565EC565CA3DDCA95ADA3C7715A5441A1B6814CD58 -BD4951B5B17F3E04A7676673AB40AAA3EE42AAB480B1E242F267F3D3F47ABA0EA -474E5843E672FAAFD8535441B112445EF0B1ABB702F803D2475555757FB6FA000 -0000049454E44AE42608200"; - return r; -end + + + function GetEditIcons(); begin r := array(); - r["ļ"]:= "0502000000060400000074797065000203000000696D670006040000006461746 -10002DB02000089504E470D0A1A0A0000000D4948445200000026000000200806 -0000007E640AB3000000017352474200AECE1CE90000000467414D410000B18F0 -BFC6105000000097048597300000EC300000EC301C76FA8640000027049444154 -5847ED97DF4B537114C0EFDF104410414808D54B62504F113D590FBDF86A083E0 -4820FD10F028320EAA51E7ACD880C451DA8A5A258334B1333FAF51211856E7777 -D3DAE62CE6E6D674DB3D9D73EEF56EB77D37B6D5BE97A00F1C3676B7EFF9F03DE -7FB63CAB43F011D3361383DB652760C2DC6A0D6280D7D9A3079A9D8716709FCB1 -2D7388DAA050124A562EB7DE7D67B1F995A4F9496DF82F5629158B3D0F2458ACD -A689B0AC2C3C5B8395A712A168B6D66E1DAAB08FFA69AA07CADEEA0395A712A16 -FB53CACDF76F8A851219B8F976ADAAA045220ACA77A8CF277CB61D6A74ABB4D88 -9E1000FE44414157BAA6DF0177A3EADF3D6202B86F1B82B2976793EC25F904DE7 -4B23AF502CA3EBD0D8AF712965D334B20CC787026231B7666CA25446997C8CA46 -067D7125CC159138A5D9A5B75A48CBD38119477528D178A6D6674D8DFA3C2499C -52D99C9B0DB35834952D147BECCBAD4699A4B33A1C1BF45B7D5D2076FE85612D9 -B37C19F9C97FA8BB089A5B08C7BEF7BA179DCDE7332E8FA10B5FA8BB0894D789D -292371763AC4B9A9BF089B58FBB3102E570FBF97C93A5EA50E0F68D0F428B7E02 -CB1445AE73DE4CC936FE62379CC2E2779B6AE2E18FD455862639E383F1CF82CBF -8CB7DFFFB0F5176189D1AD921ADF095AB04ABBEEE6FA8B60B153B899D22BF5986 -C8278E73BD8EBC3C9B16FE82C76D4E567B1512CA76C26556327B8FE7ACDFCC480 -C5F675AB70008F2127B88142E4E0C613271F16A3B88007B713344F7C853DF73CB -6FE222CB129BCB1CAC68B77FBBA6EF149A3D43F5061371AD7E18AAC5960F2EDA0 -1D203F6852E8CFCBEF28AE2F3138E2D2C403FE8DC89312895D9C0B43326D2F230 -0C02FA1DC4D3F567030CC0000000049454E44AE42608200"; - r["ȫ"]:= "0502000000060400000074797065000203000000696D670006040000006461746 -100025302000089504E470D0A1A0A0000000D4948445200000020000000200806 -000000737A7AF4000000017352474200AECE1CE90000000467414D410000B18F0 -BFC6105000000097048597300000EC300000EC301C76FA864000001E849444154 -5847ED974D4B42411486EF7FE9EFB40A8268518B68578B9605EDA25D50B4A88C2 -40C8A5A5408B5882430C122888220B2FC46F2A696A9842935F91EEF19A68B9479 -3F16D50B0766CE9999F771D0EB3D9A3054BDD545767A5F447B16C455D7842381B -3E1012F16013CCC055A6E7032F4D9C326402DFB2C93A991755139898A78FFB25C -84B995E00F873331CF8C6F4B3F786BF7537BD28CA50258950AC04A0EFB28076FE -DAE7B9E26A0635901C09EC4D0AA281FDDD0BC1540C117A61CBC350CEC0430EF6D -05002FF6FDBD003086FE1E40D17F29729EA03CCF7500B32C03206F253A028031E -7ED0AF536BF05803293BB446D47E02C556D0138A97F808E005037AFF92A67CEAB -42EDC700BC4E15FFC45471CE5680F271446E78DA3937B22E02A44637E8252231E -815B13E8F917509E0AD5AA77A29702DF499031ABFBFD4A8C60F2C55B60314FD17 -B25E398DD138BF12A29A2B00E9C6F5F31A8EF880976AAD0038670B405D2F512DB -7D4FC7B45608CDC6BB220CDF8918B39DF00E7F0A66D56DB0085B5301D520E468C -4CE317D11823875ADE1B92460806507396009CD227006EC5DC0478DC3A234F786 -BE8D53041C7E29662BD8BE4096F0D8D2226083C6CD034E0369C089C9D1EDB947E -F0A6E694BFCD6E063C21D99EA35144AFC6AD9A1381B3E101AFA684F80055B3808 -F56B6A2590000000049454E44AE42608200"; - r[""]:= "0502000000060400000074797065000203000000696D670006040000006461746 -100022702000089504E470D0A1A0A0000000D4948445200000020000000200806 -000000737A7AF4000000017352474200AECE1CE90000000467414D410000B18F0 -BFC6105000000097048597300000EC300000EC301C76FA864000001BC49444154 -5847ED97CD2E035114C7EF4AB045B011ED0295D06D173E1296880891B0A88588F -00E3C000F6021165D88442CBD869022AA3A65CC0C8BAA36165A334D8FFEAF7B5B -7442FA35ABF927279973EE9C737E776E663287514196A191B1BE48515F1B457A9 -A1A6AE8A1AFCDD387728BD6C4D03C36DC657B73232D36D4C937CEB07304B49559 -B29E0DCA84CFB81F1F1B20538DD7C5500B3551DB7AD2490BCE70DFD85822261F3 -B16A022C0A49FFB952A6F59A4AFCE91693C8A08F15A1200C2CEE1477DEDC47001 -93AA15207B73C9F3D3C7211129078064DFBA03C8FCD4E1BE88380C90BD3AE7F9E -9A303117118209F79A758C0C38F42AA2280ECF505F7EFC77D2252BBE45B80DA52 -B26F19402E99A0486F3345BDAD646A0F225ABDF01A463C2DBC662E9514D13F002 -02D38CD63CA683FA5427BF4767A5295215719E9E3B5F09DF92ED9D716C0D4557E -8E72AD565302DE1FDF0548AED90240388AC4CE16A90B13A44E05AAB3426E62779 -B72AF2FA26A49FF02345A2E800BE002B8002E800BE00214017E0F264EA838980C -7610C3A00807E3921310682E7FF98CCD65629852312822E0A4DDF9BBF9864BE37 -96150C4AC6677733D0D3DB0F3AFA74DF409837977A59FB64D730000000049454E -44AE42608200"; + r["ļ"]:= getopenfilebmpinfo(); + r["ȫ"]:= getsaveallbitmapinfo(); + r[""]:= GetSaveFileBitmapInfo(); r["ȡע"]:= "0502000000060400000074797065000203000000696D670006040000006461746 100022001000089504E470D0A1A0A0000000D4948445200000020000000200806 000000737A7AF4000000017352474200AECE1CE90000000467414D410000B18F0 @@ -8162,130 +5032,11 @@ BFC6105000000097048597300000EC300000EC301C76FA864000000A749444154 F81538287A7DEC781F740578170058C52EA32ACFB0A42BCF7D9C3DFF228C0F0A1 437FC39ECC2910F70022F01EA80DBC076AD3DC03A834F7406F96C012182C40B40 319335F36295E4B140000000049454E44AE42608200"; - r[""]:= "0502000000060400000074797065000203000000696D670006040000006461746 -100022A03000089504E470D0A1A0A0000000D4948445200000020000000200806 -000000737A7AF4000000017352474200AECE1CE90000000467414D410000B18F0 -BFC6105000000097048597300000EC300000EC301C76FA864000002BF49444154 -5847BD974B681341188073F289F80005116C6BA10F15D48B56A8AF832858A8288 -8F460412A420F05A9079182E2C1E20391422B88A055F060050F2282482D689552 -2A5AA14DB24D9A3449D39A36469B64934DB2BFFB4FA6D34C36AF26BBFBC17FC8F -E9BFFFF6676323B314101486E2744C67ED24FDA925720F47500849A8D602E5B09 -A12FFDF4AA76E414C0E6D6EA0D60DEBE824468F013CD68475681F0D067106A37B -1E6735D9D34A32D1905B8E6CAD4FB9F74D18CF6A80454CD9F76D38C3E7002E9CD -FFF43EA219FD60025CF38AD51078D54B33FA4204D29BFF7DFD82245359F8F80E7 -E775E2F2870C1E200A2360BFD76764CAAE66F5ED2D412F1791F98CB5725EF5966 -D88FEE26EB4896A2B41A8FC9D5DCC86E7634D667BC518EC5C0717C1F5778B9613 -B540DE1916FB4E212A644380453E74FB01B5D171A408E88349D422241B664C969 -CF1BE2F72108F43D0777CB19B0EE58C36A5B2AD7A96698AC8182258A202A8C73B -5F13107073ED02C1540F49480781C663ADA586DEBAE2D109B769314B70F1089A6 -93FA48C832785A9B586DEFD54BE4322780C862583789B87F0EAC3B37276B2B8F4 -29A9A540B207A4AF8EEDF6475FD8F1F661640D2D784FBE269F24B2895C8F82F56 -13079955004997107F0CD34C6990038E52CF565F955B0041096F7B0B9901AD1E8 -3FD700D11B054ADCF2FA00713FBCB8880B067ABF102388B8BBB236EEF860B04FB -DF93E618D36DCDC60B782E9F6302FFDEF6192B101E1E24272D6C2EECDD0689E08 -2710231DF2C4C1C2867A3F73FEB21D70D11C093D1E4915AD6DC79F69872C69048 -4E578178C00FBE07B7D8C68361AFAB24B3B1082780070EDC9FE77BEE151FDD776 -1F6C615B2CD5A2BD6B2C6188E868310F37A68B7249C007770D030F0EF9DEF4E07 -79C9A5C309CC5C6BCD58A0A85056BBF3549D7242BEAD1A752AFC1A50DE7691B15 -11047474A0AC9E500391AA1457301F01FDA4F2FDFE8B101E70000000049454E44 -AE42608200"; - r[""]:= "0502000000060400000074797065000203000000696D670006040000006461746 -100028202000089504E470D0A1A0A0000000D4948445200000020000000200806 -000000737A7AF4000000017352474200AECE1CE90000000467414D410000B18F0 -BFC6105000000097048597300000EC300000EC301C76FA8640000021749444154 -584763F83FC060D401A30E1875004D1DF06ED684FF6F2677FCFFFFE70F540413D -0D401B73485FFDF9063FBFF28DCEDFFEFD72FA1A2A880A60EB8A9C403760008DF -3690FEFFF5C83EA80C02D0CD01207C4B89EBFFEBBEA6FFFFFFFE85AAA0B30360F -8496AF0FFBF9F3E80D5E075C0D7A3FBFFBFA8C8FAFFD0DBE2FF1D53B9FF7774C5 -49C2D82C87E16779F1603BB03AE0F7B327C084E38A5523B5F0D3AC28B05D180EF -879EFF6FFBB26726045F71C75FF7F58B9E0FFEF17CFFEFFFFF70FAA8278802B0A -1E4579FCFFF3F635580D8A03FE7DFFF6FF9E830E58D1F3A2E4FFFF7EFD84CA900 -7301C20CFFEFF557B154AB980E280B733FB202E8C70C75B78100B50B2A1BEE4FF -2FFB7740651000C501F7ED35C18A7F5CBF0C15A10CDCD610049BF7C0D7EAFFAF2 -70FA1A2A800EE805F4F1F8115DF7731808A500E4079FE556BC5FF7F3F7F404530 -01DC01DFCE1C033BE0496A0854843E00EE80EF174E431C90140015A10F803BE0C -F9B57E0547AD74289AC2C472E404984A0C4020A852F87F64045680F501CF069E3 -4AB0034065C1DFCF1FA1A2B405280E00D5524F62BDC18E78E86F0B2E92690D501 -D00047F3FBEFFFFC0CF1AEC08503E7E599BFFFFF3EE2DFFBF5F3A4B3206A52B42 -00C30120F0EFC7F7FF2F9B4BFFDF54E6053B845C0C2AFDFEFDFE0535153BC0EA0 -018F8FDEAC5FFF74B66FD7F5E96F1FF496200B8122105BF6AAB849A841BE07500 -3DC0A80306D801FFFF03006C2FCBC409CD25D50000000049454E44AE42608200"; - r["tsl﷨"]:= "0502000000060400000074797065000203000000696D670006040000006461746 -100020204000089504E470D0A1A0A0000000D4948445200000020000000200806 -000000737A7AF4000000017352474200AECE1CE90000000467414D410000B18F0 -BFC6105000000097048597300000EC300000EC301C76FA8640000039749444154 -5847AD97F94B545114C7FB5FFA2DA41FDAC8A00CCA225A7EA9205A208A8222081 -222FA413335CD25358D448BCC32CA16111754D250C9164D2575F66677369D71C6 -D91A47E734E7BEFB5E6FF4CD7B6FC6F9C0859973BFE7DCEFBB73EF7D7736419AA -C8622E0EB99266D35B44CA3A993B281D09405EC0F7A40BDAF1C6636DF254DB3BF -021CE5BD109AB652957C641958F185C0F36E0C8C175F708362335D69212D2176F -515783BA620B6BC42B3C51135101C3382BDA80BD47BCAB801D4D965E0ACF90C51 -E712550144ED3E7054F681725B11A7D31CA80267553F849576AA12669D81154F1 -03CAD3FC078E139570C1B3EE9D2A08AAA92836BC270EE5962EEF556F076FD0688 -51118F040373F91DA0DC55C225E2D3BAEA07613518A10AF9E0ACD88BBB61764B3 -E574F7BB886CC1E1FCE80F5F6074E68BEF61A823F0DB467E3E0ACE84F3570F56D -859DB4876780ED4C075FEF0C18CE3641E0FB1F1A1106FB710CD4B26CD8406054C -74D333EA918193780FB5E955D4AF2F06C9022A30622C605D01EAA2639D63B1F69 -549C8C19882EF8417F9A5954E6F8168B45A2B4479C8C18C0C18C979A9942F1FDC -E3F90A4C8880157ED00D1E98E3E86C54F1364BFCB45D4806A37B398A49E088B68 -0F3EE20C133327EAC9A123B50BFC032AA2B7DC7C4B233C03FA934F496770DC482 -3E204BEEAC0F1B01774C7EA12CCAC3DE9F878DB27194D451F8DF00CA02BEC4451 -AAB8EA0649AE3AA71CC2AAE42F1F77F328D1B9E3EF1A16CE00BA927A0221E61B8 -7491E1E46FE112D8D0A83B551EB1F52D308CF4070D24C3A75C7EB68441A77CB37 -92836DB17D824693A3D9CB5C62F036C5C21940B4476A89203C3B4723C9F1B48D7 -383CF370DD368727081A2D674F9258D30241860A748EA67C0773B3BB8A354FA08 -46D89BD342D3088D302418082B6CA0D85A088AAC02D159C07D8CC5AC79EF69441 -C76B6943B4BC8187C120C20F30D4344CCDFAB6B8998DCB2176BD413004D2E736E -A091B5AC338018CE3357AA5477841096BC3652CB16BF6D09216800A79F5DB178F -4A68BBDA49BD4D09F69A491F5081A40961D3EB216B0C05CFC758BDFE5825ACCC1 -5CE58E621A1526A90116754E0529A4CDAD066F77FC662B016A508B39982B85A40 -1C47CE30D2988CD7EBF1322160FEDF90FC6B08FD5618E1C641940F0CAC516C763 -D77AAB0D82BF4CA4E167F65EA8C8BA07CECA7E9A258D6C0308BE01F9B3C16FCAE -DC5602BE880BF6A0755CB2325032C38DDAE275FC881840DFF37C6C2E9FD434ECB -40E600F8077525AC9F3D612B2D0000000049454E44AE42608200"; - r["tslʽ"]:= "0502000000060400000074797065000203000000696D670006040000006461746 -10002E601000089504E470D0A1A0A0000000D4948445200000018000000180806 -000000E0773DF8000000017352474200AECE1CE90000000467414D410000B18F0 -BFC6105000000097048597300000EC300000EC301C76FA8640000017B49444154 -484BCD96CD2B04611CC7FD390E8E5C1D957273578E0E2E4AED897FC045EBA58D1 -4DBA675D8C8A64424D12E566B6D1B4931C94611C9719E9FF93EBF999E31EF333B -C9A77E87797E2F9F79E6ADE92293A90341DD593D561C3F0AB3DB1F29687F916CA -83E89483152E2404FF936582205684271542CC1E239F7151AFE928E0460A9C6BD -0B67DE928E0560B5CEFDD98A7B462A02B07EED2D492C185873D76FDDF09CB9AA9 -22712945A5C3F54E09D380339CC0489040067E9351C918A2088FF2FC0E539D5D4 -8D74D29160A349345C0CAE8D2CC85FF14DB33398D7A9D8E435E4F0FC3B0915E42 -E04F5E6749AD81574FF6E2E1AD49E897AE6551D72A8E9336A972F952850603D7E -56819D4963D8CC897B1DB5E899AD702E74078D17A2F11D215FA46DF373FCFACD8 -DDAA73C9420879AB1B2A07A5B89430516B804993D2EC4376674530D01997D4177 -6FE6818DC8023BFD2B828E1E7E0BFC882D40DE6A8842A21DC4E1EF05DA875A4C2 -3300B3F12400AC0F42127D208FC0231443F28BE427F9C549A270000000049454E -44AE42608200"; - r[""]:= "0502000000060400000074797065000203000000696D670006040000006461746 -100021B03000089504E470D0A1A0A0000000D4948445200000020000000200806 -000000737A7AF4000000017352474200AECE1CE90000000467414D410000B18F0 -BFC6105000000097048597300000EC300000EC301C76FA864000002B049444154 -5847E597CB6B13511487FD5F5CB8115C09EE74A12E4437D58D2B455011DC88822 -86215AD8A2DA1A550954A7D9582A4565B4DB56A158D4A11ADD6BE93B44D62D264 -92A6499C344D3331C79CE39921D3492693718C0B3FB884FBE33E3EEECCBD77B20 -6FE31550B48C20F488F06203D16845C2CC5A9792A0A64A6C310BAE880D93DD761 -6CED694D99D8701EBCFB6F41F8CA5358F12E702FE3E80A084DCF6162FD399AC87 -BE036241E7D858C5B809F6206A4A808A2D305D1F6B710386E2FB4AB87A94D9720 -76E703F736465901FFD12E9A187F97867D9C9667E9E31C7876B52AB2462929202 -F6FB27F9413E3044ED895FE46D008A0BDD1CEE548BDF7D01842F34B4ECAA312C0 -E7871DC397FB3931CF42C73B1A0BDF1B3D14017C83F1259AA96BE3E4CFF11DBC0 -B737BDBB9561A452074E10919E3F25985383845638A4E37275A1481E9CD8DB4D7 -AD06572170F201D7B490406A68864CF1C0B19AE88D37E0DA66E39A161248F48D9 -080996D5789B8FD138D9D5FCE72A28604A2379DD4480A2529B412F1D5EFF76079 -32C4891A1290B74C3618A7D04A6401BC534A4102B8F4D828D1ABBF67CD808F607 -CDD19C84B394ED49040C6132181F9B3BD145A49A4ED357876B6724D0B0920B3BB -AF8167470BD7AC037798DE91AC08445A06691516BB3F73521B14815C220DEEC27 -EC503A9962802C862E710AD42F0540F277F1F950062C5758CDB1A8B113402080A -60A9F664942222CCD7F729FDABFE1E28A6DA4FB2F8C32FE0DA6AA33EA106077C3 -F76DF9044590104F7B07B7B330D84178AFFF03D101A0720F17804928E6F20D85E -80AF90B9B634511BEFBE0EFA3694C15BB09284AE0092CFE620DE330CFE239D345 -87199DCD800BE4305A9C204C98171EEA1060F373D898A02AB91FF98ACF8629C54 -061F094AE059B39AAA05CC12BEFAACE44AD44C00C1C951A2989A0A94E27F1700F -805D0F3420D05EDA5310000000049454E44AE42608200"; + r[""]:= getredobitmapinfo(); + r[""]:= getunredobitmapinfo(); + r["tsl﷨"]:=gettslsyntaxcheckbitmapinfo(); + r["tslʽ"]:= gettslcodeformatbitmapinfo(); + r[""]:=getfindbitmapinfo(); r[""]:= "0502000000060400000074797065000203000000696D670006040000006461746 100027501000089504E470D0A1A0A0000000D4948445200000020000000200806 000000737A7AF4000000017352474200AECE1CE90000000467414D410000B18F0 @@ -8316,68 +5067,8 @@ B85C4055CF250DD2251015779AC1ABF4E121390D3FE5BFF436D9BA680DFE3B533 635460462DF1BD7EC04E388C094CAB45BED577580D8F1101B9D5CE74052BD1302 290D3C15FBE41C416D8A42C8E4681F91F06F7DA0A168403F80000000049454E44 AE42608200"; - r["ݼ˵"]:= "0502000000060400000074797065000203000000696D670006040000006461746 -10002C601000089504E470D0A1A0A0000000D4948445200000020000000200806 -000000737A7AF4000000017352474200AECE1CE90000000467414D410000B18F0 -BFC6105000000097048597300000EC300000EC301C76FA8640000015B49444154 -5847ED96314B03411085ADFC019616F676292D2DD2091616B63682A545B0B4505 -BD1D2DA562C03762155AAD4225148F49010541051C1588CBCF1DEB91956B9856C -C2E13D781C6F7676E7BBBDE66664CA2A014A800CE0A37329FD9D2DB95BAF46F56 -0775BDEDBAD746A0AF0D66ACAD5C2ECC4DC599C9397FAF90FC0EDDA72B6D8AF6D -CAC3D17E6E3F1E1FE436FA3907B79101B038D8AB6931A69ECF4E7F070021844FE -2DA57B3B63D36BBB55C00ACB1114FD6B0EE5E27F731C390DD031507000D34E466 -0230739FDB637310404C0503B86F61330E83DD9AEDB10A06E01A0C61233301987 -928336C553C000E816DF6D9F658A1160400B90786D827D4830150674F5EFFF532 -582F1E00368478AC00E39417E0BA32AF45FC0B0C939E2EC4D2D3C9A1CE4A36563 -52B0006F3162665DEB602BC362EA4B7B2E46D8CE16EB5A2C32105A086DD1BFD46 -31FD799FA4D3BE3502300D9500FF1D40E40B036C6466EFBB13F70000000049454 -E44AE42608200"; - r["ͼ(alt+m)"]:= "0502000000060400000074797065000203000000696D670006040000006461746 -10002A405000089504E470D0A1A0A0000000D4948445200000020000000200806 -000000737A7AF4000000017352474200AECE1CE90000000467414D410000B18F0 -BFC6105000000097048597300000EC300000EC301C76FA8640000053949444154 -5847C5577D4C95551847304021958FED22134190217B5F750C192226384030705 -302455D3304FF409BB32205755CBED2A2D41495BBA29CAC81F63186D4D614E707 -96C628FE486B4BD104CBC972E2951C9AECD7F31CCF7BE1CAB978B1B97EDB6FEFD -D79CE739EDF39CF739EF7BD2EF89FE1B4804B972EA1B6B616797979A8A8A8C099 -3367A4E5BFE1A902FAFBFB317DFA74F8F8F8206BC912588A8B51919D8DE52929F -01A3F1EADADAD72E6B3614401E7CF9F87C964C2E7F5F5B85F5E0EEBA245766C9B -370F73838361369BA5C7E831A2006F6F6F0C5CBF6E0B7868D62C644F9E8CB2F07 -0B4C6C5D9C6E7F8FAE2D4A953D26B747028203A3A1ACDCDCDF87BDD3AFCB26001 -5C5C5C7078F66CDC2A2D45C7CE9D707375457158984D04DB9F050EBD7C6957FD7 -575B6C57F4B4810A73114251B36E0939933C59C147F7F946565498BF3500AB871 -E30602030371BFA4041DF3E7232B20008F2E5E94D6417474746075529210F04D4 -C0CA2283DA38552404B4B0B121313D1B772254EC7C66213ED5285BB77EFE2E5E4 -6421E02ACDF7F5F09016E7E13005E154687D6BD6A093164E0E0A92A3F6686A6AC -2A6820221605764245684864A8BF3702860ECD8B1E8AAAC148BE7D155ABADAA92 -9641B8B9B9E19CC522E6E44E998286DC5C69711E0E05A4A5A5A1913A1E2FCE7C8 -36E00DFF7C6C64654575763C28409E204EE519AD89EE4E78787274E486FE7E150 -405B5B1BBCC68DB309607653D57F4727F12B5DCF07478FE2DEAA5562BC6AC60CA -CA6A21DE8EA92DECEC3A100467A7A3A8ED0D51A2A42C5A924B43127477A8D0E23 -0AE0174E0C15972AA8C11A5D47F4C489F8E7EC59E9353A8C2880111515852F972 -D530667A652033A9C9121678F1EC3049452ABD5340D4B972E457E7E3E32333391 -4005A80ACEBB8F9D34090F8F1F17DD9253B670E14258AD56B11617726A6A2A62A -99744444420801A9AA7A7A76872C6BBC34E406F6FAF6840AF1DBE89B995D76DF4 -D333B0272E759880006A3CFBE317DBCD359873A41B71F464AAECC6BBC34EC0B16 -3C7F0E6B672686FFF6EC7D0579BE0EAEA66179C77BF96EE7E51DE67C3E66BDBAE -41AFBE327C7C0859C0C53FFBED05141616A2E8D3166825D786D13FBE00DB631EF -77DA6BFBB3B1AD25643DB71157A5527F4DD574450BDE632B47768EC7D1AA3DFFA -41228FEF21F2D8CE4E841534C3332012753FF4DA0B888F8FC7E27DDD4A01330A7 -F8487879708CEAFE1726AD5AFAFFF0ADA76B23F417D3FED5EB1864153CA56F8C5 -E6C2FA60C05E40DFC301E845EA23630666EC40CAB44878D2B7C0B7991B957398F -A3E12B0596D637A4F4B44489645C4B413F0F1F777940E06F9085DC68C111F2639 -EB4F2AE77060FD834EB54D728CDB0B48A8FC59C414027A7A7A44F5675AFE503A1 -8E49C9A92B6A02187AEAAC22EC8C75C71556D9374F7094141C3CD4101EDEDEDE2 -45137F90F2C7C5B48B8A8576218A860BEC3D492E26CB65A4ECBE209E23D228C00 -344AA09E14BA989283B07AFD018D45EB83328A0A6A6065FFC6455AAB5B18C76F5 -949D695BE89468034A9B64F02B87E017BD16576E3F782C80BB1677BE151F8D7CF -C7CB5B4AD74BC2A9B4133D9E95A2A6D92A68422042DD92D82335CEAE99BDF6C2E -C5AC62B583C1A7151693EFB8A80185CDA0ABC78B8879EBA40C4F02B2E95FCEC67 -20BF40F29477B65AE38679C3BCE21E792734AF5C01D4E33D30E2BA9D1BC4B35C1 -75C27EEC738048CD4608E079FCE4B4D15C8D84895AA2DA72F70FC6E6AF6FC9F02 -480BFFD7D4C53956A0D8A8515E34F9205ABC60D86E41C112D78EFE9DB32BC2C42 -6DCE4BC2F0BCE9E11F8ED0E507F057DF23119C616B443DD647A2373F6FDA03F81 -751AD08E04A61DA310000000049454E44AE42608200"; + r["ݼ˵"]:= getquickkeybitmapinfo(); + r["ͼ(alt+m)"]:= gettslcodemapbitmapinfo(); return r union dbugicos(); end function dbugicos(); @@ -8543,117 +5234,7 @@ B465B669D12CD1A499A14AF5269EEB7017D499E35101704B7F68CC7CA20AF59AF 0144332BF870524ED00000000049454E44AE42608200"; return r; end -function ejsonformat(d,tbw,ct); -begin - //d: - //tbw : ַ,tab - //ct ݹ, - case datatype(d)of - 0,20:return inttostr(d); - 1:return floattostr(d); - 2:return tostn(d); - 8,10,11,12:return "null"; - end; - if not(ct>0)then ct := 0; - if not ifstring(tbw)then tbw := " "; - tbstr := ""; - tbstra := ""; - for i := 0 to ct do - begin - tbstr += tbw; - if i>0 then tbstra += tbw - end - if ifarray(d)then - begin - if not d then return "[]"; - idx := 0; - for i,v in d do - begin - if idx <> i then - begin - fobj := true; - break; - end - idx++; - end - if fobj then - begin - r := "{"; - for i,v in d do - begin - if ifstring(i)then ii := tostn(i); - else ii := tostn(tostn(i)); - r += "\r\n"+tbstr+ii+":"; - if ifarray(v)and v then - begin - r += "\r\n"+tbstr; - end - r += ejsonformat(v,tbw,ct+1)+","; - end - lr := length(r); - r[lr:]:= "\r\n"+tbstra+"}"; - end else - begin - r := "["; - for i,v in d do - begin - r += "\r\n"+(tbstr)+ejsonformat(v,tbw,ct+1)+","; - end - lr := length(r); - r[lr:]:= "\r\n"+tbstra+"]"; - end - return r; - end else - if ifobj(d)then - begin - try - //return "{}"; - //˴ԱϢ - objtoarray(d,dinfo); - for i,v in mrows(dinfo,1) do - begin - nv := invoke(d,v); - if ifobj(nv)then nv := nil; //ѭ - dinfo[v]:= nv; - end - return ejsonformat(dinfo,tbw,ct); - except - return "{}"; - end - end else - return "null"; -end -function objtoarray(o,r); -begin - d := o.classinfo(); - if not ifarray(r)then r := array(); - for i,v in d["inherited"] do - begin - objtoarray(findclass(v,o),r); - end - for i,v in d["members"] do - begin - n := v["name"]; - if v["access"]in array(0,1)then - begin - r[n]:= 0; - end else - begin - reindex(r,array(n:nil)); - end - end - for i,v in d["properties"] do - begin - n := v["name"]; - if v["read"]and(v["access"]in array(0,1))then - begin - r[n]:= 0; - end else - begin - reindex(r,array(n:nil)); - end - end -end + function ReWriteString(fn,d); begin if not ifstring(d)then return 0; @@ -8689,25 +5270,7 @@ function gettslexe(); begin return static gettslexefullpath(); end -function gettslexefullpath(); -begin - plg := pluginpath(); - sp := ioFileseparator(); - for i:= length(plg)-1 downto 1 do - begin - if plg[i]=sp then - begin - if sp="/" then - begin - return plg[1:i]+"TSL"; - end else - begin - return plg[1:i]+"tsl.exe"; - end - end - end - return ""; -end + {$ifdef linux} function HtmlHelpA() begin diff --git a/designer/utslsynmemo.tsf b/designer/utslsynmemo.tsf index d0e3d08..011cef4 100644 --- a/designer/utslsynmemo.tsf +++ b/designer/utslsynmemo.tsf @@ -3,8 +3,8 @@ interface {** @explan(˵) tsl﷨༭ **} -uses utslvclauxiliary,UTslMemo,TslVcl; -function FileSaveThreader(o,d); +uses utslvclauxiliary,UTslMemo; +function FileSaveThreader(o,d); type TTSLCompletion= class(TSynCompletion) {** @explan(˵) tslʾԶ @@ -1548,14 +1548,12 @@ type TBBState =class // end type TTsfFileParser = class //ļ function Create(); - begin - + begin FCacheDir :=TS_GetUserProfileHome()+"TslSynMemo"+ioFileseparator()+"cmpCaches";// d["value"]; //FCacheAbsFileName := FCacheDir+"\\cacheabstruct.stm"; //FFileWorker := new TThreadWorker("this.OnMessage :=findfunction('UTslSynMemo.FileSaveThreader') ;"); FFindDirs := array(); - end - + end function DispatchMethod(o,d);//ַϢ begin if not ifarray(d) then return ; @@ -1898,7 +1896,7 @@ type TTsfFileParser = class // end function ParserFindDir(f); // begin - mtic; + //mtic; if FCacheDir then begin FFileNames := array(); @@ -1918,7 +1916,7 @@ type TTsfFileParser = class // for i,v in FFileNames do begin r[i[1:length(i)-4]] := v; - end + end return r; end @@ -2081,24 +2079,4 @@ begin end end -type tparserdobject = class - function create(d); - begin - echo "\r\n create f object==="; - if ifarray(d) then - FData := d; - end - function operator[](idx); - begin - if FData then - return FData[idx]; - end - function operator[1](idx,v); - begin - if FData then - FData[idx] := v; - end - private - FData ; -end end. \ No newline at end of file diff --git a/designer/utslvcldebuger.tsf b/designer/utslvcldebuger.tsf new file mode 100644 index 0000000..4bedae0 --- /dev/null +++ b/designer/utslvcldebuger.tsf @@ -0,0 +1,3038 @@ +unit utslvcldebuger; +interface +{** + @explan(˵) ༭Թ %% + @date(20220520) +**} +uses cstructurelib,utslvclauxiliary,utslvclmemstruct, UTslMemo,UTslSynMemo, tslvcl; +function tdbgcallback(); //Իص +type TTslDebug = class(TTslDebuga) + function create(AOwner); + begin + inherited; + end +end +type TFTSLScriptcustomMemo=class(TSYNmemoNorm) + function Create(AOwner);override; + begin + inherited; + WsDlgModalFrame := true; + FChangedFlag := false; + FChangedLock := false; + Lineinterval := 3; + FCOMPOSITIONFORM := new tagCOMPOSITIONFORM(nil); + font := array("height":18,"width":9,"escapement":0,"orientation":0,"weight":400,"italic":0,"underline":0,"strikeout":0, + "charset":0,"outprecision":0,"clipprecision":0,"quality":1,"pitchandfamily":1,"facename":"Courier New","color":0); + //134 + //font := array("facename":"Courier New"); + end + function DoCaretPosChanged();override; + begin + if HandleAllocated()then calldatafunction(FOnCaretChanged,self(true),new tuieventbase(0,0,0,0)); + //echo tostn(self.CaretXY); + end + function WMIMESTARTCOMPOSITION(o,e):WM_IME_STARTCOMPOSITION;virtual; + begin + ime := ImmGetContext(self.Handle); + FCOMPOSITIONFORM.ptcurrentpos.cx := 200; + FCOMPOSITIONFORM.ptcurrentpos.cy := 200; + ImmSetCompositionWindow(ime,FCOMPOSITIONFORM._getptr_()); + ImmReleaseContext(self.Handle,ime); + end + {$ifdef linux} + function ImmReleaseContext(); + begin + end; + function ImmGetContext(); + begin + end; + function ImmSetCompositionWindow(); + begin + end; + function ImmSetStatusWindowPos(); + begin + end; + {$else} + function ImmReleaseContext(h:pointer;ime:pointer):integer;stdcall;external "Imm32.dll" name "ImmReleaseContext"; + function ImmGetContext(h:pointer):pointer;stdcall;external "Imm32.dll" name "ImmGetContext"; + function ImmSetCompositionWindow(h:pointer;s:pointer):integer;stdcall;external "Imm32.dll" name "ImmSetCompositionWindow"; + function ImmSetStatusWindowPos(h:pointer;s:pointer):integer;stdcall;external "Imm32.dll" name "ImmSetStatusWindowPos"; + {$endif} + function InvalidateLines(FirstLine,LastLine:integer);override; + begin + //return inherited; + if not HandleAllocated()then return; + if HighLighter is class(TTslSynHighLighter)then + begin + fy :=(FirstLine-TopLine) * TextHeight; + r := ClientRect; + if fyr[3]then return; + r[0]:= GutterWidth; + r[1]:= max(0,fy); + InvalidateRect(r,false); + end else + return inherited; + end + function MouseUp(o,e);override; + begin + inherited; + end + function InsertChars(s);override; + begin + if(s="\r\n")then + begin + y := CaretY; + x := CaretX; + sl := Lines.GetStringByIndex(y-1); + if ifstring(sl)and sl then + begin + ins := ""; + for i := 1 to x-1 do + begin + si := sl[i]; + if si="\t" or si=" " then + begin + ins += si; + end else + break; + end + if ins then + begin + return inherited InsertChars(s+ins); + end + end + end + return inherited; + end + function KeyUp(o,e);override; + begin + e.Result := 1; + if Calldatafunction(FQuckKeys,self,e)then return; + inherited; + end + function ContextMenu(o,e);override; + begin + inherited; + e.skip := true; + end + function SwitchMarkLine(L); //˴ϵ + begin + if not(L >= 0)then + begin + L := self.CaretY-1; + end + it := Lines[L]; + if it then + begin + it.FMarked := not(it.FMarked); + r := ClientRect; + r[2]:= GutterWidth()-1; + InValidateRect(r,false); + if _Tag then _Tag.markline(L,it.FMarked); + end + end + function KeyDown(o,e);override; + begin + e.Result := 0; + qc := Calldatafunction(FQuckKeys,self,e); + if qc then return; + if e.CharCode=VK_F5 then + begin + L := self.CaretY-1; + SwitchMarkLine(L); + return; + end + if e.CharCode=VK_F2 and(ssCtrl in e.shiftState())then + begin + L := self.CaretY-1; + SwitchMarkLine(L); + return; + end + if not(ssCtrl in e.shiftstate())and not(ssShift in e.shiftstate())then + begin + if e.CharCode=VK_F2 then + begin + y := CaretY-1; + len := Lines.length(); + for i := y+1 to len+y-1 do + begin + idx :=(i+len)mod len; + it := Lines[idx]; + if it and it.FMarked then + begin + return ExecuteCommand(ecGotoXY,array(idx+1,1)); + end + end + return; + end + end + inherited; + end + function WMSYSKEYUP(o,e):WM_SYSKEYUP;override; + begin + e.Result := 1; + if CallDatafunction(FQuckKeys,self,e)then return; + inherited; + end + Function WMSYSKEYDOWN(o,e):WM_SYSKEYDOWN;override; + begin + e.Result := 0; + if CallDatafunction(FQuckKeys,self,e)then return; + inherited; + end + function WMSETFOCUS(o,e):WM_SETFOCUS;override; + begin + inherited; + CallDataFunction(FOnTextSetFocus,self(true),e); + end + function DoTextChanged(p);override; + begin + n := Lines.Length(); + ccnt := GutterCharCnt; + nccnt := max(integer(n~10)+3,4); + if ccnt <> nccnt then + begin + GutterCharCnt := nccnt; + end + inherited; + SetChangeFlag(true); + end + function Recycling();override; + begin + FQuckKeys := nil; + FOnTextChanged := nil; + FOnTextSetFocus := nil; + FPageItem := nil; + FOnCaretChanged := nil; + inherited; + end + published + property OnCaretChanged read FOnCaretChanged write FOnCaretChanged; + property PageItem read FPageItem write FPageItem; + property OnTextChanged read FOnTextChanged write FOnTextChanged; //ıı + property QuckKeys read FQuckKeys write FQuckKeys; //ݼ + property ChangedFlag read FChangedFlag write SetChangeFlag; + property ChangedLock read FChangedLock write FChangedLock; + property OnTextSetFocus read FOnTextSetFocus write FOnTextSetFocus; + private + function SetChangeFlag(v); + begin + nv := v?true:false; + if nv <> FChangedFlag then + begin + FChangedFlag := nv; + if FChangedLock then return; + calldatafunction(OnTextChanged,self(true),nv); + end + end + FPageItem; + FChangedLock; + FChangedFlag; + FOnTextChanged; + FOnTextSetFocus; + FQuckKeys; + FCOMPOSITIONFORM; + FOnCaretChanged; +end +implementation +type tagCOMPOSITIONFORM=class(tslcstructureobj) + private + static SSTRUCT; + class function getstruct() + begin + if not SSTRUCT then SSTRUCT := MemoryAlignmentCalculate(array( + ("dwstyle","int",4), + ("ptcurrentpos","intptr",0), + ("rcarea","int[4]",array(0,0,0,0))),nil,nil,1); + return SSTRUCT; + end + public + function create() + begin + inherited create(getstruct(),ptr); + FPonter := new TCPoint(); + _setvalue_("ptcurrentpos",FPonter._getptr_()); + end + property dwstyle index "dwstyle" read _getvalue_ write _setvalue_; + property ptcurrentpos read FPonter; + property rcarea index "rcarea" read _getvalue_ write _setvalue_; + private + FPonter; +end +type TTslDebuga=class(TCustomControl) + private //Ա + FRuningfile; //ִнűļ + FRuningItem; //ִеpageitem + FCurrentgotoitem; //ǰеpageitem + FDebughandle; //Եľ + FDebugExe; //Թܵexe + FConnectchannel; //Ե ͨ + FDebugaddr; //ַ + FDebugport; //ԵĶ˿ + FDebugUsr; //û + FDebugPwd; // + FDebugtsfs; //ǰ̶Ӧtsfļ + FBtns; + FAttchedid; + FDebugtype; + fdbgselwnd; + FRemoteWait; //Զ̵Եȴ + FValewnd; + FCmdHistory; + FCmdHistoryid; + FCmdHistorycount; + //////////////////// + Fdbgssybs; + Fdbgsybs; + Fdbgstack; + fdefaultdbger; //༭ĵ + type tdbgwnd=class(TPanel) + uses tslvcl; + function Create(AOwner); + begin + inherited; + WsDlgModalFrame := false; + p1 := new TPairSplitter(self); + p1.Position := 310; + p2 := new TPairSplitter(self); + p2.Position := 310; + sd1 := new TPairSplitterSide(self); + sd2 := new TPairSplitterSide(self); + sd3 := new TPairSplitterSide(self); + sd3 := new TPairSplitterSide(self); + sd4 := new TPairSplitterSide(self); + p1.Align := alClient; + sd1.WsDlgModalFrame := false; + sd2.WsDlgModalFrame := false; + sd3.WsDlgModalFrame := false; + sd4.WsDlgModalFrame := false; + p1.WsDlgModalFrame := false; + p2.WsDlgModalFrame := false; + p1.parent := self; + sd1.parent := p1; + sd1.Border := false; + sd2.parent := p1; + p2.Align := alClient; + p2.parent := sd2; + sd3.parent := p2; + sd4.parent := p2; + sd4.Border := false; + fside1 := sd1; + fside2 := sd3; + fside3 := sd4; + end + function addwnds(stk,vlist,cmd,cmdshow); + begin + stk.Align := alClient; + stk.parent := fside1; + vlist.Align := alClient; + vlist.parent := fside2; + cmd.Align := alBottom; + cmd.parent := fside3; + cmdshow.Align := alClient; + cmdshow.parent := fside3; + end + function Recycling();override; + begin + inherited; + fside1 := nil; + fside2 := nil; + fside3 := nil; + end + fside1; + fside2; + fside3; + end + function cmdkeyup(o,e); + begin + case e.charcode of + VK_UP: + begin + //return ; + if FCmdHistoryid <= 0 then return o.text := ""; + FCmdHistoryid--; + txt := FCmdHistory[FCmdHistoryid]; + if ifstring(txt)and txt then o.text := txt; + end + VK_DOWN: + begin + if FCmdHistoryid >= Length(FCmdHistory)then return o.text := ""; + FCmdHistoryid++; + txt := FCmdHistory[FCmdHistoryid]; + if ifstring(txt)and txt then o.text := txt; + end + 13: + begin + //return ExecuteCommand("docmd"); + txt := trim(o.Text); + if txt then + begin + if length(FCmdHistory)>FCmdHistorycount then + begin + for i := 0 to FCmdHistorycount-1 do + begin + FCmdHistory[i]:= FCmdHistory[i+1]; + end + end + FCmdHistory[length(FCmdHistory)]:= txt; + FCmdHistoryid := length(FCmdHistory); + ExecuteCommand("docmd"); + end + e.skip := true; + end + end + end + function getvalewnd(cp); + begin + if not FValewnd then + begin + FValewnd := new TTSLDataGrid(self); + FValewnd.Visible := false; + FValewnd.Caption := "Value"; + FValewnd.left := owner.left+100; + FValewnd.Width := 600; + FValewnd.Height := 500; + FValewnd.WSpOPUp := true; + FValewnd.WSsYSMenu := true; + FValewnd.WsSizeBox := true; + FValewnd.Parent := self; + FValewnd.OnClose := function(o,e) + begin + o.Visible := false; + o.TSLdata := array(); + end + end + if ifstring(cp)then FValewnd.Caption := cp; + return FValewnd; + end + function deletefuncacheini(); + begin + plg := pluginpath(); + {$ifdef linux} + sp := "/"; + {$else} + sp := "\\"; + {$endif} + for i := length(plg)-1 downto 1 do + begin + if plg[i]=sp then + begin + fn := plg[1:i]+"FunCache.ini"; + r := filedelete("",fn); + return r; + end + end + end + public + function addbtns(btns); //Ӳ˵ + begin + FBtns := btns; + for i,v in Fbtns do + begin + v.onClick := thisfunction(Dbgtooldo); + if v.Caption="/ɾϵF5" then continue; + v.Visible := false; + end + end + function DbgNextLine(); //һ + begin + ExecuteCommand("dbgstepover"); + end + function serwnd_cclk(o,e); //ȡ + begin + FRemoteWait := false; + cancelremotedbg(o,e,"ȡ"); + return; + end + function serwnd_oclk(o,e); //ԶӰť + begin + d := fdbgselwnd.GetData(); + addr := d["addr"]; + port := d["port"]; + if not(addr and port)then return MessageboxA("Զ̷Ϣȫ","ʾ",0,self.Handle); + port := StrToIntDef(port,443); + usr := d["usr"]; + pwd := d["pwd"]; + //ж + if checkconnected()then + begin + disconnectserver(); + end + if FDebugtype="remotewait" then //Զ̵ȴ + begin + FDebugaddr := addr; + FDebugport := port; + FDebugUsr := usr; + FDebugPwd := pwd; + FRemoteWait := true; + fdbgselwnd.Visible := false; + return _send_(WM_USER,0,0,1); + end + if 0 <> connectserver(addr,port)then return MessageboxA("Զ̷ʧ","ʾ",0,self.Handle); + if(usr and pwd)and 0 <> dbglogin(usr,pwd)then + begin + return MessageboxA("½ûʧ","ʾ",0,self.Handle); + end + ExecuteCommand("dbgcreatechannel"); //channel + if FConnectchannel then + begin + dbglist(FConnectchannel); + end + end + function dbg_clk(o,e); + begin + file := o.getstartfilename(d); + item := nil; + if file=0 then //ڽű + begin + if 1 <> MessageboxA("ûҵضӦtsl\r\nǷ","ʾ",1,self.Handle)then + begin + return serwnd_cclk(); + end + end else + begin + item := owner.OpenAndGotoFileByName(file,1); + end + o.Visible := false; + FRuningItem := item; + FCurrentgotoitem := item; + parsercurrentitem(item); + FAttchedid := d; + dbgattach(FConnectchannel,d["id"]); + //echo tostn(d); + end + function Debugremote(flg); + begin + {$ifdef linux} + return MessageboxA("linuxĿǰֵ֧","ʾ",0,self.Handle); + {$endif} + if FRemoteWait then + begin + if flg then + begin + if 1=MessageboxA("Զ̵Եȴ...\r\nȷֹͣȴ..","ʾ",1,self.Handle)then + begin + FRemoteWait := false; + disconnectserver(); + end + return; + end else + begin + return MessageboxA("Զ̵Եȴ...","ʾ",0,self.Handle); + end + end else + begin + //if flg then return ; + if FConnectchannel then + begin + return MessageboxA("ڵ...","ʾ",0,self.Handle); + end + end + if not fdbgselwnd then + begin + fdbgselwnd := new tdbgselwnd(self); + fdbgselwnd.Parent := self; + fdbgselwnd.FHistoryDir := owner.FHistoryDir; + fdbgselwnd.loaddata(); + fdbgselwnd.OnClose := thisfunction(serwnd_cclk); + fdbgselwnd.save_clk := thisfunction(serwnd_oclk); + fdbgselwnd.cancel_clk := thisfunction(serwnd_cclk); + fdbgselwnd.dbg_clk := thisfunction(dbg_clk); + end + fdbgselwnd.setlist(); + if flg then + begin + FDebugtype := "remotewait"; + fdbgselwnd.setattachwait(true); + end else + begin + FDebugtype := "remote"; + fdbgselwnd.setattachwait(false); + end + fdbgselwnd.show(); + return; + end + function Debuglocal(item); //Խű + begin + {$ifdef linux} + return MessageboxA("linuxĿǰֵ֧","ʾ",0,self.Handle); + {$endif} + if not item then return 0; + if FConnectchannel then return MessageboxA("ڵ","ʾ",0,self.Handle); + if FRemoteWait then return MessageboxA("Զ̵Եȴ...","ʾ",0,self.Handle); + FDebugtype := "local"; + if checkconnected()then disconnectserver(); //Ͽ + FAttchedid := 0; + FDebugport := randomfrom(1 -> 600)+20000; + FDebugaddr := '127.0.0.1'; + FRuningItem := item; + FCurrentgotoitem := item; + dirs := owner.getlibpathstr(); + parsercurrentitem(item); + fio := ioFileseparator(); + FDebugUsr := 0; + FDebugPwd := 0; + deletefuncacheini(); + getdebuger(pms); + exestr := format('"%s" "%s" -DEBUGSERVER -DEBUGLOGIN 0 -WAITATTACH -DEBUGPORT %d -libpath "%s" ',FDebugExe,FRuningfile,FDebugport,dirs); + exestr += pms; + FDebughandle := sysexec(FDebugExe,exestr,nil,0,rcode,0); + if FDebughandle then + begin + ExecuteCommand("dbgcreatechannel"); + ExecuteCommand("showeval","Գ:"+FDebugExe); + if FConnectchannel then + begin + dbgattachwait(FConnectchannel); + end + end + end + function wmuser(o,e):WM_USER;virtual; + begin + if FRemoteWait and not(checkconnected())then + begin + if(0 <> connectserver(FDebugaddr,FDebugport))then + begin + FRemoteWait := false; + messageboxa("ӷʧ","",0,self); + return; + //sleep(100); + //_send_(WM_USER,0,0,1); + end else + begin + FRemoteWait := false; + FConnectchannel := dbgcreatechannel(); + setgdbcallback(); + if(FDebugUsr and FDebugPwd)and(0 <>(lgg := dbglogin(FDebugUsr,FDebugPwd)))then + begin + messageboxa("½ʧ\r\nû","½ʧ",0,self); + return disconnectserver(); + end + dbgattachwait(FConnectchannel); + FBtns["ֹ"].Visible := true; + end + end + end + function Create(AOwner); + begin + inherited; + FCmdHistory := array(); + FCmdHistoryid := 0; + FCmdHistorycount := 10; + FDebugExe := ""; + Caption := "tsl debug ..."; + dbwnd := new tdbgwnd(self); + dbwnd.Align := alClient; + dbwnd.Parent := self; + FStackList := new TListView(self); // new TListBox(self); //new tmemo(self);// + FStackList.ItemHeight := 23; + FStackList.Columns := array(("text":"line","width":40), + ("text":"function","width":250) //,("text":"type","width":70) + ); + FStackList.Border := true; + FVaraiblesList := new TGroupGridA(self); + FVaraiblesList.Border := false; + FVaraiblesList.ItemHeight := 23; + FVaraiblesList.Columns := array(("text":"name","width":95), + ("text":"value","width":135), + ("text":"type","width":50) + ); + FCommandtext := new TEdit(self); + FCommandtext.placeholder := ""; + FCommandtext.Height := 23; + FCommandtext.onkeyup := thisfunction(cmdkeyup); + FShowText := new tmemo(self); + FShowText.ReadOnly := true; + FShowText.Border := true; + pmenu := new TPopUpMenu(self); + cmu := new TMenu(self); + cmu.OnClick := function(o,e) + begin + FShowText.Text := ""; + end; + cmu.Caption := ""; + cmu.Parent := pmenu; + FShowText.PopUpMenu := pmenu; + dbwnd.addwnds(FStackList,FVaraiblesList,FCommandtext,FShowText); + ExecuteCommand("clearall"); + getdefaultdbger(); + end + function addbreak(item,idx,n); //Ӷϵ + begin + if not FConnectchannel then return; + parseriteminfo(item,idx,n,usr); + if n then + begin + //echo "\r\n====add:",usr,"====",n,"===",idx; + dbgsetbreak(FConnectchannel,usr,n,idx+1); + end + end + function removebreak(item,idx); //Ƴϵ + begin + if not FConnectchannel then return; + parseriteminfo(item,idx,n,usr); + if n then + begin + //echo "\r\n====remove:",usr,"====",n,"===",idx; + dbgunsetbreak(FConnectchannel,usr,n,idx+1); + end + end + function Dbgtooldo(o,e) + begin + cp := o.Caption; + case cp of + "": + begin + //echo ""; + it := Owner.GetCurrentItem(); //Owner.GetAllPageItems(); + Debuglocal(it); + end + "/ɾϵF5": + begin + it := Owner.GetCurrentItem(); + if it then + begin + it.FEditer.SwitchMarkLine(); + end + end + "ͣ": + begin + ExecuteCommand("dbgpause"); + end + "": + begin + ExecuteCommand("dbgstep") + end + "": + begin + //dbgstep(); + end + "һ(F8)": + begin + ExecuteCommand("dbgstepover"); + end + "": + begin + ExecuteCommand("dbgstepout"); + end + "": + begin + toolbtnState(""); + if FCurrentgotoitem and FCurrentgotoitem.FEditer then FCurrentgotoitem.FEditer.ExecuteCommand("ecruningto",nil); + ExecuteCommand("dbgrun"); + end + "ֹ": + begin + ExecuteCommand("dbgreset"); + end + "": + begin + end + "ˢ·ű": + begin + ExecuteCommand("dbggetallvalue"); + end + "ˢµǰ": + begin + ExecuteCommand("dbggetcurrentnode"); + end + "ı": + begin + FShowText.Text := ""; + end + end; + end + function dbgeventcall(d); //ص + begin + global g_tsldbgcallback_handle; + if not ifarray(d)then return; + if d["channel"]<> FConnectchannel then return; + recvtype := d["recvtype"]; + if recvtype=0 then + begin + FRemoteWait := 0; + ExecuteCommand("showeval","Խ"); + if FConnectchannel then dbgdeletechannel(FConnectchannel); + FConnectchannel := 0; + g_tsldbgcallback_handle := nil; + if FCurrentgotoitem and FCurrentgotoitem.FEditer then FCurrentgotoitem.FEditer.ExecuteCommand("ecruningto",nil); + FDebughandle := 0; + toolbtnState("ֹͣ"); + return; + end + //echo "\r\nrectype",format("0x%x",recvtype); + if 0x0401=recvtype then + begin + owner.echoAppendString(d["errmsg"]); + return; + end + if recvtype <> 0x402 then + begin + return; + end + case magicgetarray(d,array("result","CmdType"))of + "attachlist": + begin + r := magicgetarray(d,array("result","CmdData")); + r :: + begin + if mcol="createtm" then + begin + mcell := datetimetostr(mcell); + end + end + return fdbgselwnd.setlist(r); + //return echo tostn(r); + end + "attachwaitok","attachok": // ,Ĭ + begin + debuginitok(); + FVaraiblesList.SetNodeData(array()); + FStackList.DeleteAllItems(); + return; + end + "DebugInfo": //Ϣ + begin + if "dbgdetach"=remotewaitinit(d)then return; + toolbtnState("ͣ"); + stk := magicgetarray(d,array("result","CmdData","CallStack")); // + sybs := magicgetarray(d,array("result","CmdData","SymbolInfo")); // + ssybs := magicgetarray(d,array("result","CmdData","EnvInfo")); //ϵͳ + {if (ssybs = Fdbgssybs) and (sybs = Fdbgsybs) and (stk=Fdbgstack) then //ֵû + begin + return ; + end } + if(ssybs <> Fdbgssybs)or(sybs <> Fdbgsybs)then + begin + FVaraiblesList.SetNodeData(array()); + ddd := formatsysvlist(ssybs,nil); + FVaraiblesList.SetNodeData(ddd,true); + Fdbgssybs := ssybs; + ddd := formatvlist(sybs); + FVaraiblesList.SetNodeData(ddd,true); + Fdbgsybs := sybs; + end + if stk <> Fdbgstack then + begin + FStackList.DeleteAllItems(); + FStackList.appendItems(stk[:,array("LINE","NAME","USER")]); + //FStackList.text := array2str(stks,"\r\n"); + Fdbgstack := stk; + end + if ifarray(stk)then + begin + FVaraiblesList.celldbclk := thisfunction(vdbclk); + FVaraiblesList.celledit := thisfunction(vdoedit); + FVaraiblesList.Showarray := thisfunction(vdoshowarray); + FStackList.OnDblClick := thisfunction(stkdbclk); + it := opengoto(stk[0]); + //if not it then return; + if it and it <> FCurrentgotoitem then + begin + if FCurrentgotoitem and FCurrentgotoitem.FEditer then + begin + FCurrentgotoitem.FEditer.ExecuteCommand("ecruningto",nil); + end + FCurrentgotoitem := it; + end + if FCurrentgotoitem then + begin + FCurrentgotoitem.FEditer.ExecuteCommand("ecruningto",stk[0,"LINE"]-1); + end + end + return; + end + "detached": + begin + if FConnectchannel then + begin + dbgdeletechannel(FConnectchannel); + FConnectchannel := 0; + g_tsldbgcallback_handle := nil; + FAttchedid := 0; + end + FRemoteWait := 0; + if FCurrentgotoitem and FCurrentgotoitem.FEditer then FCurrentgotoitem.FEditer.ExecuteCommand("ecruningto",nil); + ExecuteCommand("showeval","Խ"); + toolbtnState("ֹͣ"); + return; + end + "DebugSysParamValue": + begin + CmdTypeAux := magicgetarray(d,array("result","CmdTypeAux")); + ev := magicgetarray(d,array("result","CmdData")); + cp := magicgetarray(d,array("result","CmdParam")); + len :=-1; + if ifnumber(CmdTypeAux)and(CmdTypeAux .& 0x80000000)then + begin + len := _shr((int(CmdTypeAux).& 0xFFF0),4); + end + //echo "\r\n***",len," ",cp," ",tostn(ev); + if(cp="#DebugEval")or(cp="#Error")then + begin + return showevaldata(nil,ev); + end + if ifarray(ev)then + begin + ddd := formatsysvlist(array(cp:ev),len); + FVaraiblesList.SetNodeData(ddd,true); + for i,v in ev do + begin + if ifstring(i)then + begin + ncp := tostn(i); + ncp := replacetext(ncp,".","\\o"); + ncp := cp+".["+ncp+"]"; + end else + begin + ncp := cp+".["+tostn(i)+"]"; + end + magicsetarray(d,array("result","CmdParam"),ncp); + magicsetarray(d,array("result","CmdData"),v); + dbgeventcall(d); + end + return; + end else + begin + ddd := formatsysvlist(array(cp:ev),len); + FVaraiblesList.SetNodeData(ddd,true); + end + end + "DebugValue": + begin + cp := magicgetarray(d,array("result","CmdParam")); + ev := magicgetarray(d,array("result","CmdData")); + if(cp="#DebugEval")or(cp="#Error")then + begin + return showevaldata(nil,ev); + end + if ifarray(ev)then + begin + //showevaldata(cp,ev); + ddd := formatvlist(array(cp:ev)); + FVaraiblesList.SetNodeData(ddd,true); + for i,v in ev do + begin + if ifstring(i)then + begin + ncp := tostn(i); + ncp := replacetext(ncp,".","\\o"); + ncp := cp+".["+ncp+"]"; + end else + begin + ncp := cp+".["+tostn(i)+"]"; + end + magicsetarray(d,array("result","CmdParam"),ncp); + magicsetarray(d,array("result","CmdData"),v); + dbgeventcall(d); + end + return; + end else + begin + ddd := formatvlist(array(cp:ev)); + FVaraiblesList.SetNodeData(ddd,true); + end + end + "noattachederror": + begin + return disconnectserver(); + FRemoteWait := 0; + ExecuteCommand("showeval","noattachederror"); + d["recvtype"]:= 0; //˳ + dbgeventcall(d); + return; + end else + begin + //echo tostn(d); + end + end + return; + end + function showevaldata(cp_,ev); + begin + cp := cp_; + if cp then + begin + if parseregexpr("\\(\\w+\\)\\.",cp,"r", function(a) + begin + return ""; + end + ,s)=1 then + begin + cp := s; + end + end + if ev and ifarray(ev)then + begin + fwnd := getvalewnd(cp); + fwnd.TSLdata := ev; + fwnd.Show(); + end else + begin + if cp then FShowText.Text += ">>"+cp+"\r\n"; + ExecuteCommand("showeval",ev); + end + end + function ExecuteCommand(cmd,p);override; + begin + case cmd of + "dbgstate": + begin + if ifnil(p)then return FdebugState; + end + "execommand": + begin + case p of + "#127": + begin + FShowText.Text := ""; + end + end; + end + "docmd": + begin + s := FCommandtext.Text; + if not s then return; + FCommandtext.Text := ""; + if s="#cls" then return ExecuteCommand("execommand",s); + FShowText.Text += ">>"+s+"\r\n"; + ExecuteCommand("dbgeval",s); + end + "clearall": // + begin + //FStackList.items := array(); + //FStackList.text := ""; + FStackList.DeleteAllItems(); + FVaraiblesList.SetNodeData(array()); + if p then + begin + FShowText.Text := ""; + FCommandtext.Text := ""; + end + end + "showeval": + begin + FShowText.Text += "ans="+tostn(p)+"\r\n"; + FShowText.ExecuteCommand(FShowText.ecGotoXY,array(100000,1)); + end + "dbgcreatechannel": + begin + if not FConnectchannel then + begin + idx := 0; + if not checkconnected()then + begin + while(FDebugtype="local")and(0 <> connectserver(FDebugaddr,FDebugport)) do + begin + sleep(100); + idx++; + if idx>20 then + begin + return ExecuteCommand("debugconnecterr"); + end; + end + end + FConnectchannel := dbgcreatechannel(); + setgdbcallback(); + end + end + "dbggetallvalue": + begin + if FConnectchannel then + begin + dbggetallvalue(FConnectchannel); + end + end + "dbggetcurrentnode": + begin + FVaraiblesList.getcurrentnodedata(); + end + "dbgreset": //ֹͣ + begin + if FConnectchannel then + begin + if FDebughandle then + begin + return SysTerminate(-1,FDebughandle); + end + if FAttchedid then + begin + //echo "\r\nֹ"; + return dbgdetach(FConnectchannel); + end else + begin + if FDebugtype="remotewait" then //Զ,Ͽ + begin + return disconnectserver(); + end + return dbgdetach(FConnectchannel); + //return dbgreset(FConnectchannel); + end + end + end + "dbgrun": // + begin + if FConnectchannel then dbgrun(FConnectchannel); + end + "dbgstep": + begin + if FConnectchannel then dbgstep(FConnectchannel); + end + "dbgpause": //ͣ + begin + if FConnectchannel then dbgpause(FConnectchannel); + end + "dbgstepover": //һ + begin + if FConnectchannel then dbgstepover(FConnectchannel); + end + "dbgstepout": // + begin + if FConnectchannel then dbgstepout(FConnectchannel); + end + "dbgeval": //ִ + begin + if FConnectchannel and p and ifstring(p)then + begin + getvalewnd("ans"); + dbgeval(FConnectchannel,p); + end + end + end + end + function Recycling();override; + begin + global g_tsldbgcallback_handle; + stopdebug(); + inherited; + FStackList := nil; + FVaraiblesList := nil; + FToolbar := nil; + FCommandtext := nil; + FShowText := nil; + fimgelist := nil; + FBtns := nil; + g_tsldbgcallback_handle := nil; + fdbgselwnd := nil; + end + private + function getdefaultdbger(); + begin + fdefaultdbger := gettslexefullpath(); + end + function getdebuger(pms); //õԳ + begin + p := static pluginpath(); + FDebugExe := inireadstring("",p+"localediter.ini","debug","debuger",""); + pms := " "; + //if FDebugExe="1" then //Ĭϻȡ + // begin + ps := owner.getexecuteparams(FRuningfile); + if ps then + begin + psi := ps[0]; + if fileexists("",psi)then + begin + cmdexe := psi; + end else + begin + if FDebugExe="1" then + ExecuteCommand("showeval","ǰִָг򲻴!!"); + end + psi := ps[1]; + if psi and fileexists("",psi)then + begin + end else + begin + pms += " "+tostn(psi); + end + idx := 2; + while idx"); + end else + if fileexists("",FDebugExe)then + begin + ExecuteCommand("showeval","<ļĵ>"); + end else + begin + FDebugExe := fdefaultdbger; + ExecuteCommand("showeval","<ñ༭Դĵb:>"); + end + end + function remotedbugok(); + begin + if FAttchedid then + begin + ExecuteCommand("showeval","Զű:"+FAttchedid["info"]); + end + end + function remotewaitinit(d); + begin + if FDebugtype <> "remotewait" then return; + if FAttchedid then return; + FAttchedid := magicgetarray(d,array("result","CmdData","StartInfo")); + file := fdbgselwnd.getstartfilename(FAttchedid); + item := nil; + if file=0 then //ڽű + begin + if 1 <> MessageboxA("ûҵضӦtsl\r\nǷ","ʾ",1,self.Handle)then + begin + dbgdetach(FConnectchannel); + return "dbgdetach"; + //return serwnd_cclk(); + end + end else + begin + item := owner.OpenAndGotoFileByName(file,1); + end + FRuningItem := item; + FCurrentgotoitem := item; + parsercurrentitem(item); + setbrks(); //öϵ + remotedbugok(); + end + function debuginitok(); + begin + if FDebugtype <> "remotewait" then setbrks(); //öϵ + //showbtns(); //ʾť + ExecuteCommand("showeval","ʼ"); + //toolbtnState("ͣ"); + remotedbugok(); + return; + end + function opengoto(v); + begin + cn := v["NAME"]; + cnn := ""; + for ii := 1 to length(cn) do + begin + if cn[ii]in array(".",":")then + begin + cn := cnn; + break; + end + cnn += cn[ii]; + end + f := FDebugtsfs[lowercase(cn)]; + if not f then + begin + return ExecuteCommand("showeval","Ҳ:"+cn); + end + it := owner.OpenAndGotoFileByName(f,v["LINE"]); + return it; + end + function cancelremotedbg(o,e,s); + begin + fdbgselwnd.Visible := false; + if e then e.skip := true; + if FConnectchannel then dbgdeletechannel(FConnectchannel); + FConnectchannel := 0; + ExecuteCommand("showeval",ifstring(s)?s:"ȡԶ̵..."); + end + function stkdbclk(o,e); + begin + //echo "\r\n",o.SelectedId; + id := o.SelectedId; + if id >= 0 then + begin + d := o.GetItem(id); + if d then + begin + return opengoto(d); + end + end + end + function vdoshowarray(d); + begin + //echo tostn(d); + try + gp := d[3]; + if(gp[length(gp)]="+")and parseregexpr("\\+$",gp,"r", function(a) + begin + return ""; + end + ,sgp)=1 then + begin + gp := "sysparams:"+sgp; + end + showevaldata(gp,d[1]["value"]); + except + end; + end + function vdoedit(d,s); + begin + if not FConnectchannel then return; + gp := d[1][3]; + try + v := eval(&s); + except + v := nil; + end + if(gp[length(gp)]="+")and parseregexpr("\\+$",gp,"r", function(a) + begin + return ""; + end + ,sgp)=1 then + begin + dbgsetvalue(FConnectchannel,sgp,d[1][5],v); + sleep(20); + dbggetvalue(FConnectchannel,sgp,d[1][5]); + end else + begin + //echo "\r\nset: ",gp," ",v; + dbgsetvalue(FConnectchannel,gp,0,v); + sleep(20); + dbggetvalue(FConnectchannel,gp,0); + end + end + function vdbclk(o,e); + begin + if not FConnectchannel then return; + if(e[0]=1)and(e[1][2]="*")then + begin + gp := e[1][3]; + if gp="sysparams+" then return; + if(gp[length(gp)]="+")and parseregexpr("\\+$",gp,"r", function(a) + begin + return ""; + end + ,sgp)=1 then + begin + dbggetvalue(FConnectchannel,sgp,e[1][5]); + end else + begin + dbggetvalue(FConnectchannel,gp,0); + end + end + end + function parsercurrentitem(item); //غ + begin + FDebugtsfs := class(TTSLCompletion).getdirtsfs(); + if item then + begin + FRuningfile := item.OrigScriptPath; // %% E:\TSUIGROUP\script\tgdb.tsl%%; + FDebugtsfs["__main__"]:= FRuningfile; + ls := item.FEditer.lines; + d := tsl_tokenizeex_2_(item.FEditer.Text,0xffff); + for i,v in d["blcks"] do + begin + s := ls.GetStringByIndex(v["mbeg"]-1); + ctls := 0; + case v["mtype"]of // + 11: + begin + ctls := "function\\s+(\\w+)\\("; + end + 3: + begin + ctls := "type\\s+(\\w+)\\s*=\\s*class" // + end + end; + if s and ctls and(parseregexpr(ctls,s,"si",m,mp,ml)=1)then + begin + n := lowercase(m[0,1]); + FDebugtsfs[n]:= FRuningfile; + end + end + end + end + function toolbtnState(flg); + begin + case flg of + "","ͣ": + begin + showbtns(); + FBtns["ͣ"].Visible := false; + FBtns["ˢ·ű"].Visible := true; + FBtns["ˢµǰ"].Visible := true; + end + "": + begin + // + FBtns[""].Visible := false; + FBtns[""].Visible := false; + FBtns[""].Visible := false; + FBtns["һ(F8)"].Visible := false; + //FBtns[""].Visible := false; + FBtns["ֹ"].Visible := false; + FBtns["ͣ"].Visible := true; + FBtns["ˢ·ű"].Visible := false; + FBtns["ˢµǰ"].Visible := false; + end + "ֹͣ": + begin + hiddenbtns(); + end + end + end + function showbtns(); //ʾ + begin + for i,v in FBtns do + begin + V.Visible := true; + end + //FToolbar.Visible := true; + end + function hiddenbtns(); // + begin + for i,v in FBtns do + begin + if v.Caption="/ɾϵF5" then continue; + v.Visible := false; + end + //FToolbar.Visible := false; + end + function stopdebug(); // + begin + if FDebughandle then + begin + SysTerminate(-1,FDebughandle); + FDebughandle := 0; + end + end + function parseriteminfo(item,idx,n,usr); + begin + if item=FRuningItem then + begin + usr := "local"; + n := "__main__"; + end else + begin + usr := "system"; + end + if not n then + begin + n := getscriptname(item.OrigScriptPath); + end + end + function getscriptname(nn); + begin + fio := ioFileseparator(); + n := ""; + for i := Length(nn)-1 downto 1 do + begin + if fio=nn[i]then + begin + n := nn[i+1:]; + idx := pos(".",n); + if idx then + begin + n := lowercase(n[1:idx-1]); + end + break; + end + end + return n; + end + function setbrks(); //Ӷϵ + begin + its := owner.GetAllPageItems().data; + for i,v in FDebugtsfs do + begin + delii :=-1; + for ii,vv in its do + begin + ifok := vv.ScriptPathIs(v); + if ifok then + begin + delii := ii; + lines := vv.FEditer.Lines; + for idx := 0 to Lines.Length()-1 do + begin + if Lines[idx].FMarked then addbreak(vv,idx,i); + end + break; + end + end + if delii <> 0 then + begin + reindex(its,array(delii:nil)); + end + end + if FRuningItem then + begin + lines := FRuningItem.FEditer.Lines; + for idx := 0 to Lines.Length()-1 do + begin + if Lines[idx].FMarked then addbreak(FRuningItem,idx,"__main__"); + end + end + end + function setgdbcallback(); //ûص + begin + global g_tsldbgcallback_handle; + g_tsldbgcallback_handle := thisfunction(dbgeventcall); + dbgsetcallback(FConnectchannel,"return unit(utslvcldebuger).tdbgcallback();"); + end + function formatvlist(d); + begin + r := array(); + ncs := array(); + idx := 0; + for i,v in d do + begin + ri := parservname(i,v); + for j,vj in ri do + begin + id := vj["n"]; + if ncs[id]then continue; + ncs[id]:= true; + r[idx]["id"]:= id; + vjt := vj["t"]; + vjv := vj["v"]; + if vjt="*" then + begin + vval := array("value":vjv,"font":("color":0xff0000)); + end else + if ifarray(vjv)then + begin + vval := array("value":vjv,"font":("color":0)); + end else + if ifstring(vjt)and(vjt <> "nil")then + begin + vval := array("value":tostn(vjv),"font":("color":0)); + end else + begin + vval := array("value":"","font":("color":0)); + end + r[idx]["data"]:= array(vj["c"],vval,vj["t"],vj["n"],id); + r[idx]["pid"]:= vj["p"]; + r[idx]["nnp"]:= vj["nnp"]; + idx++; + end + end + return r; + end + function formatsysvlist(d,len); + begin + r := array(); + ncs := array(); + idx := 0; + for i,v in d do + begin + ri := parsersysname(i,v,len); + for j,vj in ri do + begin + id := vj["n"]; + if ncs[id]then continue; + ncs[id]:= true; + r[idx]["id"]:= id; + vjt := vj["t"]; + vjv := vj["v"]; + if vjt="*" then + begin + vval := array("value":vjv,"font":("color":0xff0000)); + end else + if ifarray(vjv)then + begin + vval := array("value":vjv,"font":("color":0)); + end else + if ifstring(vjt)and(vjt <> "nil")then + begin + vval := array("value":tostn(vjv),"font":("color":0)); + end else + begin + vval := array("value":"","font":("color":0)); + end + r[idx]["data"]:= array(vj["c"],vval,vjt,vj["n"],id,vj["len"]); + r[idx]["pid"]:= vj["p"]; + r[idx]["nnp"]:= vj["nnp"]; + idx++; + end + end + return r; + end + function gettypename(ev); + begin + case datatype(ev)of + 0:t := "int"; //͵ + 20:t := "int64"; + 24:t := "lstr"; + 1:t := "double"; + 2:t := "str"; + 5:t := "array"; + else t := "nil"; + end; + return t; + end + function parsersysname(ostring,ev,nlen); + begin + len := length("*TSL_UNComplete*"); + ucp := false; + if pos("*TSL_UNComplete*",ostring)=1 then + begin + ucp := true; + if Length(ostring)=len then //մ + begin + nstr := ""; + return array(); + end else + nstr := ostring[len+1:]; + end else + nstr := ostring; + r := array(); + if ucp then t := "*"; + else t := gettypename(ev); + nid := ""; + r[0]:= array("n":"sysparams+", + "c":array("font":("color":0x0000ff,"italic":1),"value":"sysparams") + ); + if nlen >= 0 then + begin + nnl := 0x80000000+_shl(nlen,4)+1; + cn := ""; + if nlen=0 then + begin + r[1]:= array("n":"+", + "c":tostn(""), + "len":nnl, + "p":"sysparams+" + ); + end else + begin + cn := nstr[1:nlen]; + r[1]:= array("n":cn+"+", + "c":cn, + "len":nnl, + "p":"sysparams+" + ); + if nlen FStringAlign then + begin + FStringAlign := v; + InvalidateRect(nil,true); + end + end + function SetNumberAlign(v); + begin + if v <> FNumberAlign then + begin + FNumberAlign := v; + InvalidateRect(nil,true); + end + end + function SetdefAlign(v); + begin + if v <> FDefAlign then + begin + FDefAlign := v; + InvalidateRect(nil,true); + end + end + function GetTSLData(); + begin + return FData; + end + function StrToNumber(s); + begin + if pos(".",s)then + begin + return StrToFloatDef(s,0); + end else + begin + return StrToIntDef(s,0); + end + end + function SetRowHeader(v); + begin + nv := v?true:false; + if FRowHeader <> nv then + begin + FRowHeader := nv; + FD := FData; + SetData(array()); + SetData(FD); + end + end + function SetTwoD(v); + begin + nv := v?true:false; + if nv <> FShowTwo then + begin + if FCanedit and nv then return; //༭ + FD := FData; + SetData(array()); + FShowTwo := nv; + SetData(FD); + end + end + function setdatap(); + begin + if not Fdata then exit; + FCols := nil; + FRows := mrows(Fdata,1); + FCL := mcols(Fdata,1); + allFCL := true; + if FShowTwo then + begin + for i,v in FData do + begin + if not ifarray(v)then + begin + allFCL := false; + break; + end + end + end + fcs := array(); + wd := 150; + for i,v in FRows do + begin + if ifstring(v)then + begin + wd := max(wd,length(v) * 9); + if wd>200 then break; + end + end + if RowHeader then + begin + fcs[0]:= array("text":" ","width":min(200,wd)); + end + 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":FMRWD); + end + end else + begin + fcs[length(fcs)]:= array("text":" ","width":ColumnWidth>20?ColumnWidth:150); + end + Columns := fcs; + ItemCount := length(FRows); + end + function gettxtobj(); + begin + if not ftext then + begin + FText := new TFTSLScriptcustomMemo(self); //tmemo(self); + //ftext.HighLighter := FHGS[0]; + ftext.readonly := true; + ftext.left := left+20; + ftext.top := top+20; + ftext.width := 500; + ftext.height := 400; + ftext.wspopup := true; + FText.WsSysMenu := true; + ftext.WsSizeBox := true; + FText.onclose := function(o,e) + begin + e.skip := true; + o.visible := false; + end + FText.parent := self; + end + return ftext; + end + function SetData(data,f); + begin + if Fdata=data then return; + DeleteAllColumns(); + if ftext then ftext.Visible := false; + for i,v in mrows(FCControls,1) do + begin + obj := FCControls[v]; + obj.TSLdata := nil; + obj.Visible := false; + obj.Parent := nil; + end + FCControls := array(); + FData := data; + setdatap(); + end + function itemishow(r,r2); + begin + return r[2]r2[2]; + end + function getdtobject(); + begin + global Fdtobjects; + if not ifarray(Fdtobjects)then Fdtobjects := array(); + for i,v in Fdtobjects do + begin + p := v.Parent; + if not p then + begin + return v; + end + end + o := new TTSlDataGrid(initializeapplication()); + o.ControlIndexs(idexs); + o.height := 500; + o.width := 500; + o.Twodimensional := Twodimensional; + o.Visible := false; + o.wspopup := true; + o.WsSysMenu := true; + o.WsSizeBox := true; + o.onclose := thisfunction(ShowDataClose); + Fdtobjects[length(Fdtobjects)]:= o; + return o; + end + function getitemcontrol(d,p,i,j,tp,cp,idexs); + begin + idx := format("%d*%d",i,j); + o := FCControls[idx]; + if tp="grid" then + begin + if not o then + begin + o := getdtobject(); + o.parent := self; + FCControls[idx]:= o; + end + //o.Twodimensional := Twodimensional; + if o.wspopup then p := ClientToScreen(p[0],p[1]); + o.left := p[0]-20; + o.top := p[1]-20; + o.caption := caption+"."+cp; + o.TSLdata := d; + o.show(); + end + end + public + function create(AOwner);override; + begin + inherited; + if not fhgs then + begin + FHGS := array(); + FHGS[0]:= new TTslSynHighLighter(initializeapplication()); + FHGS[1]:= new TJsonSynHighLighter(initializeapplication()); + end + GridLine := true; + FCControls := array(); + FRowHeader := true; + FixedColumns := 1; + itemheight := 25; + caption := ""; + FMRWD := 150; + FShowTwo := false; + OndblClick := thisfunction(GridCellDblClick); + FNumberAlign := AL9_CENTERRIGHT; + FStringAlign := AL9_CENTERLEFT; + FDefAlign := AL9_CENTER; + mu := new TPopupmenu(self); + for i,v in array("һά","ά","ԭ","json") do + begin + mi := new TMenu(self); + mi.parent := mu; + mi.caption := v; + mi.OnClick := function(o,e) + begin + case o.caption of + "һά": + begin + Twodimensional := false; + end + "ά": + begin + if FCanedit then return; + Twodimensional := true; + end + "ԭ": + begin + showstring(); + end + "json": + begin + showstring(1); + end + end + end + end + PopupMenu := mu; + end + function DoDrawSubItem(o,e);override; + begin + inherited; + if e.skip then exit; + dc := e.canvas; + i := e.itemid; + j := e.subitemid; + d := getdata(i,j); + src := e.SubItemRect; + if j=0 and FRowHeader then + begin + //_wapi.DrawFrameControl(dc.Handle,src,DFC_BUTTON,DFCS_BUTTONPUSH); + dc.Draw("framecontrol",array(src[0:1],src[2:3]),DFC_BUTTON,DFCS_BUTTONPUSH); + end + ds := ""; + dc.font.color := 0; + if ifarray(d)then + begin + ds := format("",length(d)); + //dc.drawtext(ds,src); + class(TLabel).CanvasDrawAlignText(dc,src,ds,FDefAlign); + end else + if ifstring(d)then + begin + ds := d; + //dc.drawtext(ds,src); + class(TLabel).CanvasDrawAlignText(dc,src,ds,FStringAlign); + end else + begin + ds := tostn(d); + if d<0 then dc.font.color := rgb(200,0,0); + if ifnumber(d)and j>0 then + begin + //dc.drawtext(ds,src,DT_RIGHT); + class(TLabel).CanvasDrawAlignText(dc,src,ds,FNumberAlign); + end else + begin + //dc.drawtext(ds,src); + if not ifnil(d)then class(TLabel).CanvasDrawAlignText(dc,src,ds,FStringAlign); + end + end + end + function GridCellDblClick(o,e);virtual; + begin + cp := 1; + cl := e.isubitem; + if cl<1 and FRowHeader then exit; + indexs := 1; + d := getdata(e.iitem,cl,cp,indexs); + p := e.ptaction; + if ifarray(d)then + begin + if d then getitemcontrol(d,p,e.iitem,cl,"grid",cp,indexs); + end else + begin + gettxtobj(); + ftext.caption := Caption+"."+cp; + FText.text := tostn(d); + FText.show(); + end + end + function ShowDataClose(o,e); + begin + o.show(false); + o.TSLdata := array(); + e.skip := true; + end + function Recycling();override; + begin + inherited; + ftext := nil; + FCols := nil; + Fdata := nil; + FControls := array(); + end + function ControlIndexs(dx); + begin + {** + @ignore() %% + **} + if dx then FControlIndex := dx; + return FControlIndex; + end + property Twodimensional:bool read FShowTwo write SetTwoD; + property TSLdata:variable read GetTSLData write SetData; + property ColumnWidth:integer read FColumnWidth write FColumnWidth; + property RowHeader:bool read FRowHeader write SetRowHeader; + property StringAlign:AlignStyle9 read FStringAlign write SetStringAlign; + property NumberAlign:AlignStyle9 read FNumberAlign write SetNumberAlign; + property DefAlign:AlignStyle9 read FDefAlign write SetdefAlign; + {** + @param(Twodimensional)(BOOL) Ƿάǿƶάչʾ %% + @param(TSLdata)(array) tsl %% + **} +end +type TGroupGridA=class(TDrawGrid) + {** + @explan(˵)㼶ܵı %% + **} + {** + @expample() + FGrid := new TGroupGridA(self); + FGrid.border := true; + FGrid.OddLineBKColor := 0xFF0000; //бɫ + FGrid.EvenLineBKColor := 0x00FF00;//żбɫ + cls := array(("text":"a","width":300),("text":"b","width":30)); //ñ + FGrid.Columns := cls; + d := array( + ("id":1,"data":("",true)), + ("id":2,"data":("a",false)), + ("id":3,"pid":1,"data":(("value":"a","type":"string","font":("color":rgb(200,0,0))),true)), + ("id":4,"pid":1,"data":("a",false)), + ("id":5,"pid":3,"data":("a",false)) + ); + FGrid.SetNodeData(d); // + //ʹ FGrid.GetNodeData(); + **} + uses tslvcl; + function Create(AOwner);override; + begin + inherited; + GridLine := true; + FOddLineBKColor := 0xFAF3F1; + FEvenLineBKColor := 0xFFFFFF; + FNodeManger := new TGroupManger(); + GridLine := true; + FNodes := array(); + FCellediter := new tedit(self); + FCellediter.Visible := false; + FCellediter.Parent := self; + FCellediter.onkeyup := thisfunction(doeditcell); + FCellediter.onKillFocus := function(o,e) + begin + o.Visible := false; + end + //inherited SetColumns(array(("text":"","width":25))); + end + function doeditcell(o,e); + begin + //echo "\r\nkey up:",e.charcode; + case e.charcode of + 13: + begin + e.skip := true; + o.Visible := false; + callDatafunction(FCelledit,o._Tag,o.text); + end + end; + end + function SetNodeData(d,ncls); // + begin + FCellediter.Visible := false; + if not ncls then + begin + FCurrentNode_a := nil; + FNodeManger.RootNode.RecyclingChildren(); + FNodeData := array(); + FNodeIds := array(); + end + for i,v in d do + begin + id := v["id"]; + nd := FNodeData[id]; + if nd then + begin + for j,vj in v["data"] do + begin + nd[j]:= vj; + end + continue; + end + pid := v["pid"]; + nd := CreateNode(); + nd.FNodeid := id; + nd.FNNNODE := V["nnp"]; + nd.Expanded := false; + pnd := FNodeData[pid]; + for j,vj in v["data"] do + begin + nd[j]:= vj; + end + if not(pnd)then AppendNode(nd); + else AppendNode(nd,pnd); + FNodeData[id]:= nd; + FNodeIds[id]:= pid; + end + UpdateWindow(); + InValidateRect(nil,false); + end + function GetNodeData(); // + begin + r := array(); + ri := 0; + for i,v in FNodeData do + begin + r[ri,"id"]:= i; + r[ri,"pid"]:= FNodeIds[i]; + r[ri,"data"]:= v.FData; + ri++; + end + return r; + end + function getcurrentnodedata(); + begin + if FCurrentNode_a then + begin + d := FCurrentNode_a.Fdata; + if d[3]="sysparams+" then return; + d[2]:= "*"; + FNodeManger.getcdnodes(FCurrentNode_a,r); + reindex(FNodeData,r); + reindex(FNodeIds,r); + FCurrentNode_a.RecyclingChildren(); + FCurrentNode_a.Expanded := false; + calldatafunction(FCelldbclk,self,array(1,d,FCurrentNode_a)); + end + end + function MouseDown(o,e);override; + begin + // + inherited; + if e.shiftdouble()then + begin + r := HitTestItem(e.xpos,e.ypos); + if r[0]>= 0 and r[1]=1 then + begin + nd := FNodes[r[0]]; + d := nd.Fdata; + if d[2]in array("str","int","lstr","double","nil","int64")then + begin + try + rc := o.GetSubItemRect(r[0],r[1]); + FCellediter.SetBoundsRect(rc); + try + FCellediter.Text := d[1]["value"]; + except + FCellediter.Text := ""; + end; + FCellediter._Tag := array(r[1],d,nd); + FCellediter.show(); + FCellediter.SetFocus(); + except + end; + return; + end else + if d[2]="array" then + begin + calldatafunction(FShowarray,d); + return; + end + calldatafunction(FCelldbclk,o,array(r[1],d,nd)); + end + end + FCellediter.Visible := false; + end + function MouseUp(o,e);override; //չ۵ + begin + inherited; + r := HitTestItem(e.xpos+5,e.ypos); + if r[0]>= 0 then + begin + nd := FNodes[r[0]]; + if FCurrentNode_a <> nd then + begin + FCurrentNode_a := nd; + InValidateRect(nil,false); + end + if r[1]=0 then + begin + if nd and nd.NodeCount>0 then + begin + if nd.Expanded then nd.UnExpand(); + else nd.Expand(); + UpDateWindow(); + end + return; + end + v := nd[r[1]]; + if ifarray(v)then + begin + if v["type"]="link" then + begin + //return CallMessgeFunction(OnLinkCellClik,o,v); + end + end + end + end + function AppendNode(nd,pnd); //ڸڵ׷ӽڵ + begin + if not(pnd is class(TNode))then _pnd := FNodeManger.RootNode; + else _pnd := pnd; + _pnd.AppendNode(nd); + end + function InsertNode(nd,idx,pnd); //ڵ + begin + if not(pnd is class(TNode))then _pnd := FNodeManger.RootNode; + else _pnd := pnd; + _pnd.InsertNode(nd,idx); + end + function CreateNode(); //ڵ + begin + return FNodeManger.CreateNode(); + end + function InsertNodes(nds,idx,pnd); //ӽڵ + begin + if not(pnd is class(TNode))then _pnd := FNodeManger.RootNode; + else _pnd := pnd; + _pnd.InsertNodes(nds,idx); + end + function GetNodeByIndex(idx); //ͨŻýڵ,update + begin + return FNodes[idx]; + end + function UpDateWindow(); //updateڵ + begin + //´ + FNodes := FNodeManger.ListNodes(); + ItemCount := length(FNodes); + end + function DoDrawItem(o,e);override; //ƵԪ + begin + inherited; + j := e.Subitemid; + i := e.itemid; + DObject := FNodes[i]; + if not DObject then return; + dc := e.canvas; + e.rcitem := rec; + rec := e.SubItemRect; + wd := 4; + if FCurrentNode_a=DObject then + begin + dc.Brush.Color := 0xffce87; + end else + begin + if i mod 2 then + begin + dc.Brush.Color := FOddLineBKColor; // FOddLineBKColor := 0xFAF3F1; + end else + dc.Brush.Color := FEvenLineBKColor; // FEvenLineBKColor := 0xFFFFFF; + end + dc.FillRect(rec); + dc.pen.color := 0xa8a8a8; + //dc.pen.style := PS_DASHDOT; + dc.pen.width := 2; + dc.moveto(array(rec[2],rec[1])); + dc.LineTo(array(rec[2],rec[3])); + if j=0 then + begin + cj :=-1; + pd := DObject.Parent; + while pd do + begin + if not(pd.FNNNODE)then cj++; + pd := pd.Parent; + end + wd := cj * 20+4; + if DObject.NodeCount>0 then + begin + if DObject.Expanded then bmp := FBmpExpand; + else bmp := FBmpUnexpand; + bmp.Draw(dc,rec[0]+wd+1,rec[1]+10,SRCAND); + //dc.stretchdraw(array(rec[0]+2+wd,rec[1]+2,rec[0]+15+wd,rec[1]+15),bmp); + end + //rec[0]+=wd+4+18; + rec[0]+= wd+16; + end + if j >= 0 and DObject then + begin + rec[0]+= 4; + v := DObject[j]; + if ifstring(v)then + begin + //if j=0 and v="sysparams" then dc.font.color := 0x0000ff; + //else dc.font.color := 0; + dc.DrawText(v,rec,DT_SINGLELINE .| DT_VCENTER); + end else + begin + if ifarray(v)then + begin + val := v["value"]; + typ := v["type"]; + ft := v["font"]; + rebk := false; + if ifarray(ft)and ft then + begin + bf := dc.font.fontinfo(); + dc.font.setvalues(ft); + rebk := true; + end + if typ="link" then + begin + udl := dc.font.underline; + fcl := dc.Font.Color; + dc.font.underline := true; + dc.Font.Color := rgb(0,0,254); + end + if ifstring(val)then + begin + dc.drawtext(val,rec,DT_SINGLELINE .| DT_VCENTER .| DT_NOPREFIX); + end else + if ifarray(val)then + begin + dc.drawtext(format("ARRAY<[%d]>",Length(val)),rec,DT_SINGLELINE .| DT_VCENTER .| DT_NOPREFIX); + end + //ԭ + if rebk then + begin + dc.font.SetValues(bf); + end else + if typ="link" then + begin + dc.font.underline := udl; + dc.Font.Color := fcl; + end + end else + begin + if not ifnil(v)then dc.drawtext(tostn(v),rec,DT_SINGLELINE .| DT_VCENTER .| DT_NOPREFIX); + end + end + end + end + function Recycling();override; + begin + inherited; + FCurrentNode_a := nil; + FCelldbclk := nil; + FShowarray := nil; + FCelledit := nil; + FOnLinkCellClik := nil; + FBoolColumns := nil; + FOddLineBKColor := nil; + FEvenLineBKColor := nil; + FNodeData := nil; + FNodeIds := nil; + FCellediter := nil; + end + published // + property OddLineBKColor read FOddLineBKColor write FOddLineBKColor; + property EvenLineBKColor read FEvenLineBKColor write FEvenLineBKColor; + property BoolColumns read FBoolColumns write FBoolColumns; + property OnLinkCellClik read FOnLinkCellClik write FOnLinkCellClik; + property celldbclk read FCelldbclk write FCelldbclk; + property celledit read FCellEdit write FCelledit; + property Showarray read FShowarray write FShowarray; + private + function GetChildAllChecked(nd,j,ck); + begin + nck := not(ck); + for i := 0 to nd.NodeCount-1 do + begin + cnd := nd.GetNodeByIndex(i); + if ifobj(cnd)then + begin + if cnd.NodeCount=0 then + begin + if cnd[j]=nck then return 0; + end + if 0=GetChildAllChecked(cnd,j,ck)then return 0; + end + end + return 1; + end + function CheckAllChild(nd,j,ck); + begin + for i := 0 to nd.NodeCount-1 do + begin + cnd := nd.GetNodeByIndex(i); + if ifobj(cnd)then + begin + vi := nd[j]; + if vi=0 or vi=1 then cnd[j]:= ck; + CheckAllChild(cnd,j,ck); + end + end + end + FBoolColumns; + FOddLineBKColor; + FEvenLineBKColor; + FNodeData; + FNodeIds; + FOnLinkCellClik; + FCelldbclk; + FCelledit; + FShowarray; + FCellediter; + protected + type TGroupNode=class(TNode) //groupgridڵ + uses tslvcl; + function Create(); + begin + inherited; + FData := array(); + end + function Operator[](idx); + begin + return FData[idx]; + end + function Operator[1](idx,val); + begin + return FData[idx]:= val; + end + FNodeid; + FNNNODE; + //private + FData; + end + type TGroupManger=class(TNodeManger) //groupڵ + function Create(); + begin + inherited; + end + function CreateNode();override; + begin + return new TGroupNode(); + end + end + class function Sinit();override; + begin + inherited; + GetSJPng(); + end + private + FCurrentNode_a; + FNodes; + FNodeManger; + static FBmpExpand; + static FBmpUnexpand; + class function GetSJPng(); + begin + if not FBmpExpand then + begin + FBmpExpand := new TBitmap(); + FBmpExpand.readvcon(HexFormatStrToTsl("0502000000060400000074797065000203000000696D670006040000006461746 +10002C700000089504E470D0A1A0A0000000D494844520000000A0000000A0806 +0000008D32CFBD000000017352474200AECE1CE90000000467414D410000B18F0 +BFC6105000000097048597300000EC300000EC301C76FA8640000005C49444154 +285363F84F24204DE1EA7DF8F1ABF740851FBFFEFF9FD9F3FF7F443D6E7CF53ED +4C41B0FFFFF8F6FC1AEE8D005900A24379EBA86A968D729A82410A07866F76984 +A2CD47A1825080E16B9807D00186425C804885FFFF030081696EBEB08C861D000 +0000049454E44AE42608200")); + end + if not FBmpUnexpand then + begin + FBmpUnexpand := new TBitmap(); + FBmpUnexpand.readvcon(HexFormatStrToTsl("0502000000060400000074797065000203000000696D670006040000006461746 +10002BF00000089504E470D0A1A0A0000000D494844520000000A0000000A0806 +0000008D32CFBD000000017352474200AECE1CE90000000467414D410000B18F0 +BFC6105000000097048597300000EC300000EC301C76FA8640000005449444154 +285363F88F0672FAFEFF3F7A09CA4102180A23EA2178DF39A80014E05408C23B4 +E40058100AF4210DE7404224E502108AFDE474D852045208057214C1108E05488 +AC08043014164DC654F4FFFFFFFF0022DF66E2EA30F3BB0000000049454E44AE4 +2608200")); + end + end +end +type TNodeManger=class //ڵ + uses tslvcl; + function Create(); + begin + FRootNode := CreateNode(); + end + function CreateNode();virtual; + begin + return new TNode(); + end + function ListNodes();virtual; + begin + r := array(); + GetExpandedNodes(FRootNode,r,0); + return r; + end + function GetNodeByListIndex(id);virtual; + begin + return GetExpandedNodeById(FRootNode,0,id); + end + function getcdnodes(nd,r); + begin + if not ifarray(r)then r := array(); + for i := 0 to nd.NodeCount-1 do + begin + cnd := nd.GetNodeByIndex(i); + r[cnd.FNodeid]:= nil; + getcdnodes(cnd,r); + end + end + Property RootNode read FRootNode; + Private + function GetExpandedNodes(nd,r,ct); + begin + for i := 0 to nd.NodeCount-1 do + begin + cnd := nd.GetNodeByIndex(i); + r[ct++]:= cnd; + if cnd.NodeCount>0 and cnd.Expanded then GetExpandedNodes(cnd,r,ct); + end + end + function GetExpandedNodeById(nd,ct,id); + begin + for i := 0 to nd.NodeCount-1 do + begin + cnd := nd.GetNodeByIndex(i); + if ct=id then return cnd; + ct++; + if cnd.NodeCount>0 and cnd.Expanded then + begin + r := GetExpandedNodeById(cnd,ct,id); + if r then return r; + end + end + end + private + FRootNode; +end +function tdbgcallback(); +begin + global g_tsldbgcallback_handle; + if g_tsldbgcallback_handle then call(g_tsldbgcallback_handle,sysparams); +end +function ejsonformat(d,tbw); +begin + return exportjsonformat(d,tbw); +end + +initialization + + +end. + + +///////////////ʱú////// +(* + + function getobjtransfunc(); + begin + return %% +function _show_dbg_obj(o_,ct,mus); +begin +r := array(); +if ifarray(o_) then +begin + for i,v in o_ do + begin + r[i] := _show_dbg_obj(v,ct,mus); + end + return r; +end else +if not ifobj(o_) then return o_; +if not ifarray(mus) then mus := array(); +if o_ in mus then return ""; +o := o_; +obk := o; +try + stk := array(); + idx :=0; + while idx<(ct>0?ct:3) do + begin + mus[length(mus)] := o; + d := o.classinfo(); + stk[idx,0] := o; + stk[idx,1] := d; + inh := d["inherited"]; + if not inh then break; + o := findclass(inh[0],o); + idx++; + end + for idx := length(stk)-1 downto 0 do + begin + o:=stk[idx,0]; + for i,v in stk[idx,1,"properties"] do + begin + n := v["name"]; + if v["read"] and (v["access"] in array(0,1)) then + begin + r[n] := 0; + + end else + begin + reindex(r,array(n:nil)); + end + end + for i,v in stk[idx,1,"members"] do + begin + n := v["name"]; + if v["access"] in array(0,1) then + begin + r[n] := 0; + + end else + begin + reindex(r,array(n:nil)); + end + end + + end + rs := mrows(r,1) ; + for i := length(rs)-1 downto 0 do + begin + v := rs[i]; + nv := invoke(obk,v); + if datatype(nv)=7 then r[v] := ""; + else if ifarray(nv) then r[v] := _show_dbg_obj(nv,ct,mus); + else if ifobj(nv) then r[v] := _show_dbg_obj(nv,ct,mus); + else r[v] := _show_dbg_obj(nv,ct,mus); + end +except + return r; +end; +return r; +end + %%; + end + +*) \ No newline at end of file diff --git a/designer/utslvcldesignerresource.tsf b/designer/utslvcldesignerresource.tsf new file mode 100644 index 0000000..5dd3aa8 --- /dev/null +++ b/designer/utslvcldesignerresource.tsf @@ -0,0 +1,1225 @@ +unit utslvcldesignerresource; +interface +{** +@explan(˵) ͼƬԴ %% +@data(20220518) +**} +function GetFolderChooseBitmapInfo(); +function GetColorChooseBitmapInfo(); +function GetFontChooseBitmapInfo(); +function GetInputquerysBitmapInfo(); +function GetTsIconBitmapInfo(); +function GetOpenFileBitmapInfo(); +function GetTrayBitmapInfo(); +function GetImageListBitmapInfo(); +function GetTimerBitmapInfo(); +function GetSaveFileBitmapInfo(); +function GetMainMenuBitmapInfo(); +function GetActionListBitmapInfo(); +function GetPopUpMenuBitmapInfo(); +function GetMessageBoxBitmapInfo(); +function GetClientBitmapInfo(); +function GetClipboardBitmapInfo(); +function GetServerBitmapInfo(); +function GetQuotationBitmapInfo(); +function GetLoginBitmapInfo(); +function GetHostroyBimp(); +function getdefaultbmpinfo(); +function getexamplesbmpinfo(); +function getctlsbmpinfo(); +function getmanubmpinfo(); +function getstopbmpinfo(); +function getrunbmpinfo(); +function getwrapprojectbmpinfo(); +function getcreateprojectbmpinfo(); +function geteditcodebitmapinfo(); +//༭ͼƬ +function getdbugerrunbmpinfo(); +function getopenfilebmpinfo(); +function getsaveallbitmapinfo(); +function getredobitmapinfo(); +function getunredobitmapinfo(); +function gettslsyntaxcheckbitmapinfo(); +function gettslcodemapbitmapinfo(); +function getquickkeybitmapinfo(); +function getfindbitmapinfo(); +function gettslcodeformatbitmapinfo(); +function getformbitmapinfo(); //ͼ +function getbitmapviewerbitmapinfo(); +function getsheetbitmapinfo(); +function getsplitersiderbitmapinfo(); +function getbtnbitmapinfo(); +function gettimepickerbitmapinfo(); +function gettoolbarbitmapinfo(); +function getlabelbitmapinfo(); +function getlistviewbitmapinfo(); +implementation +function getexamplesbmpinfo(); +begin + return "0502000000060400000074797065000203000000696D670006040000006461746 +10002AA01000089504E470D0A1A0A0000000D4948445200000018000000180806 +000000E0773DF8000000017352474200AECE1CE90000000467414D410000B18F0 +BFC6105000000097048597300000EC300000EC301C76FA8640000013F49444154 +484BBD940B4FC2301485F9FF7F49638C898F058C8293E81ECA18E1351C0C64899 +179DDA9AEA9A3CDB8C03CC949BAFBFAB6765BE3E4E699EAF4FF01E2647D546B01 +C79216E08591B43F98FDB9DEC75B80BA2C01AD6EF8EBFE81FE99B305A8FD0C760 +1CC97A97095F606D8FE48B84A6CC0E72613775ED4628D98493B03DED30FBAEEF4 +6471D9C8A1A62CD6139820A6E1100B00BD290D851133890D08270BD950183193D +880EECB98DC7E4459F6258C356226B101BABD36ED3FC40670C506C4494A4E30A5 +CBFB5761AC1133A912808F681825F4E08DE8E2D697C56523871AD4AA1F9E11108 +EE7D4768674D6746541E1BBA781C8C35897F3E8412FF25AC0A9E5C8207CDE72E9 +31FFEF4CE3156D34BF05C490430D6AD55E759604C057ED5EBEBF11CD16FC03470 +F7A31439DD9B0EC80BCFCBD56CFE0506116665A7640DF50A54EEE2F8BDA750000 +000049454E44AE42608200"; +end +function getctlsbmpinfo(); +begin + return "0502000000060400000074797065000203000000696D670006040000006461746 +10002E402000089504E470D0A1A0A0000000D4948445200000010000000100806 +0000001FF3FF61000000017352474200AECE1CE90000000467414D410000B18F0 +BFC6105000000097048597300000EC300000EC301C76FA8640000027949444154 +384F8D924B4C135118852B2AA046431150E303E26B455CB1D3953B162ED818A2C +6850B88441275A126269A687443A54AA251AC411E1B345414E461176881A260C4 +5035D3875230410A0DB543FAB074EEF1DCCE34445CE849BEB4F77F9CB9FFCC6FC +25F1224423E00F35660F23CB064E7394012467E592B0C647216983E0D58D60167 +5601D52CB9B21A682A02B40EE6A3E9CA8C5618C8275F036E6703554C5D261789F +C2F8D9C5B997792A42C4E8BD18C52641C88950056861F93251227D2489AB4F126 +A82461D99016A319C5492B3113193670911A226FE2E348D84766882E596548CE7 +6876C22324CA6C9257295788D18B6113FD1C81F06BFC80B52488CE25BA49E848D +33E40865244874C928E6BCEFA0B49D42C05E81D87C118496A5A7AE938F996613B +4640E7E2A65987C5E8BB81A92ADBA81D2701089BA2CA4BA4A21C673F93AF824C1 +7947990E1A061ACFE1B5D05EAF47AAB314BEE1A7B25537F8565F8AA82D1B9A733 +FC4977C0875339B697496E90B6C9CC9E197CB830815424CE4437B6586BFFFA66E +90585CC00F6B09D4E65C88919D10937C07D11DC01B2E4E0D9BCFADE136EEE6AD4 +8743B84AF00626023A6BAAB748339FF382296022CDCCB81E63043B87983792E4C +B418F844A300F722BE87E75D10B35B38A2195ACF06843ACA918C2DC2E4733D43C +A9A87196B31949643F0741E86C7510ECFD01178472BE0797F94BF95F0BA8EC13B +701CDEDE13F0D94FC2D35E85AF637D30298E46F8EAF62218FC9EBED2FFC8ED1E4 +66B432D42D30A4C0B539FE1AE3B00555D5ECF7F696CCC019BA59A23A8FA57F03B +EE62B0FD069C5DF731D8F50043DD8D187AF910C33D36B824BD8F30D2D794E66D7 +F3369C1C0130BE291107E03B1BD47754EBE98780000000049454E44AE42608200 +"; +end +function getmanubmpinfo(); +begin + return "0502000000060400000074797065000203000000696D670006040000006461746 +10002E002000089504E470D0A1A0A0000000D4948445200000010000000100806 +0000001FF3FF61000000017352474200AECE1CE90000000467414D410000B18F0 +BFC6105000000097048597300000EC300000EC301C76FA8640000027549444154 +384FA590494F53611885FD6FC6C48D2B57BA21828808C4401C222444A26200A31 +8A802020151204A903009AD76A02D63A194D2C26DCAD401E8A54C2DBD94C9C7AF +A5704358194F727237E73CF73DDF15FE539700FB877F58D93C666C318E495230C +CC5304B31BCEB7162F193544AD505801C39C6EC51F0860E585857F004A3497BD7 +62B803317A2737F187E3A9F4A9CE01A1DD2374B35196E47DA617B76833F929EB9 +CA7B4638E7ADD0223EE0DA4D5282DA6004BA158AA9502C40E4ED039775908290C +CF872911A53A9D57FC4DC1178ED1391AA0A86D06EDD42A2EDFAE002EB1B377A80 +212E7CDFAF798F46E53DCEEE269D3B4D87B247C9CF21125ED0E8ABED831BB6486 +66130EA980AE7119496C6D14E4C74D760A1A27F16F88CD13010CCE35140130388 +3E4D45878DFEB6666798B8A0EA70A68D0AD88C78A50DCEA20BFC1466EDD88085B +E9B7F9D88AC659DF5268FE2D71BF7A88FC4F56DCBE1DF26B475440558F072910A +1F0AB839C5A2B0F3E5AC8FE6021A21CB22247C9D30C91F94ECF5DE13C8D11977F +9BAC4A930AD0F4483857B6D1F449E4D68C90AD31935565E25EA521E98C0A1D19E +583A4970F50DA3681CD2BF35040CF01BFECAB0CDA0258DD72F2B4B36278771F79 +4721ADEC67D219657DE8A67CB48A396D7A49052482CF1AC6189B97D14EFAC9A93 +692FE464B75973DE944F9CEEB6EBE193D181D016EBDE86735BCA702129A906451 +D26371AD619809F2AA758CACB7036496F7F3BCD98AD6B68C7EDACFF5273F308AE +F99CE01090D8B725A999616DD1CE39E108EE570D2A3F3EBD4F739B951D885DEEE +4BA54F75019050509CF659EBE6F6CB7EAE3DEAE06AC1776E16770BC00C7E39924 +AA9BA04F837C15F4F46800A8EF8DEDF0000000049454E44AE42608200"; +end +function getstopbmpinfo(); +begin + return "0502000000060400000074797065000203000000696D670006040000006461746 + 100029301000089504E470D0A1A0A0000000D4948445200000010000000100806 + 0000001FF3FF61000000017352474200AECE1CE90000000467414D410000B18F0 + BFC6105000000097048597300000EC300000EC301C76FA8640000012849444154 + 384FCD92496B025110847353DC453DB880A888A888EBFFFF2781104446CC6602C + 9E430F9D2E57B8679971CE2C11434BE81AEEAEA6A6FB810FF4C20D96C60B582E5 + 12E673984EF91A8F8947235EAD0EF6DE4E26BEDB217420F27AED6AB13809301C9 + 2F4FBBCF77A3C0D06ECEC3B8D504093CFE4D90C6C2A46A4D522B67AE97488BA5D + DFEC100AC8F6996C76B1C9B4DB50AFF359AB71B4DF7DB3E99B1D4201595669B2C + 8369146038A45E2528963A54264226904020A4C3B9F6C6BB22727B91C1F56CFF9 + 3C9189A41108286D05A69D65FB879CC9F066F560EF9D39492310D0A994B602D3C + EB2ADC9223F66B344F6BE2F977DB74320A03BEB544A5B816967D9D66491B78502 + 77D5AAEF760804F427D19D752AA5ADC0B4B36C6BB2C8B7BF85F8175C5B00BE01F + F2C4775DEA0B57A0000000049454E44AE42608200"; +end +function getrunbmpinfo(); +begin + return "0502000000060400000074797065000203000000696D670006040000006461746 + 10002DF01000089504E470D0A1A0A0000000D4948445200000010000000100806 + 0000001FF3FF61000000017352474200AECE1CE90000000467414D410000B18F0 + BFC6105000000097048597300000EC300000EC301C76FA8640000017449444154 + 384F85906B6F0151108657575489AD124B5C1AAC452D65DB529754DA34FD692D4 + 5DD4ADDBA71EBFF7CBB3889E8504F321FCECC9B674E86C31F5EB4289E3599BD8E + 43044F33098F5309652DC83AFF43058B10CAF3008A531F4ADF3ED63D0C1194970 + 194165E14666EDC6B22B263179BEC87081E967E1496227273276E353BD4910075 + 6067530A11147F3CC82D1CC8CC045C6B1628A333A4FA16243B3696D8850A166ED + CCCED484FAD502626C4873CE23D23AEDA66249B5696DA420485B9A80B04A43433 + 62231E72DF80708743E48347B47E0AA526B0E40622C8CF5C50A7B6F576796040A + 4CD41AA7308E925D78C88572D2CB98108569757270212035DD033406A70085639 + 842BBAA872C2525B88203B16911E0A50FA66481D5DB0DAFEA6D72B89AEA13F18B + A91F93A87D2B520DAE411AA6D048720935CDF03F5F302899615B1860991779E4D + F64304F9AE176ADB895453BF437DF760FB208242C78FBBA6884CDDC13AFF4304A + 5D625720D2F7B1D03F80599273DB222D313980000000049454E44AE42608200"; +end +function getwrapprojectbmpinfo(); +begin + return "0502000000060400000074797065000203000000696D670006040000006461746 +100022D04000089504E470D0A1A0A0000000D4948445200000018000000180806 +000000E0773DF8000000017352474200AECE1CE90000000467414D410000B18F0 +BFC6105000000097048597300000EC300000EC301C76FA864000003C249444154 +484B9D95FF4FD34718C7F987F6C3DC9438E7343A750BC100A211182628884E98E +CBB084215A16C859608A5A3A603265FC6280C1601A15A22158DB4AE0B66E88420 +6E12A4D81629A57C31BC77F7F45A7AA538B25772F97C9EE79E7BDEF7B97BEE3E5 +1F80F56565E63DEEB85CB3D0BC7CC4B385D2ECC793C585A5A12116F664381E5E5 +65B8675F61DA3183B73E3E8743D95AA971BFD3E586CFE71323221351C0E399C79 +0FD313E385A045D432F0E1C2FC38FF766826DCBC17C4CBD70E072553B1415AD18 +7BFA1CABABAB62B4CC3A01AF770119B957A1D475925DACEDC0BB71059240F4210 +592CF56A1ED86154FFF7160FFB152347658283E1C496060E811624EA830CE0685 +C2972854606BBC0263CFA645AF9F6C453DCE14D6E2D1D8A4F0F8218129C72CEBA +C434DF32D7286B3E3489124B02B45297A645E7916B025360FDA0693F03081E6DF +EEE248D6152C2EAD08978CC33987E8C44B92C0FB4925D89EA88075785C44C9D41 +A6F23FE940683B6BF1055A0312233CF20BA6476262BF10E5BFFF025E2F6CEA462 +7AA67C5E2DA2D7E8EAB763172B9081A1C7FE25B258FD15C367CBD135DE4474422 +12AEB7B915ED820250FB43C9D0916DB131CFF564F42FA9FCD34F62B6523D25991 +787DFE7312DCE4B9390F761C568859698517B08F4C20ABD428254F3DFF136E581 +E8A08B083B8C8F6E92276275D6693EA115E3F41819B771E62EF2725F49E94538D +BDA9A598989C21BBA3CF86B3AA4E4A1E97FD037EE9B1929FC337765B7C0195F37 +5B31DB1E965B8C3D63E0009D4349BB127A5981C01BAFAFFA0AFF9B4B09EEC7243 +0F4E29DBA16FB94D362739478BB84C355D27A1F073A1BADA45EF513C095FF38D8 +861338ACD50E39E7D14EADA3EF25DD0B492F8EF7F4E901D89D6EEFB14435FD069 +B2E1C354259C6E0F7586D3697A40C10967AED03357D5227AD633F9C2C5F6F2627 +0D2C13DF0787D54721B956C4BB715EFB1815CA0CE3820BC3227CF1BA8FE27A7DD +C21322108027E0778FC5364AF6FCC2227235BFE2CBEA5B48FCBA8E363AABB40D0 +9A72BA89FD3CE8A602BDBE8A3AC38C28928C093A45D6AC5C9826BD89756864AD3 +04F90E7E56434FDEF20C168A8DCDAC407C8E9E7CE7CADB449635361488D43ECAA +C94ECEF3B46A0EE1A0DDAC535DD22CB1AEB04F4C641E4EBCD52A240DB93561ED1 +CF9BDA68A3C985B34E80C32B21BFEA3ABE6B1B9692F0BB29D4E64DD9741F9A867 +EDAAB48441408D03738820C45130C771D942CF4562D6A1A8242D78DF1BFE57F47 +386F14085071CD8C6FB47D789BFD2A4B8CC3F842D54E076F336C4A80F37CCA899 +8D35530F63E109ECDB16981FF07F02FE5F4C30FC035A3F30000000049454E44AE +42608200"; +end +function getcreateprojectbmpinfo(); +begin + return "0502000000060400000074797065000203000000696D670006040000006461746 +10002BC02000089504E470D0A1A0A0000000D4948445200000010000000100806 +0000001FF3FF61000000017352474200AECE1CE90000000467414D410000B18F0 +BFC6105000000097048597300000EC300000EC301C76FA8640000025149444154 +384F7D924D48146118C7273C885D5D0A89920D84ECE2A5082F76D93DA478A8DDD +9D99DFD5EAB252AC465D94317B340BD545B4B1D0A619548292F8298618730F2D0 +0795645E2A2F82C57E7F7FCCACFFE679DDA161C97DE0CFBC87F9FFDEF7F93F0F8 +77DCAE373D7E582DBEB84CBA3C8ED80D36D87C325C2E1146177DAD014502E9751 +A95498E85C2A9590CFE791CD66914EA7213AACCD002E66AC56AB4C2AA4582C229 +7CB31804D149A00BC2E66942489A97394635201994C06828D6F00ECEE028B8B40 +28C4FADE0F406D10C062353700A251C0EF0704818546CF568D8DA216788B49035 +0A8CC6C3603BDBD0AC0C17AFE9F994400B3E58206B0B5C56E465F1FA0D7B371D1 +732979926A54FB4FA55230F1E735005946666000525717A4B63665D676D66BA15 +060520164A6DB93C9E43F40A12C63E5F31FBC8A3CC3B713DDD86C6D65CB42F3D6 +4A6B4E24127B804F3F33B8FA78039E075F619958833D308325D1A76C99C89E490 +6129D49648EC7E388C5620A40C960786A13F67BEB308C7EC0A9C02A7A2E3F87F1 +DA13B6A6B46956655968DE16C1AC846662C19191C4421C8A7C81F1E647745F7F8 +BA3BE6574F051740E4E22316F407AFA3876C22D58BFC561798443F4520B7EFF58 +6391A9C58993AB38137C8363BE97382CCCA1BDFF3E0E19C7F06BFA2CB61FEA98F +97590C3CC450E61F10012DB1B75EB5E7181C80A4EFB6771849F82AE3F8C76C318 +C41B4FF17D218477B73BB044370F29669BF20DF6EC6DABA6B8AA2463E4EE024EF +277A01F1CC7958979C8B59AF25F0DEFE702981DD6E191F7205E8C9F835C2DD76D +6A017F012E1003A76A3E2C680000000049454E44AE42608200"; +end +function geteditcodebitmapinfo(); +begin + return "0502000000060400000074797065000203000000696D670006040000006461746 +10002EA01000089504E470D0A1A0A0000000D4948445200000018000000180806 +000000E0773DF8000000017352474200AECE1CE90000000467414D410000B18F0 +BFC6105000000097048597300000EC300000EC301C76FA8640000017F49444154 +484BCD944B4B02611885FB412DDBB4ED37740369D1C6F69110B5A89FD0A6562DA +4B21BB8C8F2921214840B4992C0109112BA58511048C55C4FF3CEF78DCE37CD94 +CE2478E0C070E6F53CCEFBE90CA0C7EA23C0ED31101D049AF73CE84C22E0709C9 +558BE5CE5370C95D658D628F0C0D0E9AC389F5FE637DA1201F661F2E70B2BC94C +3353665D9F2F02F59C384FB943DE80648865DBC3626ED92ADB1AFA99D9E40DB0D +6432BF132894A7D01F64718E42FD39C2F801FF727C06D2D969DB35D03E827FA9B +A8D03EEFEB09E8435E769B75A80FCE80DE416EFF01B2F329CE22BCA8ADFF03D0A +11B52A217D05215F39A147C45F4AAB84901AF1FD0725548A39BA6B57CDDAC0C06 +488C016FD7D0AF1A90E78E208776A0A52B26400EC7CD4AFF806CD8D8C71754631 +DD244ACF5CD95F934D4833294BD9259E91F505C815E7A845E7E823C136F01A4A9 +5DE8C5075E1804504B403BA94159C840BF7B87341983B29485FEDCE4654C22A04 +BD141CA912494F502D48D224F45050274A21E03806FF2C7CA7516022D7D000000 +0049454E44AE42608200"; +end +function GetFolderChooseBitmapInfo(); +begin + return "0502000000060400000074797065000203000000696D670006040000006461746 +10002F601000089504E470D0A1A0A0000000D4948445200000018000000180806 +000000E0773DF8000000017352474200AECE1CE90000000467414D410000B18F0 +BFC6105000000097048597300000EC300000EC301C76FA8640000018B49444154 +484BB595CB4AC3401486FB56051114EB9BF8046E5DF800A2088D0FE02BB871D59 +D1BC1B5206D166E6CD2DC9B26E92DEDB167E00CA733939A4833F0431639DF7732 +B774A0E5210497371FD0BD7E3F6A902905A617FE1B313A1DF97C7CC10EDEAA806 +74F4063BBDD8A6C361B28CB12D6EB35AC562B582E97B0582C44E6F33914450179 +9E439665309BCD44D23485E9740A49921C1698E02450E124E0F0388ECD02139C7 +7CFE1BC7B156E1470B8FDD483E14357C6B67A90873F02AE4E0D8793208A225D80 +701220148A4F196F700BEEE0BE12CEBB4778188666014D8D10A46F32A5FB0A76F +F7CEFABD48CAC0B09370AF8BC630104CF8D82352408824017F0451D3E9EEC7557 +2BBB1A82FBBE5F2DC01D83057C0DEA046B08EE799E2EE0DB5108E29746F953407 +02970EE1A056B083E994CAA05789884E0FBAA51B086E0AEEBEA027E5285E0EBB4 +51B006E1950282636CEBF09E3765D43F9370C771AA05754F2A2D289F77828FC76 +35D6082AB971887F31DC3E195020E572F3182ABDD7338EF5E13B4FED36F6F00FC +0241F784DD5ED660EB0000000049454E44AE42608200"; +end +function GetColorChooseBitmapInfo(); +begin + return "0502000000060400000074797065000203000000696D670006040000006461746 +10002AB01000089504E470D0A1A0A0000000D4948445200000019000000190806 +000000C4E98563000000017352474200AECE1CE90000000467414D410000B18F0 +BFC6105000000097048597300000EC300000EC301C76FA8640000014049444154 +484BBDD6CB4DC4301006607745015440177BE5C88D7AB8D2042BF6480B9BF7FBF +D1E3296068D8D13041B63EB972225F127C7F124E2E2015C4BBBF942EE9FDEE1EE +F1EDD0E0980A62BAE8AF914D08796C0F5901EB08CF3784DAB22C32F33CC3344D3 +08E230CC3007DDF43D775326DDB42D33450D7355455056559CA144501799E4396 +653F232680101D208403699A6E23088867A1849E31254DD568A725B089D00C8E4 +092243123081C812010C7F13682EB702B82C026420B2D3ED61B59E07452030F4A +F4D30844516446E84DBA1541200C43BB080241109811DA0F5611DA6CEBD04A87F +3590DBC2A79B98012047CDFB78B20E0799E19A192C101EC872254933880FDB708 +02AEEBEE23BCB252D1E3858F7634BDAAB4D03403041CC731232640AFAC1C20440 +77691BD6F0301FA2C38C0676144FEE547C266246237009F3C80A931F3C228EA00 +00000049454E44AE42608200"; +end +function GetFontChooseBitmapInfo(); +begin + return "0502000000060400000074797065000203000000696D670006040000006461746 +100023C02000089504E470D0A1A0A0000000D4948445200000018000000180806 +000000E0773DF8000000017352474200AECE1CE90000000467414D410000B18F0 +BFC6105000000097048597300000EC300000EC301C76FA864000001D149444154 +484BB595C96A02411086C5E7F0E83BE4ACE4A4375F40F0A65EF49A474A8E21470 +D219018859CDC6E12C16546C7D9D471AF743794943DDD1282D3F0C380EDF71555 +A51383888F10DC3FB4E0AEDAB86938F32C505DF86FC489C5CECFB7173078A4029 +A0B019ED3E924723C1EE17038C07EBF87DD6E07DBED16369B8D481004B05EAF61 +B55AC172B904DFF7453CCF03D775C1719CEB02151C05321C05146EDBB65AA0820 +7EC8B76BF0F8B5E0FAC6E17E69D0ECCDA6D1193C5679FCB70A54086A3C01B8DE0 +BB5A854736B8976412DE733991B76C169EE27130991CE128582C16610187EBFAE +ECFE742D02A972FFA5E4BA7C161405A3D875B96A516E8864A05B4E7D670A8842B +05D786EACD6642D02C95941B837014CC59412101C269F5B831AE690AC1732201F +5544AE4239F3FC369F51C3E63056905329C0A3E0B05D19651A3013FF57AA83508 +37D9FD904086D37D770C4308BE8A45D11655DF39FCAA00E1B47ADC1859A01A2A8 +51BECBE5620C3F940A94037540A9F4EA761810A8E8261AD2604AF990C988381B6 +EF1CAE15205CAEDE607F07AD4AE59C268BC560329C563F994CF4020AC75DD70D9 +5C3E5D670F8783C0E0B5470D58F09E1AABE73B85640E1B4FABF0E95561F1244FE +D28FEE00FC02B599AB32671AF3C00000000049454E44AE42608200"; +end +function GetInputquerysBitmapInfo(); +begin + return "0502000000060400000074797065000203000000696D670006040000006461746 +100020B04000089504E470D0A1A0A0000000D4948445200000030000000300806 +0000005702F987000000017352474200AECE1CE90000000467414D410000B18F0 +BFC6105000000097048597300000EC300000EC301C76FA864000003A049444154 +6843ED995B4F134118867B8DFE0F2FBC3046A31726466FFC05C61310349E1212B +D43241A124550910818D468B840543C444D4C8C070820118D62A0A022B605DA05 +0A2DD0A5F4243D90D7F9B64C335D5AE5B0D9B208C9936FE69D6F76E661D92B4C3 +001464611E8E8E84561E10D4340774D1230D2E539A28489875D030143C0EF3B4F +A0E5DBB4AE4C767CC778E583456769059E7FF2E8C6D4CB56449A3E23925F8E91E +2DB8BCAF87D9B9B5B93056A1BDDBAE129A8468C5D2ABA350FC373672F34130588 +8440C50BA7AE48C5B7E02CAB5D749656E05CBD6408D20A188DD52760949FD52F6 +0B7DB5624FCC26B029962D102269329E90199664D80671CDAACCE8885F4F13955 +0E9F2B9752F5F29C589680887A9DE6F44031E3B958D5B97AAECE399A08281B58C +E1133AA7FEBE395936E2EEE553F9358968098F1F152FBFE3557674B1210E10F51 +67E29C67E9FAA872D43D621F877AC47E62C1022B8D35814CB32690693413700C5 +870F9CE136417DC406ED14DE414D5FC954367AA19557355A40AD9ECDC9CB335C8 +3B7F0B6D1FBFC0294929CF243413385D568FC2BBEF51FEC28C8B8FCD2879DABD7 +49E9851CAEA85475D3871A901365B7FCA3309CD04F6143C42DFE82CE4DFC04400 +980CCEC7ED8BC3D7C7FDF37B085A77B3355F04C8AF6EC1DBB6CE9467129A09EC3 +8F5008E893066636104C351FC8EC4E69845281C273B274F419C530DCE4484FE18 +CBA208B08C9E75B4A211EF3E74A53C93D04C605BFE7D0CBA66109999C5B42F0A7 +F20A6E09D0E2B952ECB331A07827101AA84CF1F532AADFBFC51B62F2E9057FE0E +8D1F7478035B4ED6A37F6C06A1600C1E3982296F54617C22A4409715C71E393CA +F12B447664CB23109E45E6102ED3ABC81CDC7EFC1EA0C419603708EF930C6FE88 +89A11159812E298E5DEC03A0CAC7C4A82BBE8718767A1581ECB2B74C408737B0E +9D83DFC1A0EC1EDF262D0E18134242BD806DC0A7451716C774C62FF81DCC498C3 +F7F50F4E2802074B99801EDFC0C62375E895821896C6D1671983D5E652B058461 +3F0DFB8C5CAE60C1A4B43DEA48CA07DBD3F4714817D256FD0D46E4E7926A199C0 +86C375F8391482B54F4267D720BABBED4998CD2CEBB1A3A7C7111FF32CB1E648E +AEFF86A453010C6DE12FA88757803DB8FDFC6D9DA5E5C7FECC5B587322A1A88A9 +2522B3677850F3CC8FDDA71BD0F9C39AF24C423381D72DEDD87EB412593B4B90B +5AB74D9AC63ACDF7D0957EB5EA53C8FA39940A6F87F04F8C24A65F50A188DD523 +C0FFE3CD03A3911030A6442BFE00B24E924CE37F2F940000000049454E44AE426 +08200"; +end +function GetTsIconBitmapInfo(); +begin + return "0502000000060400000074797065000203000000696D670006040000006461746 +100021E02000089504E470D0A1A0A0000000D4948445200000020000000200806 +000000737A7AF4000000017352474200AECE1CE90000000467414D410000B18F0 +BFC6105000000097048597300000EC300000EC301C76FA864000001B349444154 +5847ED97DB4B024114C6FD0BFB1B7AE8257AED217C28E802DD91422308B388B47 +A903093EE0891614AB145BD88A61851A64268D18D93DFD0C8AE8DEEAC924BB01F +7CECEE396738BF1DCE2CAC8D2A9A751F5147E75C5B8D9E90CD8CE6DCE86D1325D +A690BC002F8DF004E4F982E6FEE686426548D45CF6FE9389AD0D43572D300ABFE +33F621413368CCB9CBE2B842B2104D0174F5AEB0269178923DB702D1F40E4089D +423F5D87DEC5904113CB8D2AC11D93080673D422FAFEFAC1994CE16EA42C8581A +C0B514A6EC7D913548A673D43F1120EFCF1CB402A10B30EC0891529974285F28D +1D4FCBE26CF87510431381DD4D48AAC0B902F96E9E3F38BDCBE13611EAE078123 +5A5B5B6B5D00085B2DCAA9CD213098381D50ED6E896C18C01FBAA09DF035D9473 +7357503935BAC964B061A3604C0870E5ADE38D5D4A5324F542ABFB1FBEE3EAF26 +D7C88600F870418B6B916A8D63E190C57052784CD6D200BC39EE391037063559D +901754CD65200BC79604FF995C74E40E32EF98F8FDA5200504C4957DF5E6D1CD1 +B89211AE95B134403D3DE49E69C8B12D5C2B635D80BFB6056001980F60FACF29C +EB21910E84944F40D9996C7E196BAE5D60000000049454E44AE42608200"; +end +function GetOpenFileBitmapInfo(); +begin + return "0502000000060400000074797065000203000000696D670006040000006461746 +10002FE01000089504E470D0A1A0A0000000D4948445200000018000000180806 +000000E0773DF8000000017352474200AECE1CE90000000467414D410000B18F0 +BFC6105000000097048597300000EC300000EC301C76FA8640000019349444154 +484BB5954B4EC33010867BAB4A8004528FC209107B0E8040482D9BEEB802AAC4A +A3B365C000941166C68D2A479346D1E4DD20E1D8B318EED240D2223FDABDADF37 +766CB7B72FE8383D38BE7C81FEC5FF06995CA01BF0D7B0FA617623D8F33A15882 +909A876BB1DCB76BB85A22820CF73C8B20C369B0DA469CA922409C4710C5114C1 +7ABD86D56AC51286212C974B0882A05EA083934086934084FBBEAF17E8E062F70 +81F8FC7B541B85620C3E5ADA1CE11525524F03C4F15201C63DC0FE0FDB6CF638C +0610B95F8A603299948285BF21DC755DBD00BB4728C4AF3CF6F40AACE90DDFF7A +615205C2BA0AD6182F099A7B09EC0189EF11535AD00E18BC54215D09E3381F350 +99A61520DC719C1AC1DD11EFF6D0E0772301C26DDB560574627082F80D0E099BD +324A0E3C806FB8FAD220A103E9FCF1B04E675AB8802845B96A50AE832B1C19FE7 +AD8273105E2BA08BC4046F27AD8273686B106E9A66B5C018FD9EF943F3313C2DC +167B3992AA09B2ABE8EF20B49CF009E753AEF72E79582BAB79DE0A240868BDD2B +82CEFFF4BB4B0FBE011F9D6134A0D7ECFF0000000049454E44AE42608200"; +end +function GetTrayBitmapInfo(); +begin + return "0502000000060400000074797065000203000000696D670006040000006461746 +10002D401000089504E470D0A1A0A0000000D4948445200000018000000180806 +000000E0773DF8000000017352474200AECE1CE90000000467414D410000B18F0 +BFC6105000000097048597300000EC300000EC301C76FA8640000016949444154 +484BED933D4BC3501486FB83FC01BAB83A7510E9225D0A0E4504ED20BA77A9A83 +838A483830D181C5C623A085182592B4832086A5CD42182D83616ABFDE0D5739A +2B972692A55DA40F5C2EE7BDE13C9C9B248531331124321124F20F04F92D13538 +B876359334B1A52778F6F98CD1FE3E1B9113A470749F88A8ECE6EB0B6677128E3 +BA2E72B95C580D68369BA8D56AB02C8BF72008C293018661F0227E05F5F74F1E4 +7869A67B359A4D369AEDBED362A950A0A8502CAE532344D83A2285C534EE744AC +E0FEA98EB9D5130E755DE7A6994C862542609A26376DB55A701C8727A09D6ACAE +99C8815ACEC5CE0407739A48769098480A0EB28168B28954A50559577AAE9DA04 +11816E7B58D83C45A7DBE7F0AF09049EE7C1F77DD8B6CD3BD53211C1FC868EEBD +B170E6486DF814CB55AE5094423998860FAE7E5BE363E381826EE2B4A2222D8D5 +AEB0BC7D8EAF4E8FC351C2826EAF8FF5FD4B2E46BDF84F0E656363224800F8065 +E0D34316036A3840000000049454E44AE42608200"; +end +function GetImageListBitmapInfo(); +begin + return "0502000000060400000074797065000203000000696D670006040000006461746 +100026001000089504E470D0A1A0A0000000D4948445200000018000000180806 +000000E0773DF8000000017352474200AECE1CE90000000467414D410000B18F0 +BFC6105000000097048597300000EC300000EC301C76FA864000000F549444154 +484BD58F310AC2301486BB4BEFE101D40BB87988BAF5060E1EC0414767A91E40E +9A082B3D845D04170165C159776504462FE426C62EA5BF2163FF848783CF8122F +0C43C1E93779800B32A05EC0A5C20870410670725A1AE0820CD47B6E0232D01AB +A09C8407BEC2620039DA96994CCC5F956178F67253FA3CDC2DAD1056460B02A9C +EDE672E259C6FBD8D8D305646092145ED39A9CD8814BDA30F6740119581E0A9F2 +F5F4EEC00E6FA9E2E2003DB5361762FFF41766F187BBA800CF87DDF494006AAA3 +AA93E01350AA2168C64D27411EC86F92EF40B00E9C04564009BAC7AE93C008285 +480839F014EAD0037FF1E10E20DEF9AF049B9ED69F90000000049454E44AE4260 +8200"; +end +function GetTimerBitmapInfo(); +begin + return "0502000000060400000074797065000203000000696D670006040000006461746 +100020903000089504E470D0A1A0A0000000D4948445200000018000000180806 +000000E0773DF8000000017352474200AECE1CE90000000467414D410000B18F0 +BFC6105000000097048597300000EC300000EC301C76FA8640000029E49444154 +484BC594D96AA24110857D9E79C9C99D51AF024188883E8106340A2E37C625370 +ADE08921830242EE08EB8E0420D5F619B36696784619803C5DF7F2F75AA4E55B7 +47FE312E22B8BBBB936AB52A8D464392C9A4DCDCDC1C56FE8CFF4FB0DD6EE5E5E +545AEAEAE8ED66AB574FE129C25188D46128BC5E4FAFA5AC2E1B08E53A994DCDF +DF4B241211AFD72BF1785CC6E3F1E1841B4E8272B92C3E9F4F32998C7C7C7CC86 +03090E170A8A4D3E954E6F3B97E0B8582040201DD7F0EDF08D0F8F6F65665E876 +BBD2E974D418FFF8294A34994C9464BD5EEB38140AE939174E088824180CCAFBF +BBB46FEF6F626ED765B8DB1C7E3915EAFA72464B0582C64B3D9A8D108954AE5E0 +E9134702B4F4FBFDF2FAFAAACE714A1644FDFCFCAC630858EBF7FB3A6FB2D8EFF +7329BCDF43C32DA381250C46C36AB52102D0E9BCDA6B626C61802D6D84316385D +2E97B2DBEDD4C7E3E3A316DE8612D072740BD1A137D113218EEBF5BA1A6308586 +30F854726F69996858CEE42320325205A5A91438600592E21C0A97D27A2D1A8CA +6CA004DC522422EDBF9108241209F567A004C56251D2E9B416889431536432B18 +B6C9B29B23903F2F9BCFA333866C00D256522A3155D6DCA9CAB4D6D9041AD563B +FC5935E0FA1311170707B42252A037C69839D6EC8B66CB039C35A048549FA8386 +8BA036714D3F554AC562B3D67A401D4836EB48BAE0480FEE56D212A52C70945C4 +21C69839D6D8633B31E03C52DB381290360F17371A5D71424444C817638E3564B +12307E6267F7D5D8F0480B7883705275C7F1C1129E6726AC07ECE3D3D3D1D663E +7142007815D94C445FE122601FFB1F1E1E0E33A7F8460078154997B705695C609 +E75F6B92237701200B4A4F07417AD477FE77239FDF2CF3C05A576BFC3590203F4 +A7AFB93CA55249BFFCBBBAE83B447E01A5FB392686E583230000000049454E44A +E42608200"; +end +function GetSaveFileBitmapInfo(); +begin + return "0502000000060400000074797065000203000000696D670006040000006461746 +100021702000089504E470D0A1A0A0000000D4948445200000018000000180806 +000000E0773DF8000000017352474200AECE1CE90000000467414D410000B18F0 +BFC6105000000097048597300000EC300000EC301C76FA864000001AC49444154 +484BB5954B4E024114455994891B70C63A5C8013062E4017E0CC814E9C191DB80 +09D9A4048909020100C10A0F9FFFF9FABAFE2EDBCFE6A3A50C94D57D255E77477 +55BD8EE1C8CD08CE2E9338BD783F6884690BFC06448D69B198DD3FBCE0077E548 +18E43C0B6DFEF4D76BB1DB6DB2D369B0DD6EB3556AB1596CBA5C962B1C07C3EC7 +6C36C3743AC5643231198FC7188D46180E87E1023F38056E38051A3E180CFC058 +49F9C3FD849A55248A7D3C86432C866B3C8E572B8BA7BC5F5FD1B8AC522E28967 +7C7E590EB8AF403FB916109ACFE7512814502A95EC7BD56AD55CE3892703A7A0D +FEF7B0502F713105A2E9751A95450ABD5EC7BAD56CBEE6B78AFD7F317F0BB7392 +84D07ABD0ECBB2D06EB71D50F635DC57A0179593248476BB5D03916F7DF398349 +185E538815320633D02C2DD82FF46C33B9D4EB040B62327DDBE7CFC198ED57079 +638F8070D9EB9CF49FC6B1020F15E8931A5540B8ECAE40819CD428020D978DE11 +1E83210454078A0807087E0B7F486C52D1078B3D90C1648118B22D0F046A3E115 +E80AC9EAE8AE907AAFBB1795F04041586D27DC7D98345C3FBD4770F49FFEF11AF +00DCA98480ED0E0E3350000000049454E44AE42608200"; +end +function GetMainMenuBitmapInfo(); +begin + return "0502000000060400000074797065000203000000696D670006040000006461746 +100021E01000089504E470D0A1A0A0000000D4948445200000018000000180806 +000000E0773DF8000000017352474200AECE1CE90000000467414D410000B18F0 +BFC6105000000097048597300000EC300000EC301C76FA864000000B349444154 +484BD591310AC4201000FDA0D8D859E547FE48EC03127D809D8F48B3870B064F3 +DD45C725C06A688849DAC21703318608C01A5F432A594383C7204D675ED1A42E8 +EABD876559C018530708211F4D81F2BC3C534A8110029C7375A067FEA52DB5D63 +87CDB361C1EC140EB1ECFC839076B2D0E4E1C815166DE8DBC05F2BB4C967C1518 +E1F20DA239CFDAA0C5B336686D713AB0EFFB90A70333CEF0BB0DF0E1CE7F30CAF +F06669CA1BEE48B797A00E00533D0A5754BB70F010000000049454E44AE426082 +00"; +end +function GetActionListBitmapInfo(); +begin + return "0502000000060400000074797065000203000000696D670006040000006461746 +10002D200000089504E470D0A1A0A0000000D4948445200000020000000200806 +000000737A7AF4000000017352474200AECE1CE90000000467414D410000B18F0 +BFC6105000000097048597300000EC300000EC301C76FA8640000006749444154 +5847ED92510A002108053BA8D7F18A5EC768E185D8A750C2BE818190A0811CFE1 +8063080010C380254750BE2AC6AE6081091CF78799D31AF9AE917709B7E0166B6 +05715635C325ECF705B7E91780BFFAEF12AEC72088B3AA192E210318C080C701E +E13DA99A6670A4C99A90000000049454E44AE42608200"; +end +function GetPopUpMenuBitmapInfo(); +begin + return "0502000000060400000074797065000203000000696D670006040000006461746 +10002F401000089504E470D0A1A0A0000000D4948445200000018000000180806 +000000E0773DF8000000017352474200AECE1CE90000000467414D410000B18F0 +BFC6105000000097048597300000EC300000EC301C76FA8640000018949444154 +484BDD944FCB015114C6E74B8D448842A6B1F401E43358284B7B4B2B595958B05 +3B250B2D3A0AC486489324929911EDD33476E8C3FEF782DDEF757A7EE79EEDC9E +79EE9946C197F98706F178FC47F50A5B8377F9C8405194BBBAE5EF251025F3950 +4A7D309954A85D6BF9A40465555D46AB5EF2410B85C2EC4623184C361561EF376 +023985DBEDC6743A45281442BD5E67D51E5B83C3E1F0B43C1E0FF6FB3DE6F3392 +569341A7CFA1E5B83572512EC763B7A7E3299D055359B4DEA6F719420100860BB +DDF209603C1E231289A0DD6EB372C5D10C82C120369B0D7716A3D1884C3A9D0E2 +B160F0D9E21AE64BD5E7377653018C0E7F3A1DBEDB2E2D0201A8D62B55A716751 +AD56A1691A52A9145AAD16AB0F0C5E95DFEFC762B140AFD743BFDFA773A552099 +94C86D6327706EF7031126F9C4C2649334D9366230F5FE0C8209FCFC3300CFA2F +E9BA4E5F91209BCDA25C2ED3FA8223039962B1885C2E87D96C86743A8D4422C13 +B161F1B88AFC9EBF5D2E00B850296CB25EF587C6C20180E87381E8FDCC90067A0 +D1EA483E13801D0000000049454E44AE42608200"; +end +function GetMessageBoxBitmapInfo(); +begin + return "0502000000060400000074797065000203000000696D670006040000006461746 +100023F02000089504E470D0A1A0A0000000D4948445200000018000000180806 +000000E0773DF8000000017352474200AECE1CE90000000467414D410000B18F0 +BFC6105000000097048597300000EC300000EC301C76FA864000001D449444154 +484BB5954D4B024118C7FD0675280882A0BA77ED0B04D90788A053DF203A44509 +720F3E02D48D0F410E5A9A0023B061D1414B2022F7AC98378F2FDDD5D77D77F3B +23B38C3BA344EC0EFC60F719FDFF1E9E19D1039717156C9D7E60F328ED2824D31 +2C83EF05FE8F278AC67E70566B8AB029E09015BA3D188621806745D87A669180E +875055158AA250068301FAFD3E7ABD1EBADD2E3A9D0EA5DD6EA3D56AA1D96CCE1 +61866B0118D423383593813D8C399800F6F341A7201EBDC88C5E81CF5FBBB89EE +C3E1F054F870A9C01A8BD91D569781930D606509AAF945BE73FB68F8CE99A05EA +F8B02DA39C1EF03BCEBC0CF2EB0BD06EDF2828613649DF32493491A5EABD5E402 +BD5C0616E78137EF58F0BE032CCC412995A49DDBE7CEC2A50272638C5088CEDEC +E3018A4E1B2AE197CF7D56A5514B0EBC81F2A7F63A6CD9D1D2A1F5EA954A60BEC +E17F3D543EBC6C8E5A10D8C3F9EEEDE1B2B993F099824C26E32882209BCD3A8A2 +0C8E7F3C8E572787AB8C1F363843E93DA9E2F85E3EB84C5BE3F25ADF37B044150 +2814F0FD95C655E090F2F539AE9D851288C7E316E45D56E7F70882A064FE988AC +5225E5F6E29E499D40E02699C471216E45D56E7F70882809CBC93080276AF9D62 +42E0FA9FBE7B0BF805EA9D74EABD7884450000000049454E44AE42608200"; +end +function GetClientBitmapInfo(); +begin + return "0502000000060400000074797065000203000000696D670006040000006461746 +100024803000089504E470D0A1A0A0000000D4948445200000020000000200806 +000000737A7AF4000000017352474200AECE1CE90000000467414D410000B18F0 +BFC6105000000097048597300000EC300000EC301C76FA864000002DD49444154 +5847E5974D48625114C7FD2C050D5A0D6582BB206D5704BA2FB086D9369B16D14 +A0884419C4D9B8A362DFA90C036B3ACE508439160B3B195820E2444398892227E +64A5D5301FF59FCE9DB9F5F469D4F4D2C5083FDEC377DFB9BF7BDF79EFDC2BBBF +DA116B95C0E8BC502ABD58ACECE4EA452298C8C8CC06432E1E2E202575757FFCC +B7EFBFA01AF3DD219B9B9BC3432C2C2CA0582CBE9CC0F9F9391EC3F0F0F0CB08F +4F5F58133383888A1A1A1BA747575C16C364B2FA0D7EBC1D9DEDE463C1E6F4822 +91C0E5E565DDC08F452470747404CED9D919C2E13056575725C7E3F12093C9880 +5767676C0C9E7F3585C5C646F415B5B9B64A8542A16331289880584AF5F281462 +021A8D067B7B7BD8DFDF9784E5E56516FF4902E974BAEE337C2A94339B9B9B8D0 +57A7A7AC0A106520B100F0A944A2510272727A8542ACD17585B5B03E7F8F8B8F9 +02949D9C97C801E24181959515705A3203A7A7A720280FE833DB7401FE06188D4 +6D6A0E9027481D3921C502814E0B444C0EFF783C36B41530584E596AA61D305DA +DBDB4150A7548AFFBF246CB9C0ECEC2C38C9649209A8D56ACCCFCF63696949122 +627271B0B704BAADB04090867454A1A0A50C7548EE9787878C816A742B6B6B6AA +CE0D068328B8DD6EAF6A578F42A1D058C0ED76231A8DB2733E2BFC1AD5886C36C +BAEEFEEEEA2BBBB5B2440FB06120806836C10545FE85E1E8F1F494039FA512CE0 +F57AD1DBDB8B582C76D798A0458ACBE562A3D66AB56C8159DB3941E55CA954B2F +CE9E8E8407F7F3F028140552C8204D4AF7D508EFD9190E5723936C2838303F63D +A01B690442736A4323DBD8D8600BCC99991926353D3D0D87C301A7D3C96690127 +77D7D1D3E9F8F2D46CBE5B248E0C7CF6BBC7AFBE96E166434EA8989094C4D4D41 +A7D3B1D10C0C0C546D42E8584BA3FF85083BE65CDFDCC0F6EEF3FD0C08A75188C +D66639BD27A419EC3CDADC0FB0F5FA01AFD9B03F4DC6A3BA7E7393E3ECE36A5F5 +823C0712887C2D42FB86047CF80D6DF21A10823FEDBD0000000049454E44AE426 +08200"; +end +function GetClipboardBitmapInfo(); +begin + return "0502000000060400000074797065000203000000696D670006040000006461746 +100020802000089504E470D0A1A0A0000000D4948445200000020000000200806 +000000737A7AF4000000017352474200AECE1CE90000000467414D410000B18F0 +BFC6105000000097048597300000EC300000EC301C76FA8640000019D49444154 +5847ED97BDAE82401085EF3B51FB083C02ADBDF1052809893D3DB1B1A4A72194D +426141616143674985861CEC4F1EEAE2BFBE35ADCE49EE42430333B7E597659FC +991D753C1EE7AEEB249F4EA747D65D4E00C330CC511469ED0BE10C10C7F1CB8F2 +3869C8F9C1F4168BD004CD3243DDFEBF54AF1CBE522C575E659C018317EBBDD28 +AE930470381C5EA6B82C4BCAE9A65E356A208C11E3ABD56AAEAA8A72AA2480ED7 +64B03D6EBF5D36DDB520ED762539DD334A55A8C117B20C770AA24002EC6B48512 +7A31A04EFF005F07C08EC0A2B45A842680F3F94C395FEBB6A33500E73EB16E3B5 +A01F47D4F71E43F317AA8DBD10A00F70CE02BEE018BFABB005C6B729665541F1C +20499267C3256F361BAA0F0E80930F7193C771A47A5C070570557000ECE7A2288 +CE6D3343800373399C70407C0EAC6BDC94DD3507D7000570507A8EB5AFBCC61E4 +54390188CD201D00377B67555600EAC724BCDFEFB5004B6B80DF7EA2AC0050B4D +BEDA466D8463A00575901BC9308806B5F7B03E04B061F13DCE013F3D9C0B20280 +F0E6B3F973B2E43CCF1FDD7E650DF01DCDF31D7DD4021C9110D40A00000000494 +54E44AE42608200"; +end +function GetServerBitmapInfo(); +begin + return "0502000000060400000074797065000203000000696D670006040000006461746 +100022402000089504E470D0A1A0A0000000D4948445200000020000000200806 +000000737A7AF4000000017352474200AECE1CE90000000467414D410000B18F0 +BFC6105000000097048597300000EC300000EC301C76FA864000001B949444154 +5847E596DF2B436118C7FD916EB840AE2853DBA424AD2C62C50DA1B9212D4949B +9A024CACAC5507EDCB8922DE7D8D62CC6C4D2C3F7FD9173CE76F2EE6CEF99F2A9 +A7534FE73CEFE7BCEFA9F36DA316F3F7057266856EAEDF3C55FAF65D4C71C7556 +07DB940A3FDF7D4D77ED75005BB33B418CB53D6A888C9766A0A0CF566D8C381CE +3445C326CD46B29E6A7AE481C23D7C16442E5265B1C20F55028978813D3037916 +3DBDF0CE233793613524E6C0297A76576231E68049C3D16C37720D95A2BB2D9A9 +E48BE8706C02477B2576D3E1EEB3E878437E3B0B5339D1E152E8E1DBB26213D8D +9E09656732FACCEF363C45B5B41CF790C5A04DCA84B4047290BE82C25015C7594 +B200B64B07BE09C839B85AF14D00336A2DE69B40CB77C00D65015C7594B280CE5 +23E021D5597800E7C13907F43E7AFD7370119E99CC1E65781E37D1E48920725D1 +F106022816B2BE8891F960B39D19C1267075C62319C264B391B9F0FCE45574383 +6010073DCB8B9F248A5A74FD16D0C79B4CEED075502606C80673AC4F2F1A0C11E +F45293C32685BEE33866219E2BC572C976A248D19041C12E3EC04B053AD214193 +46829E61EF15D05FCE2BF0B107D0115A294818AC7913B0000000049454E44AE42 +608200"; +end +function GetQuotationBitmapInfo(); +begin + return "0502000000060400000074797065000203000000696D670006040000006461746 +100023B02000089504E470D0A1A0A0000000D4948445200000020000000200806 +000000737A7AF4000000017352474200AECE1CE90000000467414D410000B18F0 +BFC6105000000097048597300000EC300000EC301C76FA864000001D049444154 +5847ED97394B03511485FD0D76D636967682A56025F692CAD6522C1414042B2DE +C44105404C115D1464923445C10255868E112251A09D9D4108C216872CD992579 +73677C6FB24814F2C1859777CF3D3903F3669226624C9E25A879F6EE570ADE1C5 +B00A7C15A16E76F07A81532CF4680FF1DA073ED512B1532CF8A0388CF0BA7F32D +22F36C04701D20F399A7F193380D1DC4B4EADA7C2AEAB036F7C78EE394CAE68C2 +99D9F3C81EB00FDDEB0A5272BCF6ED898D2117B1CD701860F63969EAC067D5163 +4A47EC71CABA07D66F52B47895D4AAAF7095A60E6B737FF53A65A84BC83C2BBE0 +9A7CE5F8ABABA9C82BA0798BF4C167558CB9079561C00CC5CBC6AA542E6595500 +B7C83C1B01AA0A10497F69A542E65976805C5E3F82BD3BCF451DD6388AE83921F +32C2B802F94A69EED904523167AD070440DC755808FC29B70E2D4FE87A57D39A8 +15DF87163326628FA30CE00DBE53F796F5AA5BE60234ED2F9D7FACB1276A30835 +920EE73A401468FE296CF28CF5E98FCD18CA12E813DF4B89E7B70A401C46A5B7A +503E720134D03A79A038AE020CEC4728F09635146AA0C58C9317471AA06325481 +BB7F6F7BB5B300B0FD193630B8033DEBA704F23855F40898CFA21A3021EF0C297 +DB5FDB44DF6B0BDB1A1CD1EFD70000000049454E44AE42608200"; +end +function GetLoginBitmapInfo(); +begin + return "0502000000060400000074797065000203000000696D670006040000006461746 +100020803000089504E470D0A1A0A0000000D4948445200000020000000200806 +000000737A7AF4000000017352474200AECE1CE90000000467414D410000B18F0 +BFC6105000000097048597300000EC300000EC301C76FA8640000029D49444154 +5847C5963D6B15411486FD1DFE004150886015514965974604D122428CA0A0060 +B3F8BA0285824A098221288123544441182A2588AA820162204AC2408C61051F0 +A3D89D99E37D8E334BEE8733736F72F10903CB99F3BEFBEEEECCDCAC93FFCCAA0 +27C740B3A5643DB01C6ECB80C9647A5A7DC21EB8B8D3AB8A6366AAEF9AE7CB203 +3C772FA5B7D8A537DC5C6C93DDE5809C311774704D8D397AE8CD252BC03DFBB07 +ADA13E69CAF36C35CE843934332C0922C57A6B7EC5D5FFD37F4847EB42992018E +99536A366D677D250DBD68D0A6880678E49EAAD1FE72C857F24183168F18D1009 +7EC989A4CD9DBBE920F1AB478C48806D8531E509317F6B5AFE483062D1E31A201 +36145BD5E487FBE92BF9A0418B478C6880BEB25F4D3A39EDD0A0C5234634C0493 +3A2268FDD335FC9070D5A3C62440384EDD4C911CB918D36B57DA301DEBBF96A1D +B4B310C302448B478C68001837936AB6A5DCE92B69E84583364532000C99E36AD +8536C9757EE8DAF36C31C3DF4A2C9212B00CCBA076ACC183087E5B43D2F57CC84 +0EAEA985797A73C90EB02C5F65B4B6B03615BDD58D1A074F3F61A7E49B7CF7AA3 +4C9005F6ABF69ACE8F05D19FCFEEF2B0FCADE725007D7D4C23CBDEC1CB429A201 +E6EC93EAC67D45BF4CDA6959709FFC6C339FDDA2DCB077B43704E9781BDEB773D +5135DB5D7E597FCF63369E84513F4B173A465000441FCD6BDF3D5F6E10D061F1E +A8154D01C2E9C7582B821F811AA90BC0A209DFBC5573A7F016F1C4BB7161D6050 +8AF9EEFB7D68435C18E5A491580BD4B4256703B0B2E173CF1E61E9C29812A4058 +F56CA36EC136E61E37ED8CAFAC0830608EE8247BB95B7086700F0EAD800628A46 +C9AE816E1C42C6B7FA00116DD92160F99612D76936173B6EE4D6B8079F7418B23 +E6B216BBC9453BAAF7FAFB8F8AC81F0139E1CCDA06E76D0000000049454E44AE4 +2608200 +"; +end +function GetHostroyBimp(); +begin + return "0502000000060400000074797065000203000000696D670006040000006461746 +100021901000089504E470D0A1A0A0000000D4948445200000010000000100806 +0000001FF3FF61000000017352474200AECE1CE90000000467414D410000B18F0 +BFC6105000000097048597300000EC300000EC301C76FA864000000AE49444154 +384FB591B10A83301884FBFE90277010CCE412870412F00D9C5DB2677472C816A +EFC2196BF1A6AB5F4839FBB1B7204EE01C6388EC57DCFFF0B628C98E719D33465 +A5CC392DA087DE7BA494B252E61C0AF6A794C2BAAEAFA3CC792BD8B0D616070CC +300E71C4208592973AA055AEBE2806559D0751D8410592973AA05FB6F7EA25AD0 +F77D71E7540BA494C55D9C71A36DDBE22ECEB8618C41D334F96ECDC8B93523E7D +68C57F8B1007802C798CF8E2876C2280000000049454E44AE42608200"; +end +function getdefaultbmpinfo(); +begin + return "0502000000060400000074797065000203000000696D670006040000006461746 +10002F802000089504E470D0A1A0A0000000D4948445200000018000000180806 +000000E0773DF8000000017352474200AECE1CE90000000467414D410000B18F0 +BFC6105000000097048597300000EC300000EC301C76FA8640000028D49444154 +484BED936F4813611CC785DEF5AE971115F45230712B36A6DBDCD6A84D4D72B69 +486EFCA188D70A1D339655638DC422D6C36470441043333882010234248BBD38D +52DA91FFF722E8DED93004F1DBF35C3BB9C50D37B057F5852FF7F0BBDFEFFBB97 +BEEB922FC65FD238034C7617D680889DA5AC1744D6BF9282760736909A9911124 +EAEA10B75AB1EA74626360009BE130526E37123535885757633514C2462201ECE +C6426B3250BF8DAD58569950A8C5E8FEFDDDD402C266B7A8FF6D05E3A23275940 +2A1A45923CE102797246ABC5ACD18875970B69BA35C4743D67328125F716341A2 +4954A61464E3901298703F0FB05F3CDCD9827301AC85454605EAD065F5A0A1417 +0B4E9595E50F98FB96C4E38E2B5900D1F48D6898185C10E0FCB3161CE93F87A38 +316F4B7D6EF3FE0C0ADD338D8ABC1A1A01EBD3E3B3E9A2AB1E6B88C343931B900 +E99212AC284E916DD362EDC9D34C52B67601457E2502CB0134BC75E244D882939 +E72B4365560D2ACC3944187C5C6467C329BB1A85060454942355A7C309DC57357 +1FDAEF4CC2D8C1C2359CC46B86C78F9FDB99541980D41446EBB66B6308D8BC98D +21A30A3ABC444E77D8CBFE41063C969CDF8D1FB2D34849250B54C4373732693BA +07809AD6E990FDEE328C9DB3C2707DDF67F48CF24228BD5E0A7E4139A91BBC719 +CE95916FA4565015CAC2727C0FF8A7C06E2F6D12D0166F0B2024C0CBDF0600B17 +23102C0BF0BF8BE0F860150E0F98611A6BDA85FD09909AD6C550A96501A2E87FD +036710FC706AD026CDF01525198E3850F7A0FDD770E57A33C7CE3DBB200DBF036 +AA823C2CB73918DA994CC21E00516972ECDEB03C6E44380263600FFD86518018A +A6B6370FD2127F4D17E517901A492C2D4EE19D950A90A0614AAFF803D04FC02CB +EAA6F9D1CC6EB10000000049454E44AE42608200"; +end +function getdbugerrunbmpinfo(); +begin + return "0502000000060400000074797065000203000000696D670006040000006461746 +100021003000089504E470D0A1A0A0000000D4948445200000018000000180806 +000000E0773DF8000000017352474200AECE1CE90000000467414D410000B18F0 +BFC6105000000097048597300000EC300000EC301C76FA864000002A549444154 +484BAD958952DA501486592ACAA652A4E2C6BE18A22202A540DDA6639FABCB540 +58D200AA22C21019EAF8FF0F704AE89B59A9982DFCC9924E4DEF3DD73C84D0C60 +7CED7238E96CB2ABB743157C11E314511C53BC25AAE044A2E4BD108EC4200EBB0 +1F6EBF46815C8611CCB945CF2E340F461BFBBC1EE4C872A381E0470D8A7C4FD75 +14A555E4452FF22D2FBB3B39AAE068E8C7FE601D85FE0AF2D2077CEC2D21DB762 +37BBFC4464C862A38186EE0F380920F3CC8C8EF91E92D22DD5944AAB580BD3B17 +1BF5FFA882FDE11A0AC36564FB6EA4E505A47A4EECB41D483ED8B1DDA0E3ED3C1 +BF92FBF396E14CFCF15544171B88ADCD083ECC08594E4C0B668C5567B167C93A2 +318BC48D157CD5C146BFCCD3C48FA802A53DB901ADBE3F8F64CF06BE330BAEFD0 +EF1A609F1BA199BB5197095396C09AF4B7405C5A177D49E3D995A23CE21D19941 +ECDE8448C38048CD8068D584A8402281AA29BF2CD115140624905DD895ECE0BBB +4FA0733227794FCDA80B06040F0928E17242A5355E7566C979C6CA686BE405E46 +5A2281E800DFB62046AD89DE8C93874A2438A5E319C5B911B1730B36CF6C6CA68 +6AEE093444F50CF8564DB8EC403B5A76142A8AA250FFE64F18BAA3A35B3597FA3 +2B50766EA64B15B49C48DC5910AD1B11BE52563C4E1CF83E0EE5FC35F42BE890A +0E5C64E93047512DC90807A1EA0D58F927F1B871EFA15D07B27D37423D97082AB +CD21563523541EB74411F874922B891F933F3D57D02AB85F41A64102DAB1FCB50 +D316106E1B2712CF8A1BF723DD499B90609EA1EECD616C05FD910BFB4205232D3 +1F6C642326436BD1ED1AB2B565EC565CA3DDCA95ADA3C7715A5441A1B6814CD58 +BD4951B5B17F3E04A7676673AB40AAA3EE42AAB480B1E242F267F3D3F47ABA0EA +474E5843E672FAAFD8535441B112445EF0B1ABB702F803D2475555757FB6FA000 +0000049454E44AE42608200";; + +end +function getopenfilebmpinfo(); +begin + + return "0502000000060400000074797065000203000000696D670006040000006461746 +10002DB02000089504E470D0A1A0A0000000D4948445200000026000000200806 +0000007E640AB3000000017352474200AECE1CE90000000467414D410000B18F0 +BFC6105000000097048597300000EC300000EC301C76FA8640000027049444154 +5847ED97DF4B537114C0EFDF104410414808D54B62504F113D590FBDF86A083E0 +4820FD10F028320EAA51E7ACD880C451DA8A5A258334B1333FAF51211856E7777 +D3DAE62CE6E6D674DB3D9D73EEF56EB77D37B6D5BE97A00F1C3676B7EFF9F03DE +7FB63CAB43F011D3361383DB652760C2DC6A0D6280D7D9A3079A9D8716709FCB1 +2D7388DAA050124A562EB7DE7D67B1F995A4F9496DF82F5629158B3D0F2458ACD +A689B0AC2C3C5B8395A712A168B6D66E1DAAB08FFA69AA07CADEEA0395A712A16 +FB53CACDF76F8A851219B8F976ADAAA045220ACA77A8CF277CB61D6A74ABB4D88 +9E1000FE44414157BAA6DF0177A3EADF3D6202B86F1B82B2976793EC25F904DE7 +4B23AF502CA3EBD0D8AF712965D334B20CC787026231B7666CA25446997C8CA46 +067D7125CC159138A5D9A5B75A48CBD38119477528D178A6D6674D8DFA3C2499C +52D99C9B0DB35834952D147BECCBAD4699A4B33A1C1BF45B7D5D2076FE85612D9 +B37C19F9C97FA8BB089A5B08C7BEF7BA179DCDE7332E8FA10B5FA8BB0894D789D +292371763AC4B9A9BF089B58FBB3102E570FBF97C93A5EA50E0F68D0F428B7E02 +CB1445AE73DE4CC936FE62379CC2E2779B6AE2E18FD455862639E383F1CF82CBF +8CB7DFFFB0F5176189D1AD921ADF095AB04ABBEEE6FA8B60B153B899D22BF5986 +C8278E73BD8EBC3C9B16FE82C76D4E567B1512CA76C26556327B8FE7ACDFCC480 +C5F675AB70008F2127B88142E4E0C613271F16A3B88007B713344F7C853DF73CB +6FE222CB129BCB1CAC68B77FBBA6EF149A3D43F5061371AD7E18AAC5960F2EDA0 +1D203F6852E8CFCBEF28AE2F3138E2D2C403FE8DC89312895D9C0B43326D2F230 +0C02FA1DC4D3F567030CC0000000049454E44AE42608200"; +end +function getsaveallbitmapinfo(); +begin + return "0502000000060400000074797065000203000000696D670006040000006461746 +100025302000089504E470D0A1A0A0000000D4948445200000020000000200806 +000000737A7AF4000000017352474200AECE1CE90000000467414D410000B18F0 +BFC6105000000097048597300000EC300000EC301C76FA864000001E849444154 +5847ED974D4B42411486EF7FE9EFB40A8268518B68578B9605EDA25D50B4A88C2 +40C8A5A5408B5882430C122888220B2FC46F2A696A9842935F91EEF19A68B9479 +3F16D50B0766CE9999F771D0EB3D9A3054BDD545767A5F447B16C455D7842381B +3E1012F16013CCC055A6E7032F4D9C326402DFB2C93A991755139898A78FFB25C +84B995E00F873331CF8C6F4B3F786BF7537BD28CA50258950AC04A0EFB28076FE +DAE7B9E26A0635901C09EC4D0AA281FDDD0BC1540C117A61CBC350CEC0430EF6D +05002FF6FDBD003086FE1E40D17F29729EA03CCF7500B32C03206F253A028031E +7ED0AF536BF05803293BB446D47E02C556D0138A97F808E005037AFF92A67CEAB +42EDC700BC4E15FFC45471CE5680F271446E78DA3937B22E02A44637E8252231E +815B13E8F917509E0AD5AA77A29702DF499031ABFBFD4A8C60F2C55B60314FD17 +B25E398DD138BF12A29A2B00E9C6F5F31A8EF880976AAD0038670B405D2F512DB +7D4FC7B45608CDC6BB220CDF8918B39DF00E7F0A66D56DB0085B5301D520E468C +4CE317D11823875ADE1B92460806507396009CD227006EC5DC0478DC3A234F786 +BE8D53041C7E29662BD8BE4096F0D8D2226083C6CD034E0369C089C9D1EDB947E +F0A6E694BFCD6E063C21D99EA35144AFC6AD9A1381B3E101AFA684F80055B3808 +F56B6A2590000000049454E44AE42608200"; +end +function getredobitmapinfo(); +begin + return "0502000000060400000074797065000203000000696D670006040000006461746 +100022A03000089504E470D0A1A0A0000000D4948445200000020000000200806 +000000737A7AF4000000017352474200AECE1CE90000000467414D410000B18F0 +BFC6105000000097048597300000EC300000EC301C76FA864000002BF49444154 +5847BD974B681341188073F289F80005116C6BA10F15D48B56A8AF832858A8288 +8F460412A420F05A9079182E2C1E20391422B88A055F060050F2282482D689552 +2A5AA14DB24D9A3449D39A36469B64934DB2BFFB4FA6D34C36AF26BBFBC17FC8F +E9BFFFF6676323B314101486E2744C67ED24FDA925720F47500849A8D602E5B09 +A12FFDF4AA76E414C0E6D6EA0D60DEBE824468F013CD68475681F0D067106A37B +1E6735D9D34A32D1905B8E6CAD4FB9F74D18CF6A80454CD9F76D38C3E7002E9CD +FFF43EA219FD60025CF38AD51078D54B33FA4204D29BFF7DFD82245359F8F80E7 +E775E2F2870C1E200A2360BFD76764CAAE66F5ED2D412F1791F98CB5725EF5966 +D88FEE26EB4896A2B41A8FC9D5DCC86E7634D667BC518EC5C0717C1F5778B9613 +B540DE1916FB4E212A644380453E74FB01B5D171A408E88349D422241B664C969 +CF1BE2F72108F43D0777CB19B0EE58C36A5B2AD7A96698AC8182258A202A8C73B +5F13107073ED02C1540F49480781C663ADA586DEBAE2D109B769314B70F1089A6 +93FA48C832785A9B586DEFD54BE4322780C862583789B87F0EAC3B37276B2B8F4 +29A9A540B207A4AF8EEDF6475FD8F1F661640D2D784FBE269F24B2895C8F82F56 +13079955004997107F0CD34C6990038E52CF565F955B0041096F7B0B9901AD1E8 +3FD700D11B054ADCF2FA00713FBCB8880B067ABF102388B8BBB236EEF860B04FB +DF93E618D36DCDC60B782E9F6302FFDEF6192B101E1E24272D6C2EECDD0689E08 +2710231DF2C4C1C2867A3F73FEB21D70D11C093D1E4915AD6DC79F69872C69048 +4E578178C00FBE07B7D8C68361AFAB24B3B1082780070EDC9FE77BEE151FDD776 +1F6C615B2CD5A2BD6B2C6188E868310F37A68B7249C007770D030F0EF9DEF4E07 +79C9A5C309CC5C6BCD58A0A85056BBF3549D7242BEAD1A752AFC1A50DE7691B15 +11047474A0AC9E500391AA1457301F01FDA4F2FDFE8B101E70000000049454E44 +AE42608200"; +end +function getunredobitmapinfo(); +begin + return "0502000000060400000074797065000203000000696D670006040000006461746 +100028202000089504E470D0A1A0A0000000D4948445200000020000000200806 +000000737A7AF4000000017352474200AECE1CE90000000467414D410000B18F0 +BFC6105000000097048597300000EC300000EC301C76FA8640000021749444154 +584763F83FC060D401A30E1875004D1DF06ED684FF6F2677FCFFFFE70F540413D +0D401B73485FFDF9063FBFF28DCEDFFEFD72FA1A2A880A60EB8A9C403760008DF +3690FEFFF5C83EA80C02D0CD01207C4B89EBFFEBBEA6FFFFFFFE85AAA0B30360F +8496AF0FFBF9F3E80D5E075C0D7A3FBFFBFA8C8FAFFD0DBE2FF1D53B9FF7774C5 +49C2D82C87E16779F1603BB03AE0F7B327C084E38A5523B5F0D3AC28B05D180EF +879EFF6FFBB26726045F71C75FF7F58B9E0FFEF17CFFEFFFFF70FAA8278802B0A +1E4579FCFFF3F635580D8A03FE7DFFF6FF9E830E58D1F3A2E4FFFF7EFD84CA900 +7301C20CFFEFF557B154AB980E280B733FB202E8C70C75B78100B50B2A1BEE4FF +2FFB7740651000C501F7ED35C18A7F5CBF0C15A10CDCD610049BF7C0D7EAFFAF2 +70FA1A2A800EE805F4F1F8115DF7731808A500E4079FE556BC5FF7F3F7F404530 +01DC01DFCE1C033BE0496A0854843E00EE80EF174E431C90140015A10F803BE0C +F9B57E0547AD74289AC2C472E404984A0C4020A852F87F64045680F501CF069E3 +4AB0034065C1DFCF1FA1A2B405280E00D5524F62BDC18E78E86F0B2E92690D501 +D00047F3FBEFFFFC0CF1AEC08503E7E599BFFFFF3EE2DFFBF5F3A4B3206A52B42 +00C30120F0EFC7F7FF2F9B4BFFDF54E6053B845C0C2AFDFEFDFE0535153BC0EA0 +018F8FDEAC5FFF74B66FD7F5E96F1FF496200B8122105BF6AAB849A841BE07500 +3DC0A80306D801FFFF03006C2FCBC409CD25D50000000049454E44AE42608200"; + +end +function gettslsyntaxcheckbitmapinfo(); +begin + return "0502000000060400000074797065000203000000696D670006040000006461746 +100020204000089504E470D0A1A0A0000000D4948445200000020000000200806 +000000737A7AF4000000017352474200AECE1CE90000000467414D410000B18F0 +BFC6105000000097048597300000EC300000EC301C76FA8640000039749444154 +5847AD97F94B545114C7FB5FFA2DA41FDAC8A00CCA225A7EA9205A208A8222081 +222FA413335CD25358D448BCC32CA16111754D250C9164D2575F66677369D71C6 +D91A47E734E7BEFB5E6FF4CD7B6FC6F9C0859973BFE7DCEFBB73EF7D7736419AA +C8622E0EB99266D35B44CA3A993B281D09405EC0F7A40BDAF1C6636DF254DB3BF +021CE5BD109AB652957C641958F185C0F36E0C8C175F708362335D69212D2176F +515783BA620B6BC42B3C51135101C3382BDA80BD47BCAB801D4D965E0ACF90C51 +E712550144ED3E7054F681725B11A7D31CA80267553F849576AA12669D81154F1 +03CAD3FC078E139570C1B3EE9D2A08AAA92836BC270EE5962EEF556F076FD0688 +51118F040373F91DA0DC55C225E2D3BAEA07613518A10AF9E0ACD88BBB61764B3 +E574F7BB886CC1E1FCE80F5F6074E68BEF61A823F0DB467E3E0ACE84F3570F56D +859DB4876780ED4C075FEF0C18CE3641E0FB1F1A1106FB710CD4B26CD8406054C +74D333EA918193780FB5E955D4AF2F06C9022A30622C605D01EAA2639D63B1F69 +549C8C19882EF8417F9A5954E6F8168B45A2B4479C8C18C0C18C979A9942F1FDC +E3F90A4C8880157ED00D1E98E3E86C54F1364BFCB45D4806A37B398A49E088B68 +0F3EE20C133327EAC9A123B50BFC032AA2B7DC7C4B233C03FA934F496770DC482 +3E204BEEAC0F1B01774C7EA12CCAC3DE9F878DB27194D451F8DF00CA02BEC4451 +AAB8EA0649AE3AA71CC2AAE42F1F77F328D1B9E3EF1A16CE00BA927A0221E61B8 +7491E1E46FE112D8D0A83B551EB1F52D308CF4070D24C3A75C7EB68441A77CB37 +92836DB17D824693A3D9CB5C62F036C5C21940B4476A89203C3B4723C9F1B48D7 +383CF370DD368727081A2D674F9258D30241860A748EA67C0773B3BB8A354FA08 +46D89BD342D3088D302418082B6CA0D85A088AAC02D159C07D8CC5AC79EF69441 +C76B6943B4BC8187C120C20F30D4344CCDFAB6B8998DCB2176BD413004D2E736E +A091B5AC338018CE3357AA5477841096BC3652CB16BF6D09216800A79F5DB178F +4A68BBDA49BD4D09F69A491F5081A40961D3EB216B0C05CFC758BDFE5825ACCC1 +5CE58E621A1526A90116754E0529A4CDAD066F77FC662B016A508B39982B85A40 +1C47CE30D2988CD7EBF1322160FEDF90FC6B08FD5618E1C641940F0CAC516C763 +D77AAB0D82BF4CA4E167F65EA8C8BA07CECA7E9A258D6C0308BE01F9B3C16FCAE +DC5602BE880BF6A0755CB2325032C38DDAE275FC881840DFF37C6C2E9FD434ECB +40E600F8077525AC9F3D612B2D0000000049454E44AE42608200"; +end +function gettslcodemapbitmapinfo(); +begin + return "0502000000060400000074797065000203000000696D670006040000006461746 +10002A405000089504E470D0A1A0A0000000D4948445200000020000000200806 +000000737A7AF4000000017352474200AECE1CE90000000467414D410000B18F0 +BFC6105000000097048597300000EC300000EC301C76FA8640000053949444154 +5847C5577D4C95551847304021958FED22134190217B5F750C192226384030705 +302455D3304FF409BB32205755CBED2A2D41495BBA29CAC81F63186D4D614E707 +96C628FE486B4BD104CBC972E2951C9AECD7F31CCF7BE1CAB978B1B97EDB6FEFD +D79CE739EDF39CF739EF7BD2EF89FE1B4804B972EA1B6B616797979A8A8A8C099 +3367A4E5BFE1A902FAFBFB317DFA74F8F8F8206BC912588A8B51919D8DE52929F +01A3F1EADADAD72E6B3614401E7CF9F87C964C2E7F5F5B85F5E0EEBA245766C9B +370F73838361369BA5C7E831A2006F6F6F0C5CBF6E0B7868D62C644F9E8CB2F07 +0B4C6C5D9C6E7F8FAE2D4A953D26B747028203A3A1ACDCDCDF87BDD3AFCB26001 +5C5C5C7078F66CDC2A2D45C7CE9D707375457158984D04DB9F050EBD7C6957FD7 +575B6C57F4B4810A73114251B36E0939933C59C147F7F946565498BF3500AB871 +E30602030371BFA4041DF3E7232B20008F2E5E94D6417474746075529210F04D4 +C0CA2283DA38552404B4B0B121313D1B772254EC7C66213ED5285BB77EFE2E5E4 +6421E02ACDF7F5F09016E7E13005E154687D6BD6A093164E0E0A92A3F6686A6AC +2A6820221605764245684864A8BF3702860ECD8B1E8AAAC148BE7D155ABADAA92 +9641B8B9B9E19CC522E6E44E998286DC5C69711E0E05A4A5A5A1913A1E2FCE7C8 +36E00DFF7C6C64654575763C28409E204EE519AD89EE4E78787274E486FE7E150 +405B5B1BBCC68DB309607653D57F4727F12B5DCF07478FE2DEAA5562BC6AC60CA +CA6A21DE8EA92DECEC3A100467A7A3A8ED0D51A2A42C5A924B43127477A8D0E23 +0AE0174E0C15972AA8C11A5D47F4C489F8E7EC59E9353A8C2880111515852F972 +D530667A652033A9C9121678F1EC3049452ABD5340D4B972E457E7E3E32333391 +4005A80ACEBB8F9D34090F8F1F17DD9253B670E14258AD56B11617726A6A2A62A +99744444420801A9AA7A7A76872C6BBC34E406F6FAF6840AF1DBE89B995D76DF4 +D333B0272E759880006A3CFBE317DBCD359873A41B71F464AAECC6BBC34EC0B16 +3C7F0E6B672686FFF6EC7D0579BE0EAEA66179C77BF96EE7E51DE67C3E66BDBAE +41AFBE327C7C0859C0C53FFBED05141616A2E8D3166825D786D13FBE00DB631EF +77DA6BFBB3B1AD25643DB71157A5527F4DD574450BDE632B47768EC7D1AA3DFFA +41228FEF21F2D8CE4E841534C3332012753FF4DA0B888F8FC7E27DDD4A01330A7 +F8487879708CEAFE1726AD5AFAFFF0ADA76B23F417D3FED5EB1864153CA56F8C5 +E6C2FA60C05E40DFC301E845EA23630666EC40CAB44878D2B7C0B7991B957398F +A3E12B0596D637A4F4B44489645C4B413F0F1F777940E06F9085DC68C111F2639 +EB4F2AE77060FD834EB54D728CDB0B48A8FC59C414027A7A7A44F5675AFE503A1 +8E49C9A92B6A02187AEAAC22EC8C75C71556D9374F7094141C3CD4101EDEDEDE2 +45137F90F2C7C5B48B8A8576218A860BEC3D492E26CB65A4ECBE209E23D228C00 +344AA09E14BA989283B07AFD018D45EB83328A0A6A6065FFC6455AAB5B18C76F5 +949D695BE89468034A9B64F02B87E017BD16576E3F782C80BB1677BE151F8D7CF +C7CB5B4AD74BC2A9B4133D9E95A2A6D92A68422042DD92D82335CEAE99BDF6C2E +C5AC62B583C1A7151693EFB8A80185CDA0ABC78B8879EBA40C4F02B2E95FCEC67 +20BF40F29477B65AE38679C3BCE21E792734AF5C01D4E33D30E2BA9D1BC4B35C1 +75C27EEC738048CD4608E079FCE4B4D15C8D84895AA2DA72F70FC6E6AF6FC9F02 +480BFFD7D4C53956A0D8A8515E34F9205ABC60D86E41C112D78EFE9DB32BC2C42 +6DCE4BC2F0BCE9E11F8ED0E507F057DF23119C616B443DD647A2373F6FDA03F81 +751AD08E04A61DA310000000049454E44AE42608200"; +end +function getquickkeybitmapinfo(); +begin + return "0502000000060400000074797065000203000000696D670006040000006461746 +10002C601000089504E470D0A1A0A0000000D4948445200000020000000200806 +000000737A7AF4000000017352474200AECE1CE90000000467414D410000B18F0 +BFC6105000000097048597300000EC300000EC301C76FA8640000015B49444154 +5847ED96314B03411085ADFC019616F676292D2DD2091616B63682A545B0B4505 +BD1D2DA562C03762155AAD4225148F49010541051C1588CBCF1DEB91956B9856C +C2E13D781C6F7676E7BBBDE66664CA2A014A800CE0A37329FD9D2DB95BAF46F56 +0775BDEDBAD746A0AF0D66ACAD5C2ECC4DC599C9397FAF90FC0EDDA72B6D8AF6D +CAC3D17E6E3F1E1FE436FA3907B79101B038D8AB6931A69ECF4E7F070021844FE +2DA57B3B63D36BBB55C00ACB1114FD6B0EE5E27F731C390DD031507000D34E466 +0230739FDB637310404C0503B86F61330E83DD9AEDB10A06E01A0C61233301987 +928336C553C000E816DF6D9F658A1160400B90786D827D4830150674F5EFFF532 +582F1E00368478AC00E39417E0BA32AF45FC0B0C939E2EC4D2D3C9A1CE4A36563 +52B0006F3162665DEB602BC362EA4B7B2E46D8CE16EB5A2C32105A086DD1BFD46 +31FD799FA4D3BE3502300D9500FF1D40E40B036C6466EFBB13F70000000049454 +E44AE42608200"; +end +function getfindbitmapinfo(); +begin + return "0502000000060400000074797065000203000000696D670006040000006461746 +100021B03000089504E470D0A1A0A0000000D4948445200000020000000200806 +000000737A7AF4000000017352474200AECE1CE90000000467414D410000B18F0 +BFC6105000000097048597300000EC300000EC301C76FA864000002B049444154 +5847E597CB6B13511487FD5F5CB8115C09EE74A12E4437D58D2B455011DC88822 +86215AD8A2DA1A550954A7D9582A4565B4DB56A158D4A11ADD6BE93B44D62D264 +92A6499C344D3331C79CE39921D3492693718C0B3FB884FBE33E3EEECCBD77B20 +6FE31550B48C20F488F06203D16845C2CC5A9792A0A64A6C310BAE880D93DD761 +6CED694D99D8701EBCFB6F41F8CA5358F12E702FE3E80A084DCF6162FD399AC87 +BE036241E7D858C5B809F6206A4A808A2D305D1F6B710386E2FB4AB87A94D9720 +76E703F736465901FFD12E9A187F97867D9C9667E9E31C7876B52AB2462929202 +F6FB27F9413E3044ED895FE46D008A0BDD1CEE548BDF7D01842F34B4ECAA312C0 +E7871DC397FB3931CF42C73B1A0BDF1B3D14017C83F1259AA96BE3E4CFF11DBC0 +B737BDBB9561A452074E10919E3F25985383845638A4E37275A1481E9CD8DB4D7 +AD06572170F201D7B490406A68864CF1C0B19AE88D37E0DA66E39A161248F48D9 +080996D5789B8FD138D9D5FCE72A28604A2379DD4480A2529B412F1D5EFF76079 +32C4891A1290B74C3618A7D04A6401BC534A4102B8F4D828D1ABBF67CD808F607 +CDD19C84B394ED49040C6132181F9B3BD145A49A4ED357876B6724D0B0920B3BB +AF8167470BD7AC037798DE91AC08445A06691516BB3F73521B14815C220DEEC27 +EC503A9962802C862E710AD42F0540F277F1F950062C5758CDB1A8B113402080A +60A9F664942222CCD7F729FDABFE1E28A6DA4FB2F8C32FE0DA6AA33EA106077C3 +F76DF9044590104F7B07B7B330D84178AFFF03D101A0720F17804928E6F20D85E +80AF90B9B634511BEFBE0EFA3694C15BB09284AE0092CFE620DE330CFE239D345 +87199DCD800BE4305A9C204C98171EEA1060F373D898A02AB91FF98ACF8629C54 +061F094AE059B39AAA05CC12BEFAACE44AD44C00C1C951A2989A0A94E27F1700F +805D0F3420D05EDA5310000000049454E44AE42608200"; +end +function gettslcodeformatbitmapinfo(); +begin + return "0502000000060400000074797065000203000000696D670006040000006461746 +10002E601000089504E470D0A1A0A0000000D4948445200000018000000180806 +000000E0773DF8000000017352474200AECE1CE90000000467414D410000B18F0 +BFC6105000000097048597300000EC300000EC301C76FA8640000017B49444154 +484BCD96CD2B04611CC7FD390E8E5C1D957273578E0E2E4AED897FC045EBA58D1 +4DBA675D8C8A64424D12E566B6D1B4931C94611C9719E9FF93EBF999E31EF333B +C9A77E87797E2F9F79E6ADE92293A90341DD593D561C3F0AB3DB1F29687F916CA +83E89483152E2404FF936582205684271542CC1E239F7151AFE928E0460A9C6BD +0B67DE928E0560B5CEFDD98A7B462A02B07EED2D492C185873D76FDDF09CB9AA9 +22712945A5C3F54E09D380339CC0489040067E9351C918A2088FF2FC0E539D5D4 +8D74D29160A349345C0CAE8D2CC85FF14DB33398D7A9D8E435E4F0FC3B0915E42 +E04F5E6749AD81574FF6E2E1AD49E897AE6551D72A8E9336A972F952850603D7E +56819D4963D8CC897B1DB5E899AD702E74078D17A2F11D215FA46DF373FCFACD8 +DDAA73C9420879AB1B2A07A5B89430516B804993D2EC4376674530D01997D4177 +6FE6818DC8023BFD2B828E1E7E0BFC882D40DE6A8842A21DC4E1EF05DA875A4C2 +3300B3F12400AC0F42127D208FC0231443F28BE427F9C549A270000000049454E +44AE42608200"; +end +function getformbitmapinfo(); +begin + return "0502000000060400000074797065000203000000696D670006040000006461746 +100023E01000089504E470D0A1A0A0000000D4948445200000018000000180806 +000000E0773DF8000000017352474200AECE1CE90000000467414D410000B18F0 +BFC6105000000097048597300000EC300000EC301C76FA864000000D349444154 +484B63F84F6300B6A0E1C1EFFF0E177EFE6738F09D2A186456FDFD5F080BB44F2 +30C5739F9034531084B1EC314C3A60E1983CC845B00139CFFFC0F581004606209 +377EFD9FF9EC0F18E353870D83E591155DF9F20F2C08023017D6DFFF0DB700E61 +36CEAB0611040B10064D8D39FFFC02E8489F95CFEF9BFEBD16FB04FF0A9C38631 +2CA03646B1400DE8556A62AC16C0C29A523C6A01413C6A01413C6A01413C4C2D0 +095F5D8149383E54FA05900AB8F411220DB29C1B04A096426DC0250058D5C2F53 +8A4166A154FAB403FFFF03001D726C72BDB4F7150000000049454E44AE4260820 +0"; +end +function getbitmapviewerbitmapinfo(); +begin + return "0502000000060400000074797065000203000000696D670006040000006461746 +10002AE04000089504E470D0A1A0A0000000D4948445200000040000000400806 +000000AA6971DE000000017352474200AECE1CE90000000467414D410000B18F0 +BFC6105000000097048597300000EC300000EC301C76FA8640000044349444154 +785EED97794F135B1887FD307E00FFF25B98F811AE1A1313638C8991B82626AE1 +4D9B4A514011716254A29B4A58085D28D0285B66C054190CB2D704590AD2082BE +F64CCF603BF356A733530BD3F9254F1A867366DEDFD3E9148E408E4715405F733 +6AA00FABA9FB5A54D45C30D2AA0B7694491A802D2151076CF1C48469A1C3052DF +0C43CF1B60B8A611865F5960B42D80AE2548127090F2FDCB02AC159C84E58B475 +1A2D612BAF2571425206ABC8B166759C93B067B0B9374753C8A1140DE7DAC3497 +68E31DBA231EC508D80958D1C25C56F34FD01DF12846C057570D5A98CBCAF5E37 +4473C8A11403EDB58612E9BF557E98E7814238064A3FA025A3A916F61275D1D8F +A204ECCE0CA2A559B8EF3E89A20490EC45C661BDEC1F5EF96D7B055D911CC5096 +043BE16C91D419E0D3FB637E8517E142B40685401AA0055802AE0D008D8D9DB81 +C8C622835C3934026656E7E0ED442B1882750CC14F63F437D2722804CCAE45F68 +B27E25F18A22BC4E7C00B20B73B569E85DC195272A0057C8A7E464B73598C2ED1 +1DE94776014B5BCB609A6C67066B9CB031B76974779BFE3639FA400BE4751AA02 +AD40A8ED9203D1ACFDCFA3CAF682A1AC6CDB0F92D4A77A617590544D617A166D4 +C81BB036768C2B82943E65CE4FE2BEB70E7AE7C3108A3DE0B8E7F8139EFFFCF4C +CE9453601D3ABFF4265E8353A1C4BFD980926963F802160E69567B9E9D4A37B85 +E098F5C33D4FEDFEB92EDBF5B163213A211ED90498A7ECE85018773D1570AEB53 +0A9F8596B01DC761BD0F542D1F8AA92CEC95219B4D229F99145C0FF021F568994 +0DD6407E6CE01BDD6590D7A5055DEC676C5DBA9073611274032666566E6411D03 +71F4487C9069ADE6A5400A1E9BD87993731B20868089BD161B2C5A577A5A80082 +71C2CDCCCC46B280A5AD1574886C72CFFB142D4F38632980A995086D238300E6A +98E0C916DCED9921FB28914F7BDA16D6410E09EEB4707C836A91E862C9D1F034C +1FC902DE8C5BD101B2CDEF3E06846B8E4AD8DAFD2A4DC0987B1ABD3841D7FF024 +ABD5550D86D80626705687B9F4379A0165D9B09B4032FD1E289B44C7AA50918F2 +4CF22E5CE67F098F3ACBE181ED098F87ED5A28EA8ECBE0EECB04173B4AD0E22C5 +762FF878CBAA6C50B18F486932E48DE71AC38C613DFB3A4BD99E096B31C2D9E48 +5FE7A87801FDDEE1FD8B153A0C68D1DF916909857DCFD0D289D86D7EF1027C3D2 +1E6428F7BAAD18242201F19EEE07272C6A2418BB3989A5DD204E807627FD3B7EB +D07242287157A283CBC5F9B622B4388BD1D42D5E80B767088A5D4FD16242D174E +832FAED70D9AE85D3E64729796B728A175067F781C62EFCC1978A22570394FA2C +19E181C30B579B6753526DEA172FA0A3EB23DCB7E9D152E970DB624387FB1B900 +EA205B4754DA185D2E58EF5153ADCDF409200A37D006EB60CCAC2F5963174C04C +234900D98C9DF430A10A5005A8025401AA002902948068014A431520548092E18 +62720D7A20AA0AF399B1C1700F01309B59D2D832D152F0000000049454E44AE42 +608200"; + +end +function getsheetbitmapinfo(); +begin + return "0502000000060400000074797065000203000000696D670006040000006461746 +10002AE01000089504E470D0A1A0A0000000D4948445200000010000000100806 +0000001FF3FF61000000017352474200AECE1CE90000000467414D410000B18F0 +BFC6105000000097048597300000EC300000EC301C76FA8640000014349444154 +384FAD92C94AC4501045FBAFFC1657BA722B7E862E04FDAA86A61511119C5A5D6 +44E77E639B9D67DCD4B7A08226AE040A0EA5C2A55991C9C4DF11754002693D1E2 +4FF8A709469EB66DD1340DEABA465996288A02799E234D53244982388EC7030EC +FE77B1C5FDEE2E6C9EDE5288A1086E17E40D7754A68E5BDE9805AA884FBCF1827 +D777983DDABDBC5AADB603F4C80C28242113522111E206982D221CC9244110287 +9B95C0E015AAEAA4A0544229C5E5CF5F835E009AC51F47D1F9EE70D015C14652E +8B4D6C7605A7022CC1140C8135CAAEEBC2719C2180B2DE329BD8BC3901792FD60 +15AB62C6B08A09C6599DA329B3E4A6021C29BF02ABCE4C0B3C09A6DDB4A364D73 +08D0326FCB2636EF4EF090AD03281A86A1E803F48FC113B189CD63B0A6E5AD00C +ABC2D4FC4A6EF180DD03F863E915E14BF7773E45DFA80DF33C517615C294C8193 +B0280000000049454E44AE42608200"; +end +function getsplitersiderbitmapinfo(); +begin + return "0502000000060400000074797065000203000000696D670006040000006461746 +10002E601000089504E470D0A1A0A0000000D4948445200000010000000100806 +0000001FF3FF61000000017352474200AECE1CE90000000467414D410000B18F0 +BFC6105000000097048597300000EC300000EC301C76FA8640000017B49444154 +384FA592DB4EC24010867D5E51349C29F8128AA82082808F81882184A0507C0CC +E6728C7DFFDDB6E5D9B182FD8E4BBE874E6DBD9DD39C191CB14C48B2D818EAB97 +36E236B122D1112BE8D0F24D449F3F11C935107EAA2394A92198AE22907A9702D +D2EFC728815491B9A1044F32D4484209CFD404808828F350484C0FF2005EE6281 +2604D1425BA0232204E15C13A16C03C14C1DFE740DBE54153E55B0DBEDB0DFEF7 +1381C1CF8CDF876BBC57ABDC672B9C46C36C36432C17038C4E57DE5E70852A04A +FE135CDCD9025E169354895ABCD96C60188623188FC7180C06F026DF2C8156689 +9494C76C338775FAD56582C16984EA7188D46A6E0ECD616F089B80313DD302E8B +65FB8E2051B6047C5F26B045264BF84DD462B6CFF3F7FB7D786E5E2D018783096 +43E9FFF42C6D562EEDEEBF5702A059C2CFE64920A6312D936776671B7DB158292 +25E058D2FC17EE42D2E974C4116C01679A63C9C9E270F07DBDC90ACEC52DF3A63 +D0952365B36B92E99C58EE09875A400F80678339550E1D72CF30000000049454E +44AE42608200"; +end +function getbtnbitmapinfo(); +begin + return "0502000000060400000074797065000203000000696D670006040000006461746 +10002A101000089504E470D0A1A0A0000000D4948445200000018000000180806 +000000E0773DF8000000017352474200AECE1CE90000000467414D410000B18F0 +BFC6105000000097048597300000EC300000EC301C76FA8640000013649444154 +484BED95416A83401486BD5537D90A929D8A0B1123928D889B627B93D21E21076 +87B80B408AD8A95E042415C4430907887BFBC81144D44A1D14221031F8CCFF7E6 +1B477C7298785C0583637AC1C3F316B3BB4FDCDC7E8C0AADF9F8B2054793F7B84 +45DD7A3F2F6556276EF83235B57C218D0DABF12A469DA193F655090651996CB25 +0CC380A669088280C5154539CBED6250208A22C23064F33CCFC1F33CF6FBFD8F6 +0B3D9A0288A564D935E4155559065B915B32C0B51143181E779505515BBDDAE95 +D3A45750962524496AC54840BB160401F3F99C6DA279FF945E01418BC471CCE67 +444747D381CD813388E83D56A7556D36450902409168B054CD384AEEBEC7828EE +BA2E7B17B66DC3F7FDB3BA2383824BF91B01B50AFAACBB122E617D6C15D490A66 +A764FAFE5F587333CFEBB00F8061B912011B78C94420000000049454E44AE4260 +8200"; +end +function gettimepickerbitmapinfo(); +begin + return "0502000000060400000074797065000203000000696D670006040000006461746 +100024C02000089504E470D0A1A0A0000000D4948445200000018000000180806 +000000E0773DF8000000017352474200AECE1CE90000000467414D410000B18F0 +BFC6105000000097048597300000EC300000EC301C76FA864000001E149444154 +484BDD95CB2F434114C6FD0D96D65D5AD8B0B42376B622362291486C88C442626 +3819060A189854A4988054917E2FD4A4BC43BA242545BFAD097BEB455F5F8DC73 +EF54AFA90CF558F04B4E7266EECD7C933373E6CBC32FF3CF04F2B5E72818B240A +3B3A2506F43F1F8254A27AF503EE540A5C189AA19376AE7AFD1B0EC41F39A176D +1B7E746C05D0BB7B83C1C310868FC398388DB2D514DE086874172C7B1FADB4088 +508A14089B463114667420E1142818A6907CBBE8E50A05AAAF177110A34AE7859 +96C11CB887FE24024B28C56614561D71985C776C944128D0BEE9679942F7CE0D6 +6AC31F8138FD2F9D8114C3EC9F3D6700A9367D1DC05FAF6822CCBA64CBAAACB57 +7139AF5FF460E932FE3A56231418954A617225E45073FFF48C9A59E57C5A8D3E1 +82CB7D049777EC41C91E788818310666D31B1007DA49FE8673554AA397B1C4D52 +735133A6A368CC267F23D21BA34DAAC912E0E9D90DA26B3BC0461968E1F4E26AF +8320B05FAF783F2AE8EFC49B8630F4829672C438BBF27CC5F14A140DD82072DEB +3E746E2BBB557731958C8287BFEA1F962857F866FD7101FEB9C949E0338F1DFF6 +0E624F099E79A7FF2B304C834C83CC844C84CC854C85CC864C86CC874C87CC884 +C88CC894C89CC8A4C8ACA83FD4BC11F80DFEBA00F002CD0C9338BD4F383600000 +00049454E44AE42608200"; +end +function gettoolbarbitmapinfo(); +begin + return "0502000000060400000074797065000203000000696D670006040000006461746 +10002BE01000089504E470D0A1A0A0000000D4948445200000018000000180806 +000000E0773DF8000000017352474200AECE1CE90000000467414D410000B18F0 +BFC6105000000097048597300000EC300000EC301C76FA8640000015349444154 +484BED953D4AC5501085C77DD8887BD0C645B8010B05155C811BB0114454B4119 +5B78654EE41105110440B9BFCE7BD972016BEC0E8B9E184686E7E40D288031F37 +8799CC979022A203D71F10388EA343225996695F7003CAD66B42D234D5BE5060E +B3521D3E95417B6776B6C1C5F6A14278A3EA180F9E960B946751EC86432310B59 +B89EE5B96E9D8D74EDF05C832852CC000A98B150DF1F4A90D923321E8F6B02D4C +72CD7CDD391AE1F5D28660005CC46905E97F02DAA340A509020B70AA2AB562449 +929AE027980114301B81BBA72F272BDF9EBA8AC4716C9634157A980114306381B +EEE14E7DBAD1589BE3E62970033800266B3F879B538BD7D2B128661A700338002 +66B3F871A914D9F8BDE06EBE38EF17AD4810049D02CC000A98CDE29BB9F2B421B +EEF9B256D600650C08CC55D88E779DA170A6CBD26C4755DED0B05B65E13C3FF0F +CC230D58FF828E52FD0481EEF4FA779294570000000049454E44AE42608200"; +end +function getlabelbitmapinfo(); +begin + return "0502000000060400000074797065000203000000696D670006040000006461746 +100026B03000089504E470D0A1A0A0000000D4948445200000024000000240806 +000000E1009898000000017352474200AECE1CE90000000467414D410000B18F0 +BFC6105000000097048597300000EC300000EC301C76FA8640000030049444154 +5847ED95F94F134114C7FDAFD488B73F6922C6C478FF6A4C20A0164C4004B1A08 +9261A148207225034C1185083E281504A6D2986C3022D7297231469A172B4F4E2 +39EF31EB76D9BA1B43C4FEB09F64D37933B333DF7DF37DD32D90606882D4D004A +9A109524313A48626480D55419E9F4198F6067824A7A8761074A5DF78B4711405 +45A2AB7028DB0CDB529B6072D6CF7BA5E45739E0ECCD761E6D1C454126FB2CEC4 +86B26518FDF8EF05E299B2A28F3A11D528ABAA0F0991392732C105D5DE523229B +26C8BB10A4ECD45BA7A173601EB6A63481CDE9E5A32282A050380A559F5C905ED +C0DE925DD50D33C01E188FC03267EF8C977A9F7BA686EF1AB21580945F9A88220 +035B7CD705232CFAC38089399A67859CF25E3E2A82824E15DA28939798B9CBDE8 +DC29527BDE4BB6CF61B4B2BB3C04EB6E6C9021B0929793D4CED59DF0A9FA120E8 +84DE06B94FFB7804F0A87E0492D28C30BF18E23D6BA020CCDE7A8F5537BAA8BF8 +36517996319DFAB6B818C0776CAA600DA20CA8A4720AE20FBB08F16B3F6894784 +A9C6AF7E619CE03D6BA0A0DD175B201411374170D3A4742394378C52FCFCF338B +D3F332F66231E7105A189D13F2F5B26A1CE3CF5FB399865863337A406168E2C1E +78CC85D54E6A5F3738E070CE176A2B2113E40F46609FCE047BD8571FC834491E4 +C3966CEE95AE0B34553C703DFB955F39DDA79157D907CD5426D256482B0AA70D3 +81C945DE23820647A3DFE69B202808378EF50132E65EA6756A5BA72846B36F4F6 +D66060E52FC276482CEDFED84E3FA361EC9C10ADA9F618200CB242298BAF2C318 +C508FA47C7CC8B99F62DAD15C19427409EBACCEEB6D832C7228935B94410FE3DA +0F12A62165F8FD5E12501EFBFBA294641C7F2DBE034F3D6B93B1D50C03C83317A +B0B17386E60834B4BBA9FF48AE05AE553A20ABAC876C105BB91241FDE30B50F5D +1A598563C1A2CE9D61E0FC566F68BC7BC1408D3DDA53738A1F4CD308C4E2FD3F8 +7A5C33CB7485E0BCFB7543D0DE3F47F79C80ECC8FE37124178147FF3FC0B123B4 +3898026480D4D901A9A2035124C10C02FFABD674D6A547CAC0000000049454E44 +AE42608200"; +end +function getlistviewbitmapinfo(); +begin + return "0502000000060400000074797065000203000000696D670006040000006461746 +10002ED01000089504E470D0A1A0A0000000D4948445200000018000000180806 +000000E0773DF8000000017352474200AECE1CE90000000467414D410000B18F0 +BFC6105000000097048597300000EC300000EC301C76FA8640000018249444154 +484BB5D52D4CC3401407F0E770381C0E8947A3499A60700B06B3E006212080646 +A1364624B204D9A34080C0EB1A48E90903A1C0E070AB97EAD1FE2D1077B973B76 +57D1B54DFEE689DFFFF5724D015B7E7E0B5CD745DBB61B0D99A28006455128C9F +35C4996654AD23455329FCF9590A92DD8BA4871B337C38DE36F057F0340BFCC73 +1919061F10BC328F20F02449CC058CAF1F7D2A9B33EEFD2F58E0E0FC15106E2C2 +090F1B5CE87C0298C3F490504320E2310B8B6808F8323E314796BC6E5C8B8B1C0 +B2ACA510AE9B13AA9B131EC7B1F90D56DD9C70630181B317C0AF29E07B79B632F +C7AD0C7E9DE193EEC76157C78EFE0F5DD184F6F0602D716F0C68CFBAE5AC0F8ED +4E47D99CF16EFF52E05114990B18F726EA6D617CB0BD2F700AE387E72702AF2C9 +0B7665C8E8C53786B193716E86E05A1BA39E1BAB9B1A0A9CD2961189A0BC077CB +CF7F527EA1C3DA7875C10207E7AA366E2C20907118F56AE3DA023E0ECE2A78100 +4FA02DDADA8831B0B9AD8BCB2A0297CA9A0F59F7E7B0FE20F1D79BA1B7D429BC4 +0000000049454E44AE42608200"; +end +{ GetSaveFileBitmapInfo +//ļ +"0502000000060400000074797065000203000000696D670006040000006461746 +100022702000089504E470D0A1A0A0000000D4948445200000020000000200806 +000000737A7AF4000000017352474200AECE1CE90000000467414D410000B18F0 +BFC6105000000097048597300000EC300000EC301C76FA864000001BC49444154 +5847ED97CD2E035114C7EF4AB045B011ED0295D06D173E1296880891B0A88588F +00E3C000F6021165D88442CBD869022AA3A65CC0C8BAA36165A334D8FFEAF7B5B +7442FA35ABF927279973EE9C737E776E663287514196A191B1BE48515F1B457A9 +A1A6AE8A1AFCDD387728BD6C4D03C36DC657B73232D36D4C937CEB07304B49559 +B29E0DCA84CFB81F1F1B20538DD7C5500B3551DB7AD2490BCE70DFD85822261F3 +B16A022C0A49FFB952A6F59A4AFCE91693C8A08F15A1200C2CEE1477DEDC47001 +93AA15207B73C9F3D3C7211129078064DFBA03C8FCD4E1BE88380C90BD3AE7F9E +9A303117118209F79A758C0C38F42AA2280ECF505F7EFC77D2252BBE45B80DA52 +B26F19402E99A0486F3345BDAD646A0F225ABDF01A463C2DBC662E9514D13F002 +02D38CD63CA683FA5427BF4767A5295215719E9E3B5F09DF92ED9D716C0D4557E +8E72AD565302DE1FDF0548AED90240388AC4CE16A90B13A44E05AAB3426E62779 +B72AF2FA26A49FF02345A2E800BE002B8002E800BE00214017E0F264EA838980C +7610C3A00807E3921310682E7FF98CCD65629852312822E0A4DDF9BBF9864BE37 +96150C4AC6677733D0D3DB0F3AFA74DF409837977A59FB64D730000000049454E +44AE42608200"; +} +end. \ No newline at end of file diff --git a/designer/utslvclsyntaxparser.tsf b/designer/utslvclsyntaxparser.tsf new file mode 100644 index 0000000..2b6b335 --- /dev/null +++ b/designer/utslvclsyntaxparser.tsf @@ -0,0 +1,847 @@ +unit utslvclsyntaxparser; +{** + @explan(˵) tslű %% + @date(20220518) +**} +interface +type ttslscripparser = class(tslparser) //ӿ +{** + @explan(˵) tsl %% +**} + function create(); + begin + inherited; + end +end +implementation +type tslparser = class(tslparserbase) //﷨ + private + FTokener; + FTokens; + FCurrentPos; + FTokenLen; + FScriptPath; + function SetScriptPath(v); + begin + size := filesize("",v); //ȡļС + readFile(rwraw(),"",v,0,size,data); + SetScript(data); + end + function SetScript(v); + begin + if FTokener.tslstr <> v then + begin + FTokener.tslstr := v; + FTokens := FTokener.tokens(); + if FTokens then FTokenLen := length(FTokens)-1; + FTokenLen :=-1; + end + end + function tkopok(); + begin + return FCurrentPos>0 and FCurrentPos= 0 then FCurrentPos -= n; + else FCurrentPos--; + end + function btoken(tk,tp,pos,n); + begin + bpos(n); + r := ctoken(tk,tp,pos); + return r; + end + function GetScript(); + begin + return FTokener.tslstr; + end + public + function create(); + begin + inherited; + FTokener := new tsltoken(); + end + //type beg end name + function GetClassAbstract(); + begin + {** + @explan(˵) class ĻϢ %% + @return(array) "name","inherited","uses" Ϣ %% + **} + if not Tokens then array(); + FCurrentPos := 0; + while true do + begin + ctoken(tk,tp,pos); + if ifnil(tk)then return array(); + if tk="type" and tp <> TT_STR then + begin + r := array(); + ctoken(tk,tp,pos); + if tp=TT_IDE then + begin + r["name"]:= tk; + ctoken(tk,tp,pos); + if tk <> "=" then return 0; + ctoken(tk,tp,pos); + if tk <> "class" then return 0; + ctoken(tk,tp,pos); + inh := array(); + if tk="(" then + begin + while true do + begin + ctoken(tk,tp,pos); + if ifnil(tk)then break; + if tk=")" then break; + if tk="," then continue; + else inh[length(inh)]:= tk; + end + r["inherited"]:= inh; + end + while true do + begin + ctoken(tk,tp,pos); + if ifnil(tk)then break; + if tk="uses" and tp <> TT_STR then + begin + ru := array(); + while true do + begin + ctoken(tk,tp,pos); + if ifnil(tk)then break; + if tk="," then continue; + if tk=";" then break; + ru[length(ru)]:= tk; + end + r["uses"]:= ru; + break; + end + end + return r; + end + end else + return array(); + end + end + function GetClassInfo(fi); + begin + {** + @explan(˵) classϸϢ %% + @param(fi)(bool) ǷclassԱλϢ %% + **} + r := array(); + if not Tokens then return r; + FCurrentPos := 0; + while true do + begin + ctoken(tk,tp,pos); + if ifnil(tk)then exit; + if tk="type" and tp <> TT_STR then break; + end + if tk="type" and tp <> TT_STR then + begin + r["beg"]:= pos; + tr := parserclass(fi); + if ifarray(tr)then r union=tr; + r["end"]:= CurrentPos; + return r; + end + return r; + end + function parserclass(fi); + begin + {** + @explan(˵) classϸ %% + @param(fi)(bool) ǷúϢ %% + **} + ctoken(tk,tp,pos); + r := array(); + if tp=TT_IDE then + begin + r["name"]:= tk; + ctoken(tk,tp,pos); + if tk <> "=" then raise ""; + ctoken(tk,tp,pos); + if tk <> "class" then raise ""; + ctoken(tk,tp,pos); + if tk="(" then + begin + pa := array(); + while true do + begin + ctoken(tk,tp,pos); + if tk=")" then + begin + r["inheritedendpos"] := pos; + break; + end + if tk <> "," then pa[length(pa)]:= tk; + end + r["inherited"]:= pa; + end else + begin + bpos(); + end + props := array(); + funcs := array(); + funcsinfo := array(); + filed := array(); + priv := "public"; + while true do + begin + ctoken(tk,tp,pos,row); + if ifnil(tk)then break; + if tk in array("private","public","protected")then + begin + priv := tk; + continue; + end + if tk="uses" and tp=TT_IDE then + begin + usb := pos; + pu := array(); + while true do + begin + ctoken(tk,tp,pos); + if tp=TT_IDE then + begin + pu[length(pu)]:= tk; + end else + if tk=";" then break; + end + r["uses"]:= array("row":row,"beg":usb,"end":pos,"info":pu); + end else + if tk="static" and tp=TT_IDE then + begin + if not r["filed"]then r["filed"]:= array(); + sf := parserfiled(); + for i := 0 to length(sf)-1 do + begin + sf[i]["static"]:= true; + sf[i]["staticpos"]:= pos; + sf[i]["priv"]:= priv; + end + filed union=sf; + end else + if tk="function" or tk="procedure" then + begin + bpos(); + bfpos := CurrentPos; + lenf := length(funcsinfo); + tfn := parserfunction(); + if priv="public" then funcs[length(funcs)]:= tfn; + if fi then + begin + funcsinfo[lenf]["name"]:= tfn; + funcsinfo[lenf]["startpos"]:= getTokenPos(bfpos); + funcsinfo[lenf]["endpos"]:= getTokenPos(self.CurrentPos)-1; + funcsinfo[lenf]["row"]:= row; + end + end else + if tk="property" then + begin + props[length(props)]:= parserproperty(); + end else + if tk="class" and tp=TT_IDE then + begin + if priv="public" then funcs[length(funcs)]:= parserfunction(); + end else + if tk=";" then continue; + else if tk="end" and tp=TT_IDE then break; + else if tk="type" then + begin + cr := array(); + cr["type"]:= "class"; + cr["beg"]:= pos; + cr["info"]:= parserclass(fi); + cr["end"]:= CurrentPos; + end else + if tk="type" then break; + else + begin + bpos(); + filed union=parserfiled(priv); + end + end + end + r["prop"]:= props; + r["funcs"]:= funcs; + r["filed"]:= filed; + r["funcsinfo"]:= funcsinfo; + prn := array(); + if filed then prn := filed[:,"name"]; + r["members"]:=(prn union2 funcs)union2 props; + return r; + end + function parsertype(); + begin + ctoken(tk,tp,pos); + tarray := ""; + if tk="array" then + begin + tarray := "array "; + ctoken(tk,tp,pos); + if tk=";" then + begin + return tarray; + end else + if tk="of" then + begin + tarray += "of "; + ctoken(tk,tp,pos); + end + end + return tarray+tk; + end + function parserfiled(priv); + begin + rcount := 0; + r := array(); + while true do + begin + ctoken(tk,tp,pos); + if tk=";" then + begin + if rcount then + begin + r[rcount]["last"]:= true; + end + r[rcount]["end"]:= pos; + return r; + end else + if tk="," then + begin + if rcount>0 then + begin + r[rcount]["nextcomma"]:= pos; + end else + r[rcount]["first"]:= true; + rcount++; + r[rcount]["precomma"]:= pos; + end else + if tk=":" then + begin + tpv := parsertype(); + for i := 0 to length(r)-1 do + begin + r[i]["type"]:= tpv; + end + continue; + ctoken(tk,tp,pos); + tarray := ""; + if tk="array" then + begin + tarray := "array "; + ctoken(tk,tp,pos); + if tk=";" then + begin + for i := 0 to length(r) do + begin + r[i]["type"]:= "array"; + end + return r; + end else + if tk="of" then + begin + tarray += "of "; + ctoken(tk,tp,pos); + end + end + end else + begin + r[rcount]["name"]:= tk; + r[rcount]["beg"]:= pos; + r[rcount]["id"]:= rcount; + r[rcount]["priv"]:= priv; + end + end + return r; + end + function parserproperty(); + begin + r := ""; + while true do + begin + ctoken(tk,tp,pos); + if not r then r := tk; + if tk=";" then return r; + end + return r; + end + function parserfunction(); + begin + ctoken(tk,tp,pos); + ctoken(tk,tp,pos); + fn := ""; + if tk <> "(" then fn := tk; + while true do + begin + if tk="begin" then + begin + //return parserstatement(); + parserstatement(); + break; + end else + if tk="(" then + begin + while true do + begin + ctoken(tk,tp,pos); + if tk=")" and tp <> TT_STR then + begin + break; + end + end + parserfunctionplus(); + break; + end else + if tk=":" then + begin + bpos(); + parserfunctionplus(); + break; + end else + if tk="." then + begin + ctoken(tk,tp,pos); + fn := tk; + end else + if tk=";" then + begin + parserfunctionplus(); + break; + end + ctoken(tk,tp,pos); + end + return fn; + end + function parserfunctionplus(); + begin + ctoken(tk,tp,pos); + if ifnil(tk)then return; + if tk=";" then + begin + parserfunctionplus(); + end else + if tk=":" then + begin + parsertype(); + parserfunctionplus(); + end else + if tk="begin" then + begin + return parserstatement(); + end else + if tk="name" then + begin + ctoken(tk,tp,pos); + end else + if tk in array("virtual","cdecl","stdcall","external","override","overload")then + begin + ctoken(tk,tp,pos); + parserfunctionplus(); + end else + begin + bpos(); + end + end + + function parserstatement(); + begin + while true do + begin + ctoken(tk,tp,pos); + if ifnil(tk)then return; + if tk="end" and tp <> TT_STR then + begin + n := 0; + while true do + begin + n++; + ctoken(tk,tp,pos); + if ifnil(tk)then return; + if tk <> ";" then + begin + bpos(n); + return; + end + end + return array(pos+3); + end else + if tp <> TT_STR and(tk in array("begin","select","sselect", + "mselct","vselect","try","case","update"))then + begin + parserstatement(); + end + end + end + property Script read GetScript write SetScript; + property ScriptPath read FScriptPath write SetScriptPath; + property Tokens read FTokens; + property CurrentPos read FCurrentPos write FCurrentPos; +end + +type tslparserbase= class // +{** + @explan(˵) tslԽ %% +**} + static TT_IDE; //ʾ + static TT_STR; //ַ + static TT_SYM; //ָ + static TT_OK; + function create(); + begin + if not TT_OK then + begin + TT_IDE := "ʾ"; + TT_STR := "ַ"; + TT_SYM := "ָ"; + TT_OK := true; + end + end + function setdata(ret,nk,vs,tp,idx,hh) // + begin + {** + @explan(˵) + **} + if tp="ո" or tp="س" or tp="" then return; + if tp in array("˵0","˵1","˵2","˵")then + begin + vs := ""; + return; + end + if tp="" then // + begin + vs := lowercase(trim(vs)); + end + //if vs in array("of","array") then tp := "ؼ"; + ret[nk,0]:= vs; + ret[nk,1]:= tp; + if ifnumber(idx)and tp="" then ret[nk,2]:= idx-length(vs); + else if ifnumber(idx)and tp <> "ַ" then ret[nk,2]:= idx; + case tp of + "":ret[nk,1]:= TT_IDE; + "ַ":ret[nk,1]:= TT_STR; + else ret[nk,1]:= TT_SYM; + end; + vs := ""; + ret[nk,3]:= hh; + nk++; + end; + function findstringv2(str,fg,len,pos,hh); + begin + fgl := length(fg); + pfg := 0; + vs := ""; + while pos fg[i2]then break; + pfg := i2; + if pos=len then break; + end + if pfg=fgl then + begin + pos += fgl; + break; + end + vs += vi; + pos++; + end + return vs; + end + function findstringv(str,f,len,pos,zy,hh); + begin + {** + @explan(˵)fβַ + **} + pos++; + vs := ""; + if not(hh >= 0)then hh := 0; + while pos FTSLstr then + begin + FTSLstr := v; + FTokens := nil; + end + end + public + function create(); + begin + inherited; + end + function tokens(); + begin + if FTokens then return FTokens; + if not ifstring(FTSLstr)then return array(); + str := binary(FTSLstr); + pos :=-1; + len := length(str); + FTokens := array(); + nk := 0; + vs := ""; + hh := 0; + while true do + begin + pos++; + if pos >= len then break; + v := str[pos]; + if v="%" then + begin + kk := 1; + v1 := str[pos+kk]; + if v1="%" then + begin + pls := "%%"; + while true do + begin + kk++; + if pos+kk >= len then break; + if str[pos+kk]in array(" ","\t","\r","\n")then + begin + if str[pos+kk]="\n" then hh++; + break; + end else + pls += str[pos+kk]; + end + pos += kk; + if length(vs)then setdata(FTokens,nk,vs,"",pos,hh); + vs := findstringv2(str,pls,len,pos,hh); + //vs := findstringv(str,pls,len,pos,nil,hh); //str,f,len,pos,zy,hh + setdata(FTokens,nk,vs,"ַ",pos,hh); + vf := 0; + continue; + end + end + if v='"' then + begin + if length(vs)then setdata(FTokens,nk,vs,"",pos,hh); + vs := findstringv(str,'"',len,pos,1,hh); + setdata(FTokens,nk,vs,"ַ",pos,hh); + vf := 0; + end else + if v="'" then + begin + if length(vs)then setdata(FTokens,nk,vs,"",pos,hh); + vs := findstringv(str,"'",len,pos,1,hh); + setdata(FTokens,nk,vs,"ַ",pos,hh); + vf := 0; + end else + if v='{' then + begin + if length(vs)then setdata(FTokens,nk,vs,"",pos,hh); + vs := findstringv(str,'}',len,pos,nil,hh); + lvs := length(vs); + flvs := true; + if lvs>5 then + begin + if vs[1:2]="**" and(vs[3]in array(" ","\t","\r","\n"))and vs[lvs-1:lvs]="**" and(vs[lvs-2]in array(" ","\t","\r","\n"))then + begin + flvs := false; + vv := trim(vs[3:lvs-2]); + if vs[3]="\n" then hh++; + setdata(FTokens,nk,vv,"˵",pos,hh); + if vs[lvs-2]="\n" then hh++; + vs := ""; + end + end + if flvs then setdata(FTokens,nk,vs,"˵0",pos,hh); + vf := 0; + end else + if v="#" then + begin + pos++; + vi := str[pos]; + if vi="!" then + begin + if length(vs)then setdata(FTokens,nk,vs,"",pos,hh); + vs := findstringv(str,'\n',len,pos,nil,hh); + setdata(FTokens,nk,vs,"˵2",pos,hh); + vf := 0; + end else + begin + pos--; + if length(vs)then setdata(FTokens,nk,vs,"",pos,hh); + setdata(FTokens,nk,v,"ָ",pos,hh); + vf := 0; + end + end else + if v="/" then + begin + pos++; + vi := str[pos]; + if vi="/" then + begin + if length(vs)then setdata(FTokens,nk,vs,"",pos,hh); + vs := findstringv(str,'\n',len,pos,nil,hh); + setdata(FTokens,nk,vs,"˵2",pos,hh); + vf := 0; + end else + begin + vs += v; + pos--; + end + end else + if v='(' then + begin + pos++; + vi := str[pos]; + if vi="*" then + begin + if length(vs)then setdata(FTokens,nk,vs,"",pos,hh); + pos++; + while pos <= len do + begin + vi := str[pos]; + if vi="\n" then hh++; + if pos3 then + begin + if vs[1]="*" and(vs[2]in array(" ","\t","\r","\n"))and vs[lvs]="*" and(vs[lvs-1]in array(" ","\t","\r","\n"))then + begin + flvs := false; + vv := trim(vs[2:lvs-1]); + if vs[2]="\n" then hh++; + setdata(FTokens,nk,vv,"˵",pos,hh); + if vs[lvs-1]="\n" then hh++; + vs := ""; + end + end + if flvs then setdata(FTokens,nk,vs,"˵1",pos,hh); + //********************************************************* + vf := 0; + end else + begin + if length(vs)then setdata(FTokens,nk,vs,"",pos-1,hh); + setdata(FTokens,nk,v,"ǰ",pos,hh); + pos--; + continue; + end + end else + if v=")" then + begin + if length(vs)then setdata(FTokens,nk,vs,"",pos,hh); + setdata(FTokens,nk,v,"",pos,hh); + end else + if v="\t" then + begin + if length(vs)then setdata(FTokens,nk,vs,"",pos,hh); + if vf then continue; + vf := 1; + setdata(FTokens,nk,v,"ո",pos,hh); + end else + if v=" " then + begin + if length(vs)then setdata(FTokens,nk,vs,"",pos,hh); + if vf then continue; + vf := 1; + setdata(FTokens,nk,v,"ո",pos,hh); + end else + if v='\n' then + begin + if length(vs)then setdata(FTokens,nk,vs,"",pos,hh); + hh++; + if vf then continue; + vf := 1; + setdata(FTokens,nk,v,"",pos,hh); + end else + if v='\r' then + begin + if length(vs)then setdata(FTokens,nk,vs,"",pos,hh); + if vf then continue; + vf := 1; + setdata(FTokens,nk,v,"س",pos,hh); + end else + if v in array(",",";",".","]","[",":","=","!")then + begin + if length(vs)then setdata(FTokens,nk,vs,"",pos,hh); + setdata(FTokens,nk,v,"ָ",pos,hh); + end else + begin + vs += v; + end + end + if length(vs)then setdata(FTokens,nk,vs,"",pos,hh); + return FTokens; + end + property tslstr read FTSLstr write SetTSLstr; +end +initialization + +end. \ No newline at end of file diff --git a/funcext/tvclib/tcomponent.tsf b/funcext/tvclib/tcomponent.tsf index 938eb3a..44a3117 100644 --- a/funcext/tvclib/tcomponent.tsf +++ b/funcext/tvclib/tcomponent.tsf @@ -1,5 +1,5 @@ type tcomponent = class(TSLUIBASE) -uses utslvclauxiliary,utslvclbase; +uses utslvclauxiliary,UVCPropertyTypesPersistence,utslvclbase; {** @explan(˵) ӻ %% @date(20220505) tcomponent @@ -31,9 +31,9 @@ uses utslvclauxiliary,utslvclbase; #!begin //private methods function GetLoader(); begin - global G_T_TTFM2COMPONET_; - if not G_T_TTFM2COMPONET_ then return 0; - if not FLoader then FLoader := createobject(G_T_TTFM2COMPONET_); + m2 := class(tUIglobalData).uigetdata("G_T_TTFM2COMPONET_"); + if not m2 then return 0; + if not FLoader then FLoader := createobject(m2); return FLoader; end function GetPropInfo(); @@ -310,7 +310,7 @@ public if cd=self then return true; for i := 0 to FComponents.count()-1 do begin - if FComponents[i].isDescendant(cd)then return true; + if FComponents[i].isDescendant(cd) then return true; end return false; end @@ -320,7 +320,7 @@ public @explan(˵) ,עֻܳɹһ,֮Ч %% @param(AOwner)(tcomponent) %% **} - if ifnil(FOwner)and(AOwner is class(tcomponent))then + if (ifnil(FOwner)) and (AOwner is class(tcomponent))then begin if isDescendant(AOwner)then exit; FOwner := AOwner; @@ -471,7 +471,7 @@ public begin typ := v["type"]; if typ="eventhandler" then continue; - otype := GetPropertyType(typ); + otype :=GetComponentPropertyType(typ);// GetPropertyType(typ); if otype then begin n := v["name"]; @@ -502,7 +502,7 @@ public begin typ := v["type"]; if typ <> "eventhandler" then continue; - otype := GetPropertyType(typ); + otype :=GetComponentPropertyType(typ);// GetPropertyType(typ); if otype then begin n := v["name"]; @@ -532,7 +532,7 @@ public vv := FChangedProperties[n]; if ifnil(vv)then continue; vit := vi["type"]; - otype := GetPropertyType(vit); + otype := GetComponentPropertyType(vit);//GetPropertyType(vit); if vi["write"]and otype then begin r[n]:= otype.FormatTMF(vv); @@ -570,7 +570,7 @@ public if n=vi["name"]then begin vit := vi["type"]; - otype := GetPropertyType(vit); //ת + otype := GetComponentPropertyType(vit);//GetPropertyType(vit); //ת if ifobj(otype)then begin iv := otype.UnformatEdit(v); //ת diff --git a/funcext/tvclib/tcontrol.tsf b/funcext/tvclib/tcontrol.tsf index 7fd3d26..ddd0214 100644 --- a/funcext/tvclib/tcontrol.tsf +++ b/funcext/tvclib/tcontrol.tsf @@ -3,6 +3,13 @@ type tcontrol = class(tcomponent) @explan(˵) ؼ %% @date(20220509) %% **} +///////////ƽ̨ж//////// +{$ifdef linux} + {$define gtkpaint} + {$define linuxgtk} +{$else} + {$define gdipaint} +{$endif} uses utslvclauxiliary,utslvclmemstruct,utslvclevent,utslvclgdi,utslvclaction,utslvclmenu; private // #!begin //members @@ -815,7 +822,7 @@ type tcontrol = class(tcomponent) begin CallMessgeFunction(FOnDblClick,o,e); end - end + end function WMRButtonDBLCLK(o,e):LM_RBUTTONDBLCLK;virtual; begin { diff --git a/funcext/tvclib/tslvcl.tsf b/funcext/tvclib/tslvcl.tsf index 04a0c64..ebdec1a 100644 --- a/funcext/tvclib/tslvcl.tsf +++ b/funcext/tvclib/tslvcl.tsf @@ -23,7 +23,7 @@ unit tslvcl; interface uses utslvclconstant,utslvclbase,utslvclauxiliary,cstructurelib,utslvclmemstruct,utslvclevent,UVCPropertyTypesPersistence,utslvclgdi,utslvclaction,utslvclmenu,utslvclstdctl,utslvclgrid,utslvcltree; function initializeapplication(); //app -function RegisterComponentType(n,typ); //עؼ +function RegisterComponentType(n,typ); //עؼ,ͨؼƹؼ function GetAndDispatchMessageA(hwnd,minm,maxm); //win32 ַϢ function ExitMessageLoop(); //˳ѭ //function gettswin32api(); //win32 api @@ -59,7 +59,6 @@ function TslToHexFormatStr(tsl); function HexFormatStrToTsl(D); function GetTextWidthAndHeightWidthFont(s,f,mul); //**********ϵͳغ********************* -function initlib(); //////////////////////////////////// @@ -133,8 +132,7 @@ type Ttfm2Component = class(TTmfParser) nn := lowercase(n); r := FComponentTypes[nn]; if r then return r; - global G_F_TSLVCL_FINDCLASS; - if G_F_TSLVCL_FINDCLASS then return call(G_F_TSLVCL_FINDCLASS,nn); + return findclass(nn); end end function SetTfmData(owner,obj,data,lazydata); @@ -156,7 +154,7 @@ type Ttfm2Component = class(TTmfParser) ddpv := ddp[n]; if not ifarray(ddpv)then continue; cls := v["class"]; - et := owner.GetPropertyType(cls); + et := GetComponentPropertyType(cls);//owner.GetPropertyType(cls); if not et then continue; td := SampleValue(ddpv); if et.LazyProperty()then @@ -2097,7 +2095,6 @@ type tmemo = class(TSynMemoNorm) begin inherited; end - function MouseUp(o,e);override; begin if csDesigning in ComponentState then return ; @@ -10450,8 +10447,6 @@ begin **} class(Ttfm2Component).RegisterComponentType(n,typ); end - - function initializeapplication(); begin {** @@ -10579,31 +10574,12 @@ begin **} return class(ttimer)._timeproc_(hwnd,message,wparam,lparam); end -type tglobalabc=class - function create(); - begin - global xxxx; - xxxx++; - echo "\r\nin:",xxxx; - end - function destroy(); - begin - global xxxx; - xxxx--; - echo "\r\nout:",xxxx; - end -end function controlisCustomPaint(id); begin wd := class(tUIglobalData).uigetdata("TGlobalValues").getvalue(id); if wd then return wd.isCustomPaint(); return false; end -function tslvclfindclass(n); -begin - r := findclass(n); - return r; -end function _twinproc_(hwnd,message,wparam,lparam); //Ϣַ begin {** @@ -10701,29 +10677,7 @@ begin end end -function initallib(); -begin - //ClearScriptCache(); - //global tuiapplication; - //tuiapplication := getapplication(); - global G_F_CONTROL_IS_CUSTOMPAINT; - global G_F_TSLVCL_FINDCLASS; - global G_F_TWIN_PROC_; - global G_F_TIME_PROC_; - - global G_T_TTFM2COMPONET_; - global G_T_TVCFORM_; - - G_F_CONTROL_IS_CUSTOMPAINT := thisfunction(controlisCustomPaint); - G_F_TSLVCL_FINDCLASS := thisfunction(tslvclfindclass); - G_F_TWIN_PROC_ := thisfunction(_twinproc_); - G_F_TIME_PROC_ := thisfunction(_timeproc_); - G_T_TTFM2COMPONET_ := class(Ttfm2Component); - G_T_TVCFORM_ := class(TVCForm); - class(tUIglobalData).uisetdata("TGlobalComponentcache",class(TGlobalComponentcache)); - class(tUIglobalData).uisetdata("TGlobalValues",class(TGlobalValues)); - class(TRegKey).sinit(); //ʼregע -end + //function GetModuleFileNameA(m:pointer;var buf:string;len:integer):integer;stdcall;external "Kernel32.dll" name "GetModuleFileNameA"; //function CallWindowProcA(lpPrevWndFunc:pointer;hWnd:pointer;Msg:integer;wParam:pointer;lParam:pointer):pointer;stdcall;external "User32.dll" name "CallWindowProcA"; @@ -10743,23 +10697,22 @@ function TSL_FreeObj(L:pointer;v:pointer);cdecl;external {$ifdef linux}"libTSSVR //function TS_ModulePath():string;cdecl;external {$ifdef linux}"libTSSVRAPI.so"{$else}"TSSVRAPI.dll"{$endif} name "TS_ModulePath"; //function TS_ExecPath():string;cdecl;external {$ifdef linux}"libTSSVRAPI.so"{$else}"TSSVRAPI.dll"{$endif} name "TS_ExecPath"; //function TS_GetAppPath():string;cdecl;external {$ifdef linux}"libTSSVRAPI.so"{$else}"TSSVRAPI.dll"{$endif} name "TS_ExecPath"; -function TS_GetUserProfileHome():string;cdecl;external {$ifdef linux}"libTSSVRAPI.so"{$else}"TSSVRAPI.dll"{$endif} name "TS_GetUserProfileHome"; + //function TS_GetIniPath(hometype:integer; var IniName:string):string;cdecl;external {$ifdef linux}"libTSSVRAPI.so"{$else}"TSSVRAPI.dll"{$endif} name "TS_GetIniPath"; function TSL_Check(func:string;funclen:integer;oResult:pointer):integer;cdecl;external {$ifdef linux}"libTSSVRAPI.so"{$else}"TSSVRAPI.dll"{$endif} name "TSL_Check"; procedure tslprocessmessages();begin {echo "\r\n processmessage";}end; +function TS_GetUserProfileHome(); +begin + return unit(utslvclauxiliary).TS_GetUserProfileHome(); + +end function RunWorkerThreadLoop(); begin sleep(10); class(TThreadWorker).dispatch(); end //procedure ClearScriptCache();cdecl;external "TSLInterp.dll" name "ClearScriptCache"; -function initlib(); -begin - {** - @explan(˵) ʼlib %% - **} - a := static initallib(); -end + function CreateDirWithFileName(fname); begin return unit(utslvclauxiliary).CreateDirWithFileName(fname); @@ -11000,6 +10953,7 @@ begin **} return(a and not(b))or(b and not(a)); end +////////////////////װѾƶĽӿΪ˼/////////// function TslToHexFormatStr(tsl); begin return unit(utslvclauxiliary).TslToHexFormatStr(tsl); @@ -11016,7 +10970,55 @@ function CallMessgeFunction(f,o,e); begin return unit(utslvclauxiliary).CallMessgeFunction(f,o,e); end +/////////////////////////ʼ//////////////////////////////////// +function initallib(); +begin + class(tUIglobalData).uisetdata("G_F_CONTROL_IS_CUSTOMPAINT",thisfunction(controlisCustomPaint)); + class(tUIglobalData).uisetdata("G_F_TWIN_PROC_",thisfunction(_twinproc_)); + class(tUIglobalData).uisetdata("G_F_TIME_PROC_",thisfunction(_timeproc_)); + class(tUIglobalData).uisetdata("G_T_TVCFORM_",class(TVCForm)); + class(tUIglobalData).uisetdata("G_T_TTFM2COMPONET_",class(Ttfm2Component)); + class(tUIglobalData).uisetdata("TGlobalComponentcache",class(TGlobalComponentcache)); + class(tUIglobalData).uisetdata("TGlobalValues",class(TGlobalValues)); + class(TRegKey).sinit(); //ʼregע + //עcomponet + vclini := pluginpath()+"tslvcl.ini"; + if fileexists("",vclini) then + begin + ini := new TIniFileExta("",vclini); + ini.LowerKey := true; + for i,v in ini.ReadSectionValues("components") do //ؼ + begin + if v then + begin + cv := findclass(v); + if cv then + begin + RegisterComponentType(i,cv); + end + end + end + for i,v in ini.ReadSectionValues("propertys") do // + begin + if v then + begin + cv := findclass(v); + if cv then + begin + RegComponentPropertyType(createobject(cv)); + end + end + end + end +end +function initlib(); +begin + {** + @explan(˵) ʼlib %% + **} + a := static initallib(); +end Initialization initlib(); diff --git a/funcext/tvclib/twincontrol.tsf b/funcext/tvclib/twincontrol.tsf index cc6b63f..7f09645 100644 --- a/funcext/tvclib/twincontrol.tsf +++ b/funcext/tvclib/twincontrol.tsf @@ -2432,8 +2432,8 @@ end if dispatchmenushortcut(o.Action,st) then return "havedoshortcut"; if dispatchmenushortcut(o.PopupMenu,st) then return "havedoshortcut"; end - global G_T_TVCFORM_; - if G_T_TVCFORM_ and (o is G_T_TVCFORM_ ) then + w := class(tUIglobalData).uigetdata("G_T_TVCFORM_"); + if w and (o is w ) then begin if dispatchmenushortcut(o.MainMenu,st) then return "havedoshortcut"; end diff --git a/funcext/tvclib/ugtkinterface.tsf b/funcext/tvclib/ugtkinterface.tsf index 7dd5b79..19c617e 100644 --- a/funcext/tvclib/ugtkinterface.tsf +++ b/funcext/tvclib/ugtkinterface.tsf @@ -455,7 +455,7 @@ type tsgtkapi = class(tgtkapis) // class(tUIglobalData).uigetdata("TGlobalComponentcache").getwndbyhwnd(hwnd); function Gtk_TrigMoveSizeEvent(h,aleft,atop,AWidth,AHeight,flg); begin - global G_F_TWIN_PROC_; + gfw := class(tUIglobalData).uigetdata("G_F_TWIN_PROC_"); SWP_NOMOVE := 2; SWP_NOSIZE := 1; WM_WINDOWPOSCHANGED := 0x47; @@ -479,14 +479,14 @@ type tsgtkapi = class(tgtkapis) else d.cy := AHeight; D.flags := SWP_NOMOVE; - if G_F_TWIN_PROC_ then call(G_F_TWIN_PROC_,h,WM_WINDOWPOSCHANGED,0,d._getptr_); + if gfw then call(gfw,h,WM_WINDOWPOSCHANGED,0,d._getptr_); end if PosChanged then begin d.x := ALeft; d.y := ATop; d.flags := SWP_NOSIZE; - if G_F_TWIN_PROC_ then call(G_F_TWIN_PROC_,h,WM_WINDOWPOSCHANGED,0,d._getptr_); + if gfw then call(gfw,h,WM_WINDOWPOSCHANGED,0,d._getptr_); end if SizeChanged then //DzӦ÷ǰ begin @@ -498,9 +498,9 @@ type tsgtkapi = class(tgtkapis) end} if PosChanged then begin - if G_F_TWIN_PROC_ then + if gfw then begin - call(G_F_TWIN_PROC_,h,0x3,0,makeposition(ALeft,ATop)); + call(gfw,h,0x3,0,makeposition(ALeft,ATop)); end end @@ -1894,10 +1894,10 @@ type tsgtkapi = class(tgtkapis) obj := g_image_list_caches[sptr,"imglist"] ; if not obj then return ; class(TGdiplusflat).GdipCreateBitmapFromHBITMAP(hbmImage,r1,0); - global G_T_BITMAP_; - if G_T_BITMAP_ then + cbmp := class(tUIglobalData).uigetdata("G_T_BITMAP_"); + if cbmp then begin - bmp := createobject(G_T_BITMAP_); + bmp := createobject(cbmp); bmp.Handle := r1; obj.Push(bmp); end @@ -2007,11 +2007,11 @@ type tsgtkapi = class(tgtkapis) if not ifarray(g_image_list_caches) then return 0; obj := g_image_list_caches[inttostr(himl),"imglist"]; if not obj then return ; - global G_T_BITMAP_; - if not G_T_BITMAP_ then return 0; + cbmp := class(tUIglobalData).uigetdata("G_T_BITMAP_"); + if not cbmp then return 0; class(TGdiplusflat).GdipCreateBitmapFromHBITMAP(hbmImage,0,r1); - bmp := createobject(G_T_BITMAP_); + bmp := createobject(cbmp); bmp.Handle := r1; if id=-1 then obj.Push(bmp); else @@ -2445,9 +2445,9 @@ type tsgtkapi = class(tgtkapis) global g_gtk_caret_cache_timer; // if not g_gtk_caret_cache_timer then begin - global G_T_TTIMER_; - if not G_T_TTIMER_ then return 0; - g_gtk_caret_cache_timer := createobject(G_T_TTIMER_,nil); + ctm := class(tUIglobalData).uigetdata("G_T_TTIMER_"); + if not ctm then return 0; + g_gtk_caret_cache_timer := createobject(ctm,nil); g_gtk_caret_cache_timer.Interval := 680; g_gtk_caret_cache_timer.Ontimer := function(o,e)begin global g_current_get_focus_widget; @@ -4426,14 +4426,14 @@ type tenterouterlist = class end function create(api); begin - global G_T_TTIMER_; - if not G_T_TTIMER_ then return ; + ctm := class(tUIglobalData).uigetdata("G_T_TTIMER_"); + if not ctm then return ; _wapi := api; FCpos := array(0,0); _wapi.GetCursorPos(FCpos); FList := array(); FIndex := -1; - FTimer := createobject(G_T_TTIMER_,nil); + FTimer := createobject(ctm,nil); FTimer.interval := 30; //30 FTimer.Ontimer := thisfunction(MouseIsMoved); FTimer.start(); @@ -4536,10 +4536,10 @@ type tgtk_ctl_object = class(_gtkeventtype) return AddMessageToGtkMessageQueue(FHandle,msg,w,l,p); end else begin - global G_F_TWIN_PROC_; - if G_F_TWIN_PROC_ then + gfw := class(tUIglobalData).uigetdata("G_F_TWIN_PROC_"); + if gfw then begin - r := call(G_F_TWIN_PROC_,FHandle,msg,w,l); + r := call(gfw,FHandle,msg,w,l); end if msg = CM_CURSORCHANGED then begin @@ -5877,12 +5877,12 @@ type tgtk_ctl_scroll_window = class(tgtk_ctl_object) end; function CreateWnd(dwExStyle,lpClassName,lpWindowName,dwStyle,x,y,nwidth,nheight,hwndparent,hmenu,hinstance,lpParam);override; begin - global G_F_CONTROL_IS_CUSTOMPAINT; + fispaint := class(tUIglobalData).uigetdata("G_F_CONTROL_IS_CUSTOMPAINT"); //echo "\r\nctl:",tostn(params),tostn(__stack_frame),datetimetostr(now()); d := new tslcstructureobj(MemoryAlignmentCalculate( array(("lpcreateparams","intptr",0))),lpParam); - if G_F_CONTROL_IS_CUSTOMPAINT then + if fispaint then begin - isp := call(G_F_CONTROL_IS_CUSTOMPAINT,d._getvalue_("lpcreateparams")); + isp := call(fispaint,d._getvalue_("lpcreateparams")); end h := self.handle; {if (_const.WS_BORDER .& dwStyle)=_const.WS_BORDER then @@ -6697,8 +6697,8 @@ begin end } if d[4]=0x113 and d[0]=0 then //ʱ begin - global G_F_TIME_PROC_; - if G_F_TIME_PROC_ then call(G_F_TIME_PROC_,d[0],d[1],d[2],d[3]); + fgt := class(tUIglobalData).uigetdata("G_F_TIME_PROC_"); + if fgt then call(fgt,d[0],d[1],d[2],d[3]); end else if d[0] then begin diff --git a/funcext/tvclib/utslmemo.tsf b/funcext/tvclib/utslmemo.tsf index a33a860..7d4dd1e 100644 --- a/funcext/tvclib/utslmemo.tsf +++ b/funcext/tvclib/utslmemo.tsf @@ -454,7 +454,7 @@ type TCustomMemoCmd=class() static ecColumnSelect; static ecLineSelect; static ecMatchBracket; - static ecGotoMarker0; + {static ecGotoMarker0; static ecGotoMarker1; static ecGotoMarker2; static ecGotoMarker3; @@ -473,7 +473,7 @@ type TCustomMemoCmd=class() static ecSetMarker6; static ecSetMarker7; static ecSetMarker8; - static ecSetMarker9; + static ecSetMarker9;} static ecDeleteLastChar; static ecDeleteChar; static ecDeleteWord; @@ -571,7 +571,7 @@ type TCustomMemoCmd=class() ecColumnSelect := 232; // Column selection mode ecLineSelect := 233; // Line selection mode ecMatchBracket := 250; // Go to matching bracket - ecGotoMarker0 := 301; // Goto marker + {ecGotoMarker0 := 301; // Goto marker ecGotoMarker1 := 302; // Goto marker ecGotoMarker2 := 303; // Goto marker ecGotoMarker3 := 304; // Goto marker @@ -591,6 +591,7 @@ type TCustomMemoCmd=class() ecSetMarker7 := 358; // Set marker, Data := PPoint - X, Y Pos ecSetMarker8 := 359; // Set marker, Data := PPoint - X, Y Pos ecSetMarker9 := 360; // Set marker, Data := PPoint - X, Y Pos + } ecDeleteLastChar := 501; // Delete last char (i.e. backspace key) ecDeleteChar := 502; // Delete char at cursor (i.e. delete key) ecDeleteWord := 503; // Delete from cursor to end of word @@ -2360,6 +2361,7 @@ type TSynCompletion = class(TSynCompletionList) function SetJumpData(s); begin FJumpData := s; + FFilter :=""; end function Recycling();override; begin @@ -2713,6 +2715,7 @@ type TSynCompletion = class(TSynCompletionList) begin SetMemo(nil); inherited; + FCompData := array(); end function TryJump(s); //ת diff --git a/funcext/tvclib/utslvclauxiliary.tsf b/funcext/tvclib/utslvclauxiliary.tsf index 7b29db4..6245336 100644 --- a/funcext/tvclib/utslvclauxiliary.tsf +++ b/funcext/tvclib/utslvclauxiliary.tsf @@ -24,6 +24,9 @@ function pointinrect(p,rec); function intersectrect(rec1,rec2,irec); function bitcombination(s,v,f); +function IsTextUTF8(str); +function exportjsonformat(d,tbw,ct); + //**************************** /////////////////// function ParserCommandLine(s); //в @@ -34,6 +37,8 @@ function TslToHexFormatStr(tsl); function HexFormatStrToTsl(D); function DeleteAllFiles(path); function CreateDirWithFileName(fname); +function TS_GetUserProfileHome(); +function gettslexefullpath(); type tuiglobaldata=class static UIData; @@ -997,6 +1002,103 @@ type tnumindexarray = Class @param(Data)(array) %% **} end +//ifdef newgetop +type trefarray = class + function create(d,bidxs); //캯 + begin + if ifarray(d) or (d is class(trefarray)) then + begin + FData := d; + end else + begin + FData := array(); + end + if ifarray(bidxs) then + begin + FBindexs := bidxs; + end else + begin + FBindexs := array(); + end + end + function mgset(idxs,v); //±ֵ + begin + if not ifarray(idxs) then return nil; + if ifarray(FData) then + begin + return magicsetarray(FData,FBindexs union idxs,v); + end + return FData.mgset(FBindexs union idxs,v); + end + function mgget(idxs); //ݻֵ + begin + if not ifarray(idxs) then return nil; + if ifarray(FData) then + begin + return magicgetarray(FData,idxs); + end + return FData.mgget(FBindexs union idxs,v); + end + function operator[0](idx,v); //ȡֵ + begin + if v<0 then //һֱӷ + begin + return mgget(array(idx)); + end + return new trefgetter(self,idx);//༶ʱ򹹽һм + end + function operator[1](idx,v); //ֵ + begin + if ifnone(v) then //༶һм + begin + return new trefsetter(self,idx); + end + return mgset(array(idx),v); //һֱӷ + end + private //Ա + FData; + FBindexs; + private //м + type trefsgter = class() + function create(a,idx); + begin + FA := a; + FIndexs := array(idx); + FIndexsidx := 1; + end + protected + FA; + FIndexs; + FIndexsidx; + end + type trefgetter = class(trefsgter) //getter + function operator[0](idx,v); + begin + FIndexs[FIndexsidx++] := idx; + if v<0 then + begin + return fa.mgget(FIndexs); + end + return self; + end + function create(a,idx); + begin + inherited; + end + end + type trefsetter = class(trefsgter) //setter + function operator[1](idx,v); + begin + FIndexs[FIndexsidx++] := idx; + if ifnone(v) then return self; + return fa.mgset(FIndexs,v); + end + function create(a,idx); + begin + inherited; + end + end +end; type TGlobalValues=class private static FValues; @@ -2194,6 +2296,189 @@ begin ph += vi; end end +function TS_GetUserProfileHome():string;cdecl;external {$ifdef linux}"libTSSVRAPI.so"{$else}"TSSVRAPI.dll"{$endif} name "TS_GetUserProfileHome"; +function IsTextUTF8(str) +begin + {utf8 + ֽ: 0xxxxxxx + ֽ 110xxxxx 10xxxxxx + ֽ 1110xxxx 10xxxxxx 10xxxxxx + ֽ 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx + ֽ 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx + ֽ 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx + } + // 0 Ϊansi ,1 Ϊutf8 -1 ȷʲô + nBytes := 0; //UFT81-6ֽڱ,ASCIIһֽ + DY := 0; + chr := ""; + bAllAscii := TRUE; //ȫASCII, ˵UTF-8 + for i := 1 to length(str) do + begin + chr := ord(str[i]); + if((chr .& 0x80)<> 0)then + begin // жǷASCII,,˵пUTF-8,ASCII7λ,һֽڴ,λΪ0,o0xxxxxxx + bAllAscii := FALSE; + end + if(nBytes=0)then //ASCII,ӦǶֽڷ,ֽ + begin + if(chr >= 0x80)then + begin + if(chr >= 0xFC and chr <= 0xFD)then nBytes := 6; + else if(chr >= 0xF8)then nBytes := 5; + else if(chr >= 0xF0)then nBytes := 4; + else if(chr >= 0xE0)then nBytes := 3; + else if(chr >= 0xC0)then nBytes := 2; + else return 0; + DY := MAX(nBytes,DY); + nBytes--; + end + end else //ֽڷķֽ,ӦΪ 10xxxxxx + begin + if((chr .& 0xC0)<> 0x80)then return-1; + nBytes--; + end + end; + //Υ + if(nBytes>0)then + return -1; + //ȫASCII, ˵UTF-8 + if(bAllAscii)then + return 0; + //return 1; + return DY>2; +end + + +function exportjsonformat(d,tbw,ct); +begin + //d: + //tbw : ַ,tab + //ct ݹ, + case datatype(d)of + 0,20:return inttostr(d); + 1:return floattostr(d); + 2:return tostn(d); + 8,10,11,12:return "null"; + end; + if not(ct>0)then ct := 0; + if not ifstring(tbw)then tbw := " "; + tbstr := ""; + tbstra := ""; + for i := 0 to ct do + begin + tbstr += tbw; + if i>0 then tbstra += tbw + end + if ifarray(d)then + begin + if not d then return "[]"; + idx := 0; + for i,v in d do + begin + if idx <> i then + begin + fobj := true; + break; + end + idx++; + end + if fobj then + begin + r := "{"; + for i,v in d do + begin + if ifstring(i)then ii := tostn(i); + else ii := tostn(tostn(i)); + r += "\r\n"+tbstr+ii+":"; + if ifarray(v)and v then + begin + r += "\r\n"+tbstr; + end + r += exportjsonformat(v,tbw,ct+1)+","; + end + lr := length(r); + r[lr:]:= "\r\n"+tbstra+"}"; + end else + begin + r := "["; + for i,v in d do + begin + r += "\r\n"+(tbstr)+exportjsonformat(v,tbw,ct+1)+","; + end + lr := length(r); + r[lr:]:= "\r\n"+tbstra+"]"; + end + return r; + end else + if ifobj(d)then + begin + try + //return "{}"; + //˴ԱϢ + tslobjtoarray(d,dinfo); + for i,v in mrows(dinfo,1) do + begin + nv := invoke(d,v); + if ifobj(nv)then nv := nil; //ѭ + dinfo[v]:= nv; + end + return exportjsonformat(dinfo,tbw,ct); + except + return "{}"; + end + end else + return "null"; +end +function tslobjtoarray(o,r); +begin + d := o.classinfo(); + if not ifarray(r)then r := array(); + for i,v in d["inherited"] do + begin + tslobjtoarray(findclass(v,o),r); + end + for i,v in d["members"] do + begin + n := v["name"]; + if v["access"]in array(0,1)then + begin + r[n]:= 0; + end else + begin + reindex(r,array(n:nil)); + end + end + for i,v in d["properties"] do + begin + n := v["name"]; + if v["read"]and(v["access"]in array(0,1))then + begin + r[n]:= 0; + end else + begin + reindex(r,array(n:nil)); + end + end +end +function gettslexefullpath(); +begin + plg := pluginpath(); + sp := ioFileseparator(); + for i:= length(plg)-1 downto 1 do + begin + if plg[i]=sp then + begin + if sp="/" then + begin + return plg[1:i]+"TSL"; + end else + begin + return plg[1:i]+"tsl.exe"; + end + end + end + return ""; +end initialization diff --git a/funcext/tvclib/utslvclbase.tsf b/funcext/tvclib/utslvclbase.tsf index df09f08..52cecad 100644 --- a/funcext/tvclib/utslvclbase.tsf +++ b/funcext/tvclib/utslvclbase.tsf @@ -6,7 +6,7 @@ interface {$else} {$define gdipaint} {$endif} -uses utslvclconstant,utslvclmemstruct,utslvclauxiliary,UVCPropertyTypesPersistence; +uses utslvclconstant,utslvclmemstruct,utslvclauxiliary; type tswin32api = class({$ifdef linuxgtk}tsgtkapi {$else} twindowsapi {$endif} ) //windowsӿ {$ifdef linuxgtk} uses ugtkinterface; @@ -303,14 +303,6 @@ type TSLUIBASE=class(TSLUICONST) //ͼ if not(ifstring(_temppath)and _temppath)then _temppath := gettemppath()+"tinysoft"; return _temppath; end - class function RegPropertyType(v); //ע༭ - begin - RegComponentPropertyType(v); - end - class function GetPropertyType(n); //༭ - begin - return GetComponentPropertyType(n); - end property happ read Gethapp write SetHapp; property ReCycleState read FReCycleState; //write FReCycleState; _Tag; //ǩ diff --git a/funcext/tvclib/utslvclgdi.tsf b/funcext/tvclib/utslvclgdi.tsf index c75f14d..f3517fc 100644 --- a/funcext/tvclib/utslvclgdi.tsf +++ b/funcext/tvclib/utslvclgdi.tsf @@ -2981,10 +2981,8 @@ end initialization sinitgidplus(); class(tcustomimage).sinit(); -global G_T_BITMAP_; -global G_T_ICON_; -G_T_BITMAP_ := class(TcustomBitmap); -G_T_ICON_ := class(TcustomIcon); +class(tUIglobalData).uisetdata("G_T_BITMAP_",class(TcustomBitmap)); +class(tUIglobalData).uisetdata("G_T_ICON_",class(TcustomIcon)); finalization end. \ No newline at end of file diff --git a/funcext/tvclib/utslvclstdctl.tsf b/funcext/tvclib/utslvclstdctl.tsf index 4d2b821..63fd3c1 100644 --- a/funcext/tvclib/utslvclstdctl.tsf +++ b/funcext/tvclib/utslvclstdctl.tsf @@ -331,204 +331,6 @@ type TCustomTimer = class(tcomponent)// @param(Enabled)(bool) ǷѾ %% **} end -type TCustomTimer = class(tcomponent)//ʱ - {** - @explan(˵)ʱ,ԺΪСλ %% - **} - {** - @example(--ʱ) - //,һΪ(),ڶΪָ - tm := new TCustomTimer(1000,function(o,e)begin echo now(); end ); - tm.start();//ʱ - tm.stop();//ֹͣ - **} - private - static _STIMERS; //TIMER - static FSIDC; //id - class function Sgettimer(id); - begin - {** - @explan(˵) ͨidöʱ %% - @param(id)(integer) ʱid %% - **} - return _STIMERS[id]; - end - class function Ssettimer(tm); - begin - {** - @explan(˵)洢ʱ %% - @param(tm)(TCustomTimer) ʱ%% - **} - _STIMERS[tm.id]:= tm; - end - class function Sdeltimer(tid); - begin - {** - @explan(˵) ɾʱ %% - @param(tid)(integer) id%% - **} - if tid and(ifnumber(tid))then reindex(_STIMERS,array(tid:nil)); - end - protected FOntimeout; - private - FOntimer; - Fid; - FInterval; - FStart; - _kill0; // - function SetEnabled(f); - begin - if f then start(); - else stop(); - end - function SetInterval(intv); //ü - begin - {** - @explan(˵)ü %% - @param(intv)(integer) , %% - **} - if not(ifnumber(intv))then return FInterval; - if FStart then - begin - ndstart := 1; - stop(); - end - if intv <> FInterval and ifnumber(intv)and intv>0 then //ʱ䲻 - begin - FInterval := intv; - end - if ndstart then start(); - end - public - {** - @param(FSIDC)(tidcreater) id%% - @param(_STIMERS)(array) ȫִ洢%% - @param(FOntimer)(fpointer) timeoutִж%% - @param(_kill0)(bool) %% - **} - function create(AOwner);override; - begin - inherited; - FID := FSIDC.createid(); - FStart := false; - FInterval := 1000; - end - function timeout(cmd,t); //һ¼ - begin - {** - @explan(˵) һ¼ %% - @param(cmd)(fpointer) ִлص %% - @param(t)(integer) tִ %% - **} - FOntimeout := cmd; - if ifnumber(t)then SetInterval(t); - FOntimer := function(o,e) - begin - try - stop(); - CallMessgeFunction(FOntimeout,o,e); - finally - FOntimeout := nil; - end; - end; - start(); - end - function start(); //ʼ - begin - {** - @explan(˵) %% - **} - if not((datatype(FOntimer) = 7 )and FInterval)>0 then return-1; - if FStart then return FStart; - ret := _wapi.SetTimer(nil,Fid,FInterval,getwinprocptr(2)); - _kill0 := ret; - Ssettimer(self(true)); - FStart := ret <> 0; - return FStart; - end - function stop(); //ֹͣ - begin - {** - @explan(˵)ֹͣ %% - **} - if FStart then - begin - if _kill0 then - begin - FStart := not((_wapi.KillTimer(nil,_kill0))<> 0); - if FStart=false then _kill0 := 0; - end - Sdeltimer(FID); - end - return not FStart; - end - function Recycling();override; - begin - {** - @explan(˵)Ԥ %% - **} - stop(); - FSIDC.deleteid(FID); - FOntimer := nil; - FOntimeout := nil; - FTimerStrc := nil; - inherited; - end - function destroy();override; - begin - inherited; - end - class function _timeproc_(hwnd,message,wparam,lparam); - begin - {** - @explan(˵) ʱصӿ %% - @param(hwnd)(integer) ھ %% - @param(message)(integer) Ϣid %% - @param(lparam)(integer) Ϣ2 %% - @param(wparam)(integer) Ϣ1 %% - **} - e := new tuieventbase(message,wparam,lparam,hwnd); - for i,iv in mrows(_STIMERS,1) do - begin - v := _STIMERS[iv]; - if v is class(TCustomTimer)then if v.tproc(e)then return; - end - //return _twinproc_(hwnd,message,wparam,lparam); - end - class function Sinit();override; - begin - {** - @explan(˵)ʼʱȫ %% - **} - if not FSIDC then - begin - _STIMERS := array(); - FSIDC := new tidcreater(); - end - inherited; - end - function tproc(e);virtual; - begin - if e.wparam and(e.wparam=_kill0)then - begin - CallMessgeFunction(FOntimer,self(true),e); - return 1; - end - end - property Interval:integer read FInterval write SetInterval; - property Ontimer:eventhandler read FOntimer write FOntimer; - property Enabled:bool read FStart Write SetEnabled; - property id read FID; - function publishs();override; - begin - return array("name","interval","ontimer"); - end - {** - @param(Interval)(integer) м %% - @param(Ontimer)(funtion[self,tuieventbase]) ʱ %% - @param(Enabled)(bool) ǷѾ %% - **} -end type teditable=class(TSLUIBASE) private FInsertState; @@ -2579,8 +2381,9 @@ type TCustomListBoxbase=class(TCustomScrollControl) if e.Button()=mbLeft then begin CallMessgeFunction(onclick,o,e); + e.skip := true; end - e.skip := true; + end function MouseDown(o,e);override; begin @@ -3976,13 +3779,9 @@ type TcustomToolBar=class(TCustomControl) FBtnRects := array(); FTipWnd := new TTipWnd(self); FTipWnd.Parent := self; - global G_T_TTIMER_; - if G_T_TTIMER_ then - begin - FTimer := createobject(G_T_TTIMER_,self); - FTimer.Interval := 200; - FTimer.Ontimer := thisfunction(DoTimerShowTip); - end + FTimer := new TCustomTimer(self); + FTimer.Interval := 200; + FTimer.Ontimer := thisfunction(DoTimerShowTip); end function MouseDown(o,e);override; begin @@ -4851,6 +4650,8 @@ type TTipWnd=class(TCustomControl) //tip FSize; end initialization -global G_T_TTIMER_; -G_T_TTIMER_ := class(TCustomTimer); +{$ifdef linux} +class(tUIglobalData).uisetdata("G_T_TTIMER_",class(TCustomTimer)); +{$endif} + end. \ No newline at end of file diff --git a/funcext/tvclib/uvcpropertytypespersistence.tsf b/funcext/tvclib/uvcpropertytypespersistence.tsf index cfef84a..5d09f79 100644 --- a/funcext/tvclib/uvcpropertytypespersistence.tsf +++ b/funcext/tvclib/uvcpropertytypespersistence.tsf @@ -1,6 +1,6 @@ Unit UVCPropertyTypesPersistence; interface -uses utslvclauxiliary; +uses utslvclauxiliary;//,utslvclgdi; {** @explan(˵) ӿؼԴ %% **} @@ -926,7 +926,7 @@ type TPropertyType=class function FormatTMF(d);virtual; begin {** - @explan(˵)޸ıתΪtfmļ %% + @explan(˵)޸ıתΪtmfļ %% **} return d; end @@ -1182,7 +1182,7 @@ type TPropertyaction=class(TPropertyVarible) //action begin return "taction"; end - function IfComponent();virtual; + function IfComponent();override; begin {** @explan(˵) ǷΪؼ%% @@ -1190,19 +1190,19 @@ type TPropertyaction=class(TPropertyVarible) //action return true; end end -type TPropertyTray=class(TPropertyaction) //action +type TPropertyTray=class(TPropertyaction) // Function EditType();override; begin return "ttray"; end end -type TPropertyPopupMenu=class(TPropertyaction) //action +type TPropertyPopupMenu=class(TPropertyaction) //Ҽ˵ Function EditType();override; begin return "tpopupmenu"; end end -type TPropertyMainMenu=class(TPropertyaction) //action +type TPropertyMainMenu=class(TPropertyaction) //˵ Function EditType();override; begin return "tmainmenu"; @@ -1216,21 +1216,21 @@ type TPropertyMainMenu=class(TPropertyaction) //action return false; end end -type TPropertyImagelist=class(TPropertyaction) //action +type TPropertyImagelist=class(TPropertyaction) //imagelist Function EditType();override; begin return "tcontrolimagelist"; end end -type TPropertyImagesData=class(TPropertyType) +type TPropertyImagesData=class(TPropertyType) //imagedata,Ϊimagelist Function EditType();override; begin return "imagesdata"; end function TmfToNode(d);override; begin - global G_T_BITMAP_; - if not G_T_BITMAP_ then return ; + cbmp := class(tUIglobalData).uigetdata("G_T_BITMAP_"); + if not cbmp then return ; if ifstring(d)then begin r := HexFormatStrToTsl(d); @@ -1239,7 +1239,7 @@ type TPropertyImagesData=class(TPropertyType) ret := array(); for i,v in r["items"] do begin - bmp := createobject(G_T_BITMAP_); + bmp := createobject(cbmp); bmp.Readvcon(v); ret[i]:= bmp; end @@ -1276,8 +1276,8 @@ type TPropertyImagesData=class(TPropertyType) end function ReadTMF(d,o);override; begin - global G_T_BITMAP_; - if not G_T_BITMAP_ then return ; + cbmp := class(tUIglobalData).uigetdata("G_T_BITMAP_"); + if not cbmp then return ; if ifstring(d)then begin r := HexFormatStrToTsl(d); @@ -1286,7 +1286,7 @@ type TPropertyImagesData=class(TPropertyType) ret := array("type":"bmps"); for i,v in r["items"] do begin - bmp := createobject(G_T_BITMAP_); + bmp := createobject(cbmp); bmp.Readvcon(v); ret["items"][i]:= bmp; end @@ -1302,12 +1302,12 @@ type TPropertyBitmap=class(TPropertyType) end function TmfToNode(d);override; begin - global G_T_BITMAP_; - if not G_T_BITMAP_ then return ; + cbmp := class(tUIglobalData).uigetdata("G_T_BITMAP_"); + if not cbmp then return ; if ifstring(d)and d then begin tar := HexFormatStrToTsl(d); - bmp := createobject(G_T_BITMAP_); + bmp := createobject(cbmp); bmp.Readvcon(tar); return bmp; end @@ -1319,11 +1319,9 @@ type TPropertyBitmap=class(TPropertyType) @explan(˵)޸ıתΪtmfļ %% **} reti := ""; - global G_T_BITMAP_; - - if d is G_T_BITMAP_ then + cbmp := class(tUIglobalData).uigetdata("G_T_BITMAP_"); + if d is cbmp then begin - echo " \r\nglob bitmap==="; reti := TSlToHexFormatStr(d.tovcon); end ret := "{ "; @@ -1343,14 +1341,14 @@ type TPropertyIcon=class(TPropertyType) end function TmfToNode(d);override; begin - global G_T_ICON_; - if not G_T_ICON_ then return ; + cico := class(tUIglobalData).uigetdata("G_T_ICON_"); + if not cico then return ; if ifstring(d)and d then begin dd := HexFormatStrToTsl(d); if ifarray(dd)then begin - r := createobject(G_T_ICON_); + r := createobject(cico); r.Readvcon(dd); return r; end @@ -1362,8 +1360,8 @@ type TPropertyIcon=class(TPropertyType) @explan(˵)޸ıתΪtmfļ %% **} reti := ""; - global G_T_ICON_; - if G_T_ICON_ and (d is G_T_ICON_) then + cico := class(tUIglobalData).uigetdata("G_T_ICON_"); + if cico and (d is cico) then begin reti := TSlToHexFormatStr(d.tovcon()); end @@ -1563,7 +1561,7 @@ type TPropertyAnchors=class(UniObjectMember) function create(); begin akTop := 0; - akTop := 1; + akLeft := 1; akRight := 2; akBottom := 3; end @@ -1995,6 +1993,25 @@ begin end return r; end +function RegComponentPropertyType(v); +begin + //return ; + global g_ComponentPropertyType_a; + if not ifarray(g_ComponentPropertyType_a)then g_ComponentPropertyType_a := array(); + if v is class(TPropertyType) then + begin + n := v.EditType(); + if n and ifstring(n)then + begin + g_ComponentPropertyType_a[n]:= v; //createobject(v,0); + end + end +end +function GetComponentPropertyType(n); +begin + global g_ComponentPropertyType_a; + if ifstring(n)and ifarray(g_ComponentPropertyType_a)then return g_ComponentPropertyType_a[n]; +end function Sinitlib(); begin types := array( //"tpropertytype", @@ -2049,28 +2066,7 @@ begin end //עԱ༭ end -function RegComponentPropertyType(v); -begin - //return ; - global g_ComponentPropertyType_a; - if not ifarray(g_ComponentPropertyType_a)then g_ComponentPropertyType_a := array(); - if ifobj(v)then - begin - try - n := v.EditType(); - if n and ifstring(n)then - begin - g_ComponentPropertyType_a[n]:= v; //createobject(v,0); - end - except - end; - end -end -function GetComponentPropertyType(n); -begin - global g_ComponentPropertyType_a; - if ifstring(n)and ifarray(g_ComponentPropertyType_a)then return g_ComponentPropertyType_a[n]; -end + function InitLib(); begin static Sinitlib();