📄 editu2.pas
字号:
clActiveBorder, clInactiveBorder, clAppWorkSpace, clHighlight,
clHighlightText, clBtnFace, clBtnShadow, clGrayText, clBtnText,
clInactiveCaptionText, clBtnHighlight, cl3DDkShadow, cl3DLight,
clInfoText, clInfoBk, clNone);
function ColorToIndex(AColor: TColor): integer;
var
i: integer;
begin
Result := 0;
for i := Low(Colors) to High(Colors) do
if Colors[i] = AColor then begin
Result := i - 1;
break;
end;
end;
function IndexToColor(AIndex: integer): TColor;
begin
Result := Colors[AIndex + 1];
end;
{ TDemoMainForm }
procedure TDemoMainForm.FormCreate(Sender: TObject);
var
s: string;
AColors: TStringList;
i: integer;
begin
fHighlighters := TStringList.Create;
GetHighlighters(Self, fHighlighters, FALSE);
EnumerateExporters;
UpdateKeystrokesList;
// setup highlighter selection combobox
cbxHighlighterSelect.Items.Assign(fHighlighters);
cbxHighlighterSelect.Items.Insert(0, '(none)');
// setup file open dialog filter
s := GetHighlightersFilter(fHighlighters);
if (s <> '') and (s[Length(s)] <> '|') then
s := s + '|';
s := s + 'All files (*.*)|*.*';
OpenDialog1.Filter := s;
// fill comboboxes with color strings
AColors := TStringList.Create;
try
for i := Low(Colors) to High(Colors) do begin
if ColorToIdent(Colors[i], s) then
AColors.Add(s);
end;
cbxREColor.Items.Assign(AColors);
cbxColor.Items.Assign(AColors);
cbxForeground.Items.Assign(AColors);
cbxBackground.Items.Assign(AColors);
cbxGutterColor.Items.Assign(AColors);
cbxAttrForeground.Items.Assign(AColors);
cbxAttrBackground.Items.Assign(AColors);
cbxCompletionColor.Items.Assign(AColors);
finally
AColors.Free;
end;
// initialization of other controls
PageControl1.ActivePage := tabFile;
FontDialog1.Font.Assign(SynEditor.Font);
fMarkButtons[0] := SpeedButton1;
fMarkButtons[1] := SpeedButton2;
fMarkButtons[2] := SpeedButton3;
fMarkButtons[3] := SpeedButton4;
fMarkButtons[4] := SpeedButton5;
//intializes a search engine
SynEditor.SearchEngine := TSynEditSearch.Create( SynEditor );
end;
procedure TDemoMainForm.FormDestroy(Sender: TObject);
begin
fHighlighters.Free;
end;
procedure TDemoMainForm.FormShow(Sender: TObject);
begin
if not fShown then begin
fShown := TRUE;
UpdateEditorSettings;
cbxHighlighterSelect.ItemIndex := 0;
cbxHighlighterSelectChange(Sender);
// update the statusbar panels
SynEditorStatusChange(Self, [scAll]);
end;
end;
procedure TDemoMainForm.FormResize(Sender: TObject);
begin
inpGutterWidth.MaxValue := SynEditor.Width + 1;
if inpGutterWidth.Value > inpGutterWidth.MaxValue then
inpGutterWidth.Value := inpGutterWidth.MaxValue;
end;
procedure TDemoMainForm.EnumerateExporters;
var
i: integer;
s: string;
begin
cbxExporterSelect.Items.Add('(All registered formats)');
for i := 0 to ComponentCount - 1 do begin
if not (Components[i] is TSynCustomExporter) then
continue;
s := (Components[i] as TSynCustomExporter).FormatName;
if s <> '' then
cbxExporterSelect.Items.Add(s);
end;
cbxExporterSelect.ItemIndex := 0;
cbxExporterSelectChange(Self);
end;
function TDemoMainForm.GetSelectedExporter: TSynCustomExporter;
var
i: integer;
begin
for i := 0 to ComponentCount - 1 do begin
if not (Components[i] is TSynCustomExporter) then
continue;
Result := TSynCustomExporter(Components[i]);
if Result.FormatName = cbxExporterSelect.Text then
exit;
end;
Result := nil;
end;
procedure TDemoMainForm.LoadFile(const AFileName: string; AReadOnly: boolean);
var
backCursor: TCursor;
bWasText: boolean;
begin
backCursor := Cursor;
try
Cursor := crHourGlass;
Windows.SetCursor(Screen.Cursors[crHourGlass]);
fFileName := AFileName;
outFilename.Caption := AFileName;
outFilename.Visible := TRUE;
with SynEditor do begin
Highlighter := GetHighlighterFromFileExt(fHighlighters,
ExtractFileExt(AFileName));
with cbxHighlighterSelect do begin
if Highlighter <> nil then
ItemIndex := Items.IndexOf(Highlighter.LanguageName)
else
ItemIndex := 0;
end;
cbxHighlighterSelectChange(Self);
if Highlighter = SynDfmSyn1 then
LoadDFMFile2Strings(AFileName, SynEditor.Lines, bWasText)
else
Lines.LoadFromFile(AFileName);
Modified := FALSE;
ReadOnly := AReadOnly;
cbReadonly.Checked := AReadOnly;
SetFocus;
end;
finally
Cursor := backCursor;
end;
end;
procedure TDemoMainForm.LogEvent(AEvent: string);
begin
if cbEnableEventLog.Checked then
lbEventLog.Items.Insert(0, TimeToStr(Now) + ' ' + AEvent);
end;
procedure TDemoMainForm.RebuildMarks;
var
i: integer;
begin
with SynEditor do begin
BeginUpdate;
try
for i := 0 to Marks.Count-1 do begin
if Marks[i].IsBookmark then
Marks[i].InternalImage := cbInternalImages.Checked;
end;
finally
EndUpdate;
end;
end;
end;
procedure TDemoMainForm.RecalcLeftMargin;
procedure ValidateSpinEditValue(SE: TSpinEdit; Value: integer);
begin
if SE.Value <> Value then SE.Value := Value;
end;
begin
with SynEditor do begin
inpLeftMargin.MaxValue := Gutter.Width;
if inpLeftMargin.Value > inpLeftMargin.MaxValue then
inpLeftMargin.Value := inpLeftMargin.MaxValue;
ValidateSpinEditValue(inpGutterWidth, Gutter.Width);
ValidateSpinEditValue(inpDigitCount, Gutter.DigitCount);
ValidateSpinEditValue(inpLeftOffset, Gutter.LeftOffset);
ValidateSpinEditValue(inpRightOffset, Gutter.RightOffset);
end;
end;
procedure TDemoMainForm.ReloadAttributes;
var
i: integer;
begin
if SynEditor.Highlighter <> nil then begin
cbxAttrSelect.Items.Clear;
for i := 0 to SynEditor.Highlighter.AttrCount - 1 do
cbxAttrSelect.Items.Add(SynEditor.Highlighter.Attribute[i].Name);
cbxAttrSelect.ItemIndex := 0;
end;
cbxAttrSelectChange(Self);
end;
procedure TDemoMainForm.ResetMarkButtons;
var
marks: TSynEditMarks;
i: integer;
begin
fDisableMarkButtons := true;
try
SynEditor.Marks.GetMarksForLine(SynEditor.CaretY, marks);
for i := 0 to 4 do
fMarkButtons[i].Down := false;
for i := 1 to maxMarks do begin
if not assigned(marks[i]) then break;
if not marks[i].IsBookmark then
fMarkButtons[marks[i].ImageIndex-10].Down := true;
end;
finally
fDisableMarkButtons := false;
end;
end;
procedure TDemoMainForm.ShowSuccess(ASuccess: boolean);
begin
if ASuccess then
StatusBar.Panels[3].Text := 'Success'
else
StatusBar.Panels[3].Text := 'Failure';
end;
procedure TDemoMainForm.UpdateCanExport;
begin
btnExportToClipboard.Enabled := SynEditor.Highlighter <> nil;
btnExportToFile.Enabled := (SynEditor.Highlighter <> nil)
and (cbxExporterSelect.ItemIndex > 0);
end;
procedure TDemoMainForm.UpdateEditorSettings;
begin
with SynEditor do begin
cbReadonly.Checked := ReadOnly;
cbHideSelection.Checked := HideSelection;
cbScrollPastEOL.Checked := eoScrollPastEOL in Options;
cbHalfPageScroll.Checked := eoHalfPageScroll in Options;
inpExtraLineSpacing.Value := ExtraLineSpacing;
inpRightEdge.Value := RightEdge;
cbxREColor.ItemIndex := ColorToIndex(RightEdgeColor);
cbxScrollBars.ItemIndex := Ord(Scrollbars);
with SynEditor.Font do
btnFont.Caption := Name + ' ' + IntToStr(Size);
cbxColor.ItemIndex := ColorToIndex(Color);
cbxForeground.ItemIndex := ColorToIndex(SelectedColor.Foreground);
cbxBackground.ItemIndex := ColorToIndex(SelectedColor.Background);
cbAutoIndent.Checked := eoAutoIndent in Options;
cbWantTabs.Checked := WantTabs;
inpTabWidth.Value := TabWidth;
cbDragDropEdit.Checked := eoDragDropEditing in Options;
cbxInsertCaret.ItemIndex := Ord(InsertCaret);
cbxOverwriteCaret.ItemIndex := Ord(OverwriteCaret);
cbInsertMode.Checked := InsertMode;
cbxGutterColor.ItemIndex := ColorToIndex(Gutter.Color);
inpGutterWidth.Value := Gutter.Width;
inpDigitCount.Value := Gutter.DigitCount;
inpLeftOffset.Value := Gutter.LeftOffset;
inpRightOffset.Value := Gutter.RightOffset;
cbLineNumbers.Checked := Gutter.ShowLineNumbers;
cbLeadingZeros.Checked := Gutter.LeadingZeros;
cbZeroStart.Checked := Gutter.ZeroStart;
cbAutoSize.Checked := Gutter.AutoSize;
cbGutterVisible.Checked := Gutter.Visible;
cbUseFontStyle.Checked := Gutter.UseFontStyle;
cbEnableKeys.Checked := BookMarkOptions.EnableKeys;
cbGlyphsVisible.Checked := BookMarkOptions.GlyphsVisible;
cbInternalImages.Checked := BookMarkOptions.BookmarkImages = nil;
inpLeftMargin.Value := BookMarkOptions.LeftMargin;
inpXOffset.Value := BookmarkOptions.XOffset;
inpMaxUndo.Value := MaxUndo;
cbxAttrSelect.ItemIndex := 0;
cbxAttrSelectChange(Self);
end;
end;
procedure TDemoMainForm.UpdateKeystrokesList;
var
i: integer;
begin
with KeyCmdList.Items do begin
BeginUpdate;
try
Clear;
for i := 0 to SynEditor.Keystrokes.Count - 1 do
with Add do begin
Caption := EditorCommandToCodeString(SynEditor.Keystrokes[i].Command);
if SynEditor.Keystrokes[i].ShortCut = 0 then
SubItems.Add('<none>')
else
SubItems.Add(Menus.ShortCutToText(SynEditor.Keystrokes[i].ShortCut));
end;
finally
EndUpdate;
end;
end;
end;
procedure TDemoMainForm.btnLoadClick(Sender: TObject);
begin
if OpenDialog1.Execute then
LoadFile(OpenDialog1.FileName, ofReadOnly in OpenDialog1.Options);
SynEditor.SetFocus;
end;
procedure TDemoMainForm.cbReadonlyClick(Sender: TObject);
begin
SynEditor.ReadOnly := cbReadonly.Checked;
SynEditor.SetFocus;
end;
procedure TDemoMainForm.cbHideSelectionClick(Sender: TObject);
begin
SynEditor.HideSelection := cbHideSelection.Checked;
SynEditor.SetFocus;
end;
procedure TDemoMainForm.cbScrollPastEOLClick(Sender: TObject);
begin
SynEditor.SetOptionFlag(eoScrollPastEol, cbScrollPastEOL.Checked);
SynEditor.SetFocus;
end;
procedure TDemoMainForm.cbHalfPageScrollClick(Sender: TObject);
begin
SynEditor.SetOptionFlag(eoHalfPageScroll, cbHalfPageScroll.Checked);
SynEditor.SetFocus;
end;
procedure TDemoMainForm.inpExtraLineSpacingChange(Sender: TObject);
begin
try SynEditor.ExtraLineSpacing := inpExtraLineSpacing.Value;
except end;
SynEditor.SetFocus;
end;
procedure TDemoMainForm.inpRightEdgeChange(Sender: TObject);
begin
try SynEditor.RightEdge := inpRightEdge.Value;
except end;
RecalcLeftMargin;
SynEditor.SetFocus;
end;
procedure TDemoMainForm.cbxREColorChange(Sender: TObject);
begin
SynEditor.RightEdgeColor := IndexToColor(cbxREColor.ItemIndex);
SynEditor.SetFocus;
end;
procedure TDemoMainForm.cbxScrollBarsChange(Sender: TObject);
begin
SynEditor.Scrollbars := TScrollStyle(cbxScrollBars.ItemIndex);
SynEditor.SetFocus;
end;
procedure TDemoMainForm.cbxColorChange(Sender: TObject);
begin
SynEditor.Color := IndexToColor(cbxColor.ItemIndex);
SynEditor.SetFocus;
end;
procedure TDemoMainForm.cbxForegroundChange(Sender: TObject);
begin
SynEditor.SelectedColor.Foreground := IndexToColor(cbxForeground.ItemIndex);
SynEditor.SetFocus;
end;
procedure TDemoMainForm.cbxBackgroundChange(Sender: TObject);
begin
SynEditor.SelectedColor.Background := IndexToColor(cbxBackground.ItemIndex);
SynEditor.SetFocus;
end;
procedure TDemoMainForm.btnFontClick(Sender: TObject);
begin
if FontDialog1.Execute then begin
SynEditor.Font.Assign(FontDialog1.Font);
UpdateEditorSettings;
SynEditor.SetFocus;
end;
end;
procedure TDemoMainForm.cbAutoIndentClick(Sender: TObject);
begin
SynEditor.SetOptionFlag(eoAutoIndent, cbAutoIndent.Checked);
SynEditor.SetFocus;
end;
procedure TDemoMainForm.cbWantTabsClick(Sender: TObject);
begin
SynEditor.WantTabs := cbWantTabs.Checked;
SynEditor.SetFocus;
end;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -