【问题标题】:How to start a project with Scintilla?如何使用 Scintilla 启动项目?
【发布时间】:2012-04-29 12:00:36
【问题描述】:

我一直在尝试基于 Scintilla 编辑器做一个项目,由于我是新手,所以我不知道如何实际开始一个项目。我按照自述文件中的步骤进行操作,能够在 Windows 上构建 Scintilla,现在正试图弄清楚我接下来应该做什么。

我们非常感谢任何形式的回答/建议/建议。谢谢。

【问题讨论】:

    标签: .net scintilla


    【解决方案1】:

    当我开始使用我的词法分析器时,我发现它有点令人生畏,但一切都归结为几个重要的想法:

    • 将词法分析器放在词法分析器文件夹中
    • 告诉 scintilla 您添加的词法分析器
    • 将常量添加到 scintilla.iface
    • 告诉 scintilla 您自己的常量(如果您使用任何常量)
    • 代码/编译 + 重复直到满意

    一个实际的例子是:

    创建 Lexer 模板后,将其命名为 LexNEW.cxx

    • 将 LexNew.cxx 放入 /lexers 文件夹中
    • 输入/src并运行LexGen.py,这告诉scintilla有一个新的词法分析器,将其添加到Scintilla.h

    现在您将常量添加到 .iface 文件中。最重要的是:val SCLEX_NEW=108,其中 108 是未使用的 ID 号,lex new=SCLEX_NEW SCE_NEW_ 其中 new 是您的词法分析器的有效唯一短标识符。

    将它们放在与其他定义相同的部分(以避免以后混淆),如果有疑问,请使用其他定义之一作为模板!

    现在在lex new= 行下方,您可以定义自己的常量值,例如:

    val SCE_NEW_DEFAULT=0
    val SCE_NEW_COMMENTLINE=1
    val SCE_NEW_COMMENTBLOCK=2
    val SCE_NEW_ERROR=31
    

    在这一步之后,你几乎准备好了。

    • 输入 /include 并运行 Hface.py,它会告诉 scintilla 您的新常量。

    如果你的 lex 代码有效,那么你就可以编译了。

    记住每次创建新常量时都要重复最后一步。 HFace.py 脚本将这些值添加到 SciLexer.h,如果您不想每次都执行两个步骤,您可以手动执行。

    这就是我的朋友,编译后确保你的程序设置你的词法分析器,比如:sci.SetLexer(108),并为每个状态设置一些颜色,比如sci.StyleSetFore(01, 0x008800) // SCE_NEW_COMMENTLINE等等。

    您将要使用的最后一件事是SciLexer.dll,它包含所有词法分析器而不是scintilla.dll 祝你好运!

    【讨论】:

      【解决方案2】:

      您可能会发现Scintilla for .NET 让您领先一步......

      【讨论】:

        【解决方案3】:

        我正在从事基于 Scintilla 的项目,并与您分享我的一些经验。 要开始一个项目,首先下载 SciLexer.dll、SciLexer.h 和 Scintilla.h。

        然后基于框架构建你的演示项目:

           #include "Scintilla.h"
           #include "SciLexer.h" 
           static HWND global_editor_win = NULL;
        
              int WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow)
               {            
                   HMODULE hmod = ::LoadLibrary(_T("SciLexer.dll"));       
                   //other winmain code.
               }
        
              LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
               {
                RECT rc;       
                switch (message)   {
                   case WM_CREATE:
                        GetClientRect(hWnd, &rc);
                        global_editor_win = ::CreateWindow(_T("Scintilla"), "Source",
                                      WS_CHILD | WS_VSCROLL | WS_HSCROLL | WS_CLIPCHILDREN,
                                      rc.left, rc.top, rc.right - rc.left, rc.bottom - rc.top,
                                      hWnd, (HMENU)1001, hInst, 0); 
        
                       ::SendMessage(global_editor_win , SCI_SETTEXT, 0, (LPARAM)"hello, world");   
                        ShowWindow(global_editor_win , SW_SHOW);
                       break;   
                  }
               }
        

        享受吧!

        【讨论】:

          猜你喜欢
          • 2011-01-24
          • 2023-04-09
          • 1970-01-01
          • 1970-01-01
          • 2018-12-27
          • 2019-09-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多