⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 scintillausage.html

📁 最强源代码编辑控件
💻 HTML
📖 第 1 页 / 共 2 页
字号:
    class='S5'>char</span><span class='S0'>&nbsp;</span> <span class='S10'>*&gt;(</span><span
    class='S11'>linebuf</span><span class='S10'>)));</span><span class='S0'><br />
     &nbsp;&nbsp;&nbsp;&nbsp;</span> <span class='S10'>}</span><span class='S0'><br />
    </span> <span class='S10'>}</span><br />
     
    <p style="margin-bottom: 0in">
       Of course, fancier handling could be implemented. For example, if the previous line was the
      start of a control construct, the next line could be automatically indented one tab further.
      (Assuming that is your indenting style.)
    </p>
    <h2>
       Implementing Syntax Styling
    </h2>
    <p>
       Syntax styling is handled by the SCN_STYLENEEDED notification. Scintilla keeps track of the
      end of the styled text - this is retrieved with SCI_GETENDSTYLED. In response to the
      SCN_STYLENEEDED notification, you should apply styles to the text from ENDSTYLED to the
      position specified by the notification.
    </p>
    <p>
       Here is the relevant portion of code from SciTE: (SciTE.cxx)
    </p>
    <span class='S5'>void</span><span class='S0'>&nbsp;</span> <span class='S11'>
    SciTEWindow</span><span class='S10'>::</span><span class='S11'>Notify</span><span
    class='S10'>(</span><span class='S11'>SCNotification</span><span class='S0'>&nbsp;</span> <span
    class='S10'>*</span><span class='S11'>notification</span><span class='S10'>)</span><span
    class='S0'>&nbsp;</span> <span class='S10'>{</span><span class='S0'><br />
     &nbsp;&nbsp;&nbsp;&nbsp;</span> <span class='S5'>switch</span><span class='S0'>&nbsp;</span>
    <span class='S10'>(</span><span class='S11'>notification</span><span
    class='S10'>-&gt;</span><span class='S11'>nmhdr.code</span><span class='S10'>)</span><span
    class='S0'>&nbsp;</span> <span class='S10'>{</span><span class='S0'><br />
     &nbsp;&nbsp;&nbsp;&nbsp;</span> <span class='S5'>case</span><span class='S0'>&nbsp;</span>
    <span class='S11'>SCN_STYLENEEDED</span><span class='S10'>:</span><span
    class='S0'>&nbsp;</span> <span class='S10'>{</span><span class='S0'><br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span
    class='S5'>if</span><span class='S0'>&nbsp;</span> <span class='S10'>(</span><span
    class='S11'>notification</span><span class='S10'>-&gt;</span><span
    class='S11'>nmhdr.idFrom</span><span class='S0'>&nbsp;</span> <span class='S10'>==</span><span
    class='S0'>&nbsp;</span> <span class='S11'>IDM_SRCWIN</span><span class='S10'>)</span><span
    class='S0'>&nbsp;</span> <span class='S10'>{</span><span class='S0'><br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>
    <span class='S5'>int</span><span class='S0'>&nbsp;</span> <span class='S11'>
    endStyled</span><span class='S0'>&nbsp;</span> <span class='S10'>=</span><span
    class='S0'>&nbsp;</span> <span class='S11'>SendEditor</span><span class='S10'>(</span><span
    class='S11'>SCI_GETENDSTYLED</span><span class='S10'>);</span><span class='S0'><br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>
    <span class='S5'>int</span><span class='S0'>&nbsp;</span> <span class='S11'>
    lineEndStyled</span><span class='S0'>&nbsp;</span> <span class='S10'>=</span><span
    class='S0'>&nbsp;</span> <span class='S11'>SendEditor</span><span class='S10'>(</span><span
    class='S11'>EM_LINEFROMCHAR</span><span class='S10'>,</span><span class='S0'>&nbsp;</span>
    <span class='S11'>endStyled</span><span class='S10'>);</span><span class='S0'><br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>
    <span class='S11'>endStyled</span><span class='S0'>&nbsp;</span> <span class='S10'>
    =</span><span class='S0'>&nbsp;</span> <span class='S11'>SendEditor</span><span
    class='S10'>(</span><span class='S11'>EM_LINEINDEX</span><span class='S10'>,</span><span
    class='S0'>&nbsp;</span> <span class='S11'>lineEndStyled</span><span class='S10'>);</span><span
    class='S0'><br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>
    <span class='S11'>Colourise</span><span class='S10'>(</span><span
    class='S11'>endStyled</span><span class='S10'>,</span><span class='S0'>&nbsp;</span> <span
    class='S11'>notification</span><span class='S10'>-&gt;</span><span
    class='S11'>position</span><span class='S10'>);</span><br />
     
    <p>
       Colourize(start, end) retrieves the specified range of text and then calls ColourizeDoc in
      keywords.cxx. It starts the process by calling:
    </p>
    &nbsp;&nbsp;&nbsp;&nbsp;<span class='S11'>SendMessage</span><span class='S10'>(</span><span
    class='S11'>hwnd</span><span class='S10'>,</span><span class='S0'>&nbsp;</span> <span
    class='S11'>SCI_STARTSTYLING</span><span class='S10'>,</span><span class='S0'>&nbsp;</span>
    <span class='S11'>startPos</span><span class='S10'>,</span><span class='S0'>&nbsp;</span> <span
    class='S4'>31</span><span class='S10'>);</span><br />
     
    <p>
       and then for each token of the text, calling:
    </p>
    &nbsp;&nbsp;&nbsp;&nbsp;<span class='S11'>SendMessage</span><span class='S10'>(</span><span
    class='S11'>hwnd</span><span class='S10'>,</span><span class='S0'>&nbsp;</span> <span
    class='S11'>SCI_SETSTYLING</span><span class='S10'>,</span><span class='S0'>&nbsp;</span> <span
    class='S11'>length</span><span class='S10'>,</span><span class='S0'>&nbsp;</span> <span
    class='S11'>style</span><span class='S10'>);</span><br />
     
    <p>
       where style is a number from 0 to 31 whose appearance has been defined using the
      SCI_STYLESET... messages.
    </p>
    <h2>
       Implementing Calltips
    </h2>
    <p>
       Again, the SCN_CHARADDED notification is used to catch when an opening parenthesis is added.
      The preceding word can then be retrieved from the current line:
    </p>
    &nbsp;&nbsp;&nbsp;&nbsp;<span class='S5'>char</span><span class='S0'>&nbsp;</span> <span
    class='S11'>linebuf</span><span class='S10'>[</span><span class='S4'>1000</span><span
    class='S10'>];</span><span class='S0'><br />
    </span> &nbsp;&nbsp;&nbsp;&nbsp;<span class='S5'>int</span><span class='S0'>&nbsp;</span> <span
    class='S11'>current</span><span class='S0'>&nbsp;</span> <span class='S10'>=</span><span
    class='S0'>&nbsp;</span> <span class='S11'>SendEditor</span><span class='S10'>(</span><span
    class='S11'>SCI_GETCURLINE</span><span class='S10'>,</span><span class='S0'>&nbsp;</span> <span
    class='S5'>sizeof</span><span class='S10'>(</span><span class='S11'>linebuf</span><span
    class='S10'>),</span><span class='S0'><br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span class='S5'>
    reinterpret_cast</span><span class='S10'>&lt;</span><span class='S11'>LPARAM</span><span
    class='S10'>&gt;(</span><span class='S5'>static_cast</span><span class='S10'>&lt;</span><span
    class='S5'>char</span><span class='S0'>&nbsp;</span> <span class='S10'>*&gt;(</span><span
    class='S11'>linebuf</span><span class='S10'>)));</span><span class='S0'><br />
    </span> &nbsp;&nbsp;&nbsp;&nbsp;<span class='S5'>int</span><span class='S0'>&nbsp;</span> <span
    class='S11'>pos</span><span class='S0'>&nbsp;</span> <span class='S10'>=</span><span
    class='S0'>&nbsp;</span> <span class='S11'>SendEditor</span><span class='S10'>(</span><span
    class='S11'>SCI_GETCURRENTPOS</span><span class='S10'>);</span><span class='S0'><br />
    <br />
    </span> &nbsp;&nbsp;&nbsp;&nbsp;<span class='S5'>int</span><span class='S0'>&nbsp;</span> <span
    class='S11'>startword</span><span class='S0'>&nbsp;</span> <span class='S10'>=</span><span
    class='S0'>&nbsp;</span> <span class='S11'>current</span><span class='S0'>&nbsp;</span> <span
    class='S10'>-</span><span class='S0'>&nbsp;</span> <span class='S4'>1</span><span
    class='S10'>;</span><span class='S0'><br />
    </span> &nbsp;&nbsp;&nbsp;&nbsp;<span class='S5'>while</span><span class='S0'>&nbsp;</span>
    <span class='S10'>(</span><span class='S11'>startword</span><span class='S0'>&nbsp;</span>
    <span class='S10'>&gt;</span><span class='S0'>&nbsp;</span> <span class='S4'>0</span><span
    class='S0'>&nbsp;</span> <span class='S10'>&amp;&amp;</span><span class='S0'>&nbsp;</span>
    <span class='S11'>isalpha</span><span class='S10'>(</span><span class='S11'>linebuf</span><span
    class='S10'>[</span><span class='S11'>startword</span><span class='S0'>&nbsp;</span> <span
    class='S10'>-</span><span class='S0'>&nbsp;</span> <span class='S4'>1</span><span
    class='S10'>]))</span><span class='S0'><br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span class='S11'>
    startword</span><span class='S10'>--;</span><span class='S0'><br />
    </span> &nbsp;&nbsp;&nbsp;&nbsp;<span class='S11'>linebuf</span><span class='S10'>[</span><span
    class='S11'>current</span><span class='S0'>&nbsp;</span> <span class='S10'>-</span><span
    class='S0'>&nbsp;</span> <span class='S4'>1</span><span class='S10'>]</span><span
    class='S0'>&nbsp;</span> <span class='S10'>=</span><span class='S0'>&nbsp;</span> <span
    class='S7'>'\0'</span><span class='S10'>;</span><span class='S0'><br />
    </span> &nbsp;&nbsp;&nbsp;&nbsp;<span class='S5'>char</span><span class='S10'>*</span><span
    class='S0'>&nbsp;</span> <span class='S11'>word</span><span class='S0'>&nbsp;</span> <span
    class='S10'>=</span><span class='S0'>&nbsp;</span> <span class='S11'>linebuf</span><span
    class='S0'>&nbsp;</span> <span class='S10'>+</span><span class='S0'>&nbsp;</span> <span
    class='S11'>startword</span><span class='S10'>;</span><br />
     
    <p>
       Then if a calltip is available it can be displayed. The calltip appears immediately below
      the position specified. The calltip can be multiple lines separated by newlines (\n).
    </p>
    &nbsp;&nbsp;&nbsp;&nbsp;<span class='S11'>pos</span><span class='S0'>&nbsp;</span> <span
    class='S10'>=</span><span class='S0'>&nbsp;</span> <span class='S11'>SendMessage</span><span
    class='S10'>(</span><span class='S11'>hwnd</span><span class='S10'>,</span><span
    class='S0'>&nbsp;</span> <span class='S11'>SCI_GETCURRENTPOS</span><span
    class='S10'>,</span><span class='S0'>&nbsp;</span> <span class='S4'>0</span><span
    class='S10'>,</span><span class='S0'>&nbsp;</span> <span class='S4'>0</span><span
    class='S10'>);</span><span class='S0'><br />
    </span> &nbsp;&nbsp;&nbsp;&nbsp;<span class='S11'>SendMessageText</span><span
    class='S10'>(</span><span class='S11'>hwnd</span><span class='S10'>,</span><span
    class='S0'>&nbsp;</span> <span class='S11'>SCI_CALLTIPSHOW</span><span
    class='S10'>,</span><span class='S0'>&nbsp;</span> <span class='S11'>pos</span><span
    class='S0'>&nbsp;</span> <span class='S10'>-</span><span class='S0'>&nbsp;</span> <span
    class='S11'>wordLen</span><span class='S0'>&nbsp;</span> <span class='S10'>-</span><span
    class='S0'>&nbsp;</span> <span class='S4'>1</span><span class='S10'>,</span><span
    class='S0'>&nbsp;</span> <span class='S11'>calltip</span><span class='S10'>);</span><br />
     
    <p>
       The calltip can be removed when a closing parenthesis is entered:
    </p>
    &nbsp;&nbsp;&nbsp;&nbsp;<span class='S5'>if</span><span class='S0'>&nbsp;</span> <span
    class='S10'>(</span><span class='S11'>SendMessage</span><span class='S10'>(</span><span
    class='S11'>hwnd</span><span class='S10'>,</span><span class='S0'>&nbsp;</span> <span
    class='S11'>SCI_CALLTIPACTIVE</span><span class='S10'>,</span><span class='S0'>&nbsp;</span>
    <span class='S4'>0</span><span class='S10'>,</span><span class='S0'>&nbsp;</span> <span
    class='S4'>0</span><span class='S10'>))</span><span class='S0'><br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span class='S11'>
    SendMessage</span><span class='S10'>(</span><span class='S11'>hwnd</span><span
    class='S10'>,</span><span class='S0'>&nbsp;</span> <span class='S11'>
    SCI_CALLTIPCANCEL</span><span class='S10'>,</span><span class='S0'>&nbsp;</span> <span
    class='S4'>0</span><span class='S10'>,</span><span class='S0'>&nbsp;</span> <span class='S4'>
    0</span><span class='S10'>);</span><br />
     
    <p>
       Obviously, it is up the application to look after supplying the appropriate calltip text.
    </p>
    <p>
       SciTE goes one step further, counting the commas between arguments and highlighting the
      corresponding part of the calltip. This code is in ContinueCallTip.
    </p>
    <p>
       <i>Page contributed by Andrew McKinlay.</i>
    </p>
  </body>
</html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -