editu2.pas

来自「本人买的<<VC++项目开发实例>>源代码配套光盘.」· PAS 代码 · 共 1,411 行 · 第 1/4 页

PAS
1,411
字号
          if idx >= 0 then cbxHighlighterSelect.ItemIndex := idx;
//          cbxHighlighterSelectChange(Sender);
          cbxHighlighterSelectChange(Self);
          Result := true;
        end;
      end; //while
    end
  end; { MatchesExtension }

var
  i  : integer;
  ext: string;
  bWasText: boolean;                                                            //mh 1999-10-04
  backCursor: TCursor;
begin
  backCursor := Cursor;
  try
    Cursor := crHourGlass;
    Windows.SetCursor(Screen.Cursors[crHourGlass]);
//  if OpenDialog1.Execute then
//  begin
//    fName := OpenDialog1.FileName;
    fName := FileName;
    outFilename.Caption := fName;
    outFilename.Visible := true;
    ext := UpperCase(ExtractFileExt(fName));
    for i := 0 to ComponentCount-1 do
      if Components[i] is TmwCustomHighLighter then begin
        if MatchesExtension(ext,Components[i] as TmwCustomHighlighter) then break;
      end;
    btnPrint.Enabled := true;
    if mwEdit.HighLighter = dmDfmSyn1 then
      LoadDFMFile2Strings(fName, mwEdit.Lines, bWasText)                        //mh 1999-10-04
    else
      mwEdit.Lines.LoadFromFile(fName);
    mwEdit.Modified := false;
    mwEdit.ClearUndo;
    inpLineText.Text := mwEdit.LineText;
    mwEdit.SetFocus;
  finally
    Cursor := backCursor;
  end;
end;

procedure TForm1.btnLoadClick(Sender: TObject);
begin
  if OpenDialog1.Execute then
    LoadFile(OpenDialog1.FileName);
end;
{end}                                                                           //mh 1999-11-02

procedure TForm1.EnumerateHighlighters;
var
  i: integer;
begin
  cbxHighlighterSelect.Items.Add('(none)');
  OpenDialog1.Filter := '';
  for i := 0 to ComponentCount-1 do
    if Components[i] is TmwCustomHighLighter then begin
      cbxHighlighterSelect.Items.Add((Components[i] as TmwCustomHighLighter).LanguageName);
      if (Components[i] as TmwCustomHighLighter).DefaultFilter <> '' then begin
        if OpenDialog1.Filter <> '' then OpenDialog1.Filter := OpenDialog1.Filter + '|';
        OpenDialog1.Filter := OpenDialog1.Filter + (Components[i] as TmwCustomHighLighter).DefaultFilter;
      end;
    end;
  if OpenDialog1.Filter <> '' then OpenDialog1.Filter := OpenDialog1.Filter + '|';
  OpenDialog1.Filter := OpenDialog1.Filter + 'All files (*.*)|*.*';
end;

procedure TForm1.EnumerateExporters;
var
  i: integer;
begin
  cbxExporterSelect.Items.Add('(none)');
  for i := 0 to ComponentCount-1 do
    if Components[i] is TmwCustomExport then
      cbxExporterSelect.Items.Add((Components[i] as TmwCustomExport).ExporterName);
  cbxExporterSelect.ItemIndex := 0;
  cbxExporterSelectChange(self);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  markButtons[0] := SpeedButton1;
  markButtons[1] := SpeedButton2;
  markButtons[2] := SpeedButton3;
  markButtons[3] := SpeedButton4;
  markButtons[4] := SpeedButton5;
  PageControl1.ActivePage := tabFile;
  EnumerateHighlighters;
  EnumerateExporters;
  UpdateKeystrokesList;
  FontDialog1.Font.Assign(mwEdit.Font);                                         //mh 1999-09-12
  mwCompletionProposal1.Editor := mwEdit;                                       //gp 1999-11-30
  mwAutoComplete1.Editor       := mwEdit;                                       //gp 1999-11-30
end;

procedure TForm1.cbxSettingsSelectChange(Sender: TObject);
var
  ok: boolean;
begin
  with cbxSettingsSelect do begin
    ok := mwEdit.Highlighter.UseUserSettings(ItemIndex);
    if ok
      then StatusBar.SimpleText := 'Success'
      else StatusBar.SimpleText := 'Failure';
    ReloadAttributes;
    if fName <> '' then begin
      mwEdit.Invalidate;
      mwEdit.SetFocus;
    end;
  end;
end;

procedure TForm1.btnUndoClick(Sender: TObject);
begin
  mwEdit.Undo;
  mwEdit.SetFocus;
end;

procedure TForm1.mwEditEnter(Sender: TObject);
begin
  if cbEnableEventLog.Checked and cbOther.Checked then
    lbEventLog.Items.Insert(0, TimeToStr(Now) + ' OnEnter');
  btnUndo.Enabled := mwEdit.CanUndo;
  btnRedo.Enabled := mwEdit.CanRedo;
end;

procedure TForm1.mwEditKeyUp(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if cbEnableEventLog.Checked and cbKeyboard.Checked then
    lbEventLog.Items.Insert(0, TimeToStr(Now) + ' OnKeyUp');
  btnUndo.Enabled := mwEdit.CanUndo;
  btnRedo.Enabled := mwEdit.CanRedo;
  cbInsertMode.Checked := mwEdit.InsertMode;
  LoadInfo;
end;

procedure TForm1.mwEditChange(Sender: TObject);
begin
  if cbEnableEventLog.Checked and cbOther.Checked then
    lbEventLog.Items.Insert(0, TimeToStr(Now) + ' OnChange');
  btnUndo.Enabled := mwEdit.CanUndo;
  btnRedo.Enabled := mwEdit.CanRedo;
  if mwEdit.Modified then begin
    with outFilename do
      if Caption[Length(Caption)] <> ')' then
        Caption := fname + ' (modified)'
  end
  else begin
    with outFilename do
      if Caption[Length(Caption)] = ')' then
        Caption := fname;
  end;
  LoadInfo;
end;

procedure TForm1.ReloadAttributes;
var
  i: integer;
begin
  if cbxHighlighterSelect.ItemIndex > 0 then begin
    cbxAttrSelect.Items.Clear;
    for i := 0 to mwEdit.HighLighter.AttrCount - 1 do
      cbxAttrSelect.Items.Add(mwEdit.HighLighter.Attribute[i].Name);
    cbxAttrSelect.ItemIndex := 0;
  end;
  cbxAttrSelectChange(Self);
end; 

procedure TForm1.cbxHighlighterSelectChange(Sender: TObject);
var
  i: integer;                                                                   //Carlos 1998-27-12
begin
  mwEdit.Highlighter := nil;
  for i := 0 to ComponentCount-1 do
    if (Components[i] is TmwCustomHighLighter) and
       ((Components[i] as TmwCustomHighLighter).LanguageName = cbxHighlighterSelect.Text) then begin
      mwEdit.Highlighter := (Components[i] as TmwCustomHighLighter);
      break;
    end;
  cbxExporterSelect.Enabled := assigned(mwEdit.Highlighter) and (hcExportable in mwEdit.Highlighter.Capability);
  btnExportToClip.Enabled := cbxExporterSelect.Enabled and (cbxExporterSelect.ItemIndex > 0);
  btnExportAllToClip.Enabled := btnExportToClip.Enabled;
  StatusBar.SimpleText := '';
  mwEdit.Invalidate;
  cbxSettingsSelect.Items.Clear;
  if assigned(mwEdit.Highlighter) and (hcUserSettings in mwEdit.Highlighter.Capability) then begin
    mwEdit.HighLighter.EnumUserSettings(cbxSettingsSelect.Items);
  end;
  cbxSettingsSelect.Enabled := (cbxSettingsSelect.Items.Count > 0);
  btnSaveToReg.Enabled := assigned(mwEdit.Highlighter) and (hcRegistry in mwEdit.Highlighter.Capability);
  btnLoadFromReg.Enabled := btnSaveToReg.Enabled;
  {begin}                                                                       //Carlos 1998-27-12
  cbxAttrSelect.Enabled := (cbxHighlighterSelect.ItemIndex > 0);
  cbxAttrForeground.Enabled := (cbxHighlighterSelect.ItemIndex > 0);
  cbxAttrBackground.Enabled := (cbxHighlighterSelect.ItemIndex > 0);
  grbAttrStyle.Enabled := (cbxHighlighterSelect.ItemIndex > 0);
  grbAttrComments.Enabled := mwEdit.Highlighter is TmwGeneralSyn;
  btnKeywords.Enabled := grbAttrComments.Enabled;
  if grbAttrComments.Enabled then begin
     cbCommentsAnsi.Checked := (csAnsiStyle in (mwEdit.HighLighter as TmwGeneralSyn).Comments);
     cbCommentsPas.Checked  := (csPasStyle in (mwEdit.HighLighter as TmwGeneralSyn).Comments);
     cbCommentsC.Checked    := (csCStyle in (mwEdit.HighLighter as TmwGeneralSyn).Comments);
     cbCommentsAsm.Checked  := (csAsmStyle in (mwEdit.HighLighter as TmwGeneralSyn).Comments);
     cbCommentsBas.Checked  := (csBasStyle in (mwEdit.HighLighter as TmwGeneralSyn).Comments);
  end;
  ReloadAttributes;
  {end}                                                                         //Carlos 1998-27-12
  if cbxHighlighterSelect.Text = odPySyn1.LanguageName
    then odPythonBehaviour1.Editor := mwEdit
    else odPythonBehaviour1.Editor := nil;
  mwEdit.SetFocus;
end;

procedure TForm1.cbReadonlyClick(Sender: TObject);
begin
  mwEdit.Readonly := cbReadonly.Checked;
  mwEdit.SetFocus;
end;

const
  Colors: array[1..42 {sic!}] of TColor = (clBlack, clMaroon, clGreen, clOlive,
    clNavy, clPurple, clTeal, clDkGray, clLtGray, clRed, clLime,
    clYellow, clBlue, clFuchsia, clAqua, clWhite, clScrollBar,
    clBackground, clActiveCaption, clInactiveCaption, clMenu, clWindow,
    clWindowFrame, clMenuText, clWindowText, clCaptionText,
    clActiveBorder, clInactiveBorder, clAppWorkSpace, clHighlight,
    clHighlightText, clBtnFace, clBtnShadow, clGrayText, clBtnText,
    clInactiveCaptionText, clBtnHighlight, cl3DDkShadow, cl3DLight,
    clInfoText, clInfoBk, clNone);

function TForm1.ColorToIndex(col: TColor): integer;
var
  i: integer;
begin
  Result := 0;
  for i := 1 to 42 do
    if Colors[i] = col then begin
      Result := i - 1;
      Exit;
    end;
end;

function TForm1.IndexToColor(index: integer): TColor;
begin
  Result := Colors[index + 1];
end;

procedure TForm1.LoadSettings;
begin
  cbReadonly.Checked := mwEdit.Readonly;
  cbHideSelection.Checked := mwEdit.HideSelection;
{begin}                                                                         //mh 1999-10-04
  cbAutoIndent.Checked := mweoAutoIndent in mwEdit.Options; //mwEdit.Autoindent;
  cbWantTabs.Checked := mwEdit.WantTabs;
  inpTabWidth.Value := mwEdit.TabWidth; //inpTabIndent.Value := mwEdit.TabIndent;
  cbScrollPastEOL.Checked := mweoScrollPastEol in mwEdit.Options; //mwEdit.ScrollPastEOL;
  cbHalfpageScroll.Checked := mweoHalfPageScroll in mwEdit.Options; //mwEdit.HalfpageScroll;
{end}                                                                           //mh 1999-10-04
  btnFont.Caption := mwEdit.Font.Name + ' ' + IntToStr(mwEdit.Font.Size);
  inpRightEdge.Value := mwEdit.RightEdge;
  inpExtraLineSpacing.Value := mwEdit.ExtraLineSpacing;
  cbxScrollBars.ItemIndex := Ord(mwEdit.Scrollbars);
  cbxColor.ItemIndex := ColorToIndex(mwEdit.Color);
  cbxREColor.ItemIndex := ColorToIndex(mwEdit.RightEdgeColor);
  cbxForeground.ItemIndex := ColorToIndex(mwEdit.SelectedColor.Foreground);
  cbxBackground.ItemIndex := ColorToIndex(mwEdit.SelectedColor.Background);
  cbxInsertCaret.ItemIndex := Ord(mwEdit.InsertCaret);
  cbxOverwriteCaret.ItemIndex := Ord(mwEdit.OverwriteCaret);
  cbInsertMode.Checked := mwEdit.InsertMode;
  inpGutterWidth.Value := mwEdit.Gutter.Width;                                  //gp 1999-06-10
  inpDigitCount.Value := mwEdit.Gutter.DigitCount;                              //gp 1999-06-10
  inpLeftOffset.Value := mwEdit.Gutter.LeftOffset;                              //gp 1999-06-10
  inpRightOffset.Value := mwEdit.Gutter.RightOffset;                            //gp 1999-06-10
  cbLineNumbers.Checked := mwEdit.Gutter.ShowLineNumbers;                       //gp 1999-06-10
  cbLeadingZeros.Checked := mwEdit.Gutter.LeadingZeros;                         //gp 1999-06-10
  cbZeroStart.Checked := mwEdit.Gutter.ZeroStart;                               //gp 1999-06-10
  cbxGutterColor.ItemIndex := ColorToIndex(mwEdit.Gutter.Color);                //gp 1999-06-10
  cbGlyphsVisible.Checked := mwEdit.BookMarkOptions.GlyphsVisible;
  cbEnableKeys.Checked := mwEdit.BookMarkOptions.EnableKeys;
  inpLeftMargin.Value := mwEdit.BookMarkOptions.LeftMargin;
  inpXOffset.Value := mwEdit.BookmarkOptions.XOffset;
  inpMaxUndo.Value := mwEdit.MaxUndo;
  {begin}                                                                       //Carlos 1998-27-12
  cbxAttrForeground.Items.Assign(cbxColor.Items);
  cbxAttrBackground.Items.Assign(cbxColor.Items);
  cbxAttrSelect.ItemIndex := 0;
  cbxAttrSelectChange(Self);
  {end}                                                                         //Carlos 1998-27-12
end;

procedure TForm1.cbHideSelectionClick(Sender: TObject);
begin
  mwEdit.HideSelection := cbHideSelection.Checked;
  mwEdit.SetFocus;
end;

procedure TForm1.cbScrollPastEOLClick(Sender: TObject);
begin
  mwEdit.SetOptionFlag(mweoScrollPastEOL, cbScrollPastEOL.Checked);
  mwEdit.SetFocus;
end;

procedure TForm1.inpRightEdgeChange(Sender: TObject);
begin
  try mwEdit.RightEdge := inpRightEdge.Value;
  except
  end;
  mwEdit.SetFocus;
end;

procedure TForm1.cbxScrollBarsChange(Sender: TObject);
begin
  mwEdit.Scrollbars := TScrollStyle(cbxScrollBars.ItemIndex);
  mwEdit.SetFocus;
end;

procedure TForm1.cbxColorChange(Sender: TObject);
begin
  mwEdit.Color := IndexToColor(cbxColor.ItemIndex);
  mwEdit.SetFocus;
end;

procedure TForm1.cbxForegroundChange(Sender: TObject);
begin
  mwEdit.SelectedColor.Foreground := IndexToColor(cbxForeground.ItemIndex);
  mwEdit.SetFocus;
end;

procedure TForm1.cbxBackgroundChange(Sender: TObject);
begin
  mwEdit.SelectedColor.Background := IndexToColor(cbxBackground.ItemIndex);
  mwEdit.SetFocus;
end;

procedure TForm1.btnFontClick(Sender: TObject);
begin
  if FontDialog1.Execute then begin
    mwEdit.Font.Assign(FontDialog1.Font);
    LoadSettings;
    mwEdit.SetFocus;
  end;
end;

procedure TForm1.cbxInsertCaretChange(Sender: TObject);
begin
  mwEdit.InsertCaret := TCaretType(cbxInsertCaret.ItemIndex);
  mwEdit.SetFocus;
end;

procedure TForm1.cbxOverwriteCaretChange(Sender: TObject);

⌨️ 快捷键说明

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