首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用Scintilla开始一个项目?

如何用Scintilla开始一个项目?
EN

Stack Overflow用户
提问于 2012-04-29 20:00:37
回答 3查看 594关注 0票数 0

我一直在尝试做一个基于Scintilla编辑器的项目,因为我是一个新手,我不知道如何真正开始一个项目。我遵循了自述文件中的步骤,能够在Windows上构建Scintilla,现在正在尝试弄清楚我下一步应该做什么。

任何形式的回答/建议/建议都是非常感谢的。谢谢。

EN

回答 3

Stack Overflow用户

发布于 2012-11-04 03:51:09

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

  • 将词法分析器放入词法分析器文件夹
  • 告诉scintilla关于你添加的词法分析器
  • 将你的常量添加到词法分析器scintilla中关于你自己的常量(如果你使用any)
  • Code/Compile + Repeat直到满足

为止

一个实际的例子是:

创建词法分析器模板后,将其命名为LexNEW.cxx

  • Put LexNew.cxx in /lexers folder
  • Enter in /src并运行LexGen.py,这会通过将新的词法分析器添加到Scintilla.h

来告诉scintilla有一个新的词法分析器。h

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

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

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

代码语言:javascript
复制
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脚本将这些值添加到SciLexpon.h中,如果您不想每次都执行两个步骤,则可以手动添加这些值。

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

最后,您需要使用SciLexer.dll,它包含所有的lexer,而不是scintilla.dll,祝您好运!

票数 1
EN

Stack Overflow用户

发布于 2012-05-05 01:01:19

你可能会发现Scintilla for .NET给了你一个先机...

票数 0
EN

Stack Overflow用户

发布于 2013-04-22 18:34:43

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

然后基于该框架构建您的demo项目:

代码语言:javascript
复制
   #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;   
          }
       }

享受吧!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10371965

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档