加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

德尔福 – SynMultiSyn荧光笔插入位置

发布时间:2020-12-15 09:45:37 所属栏目:大数据 来源:网络整理
导读:我有SynMultiSyn荧光笔(syn HTMLcomplex) 由HTML(synHTML)和 JavaScript(synJScript)组成 如下: synHTML : TSynHTMLSyn;synJScript : TSynJScriptSyn;synHTMLcomplex: TSynMultiSyn;// HTML complexwith SynHTMLcomplex do begin DefaultLanguageName:= 'HT
我有SynMultiSyn荧光笔(syn HTMLcomplex)
由HTML(synHTML)和 JavaScript(synJScript)组成
如下:

synHTML       : TSynHTMLSyn;
synJScript    : TSynJScriptSyn;
synHTMLcomplex: TSynMultiSyn;

// HTML complex
with SynHTMLcomplex do begin
  DefaultLanguageName:= 'HTML complex';
  DefaultFilter      := 'HTML complex (*.html; *.htm)|*.html; *.htm';
  DefaultHighlighter := synHTML;
  with Schemes do begin
    Add.Index:= 0;
    with Items[0] do begin
      Highlighter:= synJScript;
      SchemeName := 'JavaScript';
      StartExpr  := '<script';
      EndExpr    := '</script>';
      with MarkerAttri do
        Background:= clNone;
    end;
  end;
end;

一旦进入SynEdit,是否有任何方法(属性或方法)知道光标(CaretY)是哪种Highlighter(synHTML或synJScript)?

有人可以帮忙吗?

解决方法

它可能但不是很容易实现.

下面的函数是Jan Fiala(PSPad editor的作者)使用的函数的改编.
对我来说它工作正常.非常感谢Jan!

function TfrmEditor.GetCurrentHighLighter: TSynCustomHighlighter;
var
  i       : integer;
  seEditor: TSynEdit;

begin
  if (sActiveEditor = 'synEditor') then seEditor:= synEditor
                                   else seEditor:= synEditor2;

  with seEditor do
    if Highlighter is TSynMultiSyn then
    begin
      i:= (Integer(TSynEditStringList(Lines).Ranges[CaretY - 1]) and $F) - 1;

      if (i < 0) then
        result:= TSynMultiSyn(Highlighter).DefaultHighLighter
      else
        result:= TSynMultiSyn(Highlighter).Schemes[i].Highlighter
    end
    else
      result:= Highlighter;
end;

只要解释,Jan的原始功能就在下面.

“ – 这是我返回当前荧光笔的功能:

function TPSSynEdit.GetCurrentHighLighter: TSynCustomHighlighter;
var
  i: Integer;
begin
  if Highlighter is TSynMultiSyn then
  begin
    i := (Integer(TSynEditStringList(Lines).Ranges[CaretY - 1]) and $F) - 2;
    if (i > TSynMultiSyn(HighLighter).Schemes.Count - 1) or (i < 0) then
      Result := TSynMultiSyn(Highlighter).DefaultHighLighter
    else
      Result := TSynMultiSyn(Highlighter).Schemes[i].Highlighter
  end
  else
    Result := Highlighter;
end;

我在TSynedit的后代有这个功能.你需要更换荧光笔,例如使用Editor.Highlighter和Lines with Editor.Lines或发送编辑器作为函数参数,并在开始之后添加:
与编辑做
开始
……”

简菲拉

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读