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

📄 synunidesignerform.pas

📁 SynEditStudio delphi 代码编辑器
💻 PAS
📖 第 1 页 / 共 5 页
字号:
  Modified();
end;

(*###procedure TfmDesigner.AddingRangeLink(ParentNode: TTreeNode);
var
  Node: TTreeNode;
  RangeLink: TSynRangeLink;
  //i: Integer;
begin
  RangeLink := TSynRangeLink.Create(SynUniSyn.MainRules.Ranges[6]);
  TSynRange(ParentNode.Data).AddRangeLink(RangeLink);
  Node := TreeAddRangeLink(ParentNode, RangeLink);
  with Node do begin
    Expand(False);
    Selected := True;
    Tree.SetFocus;
    EditText;
  end;
{  Range.ClearAttributes();
  for i := 0 to SynUniSyn.SchemesList.Count-1 do begin
    TSynRange(ParentNode.Data).SetAttributesIndex(i);
    Range.AddAttribute();
    SetDefaultAttributes(Node);
  end;
  TSynRange(ParentNode.Data).SetAttributesIndex(SynUniSyn.SchemeIndex);}
  SetControlAttributes(Node);
end;*)

//=== Adding Range ===========================================================
procedure TfmDesigner.DoAddRangeToRoot(Sender:TObject); //: Click on button
begin
  AddingRange(Tree.Items[1]);
  Modified();
end;

procedure TfmDesigner.DoAddRange(Sender: TObject); //: Click on button
begin
  AddingRange(Tree.Selected);
  Modified();
end;

procedure TfmDesigner.AddingRange(ParentNode: TTreeNode);
var Node: TTreeNode;
    Range: TSynRange;
    i: Integer;
begin
  if ParentNode = nil then begin //Never happened ???
    Tree.Items.Clear();
    Node := Tree.Items.Add(nil, _Root);
    SynUniSyn.MainRules.Name := _Root;
    Node.Data := SynUniSyn.MainRules;
    Node.ImageIndex := 0;
    Node.SelectedIndex := 0;
    Exit;
  end
  else begin
    Range := TSynRange.Create();
    Range.Name := _New;
    TSynRange(ParentNode.Data).AddRange(Range);
    Node := TreeAddRange(ParentNode, Range);
    with Node do begin
      Expand(False);
      Selected := True;
      Tree.SetFocus();
      EditText();
    end;
  end;
//  Range.ClearAttributes();
  //###for i := 0 to SynUniSyn.SchemesList.Count-1 do begin
//    TSynRange(ParentNode.Data).SetAttributesIndex(i);
//    Range.AddAttribute();
    SetDefaultAttributes(Node);
  //###end;
//  TSynRange(ParentNode.Data).SetAttributesIndex(SynUniSyn.SchemeIndex);
  SetControlAttributes(Node);
end;

//=== Adding KeyList =========================================================
procedure TfmDesigner.DoAddKeywordToRoot(Sender:TObject); //: Click on button
begin
  AddingKeyword(Tree.Items[1]);
  Modified();
end;

procedure TfmDesigner.DoAddKeyword(Sender: TObject); //: Click on button
begin
  AddingKeyWord(Tree.selected);
  Modified();
end;

procedure TfmDesigner.AddingKeyWord(ParentNode: TTreeNode);
var Node: TTreeNode;
    Keyword: TSynKeyList;
    i: Integer;
begin
  Keyword := TSynKeyList.Create();
  Keyword.Name := _New;
  Node := TreeAddKeyList(ParentNode, Keyword);
  with Node do begin
    Expand(False);
    Selected := True;
    Tree.SetFocus;
    EditText;
  end;
//  Keyword.ClearAttributes();
  //###for i := 0 to SynUniSyn.SchemesList.Count-1 do begin
//    TSynRange(ParentNode.Data).SetAttributesIndex(i);
//    Keyword.AddAttribute();
    SetDefaultAttributes(Node);
  //###end;
//  TSynRange(ParentNode.Data).SetAttributesIndex(SynUniSyn.SchemeIndex);
  TSynRange(ParentNode.Data).AddKeyList(Keyword);
  SetControlAttributes(Node);
end;

//=== Adding Set =============================================================
procedure TfmDesigner.DoAddSetToRoot(Sender:TObject); //: Click on button
begin
  AddingSet(Tree.Items[1]);
  Modified();
end;

procedure TfmDesigner.DoAddSet(Sender: TObject); //: Click on button
begin
  AddingSet(Tree.Selected);
  Modified();
end;

procedure TfmDesigner.AddingSet(ParentNode: TTreeNode);
var
  Node: TTreeNode;
  SymbolSet: TSynSet;
  i: Integer;
begin
  SymbolSet := TSynSet.Create();
  SymbolSet.Name := _New;
  TSynRange(ParentNode.data).AddSet(SymbolSet);
  Node := TreeAddSet(ParentNode, SymbolSet);
  with Node do begin
    Expand(False);
    Selected := True;
    Tree.SetFocus;
    EditText;
  end;
//  SymbolSet.ClearAttributes();
  //###for i := 0 to SynUniSyn.SchemesList.Count-1 do begin
//    TSynRange(ParentNode.Data).SetAttributesIndex(i);
//    SymbolSet.AddAttribute();
    SetDefaultAttributes(Node);
  //###end;
//  TSynRange(ParentNode.Data).SetAttributesIndex(SynUniSyn.SchemeIndex);
  SetControlAttributes(Node);
end;

//=== Adding Fold Region =====================================================
procedure TfmDesigner.DoAddFoldRegion(Sender: TObject); //: Click on button
begin
  {$IFDEF CODEFOLDING}AddingFoldRegion(Tree.Selected);{$ENDIF}
  Modified();
end;

{$IFDEF CODEFOLDING}

procedure TfmDesigner.AddingSkipRegion(ParentNode: TTreeNode);
var
  SkipRegion : TSkipRegionItem;
  Node: TTreeNode;
begin
  SkipRegion := SynUniSyn.FoldRegions.SkipRegions.Add('', '', '', itString);
  Node := Tree.Items.AddChild(CodeFoldingNode, 'SkipRegion');
  SetNodeData(Node, SkipRegion);
  with Node do begin
    Expand(False);
    Selected := True;
    Tree.SetFocus;
  end;
  SetDefaultAttributes(Node);
  SetControlAttributes(Node);
end;

procedure TfmDesigner.AddingFoldRegion(ParentNode: TTreeNode);
var
  Node: TTreeNode;
  FoldRegion: TFoldRegionItem;
  Regions: TFoldRegions;
  i: Integer;
begin
  if ParentNode.Data = nil then
    Regions := SynUniSyn.FoldRegions
  else
    Regions := TFoldRegionItem(ParentNode.Data).SubFoldRegions;

  FoldRegion := Regions.Add(rtChar, False, False, False, '', '', ParentNode.Data);
  FoldRegion.RegExpUseOpen := False;
  FoldRegion.RegExpUseClose := False;

  FoldRegion.Name := _New;
  Node := TreeAddFoldRegion(ParentNode, FoldRegion);
  with Node do begin
    Expand(False);
    Selected := True;
    Tree.SetFocus;
    EditText;
  end;
//  Range.ClearAttributes();
  //###for i := 0 to SynUniSyn.SchemesList.Count-1 do begin
//    TSynRange(ParentNode.Data).SetAttributesIndex(i);
//    Range.AddAttribute();
    SetDefaultAttributes(Node);
  //###end;
//  TSynRange(ParentNode.Data).SetAttributesIndex(SynUniSyn.SchemeIndex);
  SetControlAttributes(Node);
end;
{$ENDIF}

//=== Delete and Rename Rules ================================================
procedure TfmDesigner.DoDeleteNode(Sender: TObject);
begin
  if not Tree.IsEditing then
    if not ShowDialog or (Application.MessageBox(PChar(Format(_DeleteNode,[Tree.Selected.Text])), PChar(_Confirm), MB_YESNOCANCEL+MB_ICONQUESTION) = ID_YES) then begin
      DeleteNode(Tree.Selected);
      TotalUpdate();
      Modified();
    end;
  ShowDialog := True;
end;

procedure TfmDesigner.DeleteNode(Node: TTreeNode; OnlyChilds: Boolean);
var
  {$IFDEF CODEFOLDING}Regions: TFoldRegions;{$ENDIF}
  i: Integer;
begin
//Node.DeleteChildren; - 觐沅?龛螯 桉镳噔栩?
  while Node.Count > 0 do
    DeleteNode(Node[0]);
  if (Node.Data <> SynUniSyn.MainRules) and (Node.Data <> nil) and not OnlyChilds then begin
    if TObject(Node.Data) is TSynRange then
      TSynRange(Node.Parent.Data).DeleteRange(TSynRange(Node.Data))
    else if TObject(Node.Data) is TSynKeyList then
      TSynRange(Node.Parent.Data).DeleteKeyList(TSynKeyList(Node.Data))
    else if TObject(Node.Data) is TSynSet then
      TSynRange(Node.Parent.Data).DeleteSet(TSynSet(Node.Data))
    {$IFDEF CODEFOLDING}
    else if TObject(Node.Data) is TSkipRegionItem then
      TObject(Node.Data).Free
    else if TObject(Node.Data) is TFoldRegionItem then
    begin
      if Node.Parent.Data = nil then
        Regions := SynUniSyn.FoldRegions
      else
        Regions := TFoldRegionItem(Node.Parent.Data).SubFoldRegions;
      for i := 0 to Regions.Count-1 do
        if Regions[i] = TFoldRegionItem(Node.Data) then
        begin
          //ShowMessage(TFoldRegionItem(Node.Data).Name);
          Regions.Delete(i);
        end
    end{$ENDIF};
    Node.Delete;
  end;
end;

procedure TfmDesigner.DoRenameNode(Sender: TObject);
begin
  Tree.Selected.EditText;
end;

//=== Usefuk functions... ====================================================
function TfmDesigner.GetNodeType(Node: TTreeNode): TNodeType;
begin
  Result := ntNone;
  if Node <> nil then
    if (TObject(Node.Data) is TSynRange) and (Node.Level = 0) then Result := ntRoot else
    //###if (TObject(Node.Data) is TSynRangeLink) then Result := ntRangeLink else
    if TObject(Node.Data) is TSynInfo        then Result := ntInfo else
    {$IFDEF CUSTOMDATA}
    if TObject(Node.Data) is TStringList     then Result := ntCustomData else
    {$ENDIF}
    if TObject(Node.Data) is TSynRange       then Result := ntRange else
    if TObject(Node.Data) is TSynKeyList     then Result := ntKeywords else
    if TObject(Node.Data) is TSynSet         then Result := ntSet else
    {$IFDEF CODEFOLDING}
    if TObject(Node.Data) is TSkipRegionItem then Result := ntSkipRegion else
    if TObject(Node.Data) is TFoldRegionItem then Result := ntFoldRegion else
      Result := ntFoldRoot;
    {$ENDIF}
end;

procedure TfmDesigner.TotalUpdate();
var
  SelStart, SelEnd: Integer;
begin
  SelStart := SampleMemo.SelStart;
  SelEnd   := SampleMemo.SelEnd;
  SynUniSyn.Reset;
  SynUniSyn.MainRules.Reset;
  SynUniSyn.ResetRange;
  SynUniSyn.Prepare;
  SampleMemo.Highlighter := nil;
  SampleMemo.Highlighter := SynUniSyn;
  with SynUniSyn.EditorProperties do
  begin
    {$IFNDEF SYNEDIT11}SampleMemo.ActiveLineColor := ActiveLineColor;{$ENDIF}
    SampleMemo.SelectedColor.Foreground := SelectedForeground;
    SampleMemo.SelectedColor.Background := SelectedBackground;
  end;
  {$IFDEF CODEFOLDING}SampleMemo.InitCodeFolding();{$ENDIF}
  SampleMemo.Refresh;
  SampleMemo.SelStart := SelStart;
  SampleMemo.SelEnd   := SelEnd;
end;

procedure TfmDesigner.Modified(State: Boolean = True);
begin
  if State then begin
    btApply.Enabled := True;
    StatusBar.Panels.Items[0].Text := _Modified;
  end else begin
    btApply.Enabled := False;
    StatusBar.Panels.Items[0].Text := '';
  end;
end;

//=== KeyList Tools ==========================================================
procedure TfmDesigner.btSort_oldClick(Sender: TObject);
var i: Integer;
begin
  With TStringList.Create do
    try
      Sorted := True;
      Duplicates := dupIgnore;
      for i := 0 to Memo.Lines.Count-1 do
        if Trim(Memo.Lines[i]) <> '' then
          Add(Trim(Memo.Lines[i]));
      Sort;
      Memo.Text := Trim(Text);
    finally
      Free;
    end;
end;

procedure TfmDesigner.btLowerCase_oldClick(Sender: TObject);
begin
  Memo.text := LowerCase(Memo.Text);
end;

procedure TfmDesigner.btSpacesToEol_oldClick(Sender: TObject);
begin
  Memo.text := StringReplace(Memo.Text, ' ', #13#10, [rfReplaceAll]);
end;

//=== Finish buttons =========================================================
procedure TfmDesigner.btOkClick(Sender: TObject);
begin
  if Tree.IsEditing then
    Tree.Selected.EndEdit(False)
  else
    if btApply.Enabled then begin
      btApplyClick(Sender);
      ModalResult := mrOk;
    end else
      if (btApply.Tag = 1) then
        ModalResult := mrOk
      else
   

⌨️ 快捷键说明

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