У меня есть этот код, чтобы инициализировать Scintilla с лексером xml:
procedure TfrmWeMain.DScintilla1MarginClick(ASender: TObject; AModifiers,
APosition, AMargin: Integer);
var line_number:integer;
begin
line_number:= (ASender as TDScintilla).SendEditor(SCI_LINEFROMPOSITION, APosition, 0);
case AMargin of
1:
begin
(ASender as TDScintilla).SendEditor(SCI_TOGGLEFOLD, line_number, 0);
end
end;
end;
procedure TfrmWeMain.addDocument(filename:string);
var frmEditor:tFrameEditor;
ts:TTabSheet;
procedure setColors(lang:integer;fore:integer;const back:tcolor=clWindow;
const bold:boolean=false; const italic:boolean=false;
const underline:boolean=false; const font:string='Courier New';
const size:integer=10);
begin
frmEditor.sci.StyleSetBack(lang,colortorgb(back));
frmEditor.sci.StyleSetFore(lang,colortorgb(fore));
frmEditor.sci.StyleSetFont(lang,font);
frmEditor.sci.StyleSetBold(lang,bold);
frmEditor.sci.StyleSetItalic(lang,italic);
frmEditor.sci.StyleSetUnderline(lang,underline);
frmEditor.sci.StyleSetSize(lang,size);
end;
procedure setFolding;
begin
frmEditor.sci.SetMarginTypeN(1,0);
frmEditor.sci.SetMarginTypeN(1,SC_MARGIN_SYMBOL);
frmEditor.sci.SetMarginMaskN(1,SC_MASK_FOLDERS);
frmEditor.sci.SetMarginWidthN(0,40);
frmEditor.sci.SetMarginWidthN(1,20);
frmEditor.sci.SendEditor(SCI_MARKERDEFINE, SC_MARKNUM_FOLDER, SC_MARK_PLUS);
frmEditor.sci.SendEditor(SCI_MARKERDEFINE, SC_MARKNUM_FOLDEROPEN, SC_MARK_MINUS);
frmEditor.sci.SendEditor(SCI_MARKERDEFINE, SC_MARKNUM_FOLDEREND, SC_MARK_EMPTY);
frmEditor.sci.SendEditor(SCI_MARKERDEFINE, SC_MARKNUM_FOLDERMIDTAIL, SC_MARK_EMPTY);
frmEditor.sci.SendEditor(SCI_MARKERDEFINE, SC_MARKNUM_FOLDEROPENMID, SC_MARK_EMPTY);
frmEditor.sci.SendEditor(SCI_MARKERDEFINE, SC_MARKNUM_FOLDERSUB, SC_MARK_EMPTY);
frmEditor.sci.SendEditor(SCI_MARKERDEFINE, SC_MARKNUM_FOLDERTAIL, SC_MARK_EMPTY);
frmEditor.sci.SendEditor(SCI_SETFOLDFLAGS, 16, 0); // 16 Draw line below if not expanded
frmEditor.sci.OnMarginClick:=DScintilla1MarginClick;
frmeditor.sci.StartStyling(0,0);
end;
begin
///...
frmEditor.sci.SetLexer(SCLEX_XML);
frmEditor.sci.SetCodePage(CP_UTF8);
setColors(SCE_H_DEFAULT,clBlack);
setColors(SCE_H_TAG,clPurple,clWindow,true);
setColors(SCE_H_TAGUNKNOWN,clRed);
setColors(SCE_H_ATTRIBUTE,clNavy);
setColors(SCE_H_ATTRIBUTEUNKNOWN,clRed);
setColors(SCE_H_NUMBER,clBlue);
setColors(SCE_H_DOUBLESTRING,clBlue);
setColors(SCE_H_SINGLESTRING,clBlue);
setColors(SCE_H_OTHER,clBlack);
setColors(SCE_H_COMMENT,clTeal);
setColors(SCE_H_ENTITY,clPurple);
setColors(SCE_H_TAGEND,clPurple);
setColors(SCE_H_CDATA,clTeal);
setFolding;
///...
end;
См. Часть кода setFolding, это то место, где складывание должно начинаться, но это не так. Я не вижу маркеры сгиба, ни само сгибание не работает.
Мне нужно знать, что мне здесь не хватает, или что я делаю не так. Фрагменты кода в Delphi, C ++, C # или псевдокод приветствуются