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

📄 synunidesignerform.pas

📁 SynEditStudio delphi 代码编辑器
💻 PAS
📖 第 1 页 / 共 5 页
字号:
  _Author        := 'Author: %s';
  _Mail          := 'Mail: %s';
  _FormatVersion := 'Format of the file: ';
  _Web           := 'Web: %s';
  _Copyright     := 'Copyright: %s';
  _Company       := 'Company: %s';
  _Remark        := 'Remark: %s';
    
  Caption := 'Unihighlighter Designer ?Fantasist, Vit, Vitalik (2002-2004)';
  if SynUniSyn.Info.General.Name <> '' then
    Caption := Caption + ' - [' + SynUniSyn.Info.General.Name + ']';

  ColorBoxDataModule := TColorBoxDataModule.Create(Self);

  AddBitmap(listRules, clRed,    14,  #52); //: Image0: 'Root Range'
  AddBitmap(listRules, clGreen,  14,  #52); //: Image1: 'Range'
  AddBitmap(listRules, clBlue,   14, #104); //: Image2: 'Keyword'
  AddBitmap(listRules, clMaroon, 14, #104); //: Image3: 'Set'
//  {$IFDEF CODEFOLDING}
  AddBitmap(listRules, clBlue,   12, #118); //: Image4: 'RootFoldItem'
  AddBitmap(listRules, clNavy,   12, #118); //: Image5: 'FoldItem'
//  {$ENDIF}
  AddBitmap(listRules, clOlive,  14,  #52); //: Image6: 'RangeLink'
  AddBitmap(listRules, clOlive,  14,  #52); //: Image7: 'Conteiner'
//  AddBitmap(listRules, clBlue,   10, #103); //: Image8: 'Highlighter'
  AddBitmap(listRules, clPurple, 14, #104); //: Image8: 'Information'
  AddBitmap(listRules, clTeal,   14, #104); //: Image9: 'CustomData'

{  cbScheme.Items.AddStrings(SynUniSyn.SchemesList);
  cbScheme.ItemIndex := SynUniSyn.SchemeIndex;}

  SampleMemo.Highlighter := SynUniSyn;
  SampleMemo.Lines.Text := SynUniSyn.Info.General.Sample;
  {$IFDEF CODEFOLDING}
  SampleMemo.Gutter.Width := 40;
  SampleMemo.CodeFolding.Enabled := True;
  SampleMemo.CodeFolding.CollapsedCodeHint := True;
  SampleMemo.CodeFolding.CollapsingMarkStyle := msEllipse;
  SampleMemo.CodeFolding.FolderBarColor := clScrollBar;
  SampleMemo.CodeFolding.FolderBarLinesColor := clBlack;//clBtnShadow;
  SampleMemo.InitCodeFolding();
  {$ENDIF}

  {$IFDEF SYN_COMPILER_6_UP}
  Tree.MultiSelectStyle := [msControlSelect, msShiftSelect];
  lbRootMenu.OnMouseEnter := LabelMouseEnter;
  lbRootMenu.OnMouseLeave := LabelMouseLeave;
  lbPropBack.OnMouseEnter := LabelMouseEnter;
  lbPropBack.OnMouseLeave := LabelMouseLeave;
  lbRuleMenu.OnMouseEnter := LabelMouseEnter;
  lbRuleMenu.OnMouseLeave := LabelMouseLeave;
  lbSampMin.OnMouseEnter := LabelMouseEnter;
  lbSampMin.OnMouseLeave := LabelMouseLeave;
  lbSampMax.OnMouseEnter := LabelMouseEnter;
  lbSampMax.OnMouseLeave := LabelMouseLeave;
  Label6.OnMouseEnter := LabelMouseEnter;
  Label6.OnMouseLeave := LabelMouseLeave;
  miOpenTagFirstOnLine.AutoCheck := True;
  miOpenTagFirstNonSpaceOnLine.AutoCheck := True;
  miOpenTagPartOfTerm1.AutoCheck := True;
  miOpenTagPartOfTerm2.AutoCheck := True;
  miOpenTagPartOfTerm3.AutoCheck := True;
  miOpenTagPartOfTerm4.AutoCheck := True;
  miCloseTagFirstOnLine.AutoCheck := True;
  miCloseTagFirstNonSpaceOnLine.AutoCheck := True;
  miCloseTagPartOfTerm1.AutoCheck := True;
  miCloseTagPartOfTerm2.AutoCheck := True;
  miCloseTagPartOfTerm3.AutoCheck := True;
  miCloseTagPartOfTerm4.AutoCheck := True;
  miRulesTree.AutoCheck := True;
  miProperties.AutoCheck := True;
  miAttributes.AutoCheck := True;
  miSampleText.AutoCheck := True;
  miButtons.AutoCheck := True;
  miSomeTag.AutoCheck := True;
  {$ELSE}
  lbRootMenu.Font.Color := clRed;
  lbPropBack.Font.Color := clRed;
  lbRuleMenu.Font.Color := clRed;
  lbSampMin.Font.Color := clRed;
  lbSampMax.Font.Color := clRed;
  Label6.Font.Color := clRed;
  {$ENDIF}

  {$IFDEF SYN_COMPILER_7_UP}
  pLeftParentCapt.ParentBackground := False;
  pRightCapt.ParentBackground := False;
  //~pForeColor.ParentBackground := False;
  //~pBackColor.ParentBackground := False;
  pMiddleParentCapt.ParentBackground := False;
  pBottomParentCapt.ParentBackground := False;
  {$ENDIF}

  MultiTagIndex := 0; //temp
end;

procedure TfmDesigner.FormShow(Sender: TObject);
var
  Stream: TMemoryStream;
begin
  OnShow := nil; // We need it only first time
  Stream := TMemoryStream.Create();
  try
    OriginalSyn.SaveToStream(Stream);
    Stream.Position := 0;
    try
      if Stream.Size <> 0 then
        SynUniSyn.LoadFromStream(Stream);
      Stream.Clear();
      SampleMemo.Text := OriginalSyn.Info.General.Sample;
      with OriginalSyn.EditorProperties do
      begin
        {$IFNDEF SYNEDIT11}SampleMemo.ActiveLineColor := ActiveLineColor;{$ENDIF}
        SampleMemo.SelectedColor.Foreground := SelectedForeground;
        SampleMemo.SelectedColor.Background := SelectedBackground;
      end;
      SynUniSyn.FormatVersion := OriginalSyn.FormatVersion;
      if OriginalSyn.FormatVersion = '' then
        lbFormatVersion.Caption := _FormatVersion + '?.?'
      else
        lbFormatVersion.Caption := _FormatVersion + OriginalSyn.FormatVersion;
    finally end;
  finally
    Stream.Free();
  end;

  FillTree();
  Tree.Selected := Tree.Items[0];
  TreeChange(nil, Tree.Selected);
  Tree.Items[0].getNextSibling.Expand(False);
  {$IFDEF CODEFOLDING}Tree.Items[0].getNextSibling.getNextSibling.Expand(False);{$ENDIF}
  Tree.Items[0].Expand(False);
  Tree.Selected := Tree.Items[0];
  Tree.Selected.MakeVisible();
  TotalUpdate();
end;

procedure TfmDesigner.FormKeyPress(Sender: TObject; var Key: Char);
begin
  if (Key = #27) and (not Tree.IsEditing) then Close();
end;

procedure TfmDesigner.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
  if Key = VK_F1 then
    if ssCtrl in Shift then
      rootInfoClick(Sender)
    else
      Application.MessageBox('UniHighlighter Component'+#13#10#13#10+
                             'Copyright ?2002-2004:'+#13#10+
                             'Fantasist (walking_in_the_sky@yahoo.com)'+#13#10+
                             'Vit (nevzorov@yahoo.com)'+#13#10+
                             'Vitalik (vetal-x@mail.ru)'+#13#10#13#10+
                             'Official Web Site: www.delphist.com'{+#13#10#13#10+
                             'Thanks to:'+#13#10+
                             'P@VeL, '+
                             'bouville, '+
                             'StayAtHome, '+
                             'Jasny, '+
                             'SCHMaster'},
                             'About...', MB_ICONINFORMATION)
  else
    if (ssAlt in Shift) and (ssShift in Shift) and (ssCtrl in Shift) and (Key = VK_F12) then begin
      edStylesFile.Enabled := True;
      btStylesFile.Enabled := True;      
      cbStyle.Enabled := True;
    end;
end;

procedure TfmDesigner.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
var
  Choise: Integer;
begin
  if Tree.IsEditing then Tree.Selected.EndEdit(False);
  if ModalResult = mrOk then Exit;
  if btApply.Enabled then begin
    if ForceClose then Exit;
    Choise := Application.MessageBox(PChar(_SaveChanges), PChar(_Confirm), MB_YESNOCANCEL+MB_ICONQUESTION);
    if Choise = ID_YES then begin
      btApplyClick(Sender);
      ModalResult := mrOk
    end
    else if Choise = ID_NO then
      ModalResult := mrCancel
    else
      CanClose := False;
  end
  else
    ModalResult := mrCancel;

//================== SCHMaster ==================
{$IFDEF SYNPLUS}
  if ModalResult = mrNone then
    ModalResult:=mrCancel;
{$ENDIF}
//===============================================
end;

//=== TreeView ===============================================================
procedure TfmDesigner.TreeEdited(Sender: TObject; Node: TTreeNode;
  var S: TNodeText);
begin
  if Node.Data = nil then Exit;
  if TObject(Node.Data) is TSynRange then TSynRange(Node.Data).Name := S;
  if TObject(Node.Data) is TSynKeyList then TSynKeyList(Node.Data).Name := S;
  if TObject(Node.Data) is TSynSet then TSynSet(Node.Data).Name := S;
  {$IFDEF CODEFOLDING}
  if TObject(Node.Data) is TFoldRegionItem then TFoldRegionItem(Node.Data).Name := S;
  {$ENDIF}
  Modified();
end;

procedure TfmDesigner.TreeKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
  if Key = VK_DELETE then DoDeleteNode(Sender) else
  if Key = VK_F2     then DoRenameNode(Sender) else
  if popPropMenu = popRootMenu then
    if (Key = ord('X')) and (ssCtrl in Shift) then rootCutClick(Sender) else
    if (Key = ord('C')) and (ssCtrl in Shift) then rootCopyClick(Sender) else
    if (Key = ord('V')) and (ssCtrl in Shift) then rootPasteInsideClick(Sender) else
  else
  if popPropMenu = popRangeMenu then
    if (Key = ord('X')) and (ssCtrl in Shift) then rangeCutClick(Sender) else
    if (Key = ord('C')) and (ssCtrl in Shift) then rangeCopyClick(Sender) else
    if (Key = ord('V')) and (ssCtrl in Shift) then rangePasteInsideClick(Sender) else
  else
  if (popPropMenu = popKeywordsMenu) or (popPropMenu = popSetMenu) then
    if (Key = ord('X')) and (ssCtrl in Shift) then rangeCutClick(Sender) else
    if (Key = ord('C')) and (ssCtrl in Shift) then rangeCopyClick(Sender) else
    if (Key = ord('V')) and (ssCtrl in Shift) then rangePasteNextToClick(Sender) else
  else
end;

procedure TfmDesigner.TreeMouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
//: Handle Right Mouse Up on the Tree
var
  iNode: TTreeNode;
begin
  if Button <> mbRight then
    Exit;
//  Tree.PopupMenu := nil;
//  iNode := Tree.GetNodeAt( X, Y );
  iNode := Tree.GetNodeAt( X, Y );
//  Tree.PopupMenu := popRuleMenu;
//  Tree.Items.Item[0].Focused := True;
//  TreeChange(Sender, iNode);
  if iNode <> nil then begin
    iNode.Selected := True;
  TreeChange(Sender, Tree.Selected);
//    TreeChange(Sender, iNode);
//    popRuleMenu.Popup(Mouse.CursorPos.X, Mouse.CursorPos.Y);
  {$IFNDEF SYN_COMPILER_6_UP}
    popPropMenu.Popup(Mouse.CursorPos.X, Mouse.CursorPos.Y);
  {$ENDIF}
  end;
end;

procedure TfmDesigner.TreeMouseUp(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
//: Handle Right Mouse Up on the Tree
//: ??? 襄疱溴豚螯 ???
var
  iNode: TTreeNode;
begin
  if Button <> mbRight then
    Exit;
  iNode := Tree.GetNodeAt( X, Y );
//  TreeChange(Sender, iNode);
  if iNode <> nil then
    iNode.Selected := True;
  TreeChange(Sender, Tree.Selected);
{  case GetNodeType(Tree.Selected) of
    ntRoot:     popRootMenu.Popup(Mouse.CursorPos.X, Mouse.CursorPos.Y);
    ntRange:    popRangeMenu.Popup(Mouse.CursorPos.X, Mouse.CursorPos.Y);
    ntKeywords: popKeywordsMenu.Popup(Mouse.CursorPos.X, Mouse.CursorPos.Y);
    ntSet:      popSetMenu.Popup(Mouse.CursorPos.X, Mouse.CursorPos.Y);
  end;}
  popPropMenu.Popup(Mouse.CursorPos.X, Mouse.CursorPos.Y);
//    TreeChange(Sender, iNode);
//    popRuleMenu.Popup(Mouse.CursorPos.X, Mouse.CursorPos.Y);
end;


procedure TfmDesigner.TreeClick(Sender: TObject);
begin
  TreeChange(Sender, Tree.Selected);
end;

procedure TfmDesigner.TreeChange(Sender: TObject; Node: TTreeNode);
var
  Range: TSynRange;
  Symbol: string;
  i, len: Integer;
  {$IFDEF CODEFOLDING}
  FoldRegion: TFoldRegionItem;
  SkipRegion: TSkipRegionItem;
  {$ENDIF}
//  list: TList;
begin
  UpdatingControls := True;
//  ListBox1.Clear;
//  list := TList.Create();
//  Tree.GetSelections(list);
{  for i := 0 to list.Count-1 do
    ListBox1.Items.Add(TTreeNode(list.Items[i]).Text);
  list.Free;}
{$IFDEF SYN_COMPILER_6_UP}
if Tree.SelectionCount > 1 then
  PageControl.ActivePage := tabSeveralRules
else
if Tree.SelectionCount = 1 then begin
{$ENDIF}
//  Tree.Selected := TTreeNode(list.Items[0]);
  case GetNodeType(Node) of
    ntInfo: begin
      with TSynInfo(Node.Data) do
      begin
        edName.Text         := General.Name;
        edExtensions.Text   := General.Extensions;
        udVersion.Position  := General.Version;
        udRevision.Position := General.Revision;
        edAuthor.Text       := Author.Name;
        edEmail.Text        := Author.Email;
        edWeb.Text          := Author.Web;
        edCopyright.Text    := Author.Copyright;
        edCompany.Text      := Author.Company;
        edRemark.Text       := Author.Remark;
      end;
      SetControlAttributes(Node, True);
      PageControl.ActivePage := tabInfo;
    end;
    {$IFDEF CUSTOMDATA}
    ntCustomData: begin
      mmCustomData.Text := TStringList(Node.Data).Text;
      lbEntryCountClick(Sender);
      SetControlAttributes(Node, True);
      PageControl.ActivePage := tabCustomData;
    end;
    {$ENDIF}
    ntRange, ntRangeLink: begin
      {###if (TObject(Node.Data) is TSynRangeLink) then
        Range := TSynRangeLink(Node.Data).Range
      else}
        Range := TSynRange(Node.Data);
      with Range do begin
        while popMultiTags.Items.Count > 5 do popMultiTags.Items.Delete(5);
        for i := 0 to OpenToken.SymbolCount-1 do begin
          popMultiTags.Items.Add(TMenuItem.Create(Self));
          with popMultiTags.Items.Items[popMultiTags.Items.Count-1] do begin
            Caption := 'Open: "'+OpenToken.Symbols[i]+'", Close: "'+CloseToken.Symbols[i]+'"';
            OnClick := cbWordChange;
            RadioItem := True;
            {$IFDEF SYN_COMPILER_6_UP}
            AutoCheck := True;
            {$ENDIF}
            GroupIndex := 1;
          end;
        end;
        MultiTagIndex := 0;

        Symbol := OpenToken.Symbols[MultiTagIndex];
        edFrom.Text := Symbol;
        len := length(Symbol);
        if len > 0 then
          chFromEOL.Checked := Symbol[len] = #0
        else
          chFromEOL.Checked := False;

⌨️ 快捷键说明

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