📄 synunidesignerform.pas
字号:
_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 + -