📄 syneditoptionsdialog.pas
字号:
implementation
{$R *.dfm}
uses
{$IFDEF SYN_CLX}
QSynEditKeyConst;
{$ELSE}
SynEditKeyConst;
{$ENDIF}
{ TSynEditOptionsDialog }
constructor TSynEditOptionsDialog.create(AOwner: TComponent);
begin
inherited;
FForm:= TfmEditorOptionsDialog.Create(Self);
end;
destructor TSynEditOptionsDialog.destroy;
begin
FForm.Free;
inherited;
end;
function TSynEditOptionsDialog.Execute(EditOptions : TSynEditorOptionsContainer) : Boolean;
begin
Result:= FForm.Execute(EditOptions);
end;
function TSynEditOptionsDialog.GetUserCommands: TSynEditorOptionsAllUserCommands;
begin
Result := FForm.GetAllUserCommands;
end;
function TSynEditOptionsDialog.GetUserCommandNames: TSynEditorOptionsUserCommand;
begin
Result := FForm.GetUserCommandNames
end;
procedure TSynEditOptionsDialog.SetUserCommands(
const Value: TSynEditorOptionsAllUserCommands);
begin
FForm.GetAllUserCommands := Value;
end;
procedure TSynEditOptionsDialog.SetUserCommandNames(
const Value: TSynEditorOptionsUserCommand);
begin
FForm.GetUserCommandNames := Value;
end;
function TSynEditOptionsDialog.GetExtended: Boolean;
begin
Result := FForm.UseExtendedStrings;
end;
procedure TSynEditOptionsDialog.SetExtended(const Value: Boolean);
begin
FForm.UseExtendedStrings := Value;
end;
{ TSynEditorOptionsContainer }
procedure TSynEditorOptionsContainer.Assign(Source: TPersistent);
begin
if Assigned(Source) and (Source is TCustomSynEdit) then
begin
Self.Font.Assign(TCustomSynEdit(Source).Font);
Self.BookmarkOptions.Assign(TCustomSynEdit(Source).BookmarkOptions);
Self.Gutter.Assign(TCustomSynEdit(Source).Gutter);
Self.Keystrokes.Assign(TCustomSynEdit(Source).Keystrokes);
Self.SelectedColor.Assign(TCustomSynEdit(Source).SelectedColor);
Self.Color := TCustomSynEdit(Source).Color;
Self.Options := TCustomSynEdit(Source).Options;
Self.ExtraLineSpacing := TCustomSynEdit(Source).ExtraLineSpacing;
Self.HideSelection := TCustomSynEdit(Source).HideSelection;
Self.InsertCaret := TCustomSynEdit(Source).InsertCaret;
Self.OverwriteCaret := TCustomSynEdit(Source).OverwriteCaret;
Self.MaxScrollWidth := TCustomSynEdit(Source).MaxScrollWidth;
Self.MaxUndo := TCustomSynEdit(Source).MaxUndo;
Self.RightEdge := TCustomSynEdit(Source).RightEdge;
Self.RightEdgeColor := TCustomSynEdit(Source).RightEdgeColor;
Self.TabWidth := TCustomSynEdit(Source).TabWidth;
Self.WantTabs := TCustomSynEdit(Source).WantTabs;
//!! Self.WordBreakChars := TSynEdit(Source).WordBreakChars;
end else
inherited;
end;
procedure TSynEditorOptionsContainer.AssignTo(Dest: TPersistent);
begin
if Assigned(Dest) and (Dest is TCustomSynEdit) then
begin
TCustomSynEdit(Dest).Font.Assign(Self.Font);
TCustomSynEdit(Dest).BookmarkOptions.Assign(Self.BookmarkOptions);
TCustomSynEdit(Dest).Gutter.Assign(Self.Gutter);
TCustomSynEdit(Dest).Keystrokes.Assign(Self.Keystrokes);
TCustomSynEdit(Dest).SelectedColor.Assign(Self.SelectedColor);
TCustomSynEdit(Dest).Color := Self.Color;
TCustomSynEdit(Dest).Options := Self.Options;
TCustomSynEdit(Dest).ExtraLineSpacing := Self.ExtraLineSpacing;
TCustomSynEdit(Dest).HideSelection := Self.HideSelection;
TCustomSynEdit(Dest).InsertCaret := Self.InsertCaret;
TCustomSynEdit(Dest).OverwriteCaret := Self.OverwriteCaret;
TCustomSynEdit(Dest).MaxScrollWidth := Self.MaxScrollWidth;
TCustomSynEdit(Dest).MaxUndo := Self.MaxUndo;
TCustomSynEdit(Dest).RightEdge := Self.RightEdge;
TCustomSynEdit(Dest).RightEdgeColor := Self.RightEdgeColor;
TCustomSynEdit(Dest).TabWidth := Self.TabWidth;
TCustomSynEdit(Dest).WantTabs := Self.WantTabs;
end else
inherited;
end;
constructor TSynEditorOptionsContainer.create(AOwner: TComponent);
begin
inherited;
FBookmarks:= TSynBookMarkOpt.Create(Self);
FKeystrokes:= TSynEditKeyStrokes.Create(Self);
FSynGutter:= TSynGutter.Create;
FSelectedColor:= TSynSelectedColor.Create;
FSelectedColor.Foreground:= clHighlightText;
FSelectedColor.Background:= clHighlight;
FFont:= TFont.Create;
FFont.Name:= 'Courier New';
FFont.Size:= 8;
Color:= clWindow;
Keystrokes.ResetDefaults;
Options := [eoAutoIndent,eoDragDropEditing,eoDropFiles,eoScrollPastEol,
eoShowScrollHint,eoSmartTabs,eoAltSetsColumnMode, eoTabsToSpaces,eoTrimTrailingSpaces, eoKeepCaretX];
ExtraLineSpacing := 0;
HideSelection := False;
InsertCaret := ctVerticalLine;
OverwriteCaret := ctBlock;
MaxScrollWidth := 1024;
MaxUndo := 1024;
RightEdge := 80;
RightEdgeColor := clSilver;
TabWidth := 8;
WantTabs := True;
//!! WordBreakChars:= '.,;:''"&!?$%#@<>[](){}^-=+-*/\|';
end;
destructor TSynEditorOptionsContainer.destroy;
begin
FBookMarks.Free;
FKeyStrokes.Free;
FSynGutter.Free;
FSelectedColor.Free;
FFont.Free;
inherited;
end;
procedure TSynEditorOptionsContainer.SetBookMarks(
const Value: TSynBookMarkOpt);
begin
FBookmarks.Assign(Value);
end;
procedure TSynEditorOptionsContainer.SetFont(const Value: TFont);
begin
FFont.Assign(Value);
end;
procedure TSynEditorOptionsContainer.SetKeystrokes(
const Value: TSynEditKeyStrokes);
begin
FKeystrokes.Assign(Value);
end;
procedure TSynEditorOptionsContainer.SetOptions(
const Value: TSynEditorOptions);
begin
FOptions:= Value;
end;
procedure TSynEditorOptionsContainer.SetSynGutter(const Value: TSynGutter);
begin
FSynGutter.Assign(Value);
end;
{ TfmEditorOptionsDialog }
function TfmEditorOptionsDialog.Execute(EditOptions : TSynEditorOptionsContainer) : Boolean;
begin
if (EditOptions = nil) then
begin
Result:= False;
Exit;
end;
//Assign the Containers
FSynEdit:= EditOptions;
//Get Data
GetData;
//Show the form
Result:= Showmodal = mrOk;
//PutData
if Result then PutData;
end;
procedure TfmEditorOptionsDialog.GetData;
var I : Integer;
Item : TListItem;
begin
//Gutter
ckGutterVisible.Checked:= FSynEdit.Gutter.Visible;
ckGutterAutosize.Checked:= FSynEdit.Gutter.Visible;
ckGutterShowLineNumbers.Checked:= FSynEdit.Gutter.ShowLineNumbers;
ckGutterShowLeaderZeros.Checked:= FSynEdit.Gutter.LeadingZeros;
ckGutterStartAtZero.Checked:= FSynEdit.Gutter.ZeroStart;
cbGutterFont.Checked := FSynEdit.Gutter.UseFontStyle;
pGutterColor.Color:= FSynEdit.Gutter.Color;
lblGutterFont.Font.Assign(FSynEdit.Gutter.Font);
lblGutterFont.Caption:= lblGutterFont.Font.Name + ' ' + IntToStr(lblGutterFont.Font.Size) + 'pt';
//Right Edge
eRightEdge.Text:= IntToStr(FSynEdit.RightEdge);
pRightEdgeColor.Color:= FSynEdit.RightEdgeColor;
//Line Spacing
eLineSpacing.Text:= IntToStr(FSynEdit.ExtraLineSpacing);
eTabWidth.Text:= IntToStr(FSynEdit.TabWidth);
//Break Chars
//!! eBreakchars.Text:= FSynEdit.WordBreakChars;
//Bookmarks
ckBookmarkKeys.Checked:= FSynEdit.BookMarkOptions.EnableKeys;
ckBookmarkVisible.Checked:= FSynEdit.BookMarkOptions.GlyphsVisible;
//Font
labFont.Font.Assign(FSynEdit.Font);
labFont.Caption:= labFont.Font.Name + ' ' + IntToStr(labFont.Font.Size) + 'pt';
//Options
ckAutoIndent.Checked:= eoAutoIndent in FSynEdit.Options;
ckAutoSizeMaxWidth.Checked:= eoAutoSizeMaxScrollWidth in FSynEdit.Options;
ckDragAndDropEditing.Checked:= eoDragDropEditing in FSynEdit.Options;
ckWantTabs.Checked:= FSynEdit.WantTabs;
ckSmartTabs.Checked:= eoSmartTabs in FSynEdit.Options;
ckAltSetsColumnMode.Checked:= eoAltSetsColumnMode in FSynEdit.Options;
ckHalfPageScroll.Checked:= eoHalfPageScroll in FSynEdit.Options;
ckScrollByOneLess.Checked:= eoScrollByOneLess in FSynEdit.Options;
ckScrollPastEOF.Checked:= eoScrollPastEof in FSynEdit.Options;
ckScrollPastEOL.Checked:= eoScrollPastEol in FSynEdit.Options;
ckShowScrollHint.Checked:= eoShowScrollHint in FSynEdit.Options;
ckTabsToSpaces.Checked:= eoTabsToSpaces in FSynEdit.Options;
ckTrimTrailingSpaces.Checked:= eoTrimTrailingSpaces in FSynEdit.Options;
ckKeepCaretX.Checked:= eoKeepCaretX in FSynEdit.Options;
ckSmartTabDelete.Checked := eoSmartTabDelete in FSynEdit.Options;
ckRightMouseMoves.Checked := eoRightMouseMovesCursor in FSynEdit.Options;
ckEnhanceHomeKey.Checked := eoEnhanceHomeKey in FSynEdit.Options;
ckEnhanceEndKey.Checked := eoEnhanceEndKey in FSynEdit.Options;
ckGroupUndo.Checked := eoGroupUndo in FSynEdit.Options;
ckDisableScrollArrows.Checked := eoDisableScrollArrows in FSynEdit.Options;
ckHideShowScrollbars.Checked := eoHideShowScrollbars in FSynEdit.Options;
ckShowSpecialChars.Checked := eoShowSpecialChars in FSynEdit.Options;
//Caret
cInsertCaret.ItemIndex:= ord(FSynEdit.InsertCaret);
cOverwriteCaret.ItemIndex:= ord(FSynEdit.OverwriteCaret);
KeyList.Items.BeginUpdate;
try
KeyList.Items.Clear;
for I:= 0 to FSynEdit.Keystrokes.Count-1 do
begin
Item:= KeyList.Items.Add;
FillInKeystrokeInfo(FSynEdit.Keystrokes.Items[I], Item);
Item.Data:= FSynEdit.Keystrokes.Items[I];
end;
if (KeyList.Items.Count > 0) then KeyList.Items[0].Selected:= True;
finally
KeyList.Items.EndUpdate;
end;
end;
procedure TfmEditorOptionsDialog.PutData;
var
vOptions: TSynEditorOptions;
procedure SetFlag(aOption: TSynEditorOption; aValue: Boolean);
begin
if aValue then
Include(vOptions, aOption)
else
Exclude(vOptions, aOption);
end;
begin
//Gutter
FSynEdit.Gutter.Visible:= ckGutterVisible.Checked;
FSynEdit.Gutter.AutoSize := ckGutterAutosize.Checked;
FSynEdit.Gutter.ShowLineNumbers:= ckGutterShowLineNumbers.Checked;
FSynEdit.Gutter.LeadingZeros:= ckGutterShowLeaderZeros.Checked;
FSynEdit.Gutter.ZeroStart:= ckGutterStartAtZero.Checked;
FSynEdit.Gutter.Color:= pGutterColor.Color;
FSynEdit.Gutter.UseFontStyle := cbGutterFont.Checked;
FSynEdit.Gutter.Font.Assign(lblGutterFont.Font);
//Right Edge
FSynEdit.RightEdge:= StrToIntDef(eRightEdge.Text, 80);
FSynEdit.RightEdgeColor:= pRightEdgeColor.Color;
//Line Spacing
FSynEdit.ExtraLineSpacing:= StrToIntDef(eLineSpacing.Text, 0);
FSynEdit.TabWidth:= StrToIntDef(eTabWidth.Text, 8);
//Break Chars
//!! FSynEdit.WordBreakChars:= eBreakchars.Text;
//Bookmarks
FSynEdit.BookMarkOptions.EnableKeys:= ckBookmarkKeys.Checked;
FSynEdit.BookMarkOptions.GlyphsVisible:= ckBookmarkVisible.Checked;
//Font
FSynEdit.Font.Assign(labFont.Font);
//Options
FSynEdit.WantTabs:= ckWantTabs.Checked;
vOptions := FSynEdit.Options; //Keep old values for unsupported options
SetFlag(eoAutoIndent, ckAutoIndent.Checked);
SetFlag(eoAutoSizeMaxScrollWidth, ckAutoSizeMaxWidth.Checked);
SetFlag(eoDragDropEditing, ckDragAndDropEditing.Checked);
SetFlag(eoSmartTabs, ckSmartTabs.Checked);
SetFlag(eoAltSetsColumnMode, ckAltSetsColumnMode.Checked);
SetFlag(eoHalfPageScroll, ckHalfPageScroll.Checked);
SetFlag(eoScrollByOneLess, ckScrollByOneLess.Checked);
SetFlag(eoScrollPastEof, ckScrollPastEOF.Checked);
SetFlag(eoScrollPastEol, ckScrollPastEOL.Checked);
SetFlag(eoShowScrollHint, ckShowScrollHint.Checked);
SetFlag(eoTabsToSpaces, ckTabsToSpaces.Checked);
SetFlag(eoTrimTrailingSpaces, ckTrimTrailingSpaces.Checked);
SetFlag(eoKeepCaretX, ckKeepCaretX.Checked);
SetFlag(eoSmartTabDelete, ckSmartTabDelete.Checked);
SetFlag(eoRightMouseMovesCursor, ckRightMouseMoves.Checked);
SetFlag(eoEnhanceHomeKey, ckEnhanceHomeKey.Checked);
SetFlag(eoEnhanceEndKey, ckEnhanceEndKey.Checked);
SetFlag(eoGroupUndo, ckGroupUndo.Checked);
SetFlag(eoDisableScrollArrows, ckDisableScrollArrows.Checked);
SetFlag(eoHideShowScrollbars, ckHideShowScrollbars.Checked);
SetFlag(eoShowSpecialChars, ckShowSpecialChars.Checked);
FSynEdit.Options := vOptions;
//Caret
FSynEdit.InsertCaret:= TSynEditCaretType(cInsertCaret.ItemIndex);
FSynEdit.OverwriteCaret:= TSynEditCaretType(cOverwriteCaret.ItemIndex);
end;
function TfmEditorOptionsDialog.GetColor(Item: TMenuItem): TColor;
begin
if (Item.Tag = -1) or (Item.Tag > 24) then
Result:= clNone
else
Result:= TColor(Byte(Item.Tag) or $80000000);
end;
procedure TfmEditorOptionsDialog.PopupMenuClick(Sender: TObject);
var C : TColor;
begin
C:= GetColor(TMenuItem(Sender));
//Set the color based on where it was "popped from"
if (FPoppedFrom = cpGutter) then
pGutterColor.Color:= C
else if (FPoppedFrom = cpRightEdge) then
pRightEdgeColor.Color:= C;
end;
procedure TfmEditorOptionsDialog.FormCreate(Sender: TObject);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -