有哪些可以在网上做兼职的网站开建筑公司需要什么条件

当前位置: 首页 > news >正文

有哪些可以在网上做兼职的网站,开建筑公司需要什么条件,美食网站开发流程,wordpress中php代码只能一行一行写Scintilla开源库使用指南#xff08;一#xff09; Scintilla是一个免费、跨平台、支持语法高亮的编辑控件。它完整支持源代码的编辑和调试#xff0c;包括语法高亮、错误指示、代码完成#xff08;code completion#xff09;和调用提示(call tips)。能包含标记#xff…Scintilla开源库使用指南一 Scintilla是一个免费、跨平台、支持语法高亮的编辑控件。它完整支持源代码的编辑和调试包括语法高亮、错误指示、代码完成code completion和调用提示(call tips)。能包含标记marker的页边margin可用于标记断点、折叠和高亮当前行。 Scintilla是一个免费、跨平台、支持语法高亮的编辑控件。它完整支持源代码的编辑和调试包括语法高亮、错误指示、代码完成 code completion和调用提示(call tips)。能包含标记marker的页边margin可用于标记断点、折叠和高亮当前行。 可以从这里下载Scintilla库Download Scintilla 这里有Scinilla相关的库下载比如wxScintilla就是Scintilla的wxWidgets移植版。Scintilla and SciTE Related Sites 另外Scintilla的作者为了演示这个东东的功能编写了一个叫SciTE的演示程序。不过这个程序的功能已经强大到足以作为我 们的常用代码编辑器很值得下载下来学习学习。 老规矩还是从编译说起 偶只在Windows下编译过所以只好说说Windows环境下的编译方法。对于Linux没试过(丢人-_-) 下载、解压略过不提 首先进入scintilla的win32目录: cd scintilla\win32 对于mingw输入 mingw32-make 对于VC6以上版本输入 nmake -f scintilla.mak 对于VC6(没试过从Readme里看来的)输入 nmake -f scintilla_vc6.mak 对于CBuilder输入 make -fscintilla.mak 编译完成后在bin目录里会得到Scintilla.dll和SciLexer.dll文件SciLexer.dll是包含了语法解析器 Lexer的Scintilla控件一般来说我们只要用它就可以了。 需要说明的是不管是用什么编译器生成的DLL文件都可以供给其它编译器使用(就象系统DLL一样任何编译器都能使用)所以不用为各种编译器都编译 一份。 如果觉得生成的SciLexer.dll太大的话可以考虑去除自带的部分语法解析器。比如你打算只用它来高亮C代码的话可以 进到src目录里移除除LexCPP.cxx以外的所有Lex.cxx文件执行LexGen.py重建make文件和KeyWords.cxx文件需要安装Python。重新按前面的方法编译这样生成的SciLexer.dll就只带有C语法解析器了体积也大小减小了我VC编译的结果是从1.4M减小到 206K。 启用Scintilla作为编辑控件 要启用Scintilla首先当然是要加载之前编译的DLL文件啦~~ ::LoadLibrary(_T(SciLexer.dll)); SciLexer.dll加载后会自动以Scintilla作为类名注册一个窗体类我们只要直接用这个类名建立窗体就可以了 ::CreateWindow(_T(Scintilla),…); 演示在CBuilder下编写 由于Scintilla主要是窗体操作为了减少不必要的窗体代码主要是偷懒外加推广一下CBuilder呵呵这里使用CBuilder 来写演示程序。对于一些CBuilder的VCL库特有的东东后面会有解释的。 首先新建一个窗体应用程序 然后在WinMain里载入SciLexer.dll: WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) {LoadLibrary(_T(SciLexer.dll));… int) {LoadLibrary(_T(SciLexer.dll));…最后在TForm1的构造里建立Scintilla窗体 #define SCINT_ID 1010__fastcall TForm1::TForm1(TComponent Owner): TForm(Owner) {::CreateWindow(_T(Scintilla),NULL, WS_CHILD|WS_CLIPCHILDREN|WS_CLIPSIBLINGS|WS_VISIBLE,0,0,ClientWidth,ClientHeight,Handle,(HMENU)SCINT_ID, HInstance, NULL); }__fastcall TForm1::TForm1(TComponent* Owner): TForm(Owner) {::CreateWindow(_T(Scintilla),NULL, WS_CHILD|WS_CLIPCHILDREN|WS_CLIPSIBLINGS|WS_VISIBLE,0,0,ClientWidth,ClientHeight,Handle,(HMENU)SCINT_ID, HInstance, NULL); }很简单是吧对于Scintilla来说没什么好解释的了。 这里主要给不了解CBuilder的童鞋介绍一下VCL的东东以便于接下来的讲解和代码阅读(以及移植到其它编译器中)。 TForm1是一个CBuilder自动生成的窗体类它继承自TForm可以把它看成是WS_OVERLAPPEDWINDOW风格的HWND的 封装。ClientWidth和ClientHeight是TForm的属性看名字就知道它是客户区(ClientRect)的宽和高Handle也是TForm的属性就是该窗体的HWNDHInstance不用解释了吧这是VCL的一个全局变量。 现在我们的成果是这样的   现在看上去还比较土接下来我们开始配置它为使它成为可与VS媲美的代码编程器而战 配置Scintilla的两种方法 配置Scintilla控件是通过向该控件发送配置命令实现的各种配置命令可以在doc目录下找到或者是这里Scintilla Documentation后面的大部分事情都是在介绍这些配置命令。 有两种方法来发送配置命令一种是直接使用SendMessage API。另一种是取得直接控制函数通过函数来执行配置命令。 在Windows下第二种方法要比第一种快得多。 直接控制函数的定义为 typedef sptr_t (*SciFnDirect)(sptr_t ptr, unsigned int iMessage, uptr_t wParam, sptr_t lParam);sptr_t (SciFnDirect)(sptr_t ptr, unsigned int iMessage, uptr_t wParam, sptr_t lParam);后三个参数和SendMessage的后三个参数一样。 SciFnDirect的第一个参数用于指定具体的Scintilla窗体它类似于窗体的HWND又不完全相同姑且也称之为句柄吧。它是用一个配置命 令取得的下面马上就要讲到。 取得直接控制函数和句柄的方法是 SciFnDirect fnDirect (SciFnDirect)SendMessage(hwndEditor,SCI_GETDIRECTFUNCTION,0,0); sptr_t ptrDirect (sptr_t)SendMessage(hwndEditor,SCI_GETDIRECTPOINTER,0,0); 0,0); sptr_t ptrDirect (sptr_t)SendMessage(hwndEditor,SCI_GETDIRECTPOINTER,0,0);取得这两样东西以后就可以直接执行配置命令了如: m_fnDirect(fnDirect, SCI_CLEARALL, 0, 0); 0, 0);演示代码编写成员函数SendEditor用于配置之前建立的Scintilla控件。 #include Scintilla.h #include SciLexer.h     class TForm1 : public TForm { __published:    // IDE-managed Components private :    // User declarations      SciFnDirect m_fnDirect;      sptr_t m_ptrDirect; public :        // User declarations      __fastcall TForm1(TComponent Owner);      sptr_t SendEditor(unsigned int iMessage, uptr_t wParam 0, sptr_t lParam 0)      {          return m_fnDirect(m_ptrDirect, iMessage, wParam, lParam);      } };     #define SCINT_ID 1010 __fastcall TForm1::TForm1(TComponent* Owner)      : TForm(Owner) {      HWND hwndEditor ::CreateWindow(_T( Scintilla ),          NULL, WS_CHILD|WS_CLIPCHILDREN|WS_CLIPSIBLINGS|WS_VISIBLE,          0,0,ClientWidth,ClientHeight,          Handle,          ( HMENU )SCINT_ID, HInstance, NULL);      m_fnDirect (SciFnDirect)SendMessage(hwndEditor,SCI_GETDIRECTFUNCTION,0,0);      m_ptrDirect (sptr_t)SendMessage(hwndEditor,SCI_GETDIRECTPOINTER,0,0); } 让Scintilla支持语法高亮 有了前面的SendEditor控制函数我们就可以配置语法高亮了下面这段代码可以使我们的Scintilla控件显示C语法高亮代码 const char * g_szKeywords      asm auto bool break case catch char class const      const_cast continue default delete do double      dynamic_cast else enum explicit extern false finally      float for friend goto if inline int long mutable      namespace new operator private protected public      register reinterpret_cast register return short signed      sizeof static static_cast struct switch template      this throw true try typedef typeid typename      union unsigned using virtual void volatile      wchar_t while ; … SendEditor(SCI_SETLEXER, SCLEX_CPP); //C语法解析SendEditor(SCI_SETKEYWORDS, 0, (sptr_t)g_szKeywords);//设置关键字// 下面设置各种语法元素前景色SendEditor(SCI_STYLESETFORE, SCE_C_WORD, 0x00FF0000);   //关键字SendEditor(SCI_STYLESETFORE, SCE_C_STRING, 0x001515A3); //字符串SendEditor(SCI_STYLESETFORE, SCE_C_CHARACTER, 0x001515A3); //字符SendEditor(SCI_STYLESETFORE, SCE_C_PREPROCESSOR, 0x00808080);//预编译开关SendEditor(SCI_STYLESETFORE, SCE_C_COMMENT, 0x00008000);//块注释SendEditor(SCI_STYLESETFORE, SCE_C_COMMENTLINE, 0x00008000);//行注释SendEditor(SCI_STYLESETFORE, SCE_C_COMMENTDOC, 0x00008000);//文档注释/开头 要支持语法高亮要做三件事 一、选定语法解析器 语法解析器用于把一大段代码分解成一个个的单词(token)另外还用于代码折叠的控制后面会说到。 选定语法解析器的命令是SCI_SETLEXER如 SendEditor(SCI_SETLEXER, SCLEX_CPP); 除了SCLEX_CPP以外还有SCLEX_HTML、SCLEX_PERL、SCLEX_SQL、SCLEX_VB等一大堆定 义在SciLexer.h里。现代的IDE应该可以定位SCLEX_CPP定义它周围的SCLEX_XXX就是其它的语法解析器。 另外也可以用SCI_SETLEXERLANGUAGE命令如 SendEditor(SCI_SETLEXERLANGUAGE, 0, (sptr_t) cpp ); SCI_SETLEXERLANGUAGE接受的是一个字符串参数这个字符串定义于代码解析器源代码src\lex*.cxx 最后面LexerModule开头的那行代码那里的第三个参数就是。 二、设置关键字 语法解析只负责把代码拆分开至于哪些是关键字还得我们来指定。 这种方式带来了些许的灵活性比如我们要高亮一种自定义的语言这种语言的风格与C类似如Java、C#、php等我们也 可以选定SCLEX_CPP作为语法解析器然后定义自己的关键字。(所以不需要把各种解析器都编译进DLL文件里) 设置关键字的命令是SCI_SETKEYWORDS。它的wParam用于指定关键字种类可以是0~8即9种类型这样我们可以做 更细致的区分如把关键字for if和int bool区分显示。lParam指定关键字以空格分隔。     三、设置文本元素对应的字体风格 即字体、前景色、背景色、斜体粗体等 设置字体风格的命令以SCI_STYLE作为前缀这组命令比较多为了不浪费篇幅偶这里只列举几个其它的可以参考这里  http://scintilla.sourceforge.net/ScintillaDoc.html#StyleDefinition。 SCI_STYLESETBACK( int styleNumber, int colour) //设置背景色SCI_STYLESETFORE(int styleNumber, int colour) //设置前景色SCI_STYLESETFONT(int styleNumber, char *fontName) //设置字体SCI_STYLESETSIZE(int styleNumber, int sizeInPoints)//设置字号SCI_STYLESETBOLD(int styleNumber, bool bold) //设置粗体 这里的styleNumber是指文本元素如关键字、行号、控制字串等。前面代码中的SCE_C_XXXX是C解析器分解出的 语法相关的元素。另外还有STYLE_DEFAULT默认、STYLE_LINENUMBER行号、STYLE_BRACELIGHT括号匹 配、STYLE_BRACEBAD括号失配、STYLE_CONTROLCHAR控制字符、STYLE_INDENTGUIDE缩进线、 STYLE_CALLTIP调用提示。 SCI_STYLECLEARALL //把所有文本元素设置成与STYLE_DEFAULT相同的风格 Scintilla文档建议的顺序是先向STYLE_DEFAULT设置一些通用风格然后再用SCI_STYLECLEARALL 把所有元素风格重置成与STYLE_DEFAULT一致最后单独设置其它元素。 演示我们的编辑器支持C高亮啦 #include Scintilla.h #include SciLexer.h … void TForm1::setCppStyle() {      const char * szKeywords1          asm auto break case catch class const          const_cast continue default delete do double          dynamic_cast else enum explicit extern false          for friend goto if inline mutable          namespace new operator private protected public          register reinterpret_cast return signed          sizeof static static_cast struct switch template          this throw true try typedef typeid typename          union unsigned using virtual volatile while ;      const char * szKeywords2          bool char float int long short void wchar_t ;      // 设置全局风格      SendEditor(SCI_STYLESETFONT, STYLE_DEFAULT,(sptr_t) Courier New );      SendEditor(SCI_STYLESETSIZE, STYLE_DEFAULT,10);      SendEditor(SCI_STYLECLEARALL);      //C语法解析      SendEditor(SCI_SETLEXER, SCLEX_CPP);      SendEditor(SCI_SETKEYWORDS, 0, (sptr_t)szKeywords1); //设置关键字      SendEditor(SCI_SETKEYWORDS, 1, (sptr_t)szKeywords2); //设置关键字      // 下面设置各种语法元素风格      SendEditor(SCI_STYLESETFORE, SCE_C_WORD, 0x00FF0000);   //关键字      SendEditor(SCI_STYLESETFORE, SCE_C_WORD2, 0x00800080);   //关键字      SendEditor(SCI_STYLESETBOLD, SCE_C_WORD2, TRUE);   //关键字      SendEditor(SCI_STYLESETFORE, SCE_C_STRING, 0x001515A3); //字符串      SendEditor(SCI_STYLESETFORE, SCE_C_CHARACTER, 0x001515A3); //字符      SendEditor(SCI_STYLESETFORE, SCE_C_PREPROCESSOR, 0x00808080); //预编译开关      SendEditor(SCI_STYLESETFORE, SCE_C_COMMENT, 0x00008000); //块注释      SendEditor(SCI_STYLESETFORE, SCE_C_COMMENTLINE, 0x00008000); //行注释      SendEditor(SCI_STYLESETFORE, SCE_C_COMMENTDOC, 0x00008000); //文档注释/开头          SendEditor(SCI_SETCARETLINEVISIBLE, TRUE);      SendEditor(SCI_SETCARETLINEBACK, 0xb0ffff); }     __fastcall TForm1::TForm1(TComponent* Owner)      : TForm(Owner) {      …      setCppStyle(); } 看上去不错如果你愿意还可以加上当前行高亮功能 SendEditor(SCI_SETCARETLINEVISIBLE, TRUE); SendEditor(SCI_SETCARETLINEBACK, 0xb0ffff); 最后建议把TAB宽度由默认的8改为4依个人习惯~~  SendEditor(SCI_SETTABWIDTH, 4); 现在我们的成果是这样的