editu2.pas

来自「著名的Handle」· PAS 代码 · 共 1,632 行 · 第 1/4 页

PAS
1,632
字号
begin
  mwEdit.Gutter.LeadingZeros := cbLeadingZeros.Checked;                         //gp 1999-06-10
  mwEdit.SetFocus;
end;

procedure TForm1.cbZeroStartClick(Sender: TObject);
begin
  mwEdit.Gutter.ZeroStart := cbZeroStart.Checked;                               //gp 1999-06-10
  mwEdit.SetFocus;
end;

procedure TForm1.mwEditMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  if cbEnableEventLog.Checked and cbMouse.Checked then
    lbEventLog.Items.Insert(0, TimeToStr(Now) + ' OnMouseDown');
end;

procedure TForm1.mwEditMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  if cbEnableEventLog.Checked and cbMouse.Checked then
    lbEventLog.Items.Insert(0, TimeToStr(Now) + ' OnMouseMove');
end;

procedure TForm1.mwEditMouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  if cbEnableEventLog.Checked and cbMouse.Checked then
    lbEventLog.Items.Insert(0, TimeToStr(Now) + ' OnMouseUp');
end;

procedure TForm1.btnClearClick(Sender: TObject);
begin
  lbEventLog.Clear;
end;

procedure TForm1.cbAutoIndentClick(Sender: TObject);
begin
//  mwEdit.Autoindent := cbAutoindent.Checked;                                  //mh 1999-10-04
  mwEdit.SetOptionFlag(mweoAutoIndent, cbAutoIndent.Checked);
  mwEdit.SetFocus;
end;

procedure TForm1.cbxREColorChange(Sender: TObject);
begin
  mwEdit.RightEdgeColor := IndexToColor(cbxREColor.ItemIndex);
  mwEdit.SetFocus;
end;

procedure TForm1.cbHalfPageScrollClick(Sender: TObject);
begin
//  mwEdit.HalfpageScroll := cbHalfpageScroll.Checked;                          //mh 1999-10-04
//  mwEdit.SetOptionFlag(mweoHalfpageScroll, cbAutoindent.Checked);             //nmi 1999-11-01
  mwEdit.SetOptionFlag(mweoHalfpageScroll, cbHalfPageScroll.Checked);
  mwEdit.SetFocus;
end;

procedure TForm1.inpTabWidthChange(Sender: TObject);
begin
//  try mwEdit.TabIndent := inpTabIndent.Value;                                 //mh 1999-10-04
  try mwEdit.TabWidth := inpTabWidth.Value;
  except end;
  mwEdit.SetFocus;
end;

procedure TForm1.cbWantTabsClick(Sender: TObject);
begin
  mwEdit.WantTabs := cbWantTabs.Checked;
  mwEdit.SetFocus;
end;

procedure TForm1.mwEditSelectionChange(Sender: TObject);
begin
  if cbEnableEventLog.Checked and cbOther.Checked then
    lbEventLog.Items.Insert(0, TimeToStr(Now) + ' OnSelectionChange');
end;

procedure TForm1.inpDigitCountChange(Sender: TObject);
begin
  try mwEdit.Gutter.DigitCount := inpDigitCount.Value;
  except end;
  RecalcLeftMargin;
  mwEdit.SetFocus;
end;

procedure TForm1.inpLeftOffsetChange(Sender: TObject);
begin
  try mwEdit.Gutter.LeftOffset := inpLeftOffset.Value;
  except end;
  RecalcLeftMargin;
  mwEdit.SetFocus;
end;

procedure TForm1.inpRightOffsetChange(Sender: TObject);
begin
  try mwEdit.Gutter.RightOffset := inpRightOffset.Value;
  except end;
  RecalcLeftMargin;
  mwEdit.SetFocus;
end;

procedure TForm1.RecalcLeftMargin;
{begin}                                                                         //mh 1999-12-05
  procedure ValidateSpinEditValue(SE: TSpinEdit; Value: integer);
  begin
    if SE.Value <> Value then SE.Value := Value;
  end;

begin
  inpLeftMargin.MaxValue := mwEdit.Gutter.Width;
  if inpLeftMargin.Value > inpLeftMargin.MaxValue then
    inpLeftMargin.Value := inpLeftMargin.MaxValue;
  ValidateSpinEditValue(inpGutterWidth, mwEdit.Gutter.Width);
  ValidateSpinEditValue(inpDigitCount, mwEdit.Gutter.DigitCount);
  ValidateSpinEditValue(inpLeftOffset, mwEdit.Gutter.LeftOffset);
  ValidateSpinEditValue(inpRightOffset, mwEdit.Gutter.RightOffset);
{end}                                                                           //mh 1999-12-05
end;

procedure TForm1.cbxExporterSelectChange(Sender: TObject);
begin
{begin}                                                                         //mh 2000-01-20
//  btnExportToClip.Enabled := cbxExporterSelect.ItemIndex > 0;
//  btnExportAllToClip.Enabled := btnExportToClip.Enabled;
  UpdateCanExport;
{end}                                                                           //mh 2000-01-20
end;

{begin}                                                                         //mh 2000-01-20
(*
procedure TForm1.btnExportToClipClick(Sender: TObject);
var
  i: integer;
begin
  mwEdit.Highlighter.Exporter := nil;
  for i := 0 to ComponentCount-1 do
    if (Components[i] is TmwCustomExport) and
       ((Components[i] as TmwCustomExport).ExporterName = cbxExporterSelect.Text) then begin
      mwEdit.Highlighter.Exporter := (Components[i] as TmwCustomExport);
      break;
    end;
  if assigned(mwEdit.Highlighter.Exporter) then begin
    if Sender = btnExportAllToClip then mwEdit.SelectAll;
    TmwCustomExport(mwEdit.Highlighter.Exporter).CopyToClipboardFormat(mwEdit,mwEdit.Highlighter,CF_TEXT);
    mwEdit.Highlighter.Exporter := nil;
    if Sender = btnExportAllToClip then mwEdit.BlockEnd := mwEdit.BlockBegin;
  end;
end;
*)
{end}                                                                           //mh 2000-01-20

procedure TForm1.btnSearchClick(Sender: TObject);
begin
  FindDialog1.Execute;
  btnSearchNext.Enabled := TRUE;
  btnSearchPrev.Enabled := TRUE;
end;

procedure TForm1.btnSearchNextClick(Sender: TObject);
begin
  if (Sender = btnSearchNext) then
    FindDialog1.Options := FindDialog1.Options + [frDown]
  else if (Sender = btnSearchPrev) then
    FindDialog1.Options := FindDialog1.Options - [frDown];
  DoFindText(Sender);
  mwEdit.SetFocus;
end;

procedure TForm1.DoFindText(Sender: TObject);
var rOptions: TmwSearchOptions;
    dlg: TFindDialog;
    sSearch: string;
begin
  if Sender = ReplaceDialog1 then dlg := ReplaceDialog1
                             else dlg := FindDialog1;
  sSearch := dlg.FindText;
  if Length(sSearch) = 0 then begin
    Beep;
    lblSearchResult.Caption := 'Can''t search for empty text!';
    lblSearchResult.Visible := TRUE;
  end else begin
    rOptions := [];
    if not (frDown in dlg.Options) then
      Include(rOptions, mwsoBackwards);
    if frMatchCase in dlg.Options then
      Include(rOptions, mwsoMatchCase);
    if frWholeWord in dlg.Options then
      Include(rOptions, mwsoWholeWord);
    if mwEdit.SearchReplace(sSearch, '', rOptions) = 0 then begin
      Beep;
      lblSearchResult.Caption := 'SearchText ''' + sSearch + ''' not found!';
      lblSearchResult.Visible := TRUE;
    end else
      lblSearchResult.Visible := FALSE;
  end;
end;

procedure TForm1.btnReplaceClick(Sender: TObject);
begin
  ReplaceDialog1.Execute;
end;

procedure TForm1.DoReplaceText(Sender: TObject);
var
  rOptions: TmwSearchOptions;
  sSearch: string;
begin
  sSearch := ReplaceDialog1.FindText;
  if Length(sSearch) = 0 then begin
    Beep;
    lblSearchResult.Caption := 'Can''t replace an empty text!';
    lblSearchResult.Visible := TRUE;
  end else begin
    rOptions := [mwsoReplace];
    if frMatchCase in ReplaceDialog1.Options then
      Include(rOptions, mwsoMatchCase);
    if frWholeWord in ReplaceDialog1.Options then
      Include(rOptions, mwsoWholeWord);
    if frReplaceAll in ReplaceDialog1.Options then
      Include(rOptions, mwsoReplaceAll);
    if mwEdit.SearchReplace(sSearch, ReplaceDialog1.ReplaceText, rOptions) = 0
    then begin
      Beep;
      lblSearchResult.Caption := 'SearchText ''' + sSearch +
                                 ''' could not be replaced!';
      lblSearchResult.Visible := TRUE;
    end else
      lblSearchResult.Visible := FALSE;
  end;
end;

procedure TForm1.mwEditSpecialLineColors(Sender: TObject; Line: Integer;        //mh 1999-10-05
  var Special: Boolean; var FG, BG: TColor);
begin
  if fHighlightLineWithCaret and (fHighlightedLine = Line) then                 //mh 1999-12-12
  begin
    Special := TRUE;
    BG := clBlue;
    FG := clWhite;
  end;
end;

procedure TForm1.mwEditDropFiles(Sender: TObject; X, Y: Integer;                //mh 1999-11-02
  Files: TStrings);
begin
  if cbEnableEventLog.Checked and cbOther.Checked then
    lbEventLog.Items.Insert(0, TimeToStr(Now) + ' OnDropFiles');
  if Files.Count >= 1 then
    LoadFile(Files[0]);
end;

procedure TForm1.cbAutoSizeClick(Sender: TObject);                              //kvs 1999-11-18
begin
  mwEdit.Gutter.AutoSize := cbAutoSize.Checked;
  mwEdit.SetFocus;
end;

procedure TForm1.cbDragDropEditClick(Sender: TObject);                          //mh 1999-12-05
begin
  mwEdit.SetOptionFlag(mweoDragDropEditing, cbDragDropEdit.Checked);
  mwEdit.SetFocus;
end;

{begin}                                                                         //mh 1999-12-12
procedure TForm1.mwEditStatusChange(Sender: TObject; Changes: TmwStatusChanges);
const
  ModifiedStrs: array[boolean] of string = ('', 'Modified');
  InsertModeStrs: array[boolean] of string = ('Overwrite', 'Insert');
{begin}                                                                         //mh 2000-01-20
var
  Token: string;
  Attri: TmwHighlightAttributes;
{end}                                                                           //mh 2000-01-20
begin
  // mwscAll can be used to update everything, see OnCreate handler
  with StatusBar do begin
    // statuspanel 0: caret position
    if Changes * [mwscAll, mwscCaretX, mwscCaretY] <> [] then
    begin
      Panels[0].Text := Format('%6d:%3d', [mwEdit.CaretY, mwEdit.CaretX]);
      if fHighlightLineWithCaret then
        SetHighlightedLine(mwEdit.CaretY);
    end;
    // statuspanel 1: Modified property
    if Changes * [mwscAll, mwscModified] <> [] then
      Panels[1].Text := ModifiedStrs[mwEdit.Modified];
    // statuspanel 2: InsertMode property
    if Changes * [mwscAll, mwscInsertMode] <> [] then
      Panels[2].Text := InsertModeStrs[mwEdit.InsertMode];
  end;
{begin}                                                                         //mh 2000-01-20
  // export selected only if there is a selection
  if Changes * [mwscAll, mwscSelection] <> [] then
    cbExportSelected.Enabled := mwEdit.SelAvail;
  // select highlighter attribute at caret
  if Assigned(mwEdit.Highlighter) and
     (Changes * [mwscAll, mwscCaretX, mwscCaretY] <> [])
  then begin
    if not mwEdit.GetHighlighterAttriAtRowCol(mwEdit.CaretXY, Token, Attri) then
      Attri := mwEdit.Highlighter.WhitespaceAttribute;
    if Assigned(Attri) then begin
      cbxAttrSelect.ItemIndex := cbxAttrSelect.Items.IndexOf(Attri.Name);
      cbxAttrSelectChange(Self);
    end;
  end;
{end}                                                                           //mh 2000-01-20
end;

procedure TForm1.SetHighlightedLine(Line: integer);
begin
  if fHighlightedLine <> Line then
  begin
    mwEdit.InvalidateLine(fHighlightedLine);
    fHighlightedLine := Line;
    mwEdit.InvalidateLine(fHighlightedLine);
  end;
end;

procedure TForm1.cbHighlightedCaretLineClick(Sender: TObject);
begin
  fHighlightLineWithCaret := cbHighlightedCaretLine.Checked;
  if fHighlightLineWithCaret then
    fHighlightedLine := mwEdit.CaretY;
  mwEdit.InvalidateLine(fHighlightedLine);
  mwEdit.SetFocus;
end;
{end}                                                                           //mh 1999-12-12

procedure TForm1.mwEditGutterClick(Sender: TObject; X, Y, line: Integer;        //gp 2000-01-11
  mark: TMark);
begin
  if cbEnableEventLog.Checked and cbMouse.Checked then
    lbEventLog.Items.Insert(0, TimeToStr(Now) + ' OnGutterClick');
  mwEdit.CaretY := line;
  if not assigned(mark) then begin // place first mark
    SpeedButton1.Down := true;
    SpeedButton1.Click;
  end
  else if (not mark.IsBookmark) and (mark.ImageIndex >= SpeedButton1.Tag) then begin
    if mark.ImageIndex = SpeedButton5.Tag then begin // remove mark
      SpeedButton5.Down := false;
      SpeedButton5.Click;
    end
    else begin
      mark.ImageIndex := mark.ImageIndex + 1;
    end;
  end;
  ResetMarkButtons;
end;

{begin}                                                                         //mh 2000-01-19
procedure TForm1.cbGutterVisibleClick(Sender: TObject);
begin
  mwEdit.Gutter.Visible := cbGutterVisible.Checked;
  mwEdit.SetFocus;
end;

procedure TForm1.cbUseFontStyleClick(Sender: TObject);
begin
  mwEdit.Gutter.UseFontStyle := cbUseFontStyle.Checked;
  mwEdit.SetFocus;
end;

function TForm1.GetSelectedExporter: TmwCustomExport;
var
  i: integer;
begin
  for i := 0 to Pred(ComponentCount) do begin
    if not (Components[i] is TmwCustomExport) then continue;
    Result := TmwCustomExport(Components[i]);
    if Result.ExporterName = cbxExporterSelect.Text then exit;
  end;
  Result := nil;
end;

procedure TForm1.btnExportToFileClick(Sender: TObject);
var
  Exporter: TmwCustomExport;
begin
  Exporter := GetSelectedExporter;
  // can't export to file in several formats at the same time... 
  if Assigned(Exporter) then
    with SaveDialog1 do begin
      Title := 'Export to';
      if Execute then
        mwEdit.ExportToFile(cbExportSelected.Checked, FileName, Exporter);
    end;
  mwEdit.SetFocus;
end;

procedure TForm1.btnExportClpClick(Sender: TObject);
begin
  mwEdit.ExportToClipboard(cbExportSelected.Checked, GetSelectedExporter);
  mwEdit.SetFocus;
end;

procedure TForm1.UpdateCanExport;
begin
  btnExportToClipboard.Enabled := Assigned(mwEdit.Highlighter);
  btnExportToFile.Enabled := Assigned(mwEdit.Highlighter) and
                             (cbxExporterSelect.ItemIndex > 0);
end;
{end}                                                                           //mh 2000-01-19

end.

⌨️ 快捷键说明

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