1
0
mirror of https://github.com/moparisthebest/Simba synced 2024-11-21 08:45:06 -05:00

CrLf stuff

This commit is contained in:
unknown 2010-03-20 12:41:32 +01:00
parent 41d277fb06
commit 1f97fd627a
18 changed files with 8058 additions and 8058 deletions

View File

@ -1,9 +1,9 @@
pause,stop: From Lazarus (http://lazarus.freepascal.org) pause,stop: From Lazarus (http://lazarus.freepascal.org)
exit,cut,page_new,new,open,paste,redo,run,save,undo,help,bug,arrow_refresh,html: Mark James http://www.famfamfam.com/lab/icons/silk/ exit,cut,page_new,new,open,paste,redo,run,save,undo,help,bug,arrow_refresh,html: Mark James http://www.famfamfam.com/lab/icons/silk/
closetab,closetabs,addtab,eraser,terminate,terminal: Yusuke Kamiyamane http://www.pinvoke.com/ closetab,closetabs,addtab,eraser,terminate,terminal: Yusuke Kamiyamane http://www.pinvoke.com/
pickcolor: From the Crystal Clear Project (http://www.everaldo.com/crystal/) licensed under LGPL pickcolor: From the Crystal Clear Project (http://www.everaldo.com/crystal/) licensed under LGPL
crosshair: http://led24.de/iconset/ or http://led24.de/ would be appreciated. Follow us on twitter http://twitter.com/gasyoun or email leds24@gmail.com 512 icons 20/05/2009 crosshair: http://led24.de/iconset/ or http://led24.de/ would be appreciated. Follow us on twitter http://twitter.com/gasyoun or email leds24@gmail.com 512 icons 20/05/2009
Delete: http://www.oxygen-icons.org/ licensed under GPL Delete: http://www.oxygen-icons.org/ licensed under GPL
close:http://titancreations.org/ close:http://titancreations.org/
search: http://wefunction.com/2008/07/function-free-icon-set search: http://wefunction.com/2008/07/function-free-icon-set

View File

@ -1,7 +1,7 @@
const const
TestStr = 'Hai, seems like you got includes working!'; TestStr = 'Hai, seems like you got includes working!';
function Multiply(a,b : integer) : integer; function Multiply(a,b : integer) : integer;
begin; begin;
result := a*b; result := a*b;
end; end;

File diff suppressed because it is too large Load Diff

View File

@ -1,17 +1,17 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity version="1.0.0.0" processorArchitecture="*" name="CompanyName.ProductName.YourApp" type="win32"/> <assemblyIdentity version="1.0.0.0" processorArchitecture="*" name="CompanyName.ProductName.YourApp" type="win32"/>
<description>Your application description here.</description> <description>Your application description here.</description>
<dependency> <dependency>
<dependentAssembly> <dependentAssembly>
<assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="*" publicKeyToken="6595b64144ccf1df" language="*"/> <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="*" publicKeyToken="6595b64144ccf1df" language="*"/>
</dependentAssembly> </dependentAssembly>
</dependency> </dependency>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3"> <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
<security> <security>
<requestedPrivileges> <requestedPrivileges>
<requestedExecutionLevel level="asInvoker" uiAccess="false"/> <requestedExecutionLevel level="asInvoker" uiAccess="false"/>
</requestedPrivileges> </requestedPrivileges>
</security> </security>
</trustInfo> </trustInfo>
</assembly> </assembly>

View File

@ -1,7 +1,7 @@
#define RT_MANIFEST 24 #define RT_MANIFEST 24
#define CREATEPROCESS_MANIFEST_RESOURCE_ID 1 #define CREATEPROCESS_MANIFEST_RESOURCE_ID 1
#define ISOLATIONAWARE_MANIFEST_RESOURCE_ID 2 #define ISOLATIONAWARE_MANIFEST_RESOURCE_ID 2
#define ISOLATIONAWARE_NOSTATICIMPORT_MANIFEST_RESOURCE_ID 3 #define ISOLATIONAWARE_NOSTATICIMPORT_MANIFEST_RESOURCE_ID 3
CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST "project1.manifest" CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST "project1.manifest"
MAINICON ICON "project1.ico" MAINICON ICON "project1.ico"

View File

@ -1,394 +1,394 @@
<?xml version="1.0"?> <?xml version="1.0"?>
<CONFIG> <CONFIG>
<ProjectOptions> <ProjectOptions>
<Version Value="7"/> <Version Value="7"/>
<General> <General>
<MainUnit Value="0"/> <MainUnit Value="0"/>
<TargetFileExt Value=""/> <TargetFileExt Value=""/>
<UseXPManifest Value="True"/> <UseXPManifest Value="True"/>
<Icon Value="0"/> <Icon Value="0"/>
<ActiveEditorIndexAtStart Value="0"/> <ActiveEditorIndexAtStart Value="0"/>
</General> </General>
<VersionInfo> <VersionInfo>
<ProjectVersion Value=""/> <ProjectVersion Value=""/>
<Language Value=""/> <Language Value=""/>
<CharSet Value=""/> <CharSet Value=""/>
</VersionInfo> </VersionInfo>
<PublishOptions> <PublishOptions>
<Version Value="2"/> <Version Value="2"/>
<IgnoreBinaries Value="False"/> <IgnoreBinaries Value="False"/>
<IncludeFileFilter Value="*.(pas|pp|inc|lfm|lpr|lrs|lpi|lpk|sh|xml)"/> <IncludeFileFilter Value="*.(pas|pp|inc|lfm|lpr|lrs|lpi|lpk|sh|xml)"/>
<ExcludeFileFilter Value="*.(bak|ppu|ppw|o|so);*~;backup"/> <ExcludeFileFilter Value="*.(bak|ppu|ppw|o|so);*~;backup"/>
</PublishOptions> </PublishOptions>
<RunParams> <RunParams>
<local> <local>
<FormatVersion Value="1"/> <FormatVersion Value="1"/>
<LaunchingApplication PathPlusParams="/usr/X11R6/bin/xterm -T 'Lazarus Run Output' -e $(LazarusDir)/tools/runwait.sh $(TargetCmdLine)"/> <LaunchingApplication PathPlusParams="/usr/X11R6/bin/xterm -T 'Lazarus Run Output' -e $(LazarusDir)/tools/runwait.sh $(TargetCmdLine)"/>
</local> </local>
</RunParams> </RunParams>
<RequiredPackages Count="1"> <RequiredPackages Count="1">
<Item1> <Item1>
<PackageName Value="LCL"/> <PackageName Value="LCL"/>
</Item1> </Item1>
</RequiredPackages> </RequiredPackages>
<Units Count="23"> <Units Count="23">
<Unit0> <Unit0>
<Filename Value="project1.lpr"/> <Filename Value="project1.lpr"/>
<IsPartOfProject Value="True"/> <IsPartOfProject Value="True"/>
<UnitName Value="project1"/> <UnitName Value="project1"/>
<UsageCount Value="69"/> <UsageCount Value="69"/>
</Unit0> </Unit0>
<Unit1> <Unit1>
<Filename Value="unit1.pas"/> <Filename Value="unit1.pas"/>
<IsPartOfProject Value="True"/> <IsPartOfProject Value="True"/>
<ComponentName Value="Form1"/> <ComponentName Value="Form1"/>
<ResourceBaseClass Value="Form"/> <ResourceBaseClass Value="Form"/>
<UnitName Value="Unit1"/> <UnitName Value="Unit1"/>
<CursorPos X="25" Y="165"/> <CursorPos X="25" Y="165"/>
<TopLine Value="146"/> <TopLine Value="146"/>
<EditorIndex Value="0"/> <EditorIndex Value="0"/>
<UsageCount Value="69"/> <UsageCount Value="69"/>
<Loaded Value="True"/> <Loaded Value="True"/>
</Unit1> </Unit1>
<Unit2> <Unit2>
<Filename Value="../SAMufasaGUI/colourhistory.pas"/> <Filename Value="../SAMufasaGUI/colourhistory.pas"/>
<ComponentName Value="ColourHistoryForm"/> <ComponentName Value="ColourHistoryForm"/>
<HasResources Value="True"/> <HasResources Value="True"/>
<ResourceBaseClass Value="Form"/> <ResourceBaseClass Value="Form"/>
<UnitName Value="colourhistory"/> <UnitName Value="colourhistory"/>
<CursorPos X="10" Y="457"/> <CursorPos X="10" Y="457"/>
<TopLine Value="437"/> <TopLine Value="437"/>
<UsageCount Value="11"/> <UsageCount Value="11"/>
</Unit2> </Unit2>
<Unit3> <Unit3>
<Filename Value="../SAMufasaGUI/testunit.pas"/> <Filename Value="../SAMufasaGUI/testunit.pas"/>
<ComponentName Value="Form1"/> <ComponentName Value="Form1"/>
<HasResources Value="True"/> <HasResources Value="True"/>
<ResourceBaseClass Value="Form"/> <ResourceBaseClass Value="Form"/>
<UnitName Value="TestUnit"/> <UnitName Value="TestUnit"/>
<CursorPos X="38" Y="405"/> <CursorPos X="38" Y="405"/>
<TopLine Value="382"/> <TopLine Value="382"/>
<UsageCount Value="8"/> <UsageCount Value="8"/>
</Unit3> </Unit3>
<Unit4> <Unit4>
<Filename Value="../../Units/MMLCore/client.pas"/> <Filename Value="../../Units/MMLCore/client.pas"/>
<UnitName Value="Client"/> <UnitName Value="Client"/>
<CursorPos X="27" Y="48"/> <CursorPos X="27" Y="48"/>
<TopLine Value="30"/> <TopLine Value="30"/>
<EditorIndex Value="7"/> <EditorIndex Value="7"/>
<UsageCount Value="35"/> <UsageCount Value="35"/>
<Loaded Value="True"/> <Loaded Value="True"/>
</Unit4> </Unit4>
<Unit5> <Unit5>
<Filename Value="../../Units/MMLCore/ocr.pas"/> <Filename Value="../../Units/MMLCore/ocr.pas"/>
<UnitName Value="ocr"/> <UnitName Value="ocr"/>
<CursorPos X="73" Y="16"/> <CursorPos X="73" Y="16"/>
<TopLine Value="1"/> <TopLine Value="1"/>
<EditorIndex Value="9"/> <EditorIndex Value="9"/>
<UsageCount Value="35"/> <UsageCount Value="35"/>
<Loaded Value="True"/> <Loaded Value="True"/>
</Unit5> </Unit5>
<Unit6> <Unit6>
<Filename Value="../../Units/MMLCore/bitmaps.pas"/> <Filename Value="../../Units/MMLCore/bitmaps.pas"/>
<UnitName Value="bitmaps"/> <UnitName Value="bitmaps"/>
<CursorPos X="18" Y="81"/> <CursorPos X="18" Y="81"/>
<TopLine Value="47"/> <TopLine Value="47"/>
<EditorIndex Value="14"/> <EditorIndex Value="14"/>
<UsageCount Value="34"/> <UsageCount Value="34"/>
<Loaded Value="True"/> <Loaded Value="True"/>
</Unit6> </Unit6>
<Unit7> <Unit7>
<Filename Value="../../Units/MMLCore/ocrutil.pas"/> <Filename Value="../../Units/MMLCore/ocrutil.pas"/>
<UnitName Value="ocrutil"/> <UnitName Value="ocrutil"/>
<CursorPos X="39" Y="208"/> <CursorPos X="39" Y="208"/>
<TopLine Value="1"/> <TopLine Value="1"/>
<EditorIndex Value="6"/> <EditorIndex Value="6"/>
<UsageCount Value="34"/> <UsageCount Value="34"/>
<Loaded Value="True"/> <Loaded Value="True"/>
</Unit7> </Unit7>
<Unit8> <Unit8>
<Filename Value="../../../Documents/lazarus/lcl/interfaces/gtk/gtkwidgetset.inc"/> <Filename Value="../../../Documents/lazarus/lcl/interfaces/gtk/gtkwidgetset.inc"/>
<CursorPos X="41" Y="1226"/> <CursorPos X="41" Y="1226"/>
<TopLine Value="1205"/> <TopLine Value="1205"/>
<UsageCount Value="8"/> <UsageCount Value="8"/>
</Unit8> </Unit8>
<Unit9> <Unit9>
<Filename Value="../../Units/MMLAddon/tpa.pas"/> <Filename Value="../../Units/MMLAddon/tpa.pas"/>
<UnitName Value="tpa"/> <UnitName Value="tpa"/>
<CursorPos X="5" Y="557"/> <CursorPos X="5" Y="557"/>
<TopLine Value="535"/> <TopLine Value="535"/>
<UsageCount Value="31"/> <UsageCount Value="31"/>
</Unit9> </Unit9>
<Unit10> <Unit10>
<Filename Value="../../Units/MMLCore/mufasatypesutil.pas"/> <Filename Value="../../Units/MMLCore/mufasatypesutil.pas"/>
<UnitName Value="mufasatypesutil"/> <UnitName Value="mufasatypesutil"/>
<CursorPos X="25" Y="8"/> <CursorPos X="25" Y="8"/>
<TopLine Value="1"/> <TopLine Value="1"/>
<EditorIndex Value="12"/> <EditorIndex Value="12"/>
<UsageCount Value="31"/> <UsageCount Value="31"/>
<Loaded Value="True"/> <Loaded Value="True"/>
</Unit10> </Unit10>
<Unit11> <Unit11>
<Filename Value="../../Units/MMLCore/finder.pas"/> <Filename Value="../../Units/MMLCore/finder.pas"/>
<UnitName Value="finder"/> <UnitName Value="finder"/>
<CursorPos X="78" Y="455"/> <CursorPos X="78" Y="455"/>
<TopLine Value="432"/> <TopLine Value="432"/>
<EditorIndex Value="8"/> <EditorIndex Value="8"/>
<UsageCount Value="28"/> <UsageCount Value="28"/>
<Loaded Value="True"/> <Loaded Value="True"/>
</Unit11> </Unit11>
<Unit12> <Unit12>
<Filename Value="../../../Documents/fpc/rtl/inc/objpash.inc"/> <Filename Value="../../../Documents/fpc/rtl/inc/objpash.inc"/>
<CursorPos X="48" Y="193"/> <CursorPos X="48" Y="193"/>
<TopLine Value="1"/> <TopLine Value="1"/>
<UsageCount Value="8"/> <UsageCount Value="8"/>
</Unit12> </Unit12>
<Unit13> <Unit13>
<Filename Value="../../../Documents/fpc/rtl/objpas/sysutils/finah.inc"/> <Filename Value="../../../Documents/fpc/rtl/objpas/sysutils/finah.inc"/>
<CursorPos X="17" Y="40"/> <CursorPos X="17" Y="40"/>
<TopLine Value="4"/> <TopLine Value="4"/>
<UsageCount Value="9"/> <UsageCount Value="9"/>
</Unit13> </Unit13>
<Unit14> <Unit14>
<Filename Value="../../Units/MMLCore/files.pas"/> <Filename Value="../../Units/MMLCore/files.pas"/>
<UnitName Value="files"/> <UnitName Value="files"/>
<CursorPos X="7" Y="103"/> <CursorPos X="7" Y="103"/>
<TopLine Value="34"/> <TopLine Value="34"/>
<EditorIndex Value="11"/> <EditorIndex Value="11"/>
<UsageCount Value="25"/> <UsageCount Value="25"/>
<Loaded Value="True"/> <Loaded Value="True"/>
</Unit14> </Unit14>
<Unit15> <Unit15>
<Filename Value="../../Units/MMLAddon/colourpicker.pas"/> <Filename Value="../../Units/MMLAddon/colourpicker.pas"/>
<UnitName Value="colourpicker"/> <UnitName Value="colourpicker"/>
<CursorPos X="48" Y="238"/> <CursorPos X="48" Y="238"/>
<TopLine Value="226"/> <TopLine Value="226"/>
<EditorIndex Value="1"/> <EditorIndex Value="1"/>
<UsageCount Value="11"/> <UsageCount Value="11"/>
<Loaded Value="True"/> <Loaded Value="True"/>
</Unit15> </Unit15>
<Unit16> <Unit16>
<Filename Value="../../Units/MMLAddon/windowselector.pas"/> <Filename Value="../../Units/MMLAddon/windowselector.pas"/>
<UnitName Value="windowselector"/> <UnitName Value="windowselector"/>
<CursorPos X="1" Y="33"/> <CursorPos X="1" Y="33"/>
<TopLine Value="12"/> <TopLine Value="12"/>
<EditorIndex Value="13"/> <EditorIndex Value="13"/>
<UsageCount Value="17"/> <UsageCount Value="17"/>
<Loaded Value="True"/> <Loaded Value="True"/>
</Unit16> </Unit16>
<Unit17> <Unit17>
<Filename Value="../../Units/MMLCore/window.pas"/> <Filename Value="../../Units/MMLCore/window.pas"/>
<UnitName Value="Window"/> <UnitName Value="Window"/>
<CursorPos X="94" Y="338"/> <CursorPos X="94" Y="338"/>
<TopLine Value="323"/> <TopLine Value="323"/>
<UsageCount Value="15"/> <UsageCount Value="15"/>
</Unit17> </Unit17>
<Unit18> <Unit18>
<Filename Value="../../Units/MMLCore/mufasatypes.pas"/> <Filename Value="../../Units/MMLCore/mufasatypes.pas"/>
<UnitName Value="MufasaTypes"/> <UnitName Value="MufasaTypes"/>
<CursorPos X="1" Y="1"/> <CursorPos X="1" Y="1"/>
<TopLine Value="277"/> <TopLine Value="277"/>
<EditorIndex Value="5"/> <EditorIndex Value="5"/>
<UsageCount Value="15"/> <UsageCount Value="15"/>
<Loaded Value="True"/> <Loaded Value="True"/>
</Unit18> </Unit18>
<Unit19> <Unit19>
<Filename Value="../../Units/MMLCore/fontloader.pas"/> <Filename Value="../../Units/MMLCore/fontloader.pas"/>
<IsPartOfProject Value="True"/> <IsPartOfProject Value="True"/>
<UnitName Value="fontloader"/> <UnitName Value="fontloader"/>
<CursorPos X="42" Y="106"/> <CursorPos X="42" Y="106"/>
<TopLine Value="89"/> <TopLine Value="89"/>
<EditorIndex Value="10"/> <EditorIndex Value="10"/>
<UsageCount Value="24"/> <UsageCount Value="24"/>
<Loaded Value="True"/> <Loaded Value="True"/>
</Unit19> </Unit19>
<Unit20> <Unit20>
<Filename Value="../../Units/MMLCore/os_linux.pas"/> <Filename Value="../../Units/MMLCore/os_linux.pas"/>
<UnitName Value="os_linux"/> <UnitName Value="os_linux"/>
<CursorPos X="48" Y="61"/> <CursorPos X="48" Y="61"/>
<TopLine Value="37"/> <TopLine Value="37"/>
<EditorIndex Value="2"/> <EditorIndex Value="2"/>
<UsageCount Value="11"/> <UsageCount Value="11"/>
<Loaded Value="True"/> <Loaded Value="True"/>
</Unit20> </Unit20>
<Unit21> <Unit21>
<Filename Value="../../Units/MMLCore/iomanager.pas"/> <Filename Value="../../Units/MMLCore/iomanager.pas"/>
<UnitName Value="IOManager"/> <UnitName Value="IOManager"/>
<CursorPos X="87" Y="102"/> <CursorPos X="87" Y="102"/>
<TopLine Value="227"/> <TopLine Value="227"/>
<EditorIndex Value="4"/> <EditorIndex Value="4"/>
<UsageCount Value="11"/> <UsageCount Value="11"/>
<Loaded Value="True"/> <Loaded Value="True"/>
</Unit21> </Unit21>
<Unit22> <Unit22>
<Filename Value="../../Units/MMLCore/os_windows.pas"/> <Filename Value="../../Units/MMLCore/os_windows.pas"/>
<UnitName Value="os_windows"/> <UnitName Value="os_windows"/>
<CursorPos X="65" Y="64"/> <CursorPos X="65" Y="64"/>
<TopLine Value="45"/> <TopLine Value="45"/>
<EditorIndex Value="3"/> <EditorIndex Value="3"/>
<UsageCount Value="10"/> <UsageCount Value="10"/>
<Loaded Value="True"/> <Loaded Value="True"/>
</Unit22> </Unit22>
</Units> </Units>
<JumpHistory Count="30" HistoryIndex="29"> <JumpHistory Count="30" HistoryIndex="29">
<Position1> <Position1>
<Filename Value="unit1.pas"/> <Filename Value="unit1.pas"/>
<Caret Line="87" Column="22" TopLine="69"/> <Caret Line="87" Column="22" TopLine="69"/>
</Position1> </Position1>
<Position2> <Position2>
<Filename Value="../../Units/MMLCore/os_linux.pas"/> <Filename Value="../../Units/MMLCore/os_linux.pas"/>
<Caret Line="73" Column="41" TopLine="55"/> <Caret Line="73" Column="41" TopLine="55"/>
</Position2> </Position2>
<Position3> <Position3>
<Filename Value="unit1.pas"/> <Filename Value="unit1.pas"/>
<Caret Line="11" Column="24" TopLine="1"/> <Caret Line="11" Column="24" TopLine="1"/>
</Position3> </Position3>
<Position4> <Position4>
<Filename Value="unit1.pas"/> <Filename Value="unit1.pas"/>
<Caret Line="91" Column="11" TopLine="71"/> <Caret Line="91" Column="11" TopLine="71"/>
</Position4> </Position4>
<Position5> <Position5>
<Filename Value="../../Units/MMLCore/client.pas"/> <Filename Value="../../Units/MMLCore/client.pas"/>
<Caret Line="48" Column="27" TopLine="30"/> <Caret Line="48" Column="27" TopLine="30"/>
</Position5> </Position5>
<Position6> <Position6>
<Filename Value="../../Units/MMLCore/os_linux.pas"/> <Filename Value="../../Units/MMLCore/os_linux.pas"/>
<Caret Line="69" Column="35" TopLine="51"/> <Caret Line="69" Column="35" TopLine="51"/>
</Position6> </Position6>
<Position7> <Position7>
<Filename Value="../../Units/MMLCore/os_linux.pas"/> <Filename Value="../../Units/MMLCore/os_linux.pas"/>
<Caret Line="41" Column="32" TopLine="34"/> <Caret Line="41" Column="32" TopLine="34"/>
</Position7> </Position7>
<Position8> <Position8>
<Filename Value="../../Units/MMLCore/iomanager.pas"/> <Filename Value="../../Units/MMLCore/iomanager.pas"/>
<Caret Line="66" Column="28" TopLine="45"/> <Caret Line="66" Column="28" TopLine="45"/>
</Position8> </Position8>
<Position9> <Position9>
<Filename Value="unit1.pas"/> <Filename Value="unit1.pas"/>
<Caret Line="87" Column="6" TopLine="82"/> <Caret Line="87" Column="6" TopLine="82"/>
</Position9> </Position9>
<Position10> <Position10>
<Filename Value="../../Units/MMLCore/iomanager.pas"/> <Filename Value="../../Units/MMLCore/iomanager.pas"/>
<Caret Line="200" Column="37" TopLine="194"/> <Caret Line="200" Column="37" TopLine="194"/>
</Position10> </Position10>
<Position11> <Position11>
<Filename Value="../../Units/MMLCore/iomanager.pas"/> <Filename Value="../../Units/MMLCore/iomanager.pas"/>
<Caret Line="348" Column="85" TopLine="330"/> <Caret Line="348" Column="85" TopLine="330"/>
</Position11> </Position11>
<Position12> <Position12>
<Filename Value="../../Units/MMLCore/iomanager.pas"/> <Filename Value="../../Units/MMLCore/iomanager.pas"/>
<Caret Line="233" Column="33" TopLine="215"/> <Caret Line="233" Column="33" TopLine="215"/>
</Position12> </Position12>
<Position13> <Position13>
<Filename Value="../../Units/MMLCore/iomanager.pas"/> <Filename Value="../../Units/MMLCore/iomanager.pas"/>
<Caret Line="17" Column="73" TopLine="1"/> <Caret Line="17" Column="73" TopLine="1"/>
</Position13> </Position13>
<Position14> <Position14>
<Filename Value="../../Units/MMLCore/iomanager.pas"/> <Filename Value="../../Units/MMLCore/iomanager.pas"/>
<Caret Line="233" Column="33" TopLine="215"/> <Caret Line="233" Column="33" TopLine="215"/>
</Position14> </Position14>
<Position15> <Position15>
<Filename Value="../../Units/MMLCore/iomanager.pas"/> <Filename Value="../../Units/MMLCore/iomanager.pas"/>
<Caret Line="32" Column="16" TopLine="14"/> <Caret Line="32" Column="16" TopLine="14"/>
</Position15> </Position15>
<Position16> <Position16>
<Filename Value="../../Units/MMLCore/iomanager.pas"/> <Filename Value="../../Units/MMLCore/iomanager.pas"/>
<Caret Line="8" Column="99" TopLine="1"/> <Caret Line="8" Column="99" TopLine="1"/>
</Position16> </Position16>
<Position17> <Position17>
<Filename Value="unit1.pas"/> <Filename Value="unit1.pas"/>
<Caret Line="12" Column="56" TopLine="5"/> <Caret Line="12" Column="56" TopLine="5"/>
</Position17> </Position17>
<Position18> <Position18>
<Filename Value="unit1.pas"/> <Filename Value="unit1.pas"/>
<Caret Line="87" Column="29" TopLine="65"/> <Caret Line="87" Column="29" TopLine="65"/>
</Position18> </Position18>
<Position19> <Position19>
<Filename Value="unit1.pas"/> <Filename Value="unit1.pas"/>
<Caret Line="36" Column="18" TopLine="18"/> <Caret Line="36" Column="18" TopLine="18"/>
</Position19> </Position19>
<Position20> <Position20>
<Filename Value="../../Units/MMLCore/os_linux.pas"/> <Filename Value="../../Units/MMLCore/os_linux.pas"/>
<Caret Line="69" Column="34" TopLine="56"/> <Caret Line="69" Column="34" TopLine="56"/>
</Position20> </Position20>
<Position21> <Position21>
<Filename Value="unit1.pas"/> <Filename Value="unit1.pas"/>
<Caret Line="36" Column="18" TopLine="18"/> <Caret Line="36" Column="18" TopLine="18"/>
</Position21> </Position21>
<Position22> <Position22>
<Filename Value="unit1.pas"/> <Filename Value="unit1.pas"/>
<Caret Line="87" Column="47" TopLine="70"/> <Caret Line="87" Column="47" TopLine="70"/>
</Position22> </Position22>
<Position23> <Position23>
<Filename Value="../../Units/MMLCore/iomanager.pas"/> <Filename Value="../../Units/MMLCore/iomanager.pas"/>
<Caret Line="226" Column="37" TopLine="196"/> <Caret Line="226" Column="37" TopLine="196"/>
</Position23> </Position23>
<Position24> <Position24>
<Filename Value="unit1.pas"/> <Filename Value="unit1.pas"/>
<Caret Line="87" Column="60" TopLine="69"/> <Caret Line="87" Column="60" TopLine="69"/>
</Position24> </Position24>
<Position25> <Position25>
<Filename Value="unit1.pas"/> <Filename Value="unit1.pas"/>
<Caret Line="95" Column="79" TopLine="70"/> <Caret Line="95" Column="79" TopLine="70"/>
</Position25> </Position25>
<Position26> <Position26>
<Filename Value="../../Units/MMLCore/os_linux.pas"/> <Filename Value="../../Units/MMLCore/os_linux.pas"/>
<Caret Line="191" Column="107" TopLine="170"/> <Caret Line="191" Column="107" TopLine="170"/>
</Position26> </Position26>
<Position27> <Position27>
<Filename Value="unit1.pas"/> <Filename Value="unit1.pas"/>
<Caret Line="10" Column="8" TopLine="1"/> <Caret Line="10" Column="8" TopLine="1"/>
</Position27> </Position27>
<Position28> <Position28>
<Filename Value="../../Units/MMLCore/os_windows.pas"/> <Filename Value="../../Units/MMLCore/os_windows.pas"/>
<Caret Line="167" Column="15" TopLine="144"/> <Caret Line="167" Column="15" TopLine="144"/>
</Position28> </Position28>
<Position29> <Position29>
<Filename Value="unit1.pas"/> <Filename Value="unit1.pas"/>
<Caret Line="9" Column="38" TopLine="1"/> <Caret Line="9" Column="38" TopLine="1"/>
</Position29> </Position29>
<Position30> <Position30>
<Filename Value="unit1.pas"/> <Filename Value="unit1.pas"/>
<Caret Line="10" Column="32" TopLine="1"/> <Caret Line="10" Column="32" TopLine="1"/>
</Position30> </Position30>
</JumpHistory> </JumpHistory>
</ProjectOptions> </ProjectOptions>
<CompilerOptions> <CompilerOptions>
<Version Value="8"/> <Version Value="8"/>
<Target> <Target>
<Filename Value="project1"/> <Filename Value="project1"/>
</Target> </Target>
<SearchPaths> <SearchPaths>
<IncludeFiles Value="$(ProjOutDir)/;$(ProjPath)../../Units/MMLAddon/PSInc/"/> <IncludeFiles Value="$(ProjOutDir)/;$(ProjPath)../../Units/MMLAddon/PSInc/"/>
<OtherUnitFiles Value="$(ProjPath)../../Units/MMLCore/;$(ProjPath)../../Units/MMLAddon/;$(ProjPath)../../Units/PascalScript/;$(ProjPath)../../Units/Misc/;$(ProjPath)../../Units/MMLAddon/PSInc/;$(ProjPath)../../Units/Linux/;$(LazarusDir)/components/mouseandkeyinput/"/> <OtherUnitFiles Value="$(ProjPath)../../Units/MMLCore/;$(ProjPath)../../Units/MMLAddon/;$(ProjPath)../../Units/PascalScript/;$(ProjPath)../../Units/Misc/;$(ProjPath)../../Units/MMLAddon/PSInc/;$(ProjPath)../../Units/Linux/;$(LazarusDir)/components/mouseandkeyinput/"/>
<UnitOutputDirectory Value="lib/$(TargetCPU)-$(TargetOS)"/> <UnitOutputDirectory Value="lib/$(TargetCPU)-$(TargetOS)"/>
</SearchPaths> </SearchPaths>
<CodeGeneration> <CodeGeneration>
<Optimizations> <Optimizations>
<OptimizationLevel Value="3"/> <OptimizationLevel Value="3"/>
</Optimizations> </Optimizations>
</CodeGeneration> </CodeGeneration>
<Linking> <Linking>
<Debugging> <Debugging>
<GenerateDebugInfo Value="True"/> <GenerateDebugInfo Value="True"/>
</Debugging> </Debugging>
</Linking> </Linking>
<Other> <Other>
<CustomOptions Value="-dOCRDEBUG"/> <CustomOptions Value="-dOCRDEBUG"/>
<CompilerPath Value="$(CompPath)"/> <CompilerPath Value="$(CompPath)"/>
</Other> </Other>
</CompilerOptions> </CompilerOptions>
<Debugging> <Debugging>
<Exceptions Count="3"> <Exceptions Count="3">
<Item1> <Item1>
<Name Value="EAbort"/> <Name Value="EAbort"/>
</Item1> </Item1>
<Item2> <Item2>
<Name Value="ECodetoolError"/> <Name Value="ECodetoolError"/>
</Item2> </Item2>
<Item3> <Item3>
<Name Value="EFOpenError"/> <Name Value="EFOpenError"/>
</Item3> </Item3>
</Exceptions> </Exceptions>
</Debugging> </Debugging>
</CONFIG> </CONFIG>

View File

@ -1,22 +1,22 @@
program project1; program project1;
{$mode objfpc}{$H+} {$mode objfpc}{$H+}
uses uses
{$IFDEF UNIX}{$IFDEF UseCThreads} {$IFDEF UNIX}{$IFDEF UseCThreads}
cthreads, cthreads,
{$ENDIF}{$ENDIF} {$ENDIF}{$ENDIF}
Interfaces, // this includes the LCL widgetset Interfaces, // this includes the LCL widgetset
Forms Forms
{ you can add units after this }, Unit1, LResources; { you can add units after this }, Unit1, LResources;
{$IFDEF WINDOWS}{$R project1.rc}{$ENDIF} {$IFDEF WINDOWS}{$R project1.rc}{$ENDIF}
begin begin
Application.Title:='TestApp'; Application.Title:='TestApp';
{$I project1.lrs} {$I project1.lrs}
Application.Initialize; Application.Initialize;
Application.CreateForm(TForm1, Form1); Application.CreateForm(TForm1, Form1);
Application.Run; Application.Run;
end. end.

View File

@ -1,17 +1,17 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity version="1.0.0.0" processorArchitecture="*" name="CompanyName.ProductName.YourApp" type="win32"/> <assemblyIdentity version="1.0.0.0" processorArchitecture="*" name="CompanyName.ProductName.YourApp" type="win32"/>
<description>Your application description here.</description> <description>Your application description here.</description>
<dependency> <dependency>
<dependentAssembly> <dependentAssembly>
<assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="*" publicKeyToken="6595b64144ccf1df" language="*"/> <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="*" publicKeyToken="6595b64144ccf1df" language="*"/>
</dependentAssembly> </dependentAssembly>
</dependency> </dependency>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3"> <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
<security> <security>
<requestedPrivileges> <requestedPrivileges>
<requestedExecutionLevel level="asInvoker" uiAccess="false"/> <requestedExecutionLevel level="asInvoker" uiAccess="false"/>
</requestedPrivileges> </requestedPrivileges>
</security> </security>
</trustInfo> </trustInfo>
</assembly> </assembly>

View File

@ -1,45 +1,45 @@
{ This is an automatically generated lazarus resource file } { This is an automatically generated lazarus resource file }
LazarusResources.Add('TColourHistoryForm','FORMDATA',[ LazarusResources.Add('TColourHistoryForm','FORMDATA',[
'TPF0'#18'TColourHistoryForm'#17'ColourHistoryForm'#4'Left'#3'v'#1#6'Height'#3 'TPF0'#18'TColourHistoryForm'#17'ColourHistoryForm'#4'Left'#3'v'#1#6'Height'#3
+#4#1#3'Top'#3'O'#1#5'Width'#3#243#1#13'ActiveControl'#7#13'SelectionName'#7 +#4#1#3'Top'#3'O'#1#5'Width'#3#243#1#13'ActiveControl'#7#13'SelectionName'#7
+'Caption'#6#21'Colour Picker History'#12'ClientHeight'#3#240#0#11'ClientWidt' +'Caption'#6#21'Colour Picker History'#12'ClientHeight'#3#240#0#11'ClientWidt'
+'h'#3#243#1#21'Constraints.MinHeight'#3#200#0#20'Constraints.MinWidth'#3#234 +'h'#3#243#1#21'Constraints.MinHeight'#3#200#0#20'Constraints.MinWidth'#3#234
+#1#4'Menu'#7#10'CHMainMenu'#8'OnCreate'#7#10'FormCreate'#6'OnHide'#7#15'UnSe' +#1#4'Menu'#7#10'CHMainMenu'#8'OnCreate'#7#10'FormCreate'#6'OnHide'#7#15'UnSe'
+'tCHShowMenu'#6'OnShow'#7#13'SetCHShowMenu'#10'LCLVersion'#6#6'0.9.29'#0#7'T' +'tCHShowMenu'#6'OnShow'#7#13'SetCHShowMenu'#10'LCLVersion'#6#6'0.9.29'#0#7'T'
+'Button'#12'DeleteButton'#4'Left'#2#16#6'Height'#2#25#3'Top'#3#198#0#5'Width' +'Button'#12'DeleteButton'#4'Left'#2#16#6'Height'#2#25#3'Top'#3#198#0#5'Width'
+#3#128#0#7'Anchors'#11#6'akLeft'#8'akBottom'#0#7'Caption'#6#6'Delete'#7'OnCl' +#3#128#0#7'Anchors'#11#6'akLeft'#8'akBottom'#0#7'Caption'#6#6'Delete'#7'OnCl'
+'ick'#7#14'DeleteSelected'#8'TabOrder'#2#0#0#0#5'TEdit'#13'SelectionName'#4 +'ick'#7#14'DeleteSelected'#8'TabOrder'#2#0#0#0#5'TEdit'#13'SelectionName'#4
+'Left'#3'r'#1#6'Height'#2#21#3'Top'#2#16#5'Width'#2'p'#7'Anchors'#11#5'akTop' +'Left'#3'r'#1#6'Height'#2#21#3'Top'#2#16#5'Width'#2'p'#7'Anchors'#11#5'akTop'
+#7'akRight'#0#8'OnChange'#7#10'ChangeName'#10'OnKeyPress'#7#21'SelectionName' +#7'akRight'#0#8'OnChange'#7#10'ChangeName'#10'OnKeyPress'#7#21'SelectionName'
+'KeyPress'#8'TabOrder'#2#1#4'Text'#6#4'Name'#0#0#7'TButton'#19'PickNewColour' +'KeyPress'#8'TabOrder'#2#1#4'Text'#6#4'Name'#0#0#7'TButton'#19'PickNewColour'
+'Button'#4'Left'#3#226#0#6'Height'#2#25#3'Top'#3#198#0#5'Width'#3#128#0#7'An' +'Button'#4'Left'#3#226#0#6'Height'#2#25#3'Top'#3#198#0#5'Width'#3#128#0#7'An'
+'chors'#11#7'akRight'#8'akBottom'#0#7'Caption'#6#15'Pick New Colour'#8'TabOr' +'chors'#11#7'akRight'#8'akBottom'#0#7'Caption'#6#15'Pick New Colour'#8'TabOr'
+'der'#2#2#0#0#5'TEdit'#11'ColourValue'#4'Left'#3'r'#1#6'Height'#2#21#3'Top'#2 +'der'#2#2#0#0#5'TEdit'#11'ColourValue'#4'Left'#3'r'#1#6'Height'#2#21#3'Top'#2
+'8'#5'Width'#2'p'#7'Anchors'#11#5'akTop'#7'akRight'#0#8'ReadOnly'#9#8'TabOrd' +'8'#5'Width'#2'p'#7'Anchors'#11#5'akTop'#7'akRight'#0#8'ReadOnly'#9#8'TabOrd'
+'er'#2#3#4'Text'#6#11'ColourValue'#0#0#6'TLabel'#10'CoordValue'#4'Left'#3'r' +'er'#2#3#4'Text'#6#11'ColourValue'#0#0#6'TLabel'#10'CoordValue'#4'Left'#3'r'
+#1#6'Height'#2#14#3'Top'#2'`'#5'Width'#2'p'#7'Anchors'#11#5'akTop'#7'akRight' +#1#6'Height'#2#14#3'Top'#2'`'#5'Width'#2'p'#7'Anchors'#11#5'akTop'#7'akRight'
+#0#7'Caption'#6#10'CoordValue'#20'Constraints.MinWidth'#2'p'#11'ParentColor' +#0#7'Caption'#6#10'CoordValue'#20'Constraints.MinWidth'#2'p'#11'ParentColor'
+#8#0#0#6'TImage'#11'ColourImage'#4'Left'#3#152#0#6'Height'#2#24#3'Top'#3#199 +#8#0#0#6'TImage'#11'ColourImage'#4'Left'#3#152#0#6'Height'#2#24#3'Top'#3#199
+#0#5'Width'#2'B'#7'Anchors'#11#6'akLeft'#7'akRight'#8'akBottom'#0#0#0#7'TBut' +#0#5'Width'#2'B'#7'Anchors'#11#6'akLeft'#7'akRight'#8'akBottom'#0#0#0#7'TBut'
+'ton'#8'OkButton'#4'Left'#3#146#1#6'Height'#2#24#3'Top'#3#199#0#5'Width'#2'P' +'ton'#8'OkButton'#4'Left'#3#146#1#6'Height'#2#24#3'Top'#3#199#0#5'Width'#2'P'
+#7'Anchors'#11#7'akRight'#8'akBottom'#0#7'Caption'#6#2'Ok'#7'OnClick'#7#13'O' +#7'Anchors'#11#7'akRight'#8'akBottom'#0#7'Caption'#6#2'Ok'#7'OnClick'#7#13'O'
+'kButtonClick'#8'TabOrder'#2#4#0#0#6'TLabel'#12'CH_RGB_Label'#4'Left'#3'r'#1 +'kButtonClick'#8'TabOrder'#2#4#0#0#6'TLabel'#12'CH_RGB_Label'#4'Left'#3'r'#1
+#6'Height'#2#14#3'Top'#3#128#0#5'Width'#2'p'#7'Anchors'#11#5'akTop'#7'akRigh' +#6'Height'#2#14#3'Top'#3#128#0#5'Width'#2'p'#7'Anchors'#11#5'akTop'#7'akRigh'
+'t'#0#7'Caption'#6#9'RGBValues'#20'Constraints.MinWidth'#2'p'#11'ParentColor' +'t'#0#7'Caption'#6#9'RGBValues'#20'Constraints.MinWidth'#2'p'#11'ParentColor'
+#8#0#0#9'TTreeView'#10'ColourTree'#4'Left'#2#8#6'Height'#3#159#0#3'Top'#2#16 +#8#0#0#9'TTreeView'#10'ColourTree'#4'Left'#2#8#6'Height'#3#159#0#3'Top'#2#16
+#5'Width'#3'Z'#1#7'Anchors'#11#5'akTop'#6'akLeft'#7'akRight'#8'akBottom'#0#17 +#5'Width'#3'Z'#1#7'Anchors'#11#5'akTop'#6'akLeft'#7'akRight'#8'akBottom'#0#17
+'DefaultItemHeight'#2#16#8'DragMode'#7#11'dmAutomatic'#6'Images'#7#8'CHImage' +'DefaultItemHeight'#2#16#8'DragMode'#7#11'dmAutomatic'#6'Images'#7#8'CHImage'
+'s'#10'ScrollBars'#7#10'ssAutoBoth'#8'TabOrder'#2#5#8'OnChange'#7#16'ColourT' +'s'#10'ScrollBars'#7#10'ssAutoBoth'#8'TabOrder'#2#5#8'OnChange'#7#16'ColourT'
+'reeChange'#10'OnDragDrop'#7#18'ColourTreeDragDrop'#10'OnDragOver'#7#18'Colo' +'reeChange'#10'OnDragDrop'#7#18'ColourTreeDragDrop'#10'OnDragOver'#7#18'Colo'
+'urTreeDragOver'#0#0#10'TImageList'#8'CHImages'#4'left'#3#168#1#3'top'#3#160 +'urTreeDragOver'#0#0#10'TImageList'#8'CHImages'#4'left'#3#168#1#3'top'#3#160
+#0#0#0#9'TMainMenu'#10'CHMainMenu'#4'left'#3'h'#1#3'top'#3#160#0#0#9'TMenuIt' +#0#0#0#9'TMainMenu'#10'CHMainMenu'#4'left'#3'h'#1#3'top'#3#160#0#0#9'TMenuIt'
+'em'#6'CHFile'#7'Caption'#6#4'File'#0#9'TMenuItem'#7'CHClear'#7'Caption'#6#5 +'em'#6'CHFile'#7'Caption'#6#4'File'#0#9'TMenuItem'#7'CHClear'#7'Caption'#6#5
+'Clear'#7'OnClick'#7#12'CHClearClick'#0#0#9'TMenuItem'#6'CHLoad'#7'Caption'#6 +'Clear'#7'OnClick'#7#12'CHClearClick'#0#0#9'TMenuItem'#6'CHLoad'#7'Caption'#6
+#4'Load'#7'OnClick'#7#11'CHLoadClick'#0#0#9'TMenuItem'#6'CHSave'#7'Caption'#6 +#4'Load'#7'OnClick'#7#11'CHLoadClick'#0#0#9'TMenuItem'#6'CHSave'#7'Caption'#6
+#4'Save'#7'OnClick'#7#11'CHSaveClick'#0#0#0#9'TMenuItem'#6'CHHelp'#7'Caption' +#4'Save'#7'OnClick'#7#11'CHSaveClick'#0#0#0#9'TMenuItem'#6'CHHelp'#7'Caption'
+#6#4'Help'#0#9'TMenuItem'#7'CHAbout'#7'Caption'#6#5'About'#7'OnClick'#7#12'C' +#6#4'Help'#0#9'TMenuItem'#7'CHAbout'#7'Caption'#6#5'About'#7'OnClick'#7#12'C'
+'HAboutClick'#0#0#0#0#11'TSaveDialog'#12'CHSaveDialog'#10'DefaultExt'#6#4'.x' +'HAboutClick'#0#0#0#0#11'TSaveDialog'#12'CHSaveDialog'#10'DefaultExt'#6#4'.x'
+'ml'#4'left'#3#136#1#3'top'#3#160#0#0#0#11'TOpenDialog'#12'CHOpenDialog'#10 +'ml'#4'left'#3#136#1#3'top'#3#160#0#0#0#11'TOpenDialog'#12'CHOpenDialog'#10
+'DefaultExt'#6#4'.xml'#4'left'#3#200#1#3'top'#3#160#0#0#0#0 +'DefaultExt'#6#4'.xml'#4'left'#3#200#1#3'top'#3#160#0#0#0#0
]); ]);

View File

@ -1,139 +1,139 @@
object FunctionListFrame: TFunctionListFrame object FunctionListFrame: TFunctionListFrame
Left = 0 Left = 0
Height = 522 Height = 522
Top = 0 Top = 0
Width = 182 Width = 182
Align = alLeft Align = alLeft
ClientHeight = 522 ClientHeight = 522
ClientWidth = 182 ClientWidth = 182
OnEndDock = FrameEndDock OnEndDock = FrameEndDock
TabOrder = 0 TabOrder = 0
DesignLeft = 401 DesignLeft = 401
DesignTop = 219 DesignTop = 219
object FunctionList: TTreeView object FunctionList: TTreeView
Left = 0 Left = 0
Height = 483 Height = 483
Top = 18 Top = 18
Width = 182 Width = 182
Align = alClient Align = alClient
DefaultItemHeight = 15 DefaultItemHeight = 15
ReadOnly = True ReadOnly = True
ScrollBars = ssAutoBoth ScrollBars = ssAutoBoth
TabOrder = 0 TabOrder = 0
OnDblClick = FunctionListDblClick OnDblClick = FunctionListDblClick
OnDeletion = FunctionListDeletion OnDeletion = FunctionListDeletion
OnMouseDown = FunctionListMouseDown OnMouseDown = FunctionListMouseDown
OnMouseUp = FunctionListMouseUp OnMouseUp = FunctionListMouseUp
Options = [tvoAutoItemHeight, tvoHideSelection, tvoKeepCollapsedNodes, tvoReadOnly, tvoShowButtons, tvoShowLines, tvoShowRoot, tvoToolTips] Options = [tvoAutoItemHeight, tvoHideSelection, tvoKeepCollapsedNodes, tvoReadOnly, tvoShowButtons, tvoShowLines, tvoShowRoot, tvoToolTips]
end end
object editSearchList: TEdit object editSearchList: TEdit
Left = 0 Left = 0
Height = 21 Height = 21
Top = 501 Top = 501
Width = 182 Width = 182
Align = alBottom Align = alBottom
OnChange = editSearchListChange OnChange = editSearchListChange
TabOrder = 1 TabOrder = 1
end end
object FunctionListLabel: TLabel object FunctionListLabel: TLabel
Left = 2 Left = 2
Height = 14 Height = 14
Top = 2 Top = 2
Width = 178 Width = 178
Align = alTop Align = alTop
Alignment = taCenter Alignment = taCenter
BorderSpacing.Around = 2 BorderSpacing.Around = 2
Caption = 'Functionlist' Caption = 'Functionlist'
Font.Style = [fsBold] Font.Style = [fsBold]
ParentColor = False ParentColor = False
ParentFont = False ParentFont = False
OnMouseDown = FunctionListLabelMouseDown OnMouseDown = FunctionListLabelMouseDown
end end
object CloseButton: TSpeedButton object CloseButton: TSpeedButton
Left = 134 Left = 134
Height = 16 Height = 16
Top = 2 Top = 2
Width = 16 Width = 16
Anchors = [akTop, akRight] Anchors = [akTop, akRight]
Color = clBtnFace Color = clBtnFace
Flat = True Flat = True
Glyph.Data = { Glyph.Data = {
36090000424D3609000000000000360000002800000018000000180000000100 36090000424D3609000000000000360000002800000018000000180000000100
2000000000000009000064000000640000000000000000000000000000000000 2000000000000009000064000000640000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000
00FF0000000000000000000000000000000000000000000000FF000000000000 00FF0000000000000000000000000000000000000000000000FF000000000000
0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000FF0000 0000000000000000000000000000000000000000000000000000000000FF0000
00FF000000FF000000000000000000000000000000FF000000FF000000FF0000 00FF000000FF000000000000000000000000000000FF000000FF000000FF0000
0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000
00FF000000FF000000FF00000000000000FF000000FF000000FF000000000000 00FF000000FF000000FF00000000000000FF000000FF000000FF000000000000
0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000
0000000000FF000000FF000000FF000000FF000000FF00000000000000000000 0000000000FF000000FF000000FF000000FF000000FF00000000000000000000
0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000
000000000000000000FF000000FF000000FF0000000000000000000000000000 000000000000000000FF000000FF000000FF0000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000
0000000000FF000000FF000000FF000000FF000000FF00000000000000000000 0000000000FF000000FF000000FF000000FF000000FF00000000000000000000
0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000
00FF000000FF000000FF00000000000000FF000000FF000000FF000000000000 00FF000000FF000000FF00000000000000FF000000FF000000FF000000000000
0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000FF0000 0000000000000000000000000000000000000000000000000000000000FF0000
00FF000000FF000000000000000000000000000000FF000000FF000000FF0000 00FF000000FF000000000000000000000000000000FF000000FF000000FF0000
0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000
00FF0000000000000000000000000000000000000000000000FF000000000000 00FF0000000000000000000000000000000000000000000000FF000000000000
0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000
} }
NumGlyphs = 0 NumGlyphs = 0
OnClick = CloseButtonClick OnClick = CloseButtonClick
end end
end end

View File

@ -1,88 +1,88 @@
{ This is an automatically generated lazarus resource file } { This is an automatically generated lazarus resource file }
LazarusResources.Add('TFunctionListFrame','FORMDATA',[ LazarusResources.Add('TFunctionListFrame','FORMDATA',[
'TPF0'#18'TFunctionListFrame'#17'FunctionListFrame'#4'Left'#2#0#6'Height'#3#10 'TPF0'#18'TFunctionListFrame'#17'FunctionListFrame'#4'Left'#2#0#6'Height'#3#10
+#2#3'Top'#2#0#5'Width'#3#182#0#5'Align'#7#6'alLeft'#12'ClientHeight'#3#10#2 +#2#3'Top'#2#0#5'Width'#3#182#0#5'Align'#7#6'alLeft'#12'ClientHeight'#3#10#2
+#11'ClientWidth'#3#182#0#9'OnEndDock'#7#12'FrameEndDock'#8'TabOrder'#2#0#10 +#11'ClientWidth'#3#182#0#9'OnEndDock'#7#12'FrameEndDock'#8'TabOrder'#2#0#10
+'DesignLeft'#3#145#1#9'DesignTop'#3#219#0#0#9'TTreeView'#12'FunctionList'#4 +'DesignLeft'#3#145#1#9'DesignTop'#3#219#0#0#9'TTreeView'#12'FunctionList'#4
+'Left'#2#0#6'Height'#3#227#1#3'Top'#2#18#5'Width'#3#182#0#5'Align'#7#8'alCli' +'Left'#2#0#6'Height'#3#227#1#3'Top'#2#18#5'Width'#3#182#0#5'Align'#7#8'alCli'
+'ent'#17'DefaultItemHeight'#2#15#8'ReadOnly'#9#10'ScrollBars'#7#10'ssAutoBot' +'ent'#17'DefaultItemHeight'#2#15#8'ReadOnly'#9#10'ScrollBars'#7#10'ssAutoBot'
+'h'#8'TabOrder'#2#0#10'OnDblClick'#7#20'FunctionListDblClick'#10'OnDeletion' +'h'#8'TabOrder'#2#0#10'OnDblClick'#7#20'FunctionListDblClick'#10'OnDeletion'
+#7#20'FunctionListDeletion'#11'OnMouseDown'#7#21'FunctionListMouseDown'#9'On' +#7#20'FunctionListDeletion'#11'OnMouseDown'#7#21'FunctionListMouseDown'#9'On'
+'MouseUp'#7#19'FunctionListMouseUp'#7'Options'#11#17'tvoAutoItemHeight'#16't' +'MouseUp'#7#19'FunctionListMouseUp'#7'Options'#11#17'tvoAutoItemHeight'#16't'
+'voHideSelection'#21'tvoKeepCollapsedNodes'#11'tvoReadOnly'#14'tvoShowButton' +'voHideSelection'#21'tvoKeepCollapsedNodes'#11'tvoReadOnly'#14'tvoShowButton'
+'s'#12'tvoShowLines'#11'tvoShowRoot'#11'tvoToolTips'#0#0#0#5'TEdit'#14'editS' +'s'#12'tvoShowLines'#11'tvoShowRoot'#11'tvoToolTips'#0#0#0#5'TEdit'#14'editS'
+'earchList'#4'Left'#2#0#6'Height'#2#21#3'Top'#3#245#1#5'Width'#3#182#0#5'Ali' +'earchList'#4'Left'#2#0#6'Height'#2#21#3'Top'#3#245#1#5'Width'#3#182#0#5'Ali'
+'gn'#7#8'alBottom'#8'OnChange'#7#20'editSearchListChange'#8'TabOrder'#2#1#0#0 +'gn'#7#8'alBottom'#8'OnChange'#7#20'editSearchListChange'#8'TabOrder'#2#1#0#0
+#6'TLabel'#17'FunctionListLabel'#4'Left'#2#2#6'Height'#2#14#3'Top'#2#2#5'Wid' +#6'TLabel'#17'FunctionListLabel'#4'Left'#2#2#6'Height'#2#14#3'Top'#2#2#5'Wid'
+'th'#3#178#0#5'Align'#7#5'alTop'#9'Alignment'#7#8'taCenter'#20'BorderSpacing' +'th'#3#178#0#5'Align'#7#5'alTop'#9'Alignment'#7#8'taCenter'#20'BorderSpacing'
+'.Around'#2#2#7'Caption'#6#12'Functionlist'#10'Font.Style'#11#6'fsBold'#0#11 +'.Around'#2#2#7'Caption'#6#12'Functionlist'#10'Font.Style'#11#6'fsBold'#0#11
+'ParentColor'#8#10'ParentFont'#8#11'OnMouseDown'#7#26'FunctionListLabelMouse' +'ParentColor'#8#10'ParentFont'#8#11'OnMouseDown'#7#26'FunctionListLabelMouse'
+'Down'#0#0#12'TSpeedButton'#11'CloseButton'#4'Left'#3#134#0#6'Height'#2#16#3 +'Down'#0#0#12'TSpeedButton'#11'CloseButton'#4'Left'#3#134#0#6'Height'#2#16#3
+'Top'#2#2#5'Width'#2#16#7'Anchors'#11#5'akTop'#7'akRight'#0#5'Color'#7#9'clB' +'Top'#2#2#5'Width'#2#16#7'Anchors'#11#5'akTop'#7'akRight'#0#5'Color'#7#9'clB'
+'tnFace'#4'Flat'#9#10'Glyph.Data'#10':'#9#0#0'6'#9#0#0'BM6'#9#0#0#0#0#0#0'6' +'tnFace'#4'Flat'#9#10'Glyph.Data'#10':'#9#0#0'6'#9#0#0'BM6'#9#0#0#0#0#0#0'6'
+#0#0#0'('#0#0#0#24#0#0#0#24#0#0#0#1#0' '#0#0#0#0#0#0#9#0#0'd'#0#0#0'd'#0#0#0 +#0#0#0'('#0#0#0#24#0#0#0#24#0#0#0#1#0' '#0#0#0#0#0#0#9#0#0'd'#0#0#0'd'#0#0#0
+#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+#0#0#0#0#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#255#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#255#0
+#0#0#255#0#0#0#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#255#0#0#0#255#0#0#0#255#0#0 +#0#0#255#0#0#0#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#255#0#0#0#255#0#0#0#255#0#0
+#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#255#0#0#0#255#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#255#0#0#0#255#0#0#0
+#255#0#0#0#0#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#255#0#0#0#0#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0
+#0#0#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+#0#0#0#0#0#0#0#0#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#255#0#0#0#255#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#255#0#0#0#255#0
+#0#0#255#0#0#0#255#0#0#0#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+#0#0#0#0#0#0#0#0#0#0#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#0#0#0#0#255#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#0#0#0#0#255#0#0#0
+#255#0#0#0#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#255#0#0#0#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#255 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#255
+#0#0#0#255#0#0#0#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#255#0#0#0#255#0#0#0#255#0 +#0#0#0#255#0#0#0#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#255#0#0#0#255#0#0#0#255#0
+#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#255#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#255#0#0#0#0#0#0#0#0
,#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 ,#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#9 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#9
+'NumGlyphs'#2#0#7'OnClick'#7#16'CloseButtonClick'#0#0#0 +'NumGlyphs'#2#0#7'OnClick'#7#16'CloseButtonClick'#0#0#0
]); ]);

View File

@ -1,391 +1,391 @@
unit framefunctionlist; unit framefunctionlist;
{$mode objfpc}{$H+} {$mode objfpc}{$H+}
interface interface
uses uses
Classes, SysUtils, FileUtil, LResources, MufasaBase,Forms, ComCtrls, StdCtrls, Controls, Classes, SysUtils, FileUtil, LResources, MufasaBase,Forms, ComCtrls, StdCtrls, Controls,
ExtCtrls, Buttons; ExtCtrls, Buttons;
type type
{ TFunctionListFrame } { TFunctionListFrame }
TFunctionListFrame = class(TFrame) TFunctionListFrame = class(TFrame)
editSearchList: TEdit; editSearchList: TEdit;
FunctionList: TTreeView; FunctionList: TTreeView;
FunctionListLabel: TLabel; FunctionListLabel: TLabel;
CloseButton: TSpeedButton; CloseButton: TSpeedButton;
procedure editSearchListChange(Sender: TObject); procedure editSearchListChange(Sender: TObject);
procedure FrameEndDock(Sender, Target: TObject; X, Y: Integer); procedure FrameEndDock(Sender, Target: TObject; X, Y: Integer);
procedure FunctionListDblClick(Sender: TObject); procedure FunctionListDblClick(Sender: TObject);
procedure FunctionListDeletion(Sender: TObject; Node: TTreeNode); procedure FunctionListDeletion(Sender: TObject; Node: TTreeNode);
procedure FunctionListLabelMouseDown(Sender: TObject; Button: TMouseButton; procedure FunctionListLabelMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer); Shift: TShiftState; X, Y: Integer);
procedure FunctionListMouseDown(Sender: TObject; Button: TMouseButton; procedure FunctionListMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer); Shift: TShiftState; X, Y: Integer);
procedure DockFormOnClose(Sender: TObject; var CloseAction: TCloseAction); procedure DockFormOnClose(Sender: TObject; var CloseAction: TCloseAction);
procedure CloseButtonClick(Sender: TObject); procedure CloseButtonClick(Sender: TObject);
procedure FunctionListMouseUp(Sender: TObject; Button: TMouseButton; procedure FunctionListMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer); Shift: TShiftState; X, Y: Integer);
private private
FFilterTree : TTreeView; FFilterTree : TTreeView;
procedure FilterTreeVis(Vis : boolean); procedure FilterTreeVis(Vis : boolean);
function GetFilterTree: TTreeView; function GetFilterTree: TTreeView;
{ private declarations } { private declarations }
public public
DraggingNode : TTreeNode; DraggingNode : TTreeNode;
ScriptNode : TTreeNode; ScriptNode : TTreeNode;
InCodeCompletion : boolean; InCodeCompletion : boolean;
CompletionCaret : TPoint; CompletionCaret : TPoint;
StartWordCompletion : TPoint; StartWordCompletion : TPoint;
CompletionLine : string; CompletionLine : string;
CompletionStart : string; CompletionStart : string;
property FilterTree : TTreeView read GetFilterTree; property FilterTree : TTreeView read GetFilterTree;
procedure LoadScriptTree( Script : String); procedure LoadScriptTree( Script : String);
function Find(Next : boolean; backwards : boolean = false) : boolean; function Find(Next : boolean; backwards : boolean = false) : boolean;
{ public declarations } { public declarations }
end; end;
TMethodInfo = record TMethodInfo = record
MethodStr : PChar; MethodStr : PChar;
BeginPos : integer; BeginPos : integer;
end; end;
PMethodInfo = ^TMethodInfo; PMethodInfo = ^TMethodInfo;
implementation implementation
uses uses
TestUnit, Graphics, simpleanalyzer; TestUnit, Graphics, simpleanalyzer;
{ TFunctionListFrame } { TFunctionListFrame }
procedure TFunctionListFrame.editSearchListChange(Sender: TObject); procedure TFunctionListFrame.editSearchListChange(Sender: TObject);
begin begin
Find(false); Find(false);
end; end;
procedure TFunctionListFrame.FrameEndDock(Sender, Target: TObject; X, Y: Integer procedure TFunctionListFrame.FrameEndDock(Sender, Target: TObject; X, Y: Integer
); );
begin begin
if Target is TPanel then if Target is TPanel then
begin begin
Form1.SplitterFunctionList.Visible := true; Form1.SplitterFunctionList.Visible := true;
CloseButton.Visible:= true; CloseButton.Visible:= true;
end end
else if Target is TCustomDockForm then else if Target is TCustomDockForm then
begin begin
TCustomDockForm(Target).Caption := 'Functionlist'; TCustomDockForm(Target).Caption := 'Functionlist';
TCustomDockForm(Target).OnClose := @DockFormOnClose; TCustomDockForm(Target).OnClose := @DockFormOnClose;
Form1.SplitterFunctionList.Visible:= false; Form1.SplitterFunctionList.Visible:= false;
CloseButton.Visible:= false; CloseButton.Visible:= false;
end; end;
end; end;
procedure TFunctionListFrame.FunctionListDblClick(Sender: TObject); procedure TFunctionListFrame.FunctionListDblClick(Sender: TObject);
var var
Node : TTreeNode; Node : TTreeNode;
begin begin
if FilterTree.Visible then if FilterTree.Visible then
Node := FilterTree.Selected Node := FilterTree.Selected
else else
node := FunctionList.Selected; node := FunctionList.Selected;
if node<> nil then if node<> nil then
if node.Level > 0 then if node.Level > 0 then
if node.Data <> nil then if node.Data <> nil then
begin; begin;
Form1.CurrScript.SynEdit.InsertTextAtCaret( GetMethodName(PMethodInfo(node.Data)^.MethodStr,true)); Form1.CurrScript.SynEdit.InsertTextAtCaret( GetMethodName(PMethodInfo(node.Data)^.MethodStr,true));
Form1.RefreshTab; Form1.RefreshTab;
end; end;
end; end;
procedure TFunctionListFrame.FunctionListDeletion(Sender: TObject; procedure TFunctionListFrame.FunctionListDeletion(Sender: TObject;
Node: TTreeNode); Node: TTreeNode);
begin begin
if node.data <> nil then if node.data <> nil then
begin begin
StrDispose(PMethodInfo(node.data)^.MethodStr); StrDispose(PMethodInfo(node.data)^.MethodStr);
Freemem(node.data,sizeof(TMethodInfo)); Freemem(node.data,sizeof(TMethodInfo));
end; end;
end; end;
procedure TFunctionListFrame.FunctionListLabelMouseDown(Sender: TObject; procedure TFunctionListFrame.FunctionListLabelMouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer); Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin begin
Self.DragKind := dkDock; Self.DragKind := dkDock;
Self.BeginDrag(false, 40); Self.BeginDrag(false, 40);
end; end;
procedure TFunctionListFrame.DockFormOnClose(Sender: TObject; var CloseAction: TCloseAction); procedure TFunctionListFrame.DockFormOnClose(Sender: TObject; var CloseAction: TCloseAction);
begin begin
CloseAction := caHide; CloseAction := caHide;
Form1.MenuItemFunctionList.Checked := False; Form1.MenuItemFunctionList.Checked := False;
end; end;
procedure TFunctionListFrame.CloseButtonClick(Sender: TObject); procedure TFunctionListFrame.CloseButtonClick(Sender: TObject);
begin begin
self.Hide; self.Hide;
Form1.MenuItemFunctionList.Checked := False; Form1.MenuItemFunctionList.Checked := False;
end; end;
procedure TFunctionListFrame.FunctionListMouseUp(Sender: TObject; procedure TFunctionListFrame.FunctionListMouseUp(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer); Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var var
N: TTreeNode; N: TTreeNode;
MethodInfo : TMethodInfo; MethodInfo : TMethodInfo;
begin begin
if InCodeCompletion then if InCodeCompletion then
begin; begin;
mDebugLn('Not yet implemented'); mDebugLn('Not yet implemented');
exit; exit;
end; end;
if not (Sender is TTreeView) then if not (Sender is TTreeView) then
exit; exit;
N := TTreeView(Sender).GetNodeAt(x, y); N := TTreeView(Sender).GetNodeAt(x, y);
if(N = nil)then if(N = nil)then
exit; exit;
if button = mbRight then if button = mbRight then
if N.Data <> nil then if N.Data <> nil then
begin begin
MethodInfo := PMethodInfo(N.data)^; MethodInfo := PMethodInfo(N.data)^;
if (MethodInfo.BeginPos > 0) then if (MethodInfo.BeginPos > 0) then
Form1.CurrScript.SynEdit.SelStart := MethodInfo.BeginPos + 1; Form1.CurrScript.SynEdit.SelStart := MethodInfo.BeginPos + 1;
end; end;
end; end;
procedure TFunctionListFrame.FilterTreeVis(Vis: boolean); procedure TFunctionListFrame.FilterTreeVis(Vis: boolean);
begin begin
FunctionList.Visible:= not Vis; FunctionList.Visible:= not Vis;
FilterTree.Visible := Vis; FilterTree.Visible := Vis;
end; end;
function TFunctionListFrame.GetFilterTree: TTreeView; function TFunctionListFrame.GetFilterTree: TTreeView;
begin begin
Result := FFilterTree; Result := FFilterTree;
if Assigned(Result) then if Assigned(Result) then
exit; exit;
FFilterTree := TTreeView.Create(Self); FFilterTree := TTreeView.Create(Self);
FFilterTree.Parent := Self; FFilterTree.Parent := Self;
FFilterTree.Visible := false; FFilterTree.Visible := false;
FFilterTree.SetBounds(FunctionList.Left,FunctionList.Top,FunctionList.Width,FunctionList.Height); FFilterTree.SetBounds(FunctionList.Left,FunctionList.Top,FunctionList.Width,FunctionList.Height);
FFilterTree.Align := alClient; FFilterTree.Align := alClient;
FFilterTree.ReadOnly:= True; FFilterTree.ReadOnly:= True;
FFilterTree.ScrollBars:= ssAutoBoth; FFilterTree.ScrollBars:= ssAutoBoth;
FFilterTree.OnMouseDown:= FunctionList.OnMouseDown; FFilterTree.OnMouseDown:= FunctionList.OnMouseDown;
FFilterTree.OnMouseUp:= FunctionList.OnMouseUp; FFilterTree.OnMouseUp:= FunctionList.OnMouseUp;
FFilterTree.OnChange:= FunctionList.OnChange; FFilterTree.OnChange:= FunctionList.OnChange;
FFilterTree.OnExit := FunctionList.OnExit; FFilterTree.OnExit := FunctionList.OnExit;
FFilterTree.OnDblClick:= FunctionList.OnDblClick; FFilterTree.OnDblClick:= FunctionList.OnDblClick;
Result := FFilterTree; Result := FFilterTree;
//We do not want to delete the data from the FilterTree //We do not want to delete the data from the FilterTree
// FilterTree.OnDeletion:= FunctionList.OnDeletion; // FilterTree.OnDeletion:= FunctionList.OnDeletion;
end; end;
procedure TFunctionListFrame.LoadScriptTree(Script: String); procedure TFunctionListFrame.LoadScriptTree(Script: String);
var var
I : integer; I : integer;
Analyzer : TScriptAnalyzer; Analyzer : TScriptAnalyzer;
tmpNode : TTreeNode; tmpNode : TTreeNode;
begin begin
if ScriptNode = nil then if ScriptNode = nil then
exit; exit;
if FilterTree.Visible then if FilterTree.Visible then
mDebugLn('Might get some acces violations now..'); mDebugLn('Might get some acces violations now..');
ScriptNode.DeleteChildren; ScriptNode.DeleteChildren;
Analyzer := TScriptAnalyzer.create; Analyzer := TScriptAnalyzer.create;
Analyzer.ScriptToAnalyze:= Script; Analyzer.ScriptToAnalyze:= Script;
Analyzer.analyze; Analyzer.analyze;
for i := 0 to Analyzer.MethodLen - 1 do for i := 0 to Analyzer.MethodLen - 1 do
begin begin
tmpNode := FunctionList.Items.AddChild(ScriptNode,Analyzer.Methods[i].Name); tmpNode := FunctionList.Items.AddChild(ScriptNode,Analyzer.Methods[i].Name);
tmpNode.Data := GetMem(SizeOf(TMethodInfo)); tmpNode.Data := GetMem(SizeOf(TMethodInfo));
with PMethodInfo(tmpNode.Data)^ do with PMethodInfo(tmpNode.Data)^ do
begin begin
MethodStr:= strnew(PChar(Analyzer.Methods[i].CreateMethodStr)); MethodStr:= strnew(PChar(Analyzer.Methods[i].CreateMethodStr));
BeginPos:= Analyzer.Methods[i].BeginPos; BeginPos:= Analyzer.Methods[i].BeginPos;
end; end;
end; end;
ScriptNode.Expand(true); ScriptNode.Expand(true);
Analyzer.free; Analyzer.free;
end; end;
function TFunctionListFrame.Find(Next : boolean; backwards : boolean = false) : boolean; function TFunctionListFrame.Find(Next : boolean; backwards : boolean = false) : boolean;
var var
Start,Len,i,index,posi,c: Integer; Start,Len,i,index,posi,c: Integer;
FoundFunction : boolean; FoundFunction : boolean;
LastSection : string; LastSection : string;
str : string; str : string;
RootNode : TTreeNode; RootNode : TTreeNode;
NormalNode : TTreeNode; NormalNode : TTreeNode;
Node : TTreeNode; Node : TTreeNode;
InsertStr : string; InsertStr : string;
begin begin
if(editSearchList.Text = '')then if(editSearchList.Text = '')then
begin begin
editSearchList.Color := clWhite; editSearchList.Color := clWhite;
FunctionList.FullCollapse; FunctionList.FullCollapse;
if InCodeCompletion then if InCodeCompletion then
begin; begin;
Form1.CurrScript.SynEdit.Lines[CompletionCaret.y - 1] := CompletionStart; Form1.CurrScript.SynEdit.Lines[CompletionCaret.y - 1] := CompletionStart;
Form1.CurrScript.SynEdit.LogicalCaretXY:= point(CompletionCaret.x,CompletionCaret.y); Form1.CurrScript.SynEdit.LogicalCaretXY:= point(CompletionCaret.x,CompletionCaret.y);
Form1.CurrScript.SynEdit.SelEnd:= Form1.CurrScript.SynEdit.SelStart; Form1.CurrScript.SynEdit.SelEnd:= Form1.CurrScript.SynEdit.SelStart;
end; end;
FilterTreeVis(False); FilterTreeVis(False);
ScriptNode.Expand(true); ScriptNode.Expand(true);
exit; exit;
end; end;
//We only have to search the next item in our filter tree.. Fu-king easy! //We only have to search the next item in our filter tree.. Fu-king easy!
if next then if next then
begin; begin;
if FilterTree.Visible = false then if FilterTree.Visible = false then
begin; begin;
mDebugLn('ERROR: You cannot search next, since the Tree isnt generated yet'); mDebugLn('ERROR: You cannot search next, since the Tree isnt generated yet');
Find(false); Find(false);
exit; exit;
end; end;
if FilterTree.Selected <> nil then if FilterTree.Selected <> nil then
begin; begin;
if backwards then if backwards then
start := FilterTree.Selected.AbsoluteIndex - 1 start := FilterTree.Selected.AbsoluteIndex - 1
else else
Start := FilterTree.Selected.AbsoluteIndex + 1; Start := FilterTree.Selected.AbsoluteIndex + 1;
end end
else else
begin begin
if backwards then if backwards then
Start := FilterTree.Items.Count - 1 Start := FilterTree.Items.Count - 1
else else
Start := 0; Start := 0;
end; end;
Len := FilterTree.Items.Count; Len := FilterTree.Items.Count;
i := start + len; //This is for the backwards compatibily, we do mod anways.. it just makes sure -1 isn't negative. i := start + len; //This is for the backwards compatibily, we do mod anways.. it just makes sure -1 isn't negative.
c := 0; c := 0;
while c < (len ) do while c < (len ) do
begin; begin;
if FilterTree.Items[i mod len].Level = 1 then if FilterTree.Items[i mod len].Level = 1 then
begin begin
FilterTree.Items[i mod len].Selected:= true; FilterTree.Items[i mod len].Selected:= true;
InsertStr := FilterTree.Items[i mod len].Text; InsertStr := FilterTree.Items[i mod len].Text;
Result := true; Result := true;
break; break;
end; end;
if backwards then if backwards then
dec(i) dec(i)
else else
inc(i); inc(i);
inc(c); inc(c);
end; end;
end else end else
begin begin
FilterTree.Items.Clear; FilterTree.Items.Clear;
FoundFunction := False; FoundFunction := False;
if FunctionList.Selected <> nil then if FunctionList.Selected <> nil then
Start := FunctionList.Selected.AbsoluteIndex Start := FunctionList.Selected.AbsoluteIndex
else else
Start := 0; Start := 0;
Len := FunctionList.Items.Count; Len := FunctionList.Items.Count;
LastSection := ''; LastSection := '';
for i := start to start + FunctionList.Items.Count - 1 do for i := start to start + FunctionList.Items.Count - 1 do
begin; begin;
Node := FunctionList.Items[i mod FunctionList.Items.Count]; Node := FunctionList.Items[i mod FunctionList.Items.Count];
if(Node.Level = 1)then if(Node.Level = 1)then
if(pos(lowercase(editSearchList.Text), lowercase(Node.Text)) > 0)then if(pos(lowercase(editSearchList.Text), lowercase(Node.Text)) > 0)then
begin begin
if not FoundFunction then if not FoundFunction then
begin begin
FoundFunction := True; FoundFunction := True;
index := i mod FunctionList.Items.Count; index := i mod FunctionList.Items.Count;
InsertStr:= node.Text; InsertStr:= node.Text;
end; end;
if LastSection <> Node.Parent.Text then //We enter a new section, add it to the filter tree! if LastSection <> Node.Parent.Text then //We enter a new section, add it to the filter tree!
RootNode := FilterTree.Items.AddChild(nil,Node.Parent.Text); RootNode := FilterTree.Items.AddChild(nil,Node.Parent.Text);
FilterTree.Items.AddChild(RootNode,Node.Text).Data := Node.Data; FilterTree.Items.AddChild(RootNode,Node.Text).Data := Node.Data;
LastSection:= RootNode.Text; LastSection:= RootNode.Text;
// break; // break;
end; end;
end; end;
Result := FoundFunction; Result := FoundFunction;
if Result then if Result then
begin; begin;
FilterTreeVis(True); FilterTreeVis(True);
FilterTree.FullExpand; FilterTree.FullExpand;
FilterTree.Items[1].Selected:= True; FilterTree.Items[1].Selected:= True;
mDebugLn(FunctionList.Items[Index].Text); mDebugLn(FunctionList.Items[Index].Text);
FunctionList.FullCollapse; FunctionList.FullCollapse;
FunctionList.Items[Index].Selected := true; FunctionList.Items[Index].Selected := true;
FunctionList.Items[index].ExpandParents; FunctionList.Items[index].ExpandParents;
editSearchList.Color := clWhite; editSearchList.Color := clWhite;
end else end else
begin begin
FilterTreeVis(false); FilterTreeVis(false);
editSearchList.Color := 6711039; editSearchList.Color := 6711039;
if InCodeCompletion then if InCodeCompletion then
Form1.CurrScript.SynEdit.Lines[CompletionCaret.y - 1] := CompletionStart; Form1.CurrScript.SynEdit.Lines[CompletionCaret.y - 1] := CompletionStart;
end; end;
end; end;
if result and InCodeCompletion then if result and InCodeCompletion then
begin; begin;
str := format(CompletionLine, [InsertStr]); str := format(CompletionLine, [InsertStr]);
with Form1.CurrScript.SynEdit do with Form1.CurrScript.SynEdit do
begin; begin;
Lines[CompletionCaret.y - 1] := str; Lines[CompletionCaret.y - 1] := str;
LogicalCaretXY:= StartWordCompletion; LogicalCaretXY:= StartWordCompletion;
i := SelStart; i := SelStart;
posi := pos(lowercase(editSearchList.text), lowercase(InsertStr)) + length(editSearchList.text) - 1; //underline the rest of the word posi := pos(lowercase(editSearchList.text), lowercase(InsertStr)) + length(editSearchList.text) - 1; //underline the rest of the word
if Posi = Length(InsertStr) then //Special occasions if Posi = Length(InsertStr) then //Special occasions
begin; begin;
if Length(editSearchList.Text) <> Posi then //We found the last part of the text -> for exmaple when you Search for bitmap, you can find LoadBitmap -> We underline 'Load' if Length(editSearchList.Text) <> Posi then //We found the last part of the text -> for exmaple when you Search for bitmap, you can find LoadBitmap -> We underline 'Load'
begin; begin;
SelStart := i; SelStart := i;
SelEnd := i + pos(lowercase(editSearchList.text), lowercase(InsertStr)) -1; SelEnd := i + pos(lowercase(editSearchList.text), lowercase(InsertStr)) -1;
Exit; Exit;
end; end;
//We searched for the whole text -> for example LoadBitmap, and we found LoadBitmap -> Underline the whole text //We searched for the whole text -> for example LoadBitmap, and we found LoadBitmap -> Underline the whole text
Posi := 0; Posi := 0;
end; end;
//Underline the rest of the word //Underline the rest of the word
SelStart := i + posi; SelStart := i + posi;
SelEnd := SelStart + Length(InsertStr) - posi; SelEnd := SelStart + Length(InsertStr) - posi;
end; end;
end; end;
end; end;
procedure TFunctionListFrame.FunctionListMouseDown(Sender: TObject; procedure TFunctionListFrame.FunctionListMouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer); Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var var
N: TTreeNode; N: TTreeNode;
begin begin
if button = mbRight then if button = mbRight then
exit; exit;
if InCodeCompletion then if InCodeCompletion then
begin; begin;
mDebugLn('Not yet implemented'); mDebugLn('Not yet implemented');
exit; exit;
end; end;
if not (Sender is TTreeView) then if not (Sender is TTreeView) then
exit; exit;
N := TTreeView(Sender).GetNodeAt(x, y); N := TTreeView(Sender).GetNodeAt(x, y);
if(N = nil)then if(N = nil)then
begin begin
Self.DragKind := dkDock; Self.DragKind := dkDock;
Self.BeginDrag(false, 40); Self.BeginDrag(false, 40);
exit; exit;
end; end;
Self.DragKind := dkDrag; Self.DragKind := dkDrag;
if(Button = mbLeft) and (N.Level > 0)then if(Button = mbLeft) and (N.Level > 0)then
Self.BeginDrag(False, 10); Self.BeginDrag(False, 10);
DraggingNode := N; DraggingNode := N;
end; end;
initialization initialization
{$I framefunctionlist.lrs} {$I framefunctionlist.lrs}
end. end.

File diff suppressed because it is too large Load Diff

View File

@ -1,357 +1,357 @@
{ {
This file is part of the Mufasa Macro Library (MML) This file is part of the Mufasa Macro Library (MML)
Copyright (c) 2009 by Raymond van Venetië and Merlijn Wajer Copyright (c) 2009 by Raymond van Venetië and Merlijn Wajer
MML is free software: you can redistribute it and/or modify MML is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or the Free Software Foundation, either version 3 of the License, or
(at your option) any later version. (at your option) any later version.
MML is distributed in the hope that it will be useful, MML is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details. GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with MML. If not, see <http://www.gnu.org/licenses/>. along with MML. If not, see <http://www.gnu.org/licenses/>.
See the file COPYING, included in this distribution, See the file COPYING, included in this distribution,
for details about the copyright. for details about the copyright.
framescript for the Mufasa Macro Library framescript for the Mufasa Macro Library
} }
unit framescript; unit framescript;
{$mode objfpc}{$H+} {$mode objfpc}{$H+}
interface interface
uses uses
Classes, SysUtils, FileUtil, LResources, Forms, SynHighlighterPas, SynEdit, SynEditMarkupHighAll, Classes, SysUtils, FileUtil, LResources, Forms, SynHighlighterPas, SynEdit, SynEditMarkupHighAll,
mmlpsthread,ComCtrls, SynEditKeyCmds, LCLType,MufasaBase, SynEditMarkupSpecialLine, Graphics, Controls; mmlpsthread,ComCtrls, SynEditKeyCmds, LCLType,MufasaBase, SynEditMarkupSpecialLine, Graphics, Controls;
const const
ecCodeCompletion = ecUserFirst; ecCodeCompletion = ecUserFirst;
type type
TScriptState = (ss_None,ss_Running,ss_Paused,ss_Stopping); TScriptState = (ss_None,ss_Running,ss_Paused,ss_Stopping);
{ {
ss_None: Means the script either hasn't been run yet, or it has ended (Succesfully or terminated) ss_None: Means the script either hasn't been run yet, or it has ended (Succesfully or terminated)
ss_Running: Means the script is running as we speak :-) ss_Running: Means the script is running as we speak :-)
ss_Paused: Means the script is currently in pause modus. ss_Paused: Means the script is currently in pause modus.
ss_Stopping: Means we've asked PS-Script politely to stop the script (next time we press the stop button we won't be that nice). ss_Stopping: Means we've asked PS-Script politely to stop the script (next time we press the stop button we won't be that nice).
} }
{ TScriptFrame } { TScriptFrame }
TScriptFrame = class(TFrame) TScriptFrame = class(TFrame)
SynEdit: TSynEdit; SynEdit: TSynEdit;
SynFreePascalSyn1: TSynFreePascalSyn; SynFreePascalSyn1: TSynFreePascalSyn;
procedure SynEditChange(Sender: TObject); procedure SynEditChange(Sender: TObject);
procedure SynEditDragDrop(Sender, Source: TObject; X, Y: Integer); procedure SynEditDragDrop(Sender, Source: TObject; X, Y: Integer);
procedure SynEditDragOver(Sender, Source: TObject; X, Y: Integer; procedure SynEditDragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean); State: TDragState; var Accept: Boolean);
procedure SynEditKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState procedure SynEditKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState
); );
procedure SynEditProcessCommand(Sender: TObject; procedure SynEditProcessCommand(Sender: TObject;
var Command: TSynEditorCommand; var AChar: TUTF8Char; Data: pointer); var Command: TSynEditorCommand; var AChar: TUTF8Char; Data: pointer);
procedure SynEditProcessUserCommand(Sender: TObject; procedure SynEditProcessUserCommand(Sender: TObject;
var Command: TSynEditorCommand; var AChar: TUTF8Char; Data: pointer); var Command: TSynEditorCommand; var AChar: TUTF8Char; Data: pointer);
procedure SynEditSpecialLineColors(Sender: TObject; Line: integer; procedure SynEditSpecialLineColors(Sender: TObject; Line: integer;
var Special: boolean; var FG, BG: TColor); var Special: boolean; var FG, BG: TColor);
procedure SynEditStatusChange(Sender: TObject; Changes: TSynStatusChanges); procedure SynEditStatusChange(Sender: TObject; Changes: TSynStatusChanges);
private private
OwnerPage : TPageControl; OwnerPage : TPageControl;
OwnerSheet : TTabSheet;//The owner TTabsheet -> For title setting OwnerSheet : TTabSheet;//The owner TTabsheet -> For title setting
public public
ErrorData : TErrorData; //For threadsafestuff ErrorData : TErrorData; //For threadsafestuff
ScriptErrorLine : integer; //Highlight the error line! ScriptErrorLine : integer; //Highlight the error line!
ScriptFile : string;//The path to the saved/opened file currently in the SynEdit ScriptFile : string;//The path to the saved/opened file currently in the SynEdit
StartText : string;//The text synedit holds upon start/open/save StartText : string;//The text synedit holds upon start/open/save
ScriptName : string;//The name of the currently opened/saved file. ScriptName : string;//The name of the currently opened/saved file.
ScriptDefault : string;//The default script e.g. program new; begin end. ScriptDefault : string;//The default script e.g. program new; begin end.
ScriptChanged : boolean;//We need this for that little * (edited star). ScriptChanged : boolean;//We need this for that little * (edited star).
ScriptThread : TMThread;//Just one thread for now.. ScriptThread : TMThread;//Just one thread for now..
FScriptState : TScriptState;//Stores the ScriptState, if you want the Run/Pause/Start buttons to change accordingly, acces through Form1 FScriptState : TScriptState;//Stores the ScriptState, if you want the Run/Pause/Start buttons to change accordingly, acces through Form1
procedure undo; procedure undo;
procedure redo; procedure redo;
procedure HandleErrorData; procedure HandleErrorData;
procedure MakeActiveScriptFrame; procedure MakeActiveScriptFrame;
procedure ScriptThreadTerminate(Sender: TObject); procedure ScriptThreadTerminate(Sender: TObject);
constructor Create(TheOwner: TComponent); override; constructor Create(TheOwner: TComponent); override;
destructor Destroy; override; destructor Destroy; override;
{ public declarations } { public declarations }
end; end;
implementation implementation
uses uses
TestUnit, SynEditTypes, LCLIntF, StrUtils,framefunctionlist; TestUnit, SynEditTypes, LCLIntF, StrUtils,framefunctionlist;
{ TScriptFrame } { TScriptFrame }
procedure TScriptFrame.SynEditChange(Sender: TObject); procedure TScriptFrame.SynEditChange(Sender: TObject);
begin begin
ScriptErrorLine:= -1; ScriptErrorLine:= -1;
if not ScriptChanged then if not ScriptChanged then
begin; begin;
ScriptChanged:= True; ScriptChanged:= True;
Form1.Caption:= Format(WindowTitle,[ScriptName + '*']); Form1.Caption:= Format(WindowTitle,[ScriptName + '*']);
OwnerSheet.Caption:=ScriptName + '*'; OwnerSheet.Caption:=ScriptName + '*';
end; end;
end; end;
procedure TScriptFrame.SynEditDragDrop(Sender, Source: TObject; X, Y: Integer); procedure TScriptFrame.SynEditDragDrop(Sender, Source: TObject; X, Y: Integer);
begin begin
if Source is TFunctionListFrame then if Source is TFunctionListFrame then
if TFunctionListFrame(Source).DraggingNode.Data <> nil then if TFunctionListFrame(Source).DraggingNode.Data <> nil then
SynEdit.InsertTextAtCaret( GetMethodName(PMethodInfo(TFunctionListFrame(Source).DraggingNode.Data)^.MethodStr,true)); SynEdit.InsertTextAtCaret( GetMethodName(PMethodInfo(TFunctionListFrame(Source).DraggingNode.Data)^.MethodStr,true));
end; end;
procedure TScriptFrame.SynEditDragOver(Sender, Source: TObject; X, Y: Integer; procedure TScriptFrame.SynEditDragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean); State: TDragState; var Accept: Boolean);
begin begin
Accept := Source = Form1.frmFunctionList; Accept := Source = Form1.frmFunctionList;
if(Accept)then if(Accept)then
begin begin
SynEdit.CaretXY := SynEdit.PixelsToLogicalPos(point(x, y)); SynEdit.CaretXY := SynEdit.PixelsToLogicalPos(point(x, y));
if(not(Form1.Active))then Form1.BringToFront; if(not(Form1.Active))then Form1.BringToFront;
if(Form1.ActiveControl <> SynEdit)then Form1.ActiveControl := SynEdit; if(Form1.ActiveControl <> SynEdit)then Form1.ActiveControl := SynEdit;
end; end;
end; end;
procedure TScriptFrame.SynEditKeyDown(Sender: TObject; var Key: Word; procedure TScriptFrame.SynEditKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState); Shift: TShiftState);
begin begin
if key = VK_F3 then if key = VK_F3 then
begin; begin;
Form1.ActionFindNextExecute(Sender); Form1.ActionFindNextExecute(Sender);
key := 0; key := 0;
end; end;
end; end;
procedure TScriptFrame.SynEditProcessCommand(Sender: TObject; procedure TScriptFrame.SynEditProcessCommand(Sender: TObject;
var Command: TSynEditorCommand; var AChar: TUTF8Char; Data: pointer); var Command: TSynEditorCommand; var AChar: TUTF8Char; Data: pointer);
begin begin
case Command of case Command of
ecUndo : begin ecUndo : begin
Command:= ecNone; Command:= ecNone;
Self.Undo; Self.Undo;
end; end;
ecRedo : begin ecRedo : begin
Command := ecNone; Command := ecNone;
self.Redo; self.Redo;
end; end;
end; end;
end; end;
procedure TScriptFrame.SynEditProcessUserCommand(Sender: TObject; procedure TScriptFrame.SynEditProcessUserCommand(Sender: TObject;
var Command: TSynEditorCommand; var AChar: TUTF8Char; Data: pointer); var Command: TSynEditorCommand; var AChar: TUTF8Char; Data: pointer);
var var
LineText,SearchText : string; LineText,SearchText : string;
Caret : TPoint; Caret : TPoint;
i,endI : integer; i,endI : integer;
begin begin
if Command = ecCodeCompletion then if Command = ecCodeCompletion then
begin begin
form1.FunctionListShown(True); form1.FunctionListShown(True);
with form1.frmFunctionList do with form1.frmFunctionList do
if editSearchList.CanFocus then if editSearchList.CanFocus then
begin; begin;
editSearchList.SetFocus; editSearchList.SetFocus;
LineText := SynEdit.LineText; LineText := SynEdit.LineText;
Caret:=SynEdit.LogicalCaretXY; Caret:=SynEdit.LogicalCaretXY;
i := Caret.X - 1; i := Caret.X - 1;
endi := caret.x; endi := caret.x;
if (i > length(LineText)) or ((i = 0) and (length(lineText) = 0)) then if (i > length(LineText)) or ((i = 0) and (length(lineText) = 0)) then
begin begin
SearchText:= ''; SearchText:= '';
CompletionLine := PadRight(linetext,caret.x); CompletionLine := PadRight(linetext,caret.x);
end end
else begin else begin
while (i > 0) and (LineText[i] in ['a'..'z','A'..'Z','0'..'9','_']) do while (i > 0) and (LineText[i] in ['a'..'z','A'..'Z','0'..'9','_']) do
dec(i); dec(i);
while LineText[endi] in ['a'..'z','A'..'Z','0'..'9','_'] do while LineText[endi] in ['a'..'z','A'..'Z','0'..'9','_'] do
inc(endi); inc(endi);
SearchText := Trim(copy(LineText, i + 1, Caret.X - i - 1)); SearchText := Trim(copy(LineText, i + 1, Caret.X - i - 1));
CompletionLine := LineText; CompletionLine := LineText;
end; end;
CompletionStart:= LineText; CompletionStart:= LineText;
Delete(CompletionLine,i+1,endi - i - 1); Delete(CompletionLine,i+1,endi - i - 1);
Insert('%s',CompletionLine,i+1); Insert('%s',CompletionLine,i+1);
CompletionCaret := Point(endi,Caret.y); CompletionCaret := Point(endi,Caret.y);
StartWordCompletion:= Point(i+1,caret.y); StartWordCompletion:= Point(i+1,caret.y);
mDebugLn(CompletionLine); mDebugLn(CompletionLine);
mDebugLn(CompletionStart); mDebugLn(CompletionStart);
InCodeCompletion := true; InCodeCompletion := true;
editSearchList.Text:= SearchText; editSearchList.Text:= SearchText;
editSearchList.SelStart:= Length(searchText); editSearchList.SelStart:= Length(searchText);
SynEdit.SelectedColor.Style:= [fsUnderline]; SynEdit.SelectedColor.Style:= [fsUnderline];
SynEdit.SelectedColor.Foreground:= clBlack; SynEdit.SelectedColor.Foreground:= clBlack;
SynEdit.SelectedColor.Background:= clWhite; SynEdit.SelectedColor.Background:= clWhite;
Synedit.MarkupByClass[TSynEditMarkupHighlightAllCaret].TempDisable; Synedit.MarkupByClass[TSynEditMarkupHighlightAllCaret].TempDisable;
end; end;
end; end;
end; end;
procedure TScriptFrame.SynEditSpecialLineColors(Sender: TObject; procedure TScriptFrame.SynEditSpecialLineColors(Sender: TObject;
Line: integer; var Special: boolean; var FG, BG: TColor); Line: integer; var Special: boolean; var FG, BG: TColor);
begin begin
if line = ScriptErrorLine then if line = ScriptErrorLine then
begin; begin;
Special := true; Special := true;
BG := $50a0ff; BG := $50a0ff;
FG := 0; FG := 0;
end; end;
end; end;
procedure TScriptFrame.SynEditStatusChange(Sender: TObject; procedure TScriptFrame.SynEditStatusChange(Sender: TObject;
Changes: TSynStatusChanges); Changes: TSynStatusChanges);
begin begin
{$IFDEF UpdateEditButtons} {$IFDEF UpdateEditButtons}
if scSelection in changes then if scSelection in changes then
begin; begin;
Form1.TT_Cut.Enabled := SynEdit.SelAvail; Form1.TT_Cut.Enabled := SynEdit.SelAvail;
form1.TT_Copy.Enabled:= Form1.TT_Cut.Enabled; form1.TT_Copy.Enabled:= Form1.TT_Cut.Enabled;
form1.TT_Paste.Enabled:= SynEdit.CanPaste; form1.TT_Paste.Enabled:= SynEdit.CanPaste;
end; end;
{$ENDIF} {$ENDIF}
end; end;
procedure TScriptFrame.undo; procedure TScriptFrame.undo;
begin begin
SynEdit.Undo; SynEdit.Undo;
if ScriptChanged then if ScriptChanged then
if SynEdit.Lines.Text = StartText then if SynEdit.Lines.Text = StartText then
begin; begin;
Form1.Caption:= format(WindowTitle,[ScriptName]); Form1.Caption:= format(WindowTitle,[ScriptName]);
OwnerSheet.Caption:= ScriptName; OwnerSheet.Caption:= ScriptName;
ScriptChanged := false; ScriptChanged := false;
end; end;
end; end;
procedure TScriptFrame.redo; procedure TScriptFrame.redo;
begin begin
SynEdit.Redo; SynEdit.Redo;
if ScriptChanged then if ScriptChanged then
if SynEdit.Lines.Text = StartText then if SynEdit.Lines.Text = StartText then
begin; begin;
Form1.Caption:= format(WindowTitle,[ScriptName]); Form1.Caption:= format(WindowTitle,[ScriptName]);
OwnerSheet.Caption := ScriptName; OwnerSheet.Caption := ScriptName;
ScriptChanged := false; ScriptChanged := false;
end; end;
end; end;
procedure TScriptFrame.HandleErrorData; procedure TScriptFrame.HandleErrorData;
var var
i : integer; i : integer;
begin begin
if ErrorData.Module <> '' then if ErrorData.Module <> '' then
begin; begin;
if not FileExists(ErrorData.Module) then if not FileExists(ErrorData.Module) then
formWriteln(Format('ERROR comes from a non-existing file (%s)',[ErrorData.Module])) formWriteln(Format('ERROR comes from a non-existing file (%s)',[ErrorData.Module]))
else else
begin begin
ErrorData.Module:= SetDirSeparators(ErrorData.Module);// Set it right ;-) ErrorData.Module:= SetDirSeparators(ErrorData.Module);// Set it right ;-)
for i := 0 to Form1.Tabs.Count - 1 do for i := 0 to Form1.Tabs.Count - 1 do
if lowercase(TMufasaTab(Form1.Tabs[i]).ScriptFrame.ScriptFile) = lowercase(ErrorData.Module) then if lowercase(TMufasaTab(Form1.Tabs[i]).ScriptFrame.ScriptFile) = lowercase(ErrorData.Module) then
begin; begin;
ErrorData.Module:= ''; ErrorData.Module:= '';
TMufasaTab(Form1.Tabs[i]).ScriptFrame.ErrorData := Self.ErrorData; TMufasaTab(Form1.Tabs[i]).ScriptFrame.ErrorData := Self.ErrorData;
TMufasaTab(Form1.Tabs[i]).ScriptFrame.HandleErrorData; TMufasaTab(Form1.Tabs[i]).ScriptFrame.HandleErrorData;
Exit; Exit;
end; end;
Form1.LoadScriptFile(ErrorData.Module,true); Form1.LoadScriptFile(ErrorData.Module,true);
ErrorData.Module:= ''; ErrorData.Module:= '';
Form1.CurrScript.ErrorData := Self.ErrorData; Form1.CurrScript.ErrorData := Self.ErrorData;
Form1.CurrScript.HandleErrorData; Form1.CurrScript.HandleErrorData;
exit; exit;
end; end;
end; end;
MakeActiveScriptFrame; MakeActiveScriptFrame;
ScriptErrorLine:= ErrorData.Row; ScriptErrorLine:= ErrorData.Row;
SynEdit.Invalidate; SynEdit.Invalidate;
if ErrorData.Col = -1 then if ErrorData.Col = -1 then
SynEdit.SelStart:= ErrorData.Position SynEdit.SelStart:= ErrorData.Position
else else
SynEdit.LogicalCaretXY := Point(ErrorData.Col,ErrorData.Row); SynEdit.LogicalCaretXY := Point(ErrorData.Col,ErrorData.Row);
if pos('error',lowercase(ErrorData.Error)) > 0 then if pos('error',lowercase(ErrorData.Error)) > 0 then
formWriteln(Format('%s at line %d',[ErrorData.Error,ErrorData.Row])) formWriteln(Format('%s at line %d',[ErrorData.Error,ErrorData.Row]))
else else
formWriteln(Format('Error: %s at line %d',[ErrorData.Error,ErrorData.Row])); formWriteln(Format('Error: %s at line %d',[ErrorData.Error,ErrorData.Row]));
end; end;
procedure TScriptFrame.MakeActiveScriptFrame; procedure TScriptFrame.MakeActiveScriptFrame;
var var
i : integer; i : integer;
begin begin
if Form1.Visible then if Form1.Visible then
for i := 0 to OwnerPage.PageCount - 1 do for i := 0 to OwnerPage.PageCount - 1 do
if OwnerPage.Pages[i] = OwnerSheet then if OwnerPage.Pages[i] = OwnerSheet then
begin; begin;
OwnerPage.TabIndex := i; OwnerPage.TabIndex := i;
if OwnerSheet.CanFocus then if OwnerSheet.CanFocus then
OwnerSheet.SetFocus; OwnerSheet.SetFocus;
exit; exit;
end; end;
end; end;
procedure TScriptFrame.ScriptThreadTerminate(Sender: TObject); procedure TScriptFrame.ScriptThreadTerminate(Sender: TObject);
begin begin
FScriptState:= ss_None; FScriptState:= ss_None;
Form1.RefreshTab; Form1.RefreshTab;
end; end;
procedure AddKey(const SynEdit : TSynEdit; const ACmd: TSynEditorCommand; const AKey: word;const AShift: TShiftState); procedure AddKey(const SynEdit : TSynEdit; const ACmd: TSynEditorCommand; const AKey: word;const AShift: TShiftState);
begin begin
with SynEdit.KeyStrokes.Add do with SynEdit.KeyStrokes.Add do
begin begin
Key := AKey; Key := AKey;
Shift := AShift; Shift := AShift;
Command := ACmd; Command := ACmd;
end; end;
end; end;
constructor TScriptFrame.Create(TheOwner: TComponent); constructor TScriptFrame.Create(TheOwner: TComponent);
var var
MarkCaret : TSynEditMarkupHighlightAllCaret; MarkCaret : TSynEditMarkupHighlightAllCaret;
begin begin
inherited Create(TheOwner); inherited Create(TheOwner);
OwnerSheet := TTabSheet(TheOwner); OwnerSheet := TTabSheet(TheOwner);
OwnerPage := TPageControl(OwnerSheet.Owner); OwnerPage := TPageControl(OwnerSheet.Owner);
StartText:= SynEdit.Lines.text; StartText:= SynEdit.Lines.text;
ScriptDefault:= StartText; ScriptDefault:= StartText;
ScriptName:= 'Untitled'; ScriptName:= 'Untitled';
ScriptChanged := false; ScriptChanged := false;
FScriptState:= ss_None; FScriptState:= ss_None;
ScriptErrorLine:= -1; ScriptErrorLine:= -1;
OwnerSheet.Caption:= ScriptName; OwnerSheet.Caption:= ScriptName;
SynEdit.Options:= SynEdit.Options- [eoGroupUndo]; SynEdit.Options:= SynEdit.Options- [eoGroupUndo];
SynEdit.Options:= SynEdit.Options+ [eoGroupUndo,eoPersistentCaret]; SynEdit.Options:= SynEdit.Options+ [eoGroupUndo,eoPersistentCaret];
SynEdit.IncrementColor.Background := $30D070; SynEdit.IncrementColor.Background := $30D070;
SynEdit.HighlightAllColor.Background:= clYellow; SynEdit.HighlightAllColor.Background:= clYellow;
SynEdit.HighlightAllColor.Foreground:= clDefault; SynEdit.HighlightAllColor.Foreground:= clDefault;
MarkCaret := TSynEditMarkupHighlightAllCaret(SynEdit.MarkupByClass[TSynEditMarkupHighlightAllCaret]); MarkCaret := TSynEditMarkupHighlightAllCaret(SynEdit.MarkupByClass[TSynEditMarkupHighlightAllCaret]);
if assigned(MarkCaret) then if assigned(MarkCaret) then
begin begin
with MarkCaret.MarkupInfo do with MarkCaret.MarkupInfo do
begin; begin;
Background :=$E6E6E6; Background :=$E6E6E6;
FrameColor := clGray; FrameColor := clGray;
end; end;
MarkCaret.Enabled := True; MarkCaret.Enabled := True;
MarkCaret.FullWord:= True; MarkCaret.FullWord:= True;
MarkCaret.FullWordMaxLen:= 3; MarkCaret.FullWordMaxLen:= 3;
MarkCaret.WaitTime := 1500; MarkCaret.WaitTime := 1500;
MarkCaret.IgnoreKeywords := true; MarkCaret.IgnoreKeywords := true;
end; end;
AddKey(SynEdit,ecCodeCompletion,VK_SPACE,[ssCtrl]); AddKey(SynEdit,ecCodeCompletion,VK_SPACE,[ssCtrl]);
// TSynPasSyn(SynEdit.Highlighter).NestedComments:= false; Does not work :( // TSynPasSyn(SynEdit.Highlighter).NestedComments:= false; Does not work :(
end; end;
destructor TScriptFrame.Destroy; destructor TScriptFrame.Destroy;
begin begin
inherited Destroy; inherited Destroy;
end; end;
initialization initialization
{$I framescript.lrs} {$I framescript.lrs}
end. end.

View File

@ -1,381 +1,381 @@
unit simpleanalyzer; unit simpleanalyzer;
{$mode objfpc}{$H+} {$mode objfpc}{$H+}
interface interface
uses uses
Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs, Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
StdCtrls, SynEdit, SynHighlighterPas,MufasaBase, Clipbrd; StdCtrls, SynEdit, SynHighlighterPas,MufasaBase, Clipbrd;
type type
TScriptVar = record TScriptVar = record
VarName, VarType : string; VarName, VarType : string;
end; end;
{ TScriptMethod } { TScriptMethod }
TScriptMethod = class(TObject) TScriptMethod = class(TObject)
BeginPos, EndPos : integer; BeginPos, EndPos : integer;
isFunction : Boolean; isFunction : Boolean;
Name : string; Name : string;
Parameters,Vars : array of TScriptVar; Parameters,Vars : array of TScriptVar;
ParameterLen,VarLen : integer; ParameterLen,VarLen : integer;
Returns : String; Returns : String;
Methods : Array of TScriptMethod; Methods : Array of TScriptMethod;
MethodLen : Integer; MethodLen : Integer;
function AddMethod( iszehfunction : boolean; TheName : string): TScriptMethod; function AddMethod( iszehfunction : boolean; TheName : string): TScriptMethod;
procedure AddVar( TheName, TheType : string); procedure AddVar( TheName, TheType : string);
procedure AddParam( TheName : string); procedure AddParam( TheName : string);
constructor create( iszehfunction : Boolean; TheName : string); constructor create( iszehfunction : Boolean; TheName : string);
function CreateMethodStr : string; function CreateMethodStr : string;
Destructor Destroy; override; Destructor Destroy; override;
end; end;
{ TScriptAnalyzer } { TScriptAnalyzer }
TScriptAnalyzer = class(TObject) TScriptAnalyzer = class(TObject)
ScriptToAnalyze : string; ScriptToAnalyze : string;
ScriptName : string; ScriptName : string;
Methods : Array of TScriptMethod; Methods : Array of TScriptMethod;
MethodLen : Integer; MethodLen : Integer;
Main : TScriptMethod; Main : TScriptMethod;
HasMain : boolean; HasMain : boolean;
Vars : Array of TScriptVar; Vars : Array of TScriptVar;
VarLen : integer; VarLen : integer;
Function AddMethod( iszehfunction : boolean; Name : string): TScriptMethod; Function AddMethod( iszehfunction : boolean; Name : string): TScriptMethod;
procedure AddVar( TheName, TheType : string); procedure AddVar( TheName, TheType : string);
procedure analyze; procedure analyze;
constructor create; constructor create;
Destructor Destroy; override; Destructor Destroy; override;
end; end;
implementation implementation
uses uses
mPasLex,strutils; mPasLex,strutils;
destructor TScriptAnalyzer.Destroy; destructor TScriptAnalyzer.Destroy;
var var
i : integer; i : integer;
begin; begin;
for i := 0 to MethodLen - 1 do for i := 0 to MethodLen - 1 do
Self.Methods[i].Free; Self.Methods[i].Free;
Main.Free; Main.Free;
inherited; inherited;
end; end;
destructor TScriptMethod.Destroy; destructor TScriptMethod.Destroy;
var var
i : integer; i : integer;
begin; begin;
for i := 0 to MethodLen - 1 do for i := 0 to MethodLen - 1 do
Self.Methods[i].Free; Self.Methods[i].Free;
inherited; inherited;
end; end;
constructor TScriptMethod.create( iszehfunction : Boolean; TheName : string); constructor TScriptMethod.create( iszehfunction : Boolean; TheName : string);
begin; begin;
inherited Create; inherited Create;
Self.isFunction := iszehfunction; Self.isFunction := iszehfunction;
Self.Name := TheName; Self.Name := TheName;
end; end;
function TScriptMethod.CreateMethodStr: string; function TScriptMethod.CreateMethodStr: string;
var var
i : integer; i : integer;
LastType : string; LastType : string;
begin begin
if isFunction then if isFunction then
result := 'function ' + Name result := 'function ' + Name
else else
result := 'procedure '+ name; result := 'procedure '+ name;
if ParameterLen > 0 then if ParameterLen > 0 then
begin; begin;
result := result + '('; result := result + '(';
LastType := ''; LastType := '';
for i := 0 to ParameterLen - 1 do for i := 0 to ParameterLen - 1 do
begin; begin;
if lasttype <> '' then if lasttype <> '' then
if lowercase(lasttype) <> lowercase(Parameters[i].VarType) then if lowercase(lasttype) <> lowercase(Parameters[i].VarType) then
result := result + ' : ' + LastType + '; ' result := result + ' : ' + LastType + '; '
else else
result := result + ', '; result := result + ', ';
result := result + Parameters[i].VarName; result := result + Parameters[i].VarName;
lasttype := Parameters[i].VarType; lasttype := Parameters[i].VarType;
end; end;
Result := result + ' : ' + Parameters[ParameterLen - 1].VarType + ')'; Result := result + ' : ' + Parameters[ParameterLen - 1].VarType + ')';
end; end;
if isFunction then if isFunction then
result := result + ' : ' + Returns result := result + ' : ' + Returns
else else
result := result + ';'; result := result + ';';
end; end;
constructor TScriptAnalyzer.create; constructor TScriptAnalyzer.create;
begin; begin;
inherited create; inherited create;
ScriptName := 'Default'; ScriptName := 'Default';
Main := TScriptMethod.create(false,'!main'); Main := TScriptMethod.create(false,'!main');
end; end;
procedure TScriptMethod.addVar( TheName, TheType : string); procedure TScriptMethod.addVar( TheName, TheType : string);
begin; begin;
inc(Self.VarLen); inc(Self.VarLen);
SetLength(Self.Vars, self.varlen); SetLength(Self.Vars, self.varlen);
Self.Vars[Self.VarLen - 1].VarName := TheName; Self.Vars[Self.VarLen - 1].VarName := TheName;
Self.Vars[Self.VarLen - 1].VarType := TheType; Self.Vars[Self.VarLen - 1].VarType := TheType;
end; end;
procedure TScriptAnalyzer.AddVar( TheName, TheType : string); procedure TScriptAnalyzer.AddVar( TheName, TheType : string);
begin; begin;
inc(Self.VarLen); inc(Self.VarLen);
SetLength(Self.Vars, self.VarLen); SetLength(Self.Vars, self.VarLen);
Self.Vars[Self.VarLen - 1].VarName := TheName; Self.Vars[Self.VarLen - 1].VarName := TheName;
Self.Vars[Self.VarLen - 1].VarType := TheType; Self.Vars[Self.VarLen - 1].VarType := TheType;
end; end;
function TScriptMethod.AddMethod( iszehfunction : boolean; TheName : string) : TScriptMethod; function TScriptMethod.AddMethod( iszehfunction : boolean; TheName : string) : TScriptMethod;
begin; begin;
inc(Self.MethodLen); inc(Self.MethodLen);
SetLength(Self.Methods, Self.MethodLen); SetLength(Self.Methods, Self.MethodLen);
Self.Methods[Self.Methodlen - 1] := TScriptMethod.create(iszehfunction,TheName); Self.Methods[Self.Methodlen - 1] := TScriptMethod.create(iszehfunction,TheName);
Result :=Self.Methods[Self.Methodlen - 1]; Result :=Self.Methods[Self.Methodlen - 1];
end; end;
function TScriptAnalyzer.AddMethod( iszehfunction : boolean; Name : string) : TScriptMethod; function TScriptAnalyzer.AddMethod( iszehfunction : boolean; Name : string) : TScriptMethod;
begin; begin;
inc(Self.MethodLen); inc(Self.MethodLen);
SetLength(Self.Methods, Self.MethodLen); SetLength(Self.Methods, Self.MethodLen);
Self.Methods[Self.Methodlen - 1] := TScriptMethod.create(iszehfunction,Name); Self.Methods[Self.Methodlen - 1] := TScriptMethod.create(iszehfunction,Name);
Result :=Self.Methods[Self.Methodlen - 1]; Result :=Self.Methods[Self.Methodlen - 1];
end; end;
procedure TScriptMethod.AddParam(TheName: string); procedure TScriptMethod.AddParam(TheName: string);
begin; begin;
inc(Self.ParameterLen); inc(Self.ParameterLen);
SetLength(Self.Parameters, self.ParameterLen); SetLength(Self.Parameters, self.ParameterLen);
Self.Parameters[Self.ParameterLen - 1].VarName := TheName; Self.Parameters[Self.ParameterLen - 1].VarName := TheName;
end; end;
procedure TScriptAnalyzer.analyze; procedure TScriptAnalyzer.analyze;
var var
LastTk : TTokenKind; LastTk : TTokenKind;
StartPos,LastPos: integer; StartPos,LastPos: integer;
LastTkString : string; LastTkString : string;
I : integer; I : integer;
TempInt : integer; TempInt : integer;
InMethod : Boolean; InMethod : Boolean;
ExpectingType : boolean; //Params and result ExpectingType : boolean; //Params and result
WaitingForResult : boolean; WaitingForResult : boolean;
StartParam : integer; StartParam : integer;
StartVar : integer; StartVar : integer;
Method : TScriptMethod; Method : TScriptMethod;
InTypes : Boolean; InTypes : Boolean;
TempName : string; TempName : string;
BeginCount : integer; BeginCount : integer;
InGlobal : boolean; InGlobal : boolean;
InParams : boolean; InParams : boolean;
InVarSection : Boolean; InVarSection : Boolean;
Lex : TmwPasLex; Lex : TmwPasLex;
begin begin
Lex := TmwPasLex.Create; Lex := TmwPasLex.Create;
Lex.Origin := PChar(Self.ScriptToAnalyze); Lex.Origin := PChar(Self.ScriptToAnalyze);
InTypes := False; InTypes := False;
InMethod := False; InMethod := False;
InParams := False; InParams := False;
Method := nil; Method := nil;
BeginCount := 0; BeginCount := 0;
ExpectingType := False; ExpectingType := False;
WaitingForResult := False; WaitingForResult := False;
StartParam := 0; StartParam := 0;
InVarSection := False; InVarSection := False;
while (Lex.TokenID <> tkNull) do while (Lex.TokenID <> tkNull) do
begin; begin;
LastTk := Lex.TokenID; LastTk := Lex.TokenID;
LastPos := Lex.RunPos; LastPos := Lex.RunPos;
Lex.NextNoJunk; Lex.NextNoJunk;
case LastTk of case LastTk of
// tkInclude : ShowMessage(Lex.Token); // tkInclude : ShowMessage(Lex.Token);
// if (FParser.Token[Length(FParser.Token)] = '}') then // if (FParser.Token[Length(FParser.Token)] = '}') then
// FIncludes.Add(StringReplace(LowerCase(Trim(Copy(FParser.Token, 11, Length(FParser.Token) - 11))), '/', '\', [rfReplaceAll])); // FIncludes.Add(StringReplace(LowerCase(Trim(Copy(FParser.Token, 11, Length(FParser.Token) - 11))), '/', '\', [rfReplaceAll]));
tkProgram : if Lex.TokenID = tkIdentifier then tkProgram : if Lex.TokenID = tkIdentifier then
Self.ScriptName := Lex.Token; Self.ScriptName := Lex.Token;
tkRoundOpen: begin; tkRoundOpen: begin;
LastTkString := Lex.Token; LastTkString := Lex.Token;
if InMethod and InParams then if InMethod and InParams then
StartParam := 0; StartParam := 0;
end; end;
tkType : InVarSection := False; tkType : InVarSection := False;
tkBegin : begin; tkBegin : begin;
InVarSection := False; InVarSection := False;
if InMethod then if InMethod then
inc(BeginCount) inc(BeginCount)
else if BeginCount = 0 then else if BeginCount = 0 then
begin; begin;
InVarSection := false; InVarSection := false;
InMethod := true; InMethod := true;
HasMain := True; HasMain := True;
Method := Main; Method := Main;
Main.BeginPos := LastPos - 4; Main.BeginPos := LastPos - 4;
Inc(BeginCount); Inc(BeginCount);
end; end;
end; end;
tkCase : begin; tkCase : begin;
if InMethod then if InMethod then
inc(BeginCount); inc(BeginCount);
end; end;
tkEnd : if InMethod then tkEnd : if InMethod then
begin; begin;
Dec(BeginCount); Dec(BeginCount);
if BeginCount = 0 then if BeginCount = 0 then
begin; begin;
Method.EndPos := LastPos; Method.EndPos := LastPos;
InMethod := False; InMethod := False;
end; end;
end; end;
tkIdentifier: begin; tkIdentifier: begin;
if (InMethod and InParams) or (InVarSection) then if (InMethod and InParams) or (InVarSection) then
begin; begin;
{ if ExpectingType then { if ExpectingType then
begin; begin;
FormAnalyzer.SynEdit1.Lines.add(copy( FormAnalyzer.SynEdit1.Lines.Text,StartPos, LastPos - StartPos)); FormAnalyzer.SynEdit1.Lines.add(copy( FormAnalyzer.SynEdit1.Lines.Text,StartPos, LastPos - StartPos));
LastTKString := copy( FormAnalyzer.SynEdit1.Lines.GetText,StartPos, Lex.TokenPos - StartPos); LastTKString := copy( FormAnalyzer.SynEdit1.Lines.GetText,StartPos, Lex.TokenPos - StartPos);
for i := StartParam to Method.ParameterLen - 1 do for i := StartParam to Method.ParameterLen - 1 do
Method.Parameters[i].VarType := LastTkString; Method.Parameters[i].VarType := LastTkString;
end end
else else
Method.AddParam(LastTkString); } Method.AddParam(LastTkString); }
if not ExpectingType and InVarSection then if not ExpectingType and InVarSection then
Method.AddVar(LastTKString,'') else Method.AddVar(LastTKString,'') else
if not ExpectingType then if not ExpectingType then
Method.AddParam(LastTKString); Method.AddParam(LastTKString);
end; end;
end; end;
tkVar : begin; tkVar : begin;
if InMethod and Not InParams then if InMethod and Not InParams then
InVarSection := True; InVarSection := True;
if not InMethod then if not InMethod then
begin; begin;
Method := Main; Method := Main;
InGlobal := True; InGlobal := True;
InVarSection := True; InVarSection := True;
end; end;
if InVarSection then if InVarSection then
StartVar := Method.VarLen; StartVar := Method.VarLen;
LastTKString := Lex.Token; LastTKString := Lex.Token;
end; end;
tkConst : begin; tkConst : begin;
if not InMethod then if not InMethod then
InVarSection := false; InVarSection := false;
LastTKString := Lex.token; LastTKString := Lex.token;
end; end;
tkComma : begin; tkComma : begin;
LastTKString := Lex.Token; LastTKString := Lex.Token;
end; end;
tkColon : begin; tkColon : begin;
LastTkString := Lex.Token; LastTkString := Lex.Token;
if (InMethod and InParams) or InVarSection then if (InMethod and InParams) or InVarSection then
begin; begin;
ExpectingType := True; ExpectingType := True;
StartPos := LastPos; StartPos := LastPos;
end end
else if InMethod and WaitingForresult then else if InMethod and WaitingForresult then
begin; begin;
Method.Returns := Lex.Token; Method.Returns := Lex.Token;
WaitingForResult := False; WaitingForResult := False;
end; end;
end; end;
tkSemiColon : begin; tkSemiColon : begin;
if (InMethod and InParams) or (InVarSection) then if (InMethod and InParams) or (InVarSection) then
begin; begin;
if ExpectingType then if ExpectingType then
begin; begin;
LastTKString := Trim(copy( ScriptToAnalyze,StartPos + 1, LastPos - StartPos - 1)); LastTKString := Trim(copy( ScriptToAnalyze,StartPos + 1, LastPos - StartPos - 1));
if (InParams and InMethod) then if (InParams and InMethod) then
for i := StartParam to Method.ParameterLen - 1 do for i := StartParam to Method.ParameterLen - 1 do
Method.Parameters[i].VarType := LastTkString Method.Parameters[i].VarType := LastTkString
else else
for i := StartVar to Method.VarLen - 1 do for i := StartVar to Method.VarLen - 1 do
Method.Vars[i].VarType := LastTKString; Method.Vars[i].VarType := LastTKString;
ExpectingType := False; ExpectingType := False;
end; end;
LastTkString := Lex.Token; LastTkString := Lex.Token;
StartParam := Method.ParameterLen; StartParam := Method.ParameterLen;
StartVar := Method.VarLen; StartVar := Method.VarLen;
end; end;
end; end;
tkRoundClose: if InMethod and InParams then tkRoundClose: if InMethod and InParams then
begin; begin;
if ExpectingType then if ExpectingType then
begin; begin;
LastTKString := Trim(copy(ScriptToAnalyze,StartPos + 2, LastPos - StartPos - 2)); LastTKString := Trim(copy(ScriptToAnalyze,StartPos + 2, LastPos - StartPos - 2));
for i := StartParam to Method.ParameterLen - 1 do for i := StartParam to Method.ParameterLen - 1 do
Method.Parameters[i].VarType := LastTkString; Method.Parameters[i].VarType := LastTkString;
ExpectingType := False; ExpectingType := False;
end; end;
InParams := False; InParams := False;
end; end;
tkProcedure, tkProcedure,
tkFunction : begin; tkFunction : begin;
if (InVarSection or (InMethod and InParams)) and ExpectingType then if (InVarSection or (InMethod and InParams)) and ExpectingType then
begin; begin;
//Do nothing since the this procedure/function is a var ;-) //Do nothing since the this procedure/function is a var ;-)
end else end else
begin; begin;
if not InMethod then if not InMethod then
InVarSection := False; InVarSection := False;
if (not InTypes) and (not InVarSection) then if (not InTypes) and (not InVarSection) then
begin; begin;
WaitingForResult := LastTK = tkFunction; WaitingForResult := LastTK = tkFunction;
if Lex.TokenID <> tkIdentifier then if Lex.TokenID <> tkIdentifier then
begin; begin;
mDebugLn('Analyzer: No method name -> exiting'); mDebugLn('Analyzer: No method name -> exiting');
exit; exit;
end; end;
TempName := Lex.Token; TempName := Lex.Token;
TempInt := Lex.TokenPos; TempInt := Lex.TokenPos;
Lex.NextNoJunk; Lex.NextNoJunk;
if Lex.TokenID = tkRoundOpen then if Lex.TokenID = tkRoundOpen then
InParams := True InParams := True
else if Lex.TokenID = tkPoint then else if Lex.TokenID = tkPoint then
begin; begin;
mDebugLn('Analyzer: In class definition?'); mDebugLn('Analyzer: In class definition?');
// FormAnalyzer.SynEdit2.Lines.add('In class definition *cough*'); // FormAnalyzer.SynEdit2.Lines.add('In class definition *cough*');
Lex.NextNoJunk; Lex.NextNoJunk;
TempName := Lex.Token; TempName := Lex.Token;
end else if ((Lex.TokenID = tkSemicolon) xor WaitingForResult) or ((Lex.TokenID = tkColon) xor WaitingForResult) then end else if ((Lex.TokenID = tkSemicolon) xor WaitingForResult) or ((Lex.TokenID = tkColon) xor WaitingForResult) then
begin; begin;
InParams := False; InParams := False;
end else end else
begin; begin;
mDebugLn('Analyzer: You''re missing some stuff in the procedure declaration'); mDebugLn('Analyzer: You''re missing some stuff in the procedure declaration');
Exit; Exit;
end; end;
if InMethod then if InMethod then
Method := Method.AddMethod(WaitingForResult,TempName) Method := Method.AddMethod(WaitingForResult,TempName)
else else
Method := Self.AddMethod(WaitingForResult,TempName); Method := Self.AddMethod(WaitingForResult,TempName);
InMethod := true; InMethod := true;
Method.Beginpos := TempInt; Method.Beginpos := TempInt;
end; end;
end; end;
end; end;
end; end;
// SynEdit2.Lines.Add(TokeToString(Lex.TokenID) + '-' + Lex.Token); // SynEdit2.Lines.Add(TokeToString(Lex.TokenID) + '-' + Lex.Token);
end; end;
end; end;
end. end.

View File

@ -1,22 +1,22 @@
{ This is an automatically generated lazarus resource file } { This is an automatically generated lazarus resource file }
LazarusResources.Add('TSimbaUpdateForm','FORMDATA',[ LazarusResources.Add('TSimbaUpdateForm','FORMDATA',[
'TPF0'#16'TSimbaUpdateForm'#15'SimbaUpdateForm'#4'Left'#3#6#1#6'Height'#3'K'#1 'TPF0'#16'TSimbaUpdateForm'#15'SimbaUpdateForm'#4'Left'#3#6#1#6'Height'#3'K'#1
+#3'Top'#3#219#0#5'Width'#3#217#1#13'ActiveControl'#7#12'UpdateButton'#11'Bor' +#3'Top'#3#219#0#5'Width'#3#217#1#13'ActiveControl'#7#12'UpdateButton'#11'Bor'
+'derIcons'#11#12'biSystemMenu'#10'biMinimize'#0#7'Caption'#6#12'Update Simba' +'derIcons'#11#12'biSystemMenu'#10'biMinimize'#0#7'Caption'#6#12'Update Simba'
+#12'ClientHeight'#3'K'#1#11'ClientWidth'#3#217#1#8'OnCreate'#7#10'FormCreate' +#12'ClientHeight'#3'K'#1#11'ClientWidth'#3#217#1#8'OnCreate'#7#10'FormCreate'
+#6'OnShow'#7#15'CleanUpdateForm'#10'LCLVersion'#6#6'0.9.29'#0#12'TProgressBa' +#6'OnShow'#7#15'CleanUpdateForm'#10'LCLVersion'#6#6'0.9.29'#0#12'TProgressBa'
+'r'#16'DownloadProgress'#4'Left'#2#8#6'Height'#2#29#3'Top'#3#12#1#5'Width'#3 +'r'#16'DownloadProgress'#4'Left'#2#8#6'Height'#2#29#3'Top'#3#12#1#5'Width'#3
+#198#1#7'Anchors'#11#6'akLeft'#7'akRight'#8'akBottom'#0#6'Smooth'#9#8'TabOrd' +#198#1#7'Anchors'#11#6'akLeft'#7'akRight'#8'akBottom'#0#6'Smooth'#9#8'TabOrd'
+'er'#2#0#0#0#7'TButton'#12'UpdateButton'#4'Left'#3#131#1#6'Height'#2#25#3'To' +'er'#2#0#0#0#7'TButton'#12'UpdateButton'#4'Left'#3#131#1#6'Height'#2#25#3'To'
+'p'#3','#1#5'Width'#2'K'#7'Anchors'#11#7'akRight'#8'akBottom'#0#7'Caption'#6 +'p'#3','#1#5'Width'#2'K'#7'Anchors'#11#7'akRight'#8'akBottom'#0#7'Caption'#6
+#7'Update!'#7'OnClick'#7#17'UpdateButtonClick'#8'TabOrder'#2#1#0#0#7'TButton' +#7'Update!'#7'OnClick'#7#17'UpdateButtonClick'#8'TabOrder'#2#1#0#0#7'TButton'
+#11'CloseButton'#4'Left'#2#8#6'Height'#2#25#3'Top'#3','#1#5'Width'#2'K'#7'An' +#11'CloseButton'#4'Left'#2#8#6'Height'#2#25#3'Top'#3','#1#5'Width'#2'K'#7'An'
+'chors'#11#6'akLeft'#8'akBottom'#0#7'Caption'#6#5'Close'#7'OnClick'#7#16'Clo' +'chors'#11#6'akLeft'#8'akBottom'#0#7'Caption'#6#5'Close'#7'OnClick'#7#16'Clo'
+'seButtonClick'#8'TabOrder'#2#2#0#0#5'TMemo'#9'UpdateLog'#4'Left'#2#8#6'Heig' +'seButtonClick'#8'TabOrder'#2#2#0#0#5'TMemo'#9'UpdateLog'#4'Left'#2#8#6'Heig'
+'ht'#3#253#0#3'Top'#2#8#5'Width'#3#198#1#7'Anchors'#11#5'akTop'#6'akLeft'#7 +'ht'#3#253#0#3'Top'#2#8#5'Width'#3#198#1#7'Anchors'#11#5'akTop'#6'akLeft'#7
+'akRight'#8'akBottom'#0#8'TabOrder'#2#3#0#0#6'TLabel'#13'DownloadSpeed'#4'Le' +'akRight'#8'akBottom'#0#8'TabOrder'#2#3#0#0#6'TLabel'#13'DownloadSpeed'#4'Le'
+'ft'#2'`'#6'Height'#2#14#3'Top'#3'2'#1#5'Width'#2'N'#7'Anchors'#11#6'akLeft' +'ft'#2'`'#6'Height'#2#14#3'Top'#3'2'#1#5'Width'#2'N'#7'Anchors'#11#6'akLeft'
+#8'akBottom'#0#7'Caption'#6#13'DownloadSpeed'#11'ParentColor'#8#7'Visible'#8 +#8'akBottom'#0#7'Caption'#6#13'DownloadSpeed'#11'ParentColor'#8#7'Visible'#8
+#0#0#0 +#0#0#0
]); ]);

View File

@ -1,64 +1,64 @@
program new; program new;
{$LoadDLL libsmart} {$LoadDLL libsmart}
function IsKeyDown(C:Char): Boolean; function IsKeyDown(C:Char): Boolean;
begin begin
Result := SmartIsKeyDown(ord(c)); Result := SmartIsKeyDown(ord(c));
end; end;
procedure MoveMouse(x, y: Integer); procedure MoveMouse(x, y: Integer);
begin begin
SmartMoveMouse(x, y); SmartMoveMouse(x, y);
end; end;
procedure HoldMouse(x, y: Integer; left: Boolean); procedure HoldMouse(x, y: Integer; left: Boolean);
begin begin
SmartHoldMouse(x, y, left); SmartHoldMouse(x, y, left);
end; end;
procedure ReleaseMouse(x, y: Integer; left: Boolean); procedure ReleaseMouse(x, y: Integer; left: Boolean);
begin begin
SmartReleaseMouse(x, y, left); SmartReleaseMouse(x, y, left);
end; end;
procedure KeyUp(key: byte); procedure KeyUp(key: byte);
begin begin
If Key = 13 Then If Key = 13 Then
Key := 10; Key := 10;
SmartReleaseKey(key); SmartReleaseKey(key);
end; end;
procedure KeyDown(key: byte); procedure KeyDown(key: byte);
begin begin
If Key = 13 Then If Key = 13 Then
Key := 10; Key := 10;
SmartHoldKey(key); SmartHoldKey(key);
end; end;
procedure SendKeys(S: String); procedure SendKeys(S: String);
begin begin
SmartSendKeys(S); SmartSendKeys(S);
end; end;
procedure GetMousePos(var x, y: Integer); procedure GetMousePos(var x, y: Integer);
begin begin
SmartGetMousePos(x, y); SmartGetMousePos(x, y);
end; end;
function GetColor(x, y: Integer): Integer; function GetColor(x, y: Integer): Integer;
begin begin
result:= SmartGetColor(x, y); result:= SmartGetColor(x, y);
end; end;
var var
w,h:integer; w,h:integer;
begin begin
SmartSetup('http://world19.runescape.com/', 'plugin.js?param=o0,a1,m0', 765, 503); SmartSetup('http://world19.runescape.com/', 'plugin.js?param=o0,a1,m0', 765, 503);
SetTargetArray(SmartImageArray(), 765,503); SetTargetArray(SmartImageArray(), 765,503);
getclientdimensions(w,h); getclientdimensions(w,h);
writeln(inttostr(w) + ' , ' + inttostr(h)); writeln(inttostr(w) + ' , ' + inttostr(h));
if findcolortolerance(w,h,00000,0,0,764,502,300) then if findcolortolerance(w,h,00000,0,0,764,502,300) then
smartmovemouse(w,h); smartmovemouse(w,h);
savescreenshot('/tmp/smart.bmp'); savescreenshot('/tmp/smart.bmp');
//Wait(5000); //Wait(5000);
end. end.

View File

@ -1,142 +1,142 @@
program new; program new;
var var
Bmpz : integer; Bmpz : integer;
w,h : integer; w,h : integer;
begin begin
Bmpz := BitmapFromString(166, 73, 'beNq9Xf2PVeURtv+Jv' + Bmpz := BitmapFromString(166, 73, 'beNq9Xf2PVeURtv+Jv' +
'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' +
'RYhmIZ8T7T9P0vc3RiqXKoFG5Dc0N6mxV6zx4FE+9mgoowN5QC4zN' + 'RYhmIZ8T7T9P0vc3RiqXKoFG5Dc0N6mxV6zx4FE+9mgoowN5QC4zN' +
'BD7iaAtEI2aTJCTP1QtHsxKpUaqIbxlbxo6ag9O+FUlUjpmmQyNJV' + 'BD7iaAtEI2aTJCTP1QtHsxKpUaqIbxlbxo6ag9O+FUlUjpmmQyNJV' +
'l4vY9ExdaG43KNgY6bkeQ1JEo04ZWUR/6A0JUq0O31yjpN7uRlLle' + 'l4vY9ExdaG43KNgY6bkeQ1JEo04ZWUR/6A0JUq0O31yjpN7uRlLle' +
'NP7NOnh6TvsNP11KvR2Sc7UKjNtKzHr2isjSys+MAhLMfGwi2+nr2' + 'NP7NOnh6TvsNP11KvR2Sc7UKjNtKzHr2isjSys+MAhLMfGwi2+nr2' +
'/pk1Ohk/tOMz/7hGW12r3RiSUqpjVhjN615P/VupUgRX29whhex1l' + '/pk1Ohk/tOMz/7hGW12r3RiSUqpjVhjN615P/VupUgRX29whhex1l' +
'B71n/m7YG1d4jlftxahcafCYx9mpXKfulwlobOuXL+WfNuW0jXfM0' + 'B71n/m7YG1d4jlftxahcafCYx9mpXKfulwlobOuXL+WfNuW0jXfM0' +
'MPtd22/qi+bbZeZpvZKmK5BKk0qQIBgV2VXWgdKb/kvvTbmobqkTv' + 'MPtd22/qi+bbZeZpvZKmK5BKk0qQIBgV2VXWgdKb/kvvTbmobqkTv' +
'/6L3ihtw9SzFOOb7tYt5Q2Dp7rzrubFc+yzj3imf527htpMSNWOcL' + '/6L3ihtw9SzFOOb7tYt5Q2Dp7rzrubFc+yzj3imf527htpMSNWOcL' +
'ejGx51C0lFuRbU42O1pCs6sYQzp9FGoErtbltqVfEIdqEhaev8AbO' + 'ejGx51C0lFuRbU42O1pCs6sYQzp9FGoErtbltqVfEIdqEhaev8AbO' +
'R22+lRJUS0U32hStvSAPbmuGDo+rwOnIDxRW625Xm2lWyLSMmurRJ' + 'R22+lRJUS0U32hStvSAPbmuGDo+rwOnIDxRW625Xm2lWyLSMmurRJ' +
'U4LIc4voSVrUGRjfPBRb1VjY7gwba2hrDnrlaFqzlpYcTrTNaa4un' + 'U4LIc4voSVrUGRjfPBRb1VjY7gwba2hrDnrlaFqzlpYcTrTNaa4un' +
'rOdgbznbsxWavQ/ieNJF2DxC0pn/7xJYw+OpoqhqTWnU7Pi1UEUOl' + 'rOdgbznbsxWavQ/ieNJF2DxC0pn/7xJYw+OpoqhqTWnU7Pi1UEUOl' +
'gIHX+Nr7duoP7h1DRsgsNPqrLaZU5zk+IlZZqSN5YCh9QUjWhpN6l' + 'gIHX+Nr7duoP7h1DRsgsNPqrLaZU5zk+IlZZqSN5YCh9QUjWhpN6l' +
'm9FFyQuWIWhU84FUOdspksM4okml9bq4J+EmnE61lUI0J69vEdNUq' + 'm9FFyQuWIWhU84FUOdspksM4okml9bq4J+EmnE61lUI0J69vEdNUq' +
'Q4lZpZG+tLhS++s2ClLUXE21Aqzg7ia7J6X1renO0Bmvuv8lGs5W3' + 'Q4lZpZG+tLhS++s2ClLUXE21Aqzg7ia7J6X1renO0Bmvuv8lGs5W3' +
'xXcE6wyaNQKRduHgE6sW/fWSSLdbfWcTFXPsNJ5LO9wTAveUxcxvf' + 'xXcE6wyaNQKRduHgE6sW/fWSSLdbfWcTFXPsNJ5LO9wTAveUxcxvf' +
'WV6psUv423Syd8dbLrO/HqwPu2RiQSilKMegawti01UJtJ3w4iIe2' + 'WV6psUv423Syd8dbLrO/HqwPu2RiQSilKMegawti01UJtJ3w4iIe2' +
'ry1KUA7kh/QmPgetGv8Ew37Q1Qa9uRUUfsEZibUP/SZ1saRd9dbv1' + 'ry1KUA7kh/QmPgetGv8Ew37Q1Qa9uRUUfsEZibUP/SZ1saRd9dbv1' +
'gZVSTtuVpMt0PkzqE5VETZWA9ORAYtxORWo4HJuqd6EyhpGdBsanM' + 'gZVSTtuVpMt0PkzqE5VETZWA9ORAYtxORWo4HJuqd6EyhpGdBsanM' +
'pM+fH7qXVRxSZ6WbsS9QJMebtBVLH1PqzZk07pdJOxutBsNn0huof' + 'pM+fH7qXVRxSZ6WbsS9QJMebtBVLH1PqzZk07pdJOxutBsNn0huof' +
'6H6avb2+2V0KYgqUdS1VFABNOoOkm3FI98BHDT0ADJgrLZi5G3j3a' + '6H6avb2+2V0KYgqUdS1VFABNOoOkm3FI98BHDT0ADJgrLZi5G3j3a' +
'Po+8BCV1cWQ=='); 'Po+8BCV1cWQ==');
GetBitmapSize(bmpz,w,h); GetBitmapSize(bmpz,w,h);
Writeln(inttostr(w) + '-' + inttostr(h)); Writeln(inttostr(w) + '-' + inttostr(h));
SetBitmapSize(Bmpz,w div 2, h div 2); SetBitmapSize(Bmpz,w div 2, h div 2);
SaveBitmap(Bmpz,'/tmp/test.bmp'); SaveBitmap(Bmpz,'/tmp/test.bmp');
//FreeBitmap(Bmpz); //FreeBitmap(Bmpz);
Bmpz := LoadBitmap('/tmp/test.bmp'); Bmpz := LoadBitmap('/tmp/test.bmp');
SetBitmapSize(bmpz,w,h); SetBitmapSize(bmpz,w,h);
SaveBitmap(Bmpz,'/tmp/test2.bmp'); SaveBitmap(Bmpz,'/tmp/test2.bmp');
end. end.