⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.pas

📁 著名的Handle
💻 PAS
📖 第 1 页 / 共 2 页
字号:
  if SaveDialog.Execute then begin
    if assigned(Edit) then begin
      Edit.FileName := SaveDialog.FileName;
      (Edit.Parent as TTabSheet).Caption := ExtractFileName(Edit.FileName);
    end;
    FileSave.Execute;
  end;
end;

procedure TMainForm.EditCopy1Execute(Sender: TObject);
var
  Edit : TMyMwCustomEdit;
begin
  Edit := CurrentEdit;
  if assigned(Edit) then
    Edit.CopyToClipboard;
end;

procedure TMainForm.EditCopy1Update(Sender: TObject);
var
  Edit : TMyMwCustomEdit;
begin
  Edit := CurrentEdit;
  EditCopy1.Enabled := assigned(Edit) and Edit.SelAvail;
end;

procedure TMainForm.EditCut1Execute(Sender: TObject);
var
  Edit : TMyMwCustomEdit;
begin
  Edit := CurrentEdit;
  if assigned(Edit) then
    Edit.CopyToClipboard;
end;

procedure TMainForm.EditCut1Update(Sender: TObject);
var
  Edit : TMyMwCustomEdit;
begin
  Edit := CurrentEdit;
  EditCut1.Enabled := assigned(Edit) and Edit.SelAvail;
end;

procedure TMainForm.EditPaste1Execute(Sender: TObject);
var
  Edit : TMyMwCustomEdit;
begin
  Edit := CurrentEdit;
  if assigned(Edit) then
    Edit.PasteFromClipboard;
end;

procedure TMainForm.EditPaste1Update(Sender: TObject);
var
  Edit : TMyMwCustomEdit;
begin
  Edit := CurrentEdit;
  EditPaste1.Enabled := assigned(Edit) and Edit.CanPaste;
end;

procedure TMainForm.EnvironmentOptions1Click(Sender: TObject);
begin
  if frmEnvOpts.ShowModal = mrOk then begin
    StoreSettings;
  end;
    
  CurrentEdit.Invalidate;
end;

function FormatAttrib(Attrib : TmwHighLightAttributes) : string;
begin
  Result := IntToHex( Attrib.Background, 8 ) + ':' +
            IntToHex( Attrib.Foreground, 8 ) + ':';
  if (fsBold in Attrib.Style) then
    Result := Result + '1:'
  else
    Result := Result + '0:';

  if (fsItalic in Attrib.Style) then
    Result := Result + '1:'
  else
    Result := Result + '0:';

  if (fsUnderline in Attrib.Style) then
    Result := Result + '1:'
  else
    Result := Result + '0:';

  if (fsStrikeOut in Attrib.Style) then
    Result := Result + '1'
  else
    Result := Result + '0';
end;

procedure ParseAttr(Value : string; Attrib : TmwHighLightAttributes);
var
  P : integer;
begin
  P := pos(':', Value );
  if P > 0 then
    Attrib.Background := strtointdef('$' + copy (Value, 1, P-1 ), clWindow);
  delete( Value, 1, P );

  P := pos(':', Value );
  if P > 0 then
    Attrib.Foreground := strtointdef('$' + copy (Value, 1, P-1 ), clWindowText);
  delete( Value, 1, P );

  Attrib.Style := [];
  P := pos(':', Value );
  if P > 0 then
    if (strtointdef('$' + copy (Value, 1, P-1 ), 0)>0) then
      Attrib.Style := Attrib.Style + [fsBold];
  delete( Value, 1, P );

  P := pos(':', Value );
  if P > 0 then
    if (strtointdef('$' + copy (Value, 1, P-1 ), 0)>0) then
      Attrib.Style := Attrib.Style + [fsItalic];
  delete( Value, 1, P );

  P := pos(':', Value );
  if P > 0 then
    if (strtointdef('$' + copy (Value, 1, P-1 ), 0)>0) then
      Attrib.Style := Attrib.Style + [fsUnderline];
  delete( Value, 1, P );

  P := pos(':', Value );
  if P > 0 then
    if (strtointdef('$' + copy (Value, 1, P-1 ), 0)>0) then
      Attrib.Style := Attrib.Style + [fsStrikeOut];
  delete( Value, 1, P );
end;

procedure TMainForm.StoreSettings;
var
  INI : TINIFile;
  I,J : integer;
begin
  INI := TIniFile.Create('adv_demo.ini');
  try
    for i := 0 to ComponentCount-1 do
      if Components[i] is TmwCustomHighLighter then
        with Components[i] as TmwCustomHighLighter do
          for J := 0 to AttrCount-1 do
             INI.WriteString( LanguageName, Attribute[J].Name,
               FormatAttrib( Attribute[J] ));
    INI.WriteBool( 'Editor', 'AutoIndent', frmEnvOpts.cbAutoIndent.Checked );
    INI.WriteBool( 'Editor', 'DragDropEditing', frmEnvOpts.cbDragDropEditing.Checked );
    INI.WriteBool( 'Editor', 'DropFiles', frmEnvOpts.cbDropFiles.Checked );
    INI.WriteBool( 'Editor', 'HalfPageScroll', frmEnvOpts.cbHalfPageScroll.Checked );
    INI.WriteBool( 'Editor', 'ScrollPastEol', frmEnvOpts.cbScrollPastEol.Checked );
    INI.WriteBool( 'Editor', 'TabsToSpaces', frmEnvOpts.cbTabsToSpaces.Checked );
    INI.WriteBool( 'Editor', 'SmartTabs', frmEnvOpts.cbSmartTabs.Checked );

    INI.WriteBool( 'Gutter', 'ShowLineNumbers', frmEnvOpts.cbShowLineNumbers.Checked );
    INI.WriteString( 'Gutter', 'GutterSize', frmEnvOpts.cbxGutterSize.Text );
  finally
    INI.Free;
  end;
end;

procedure TMainForm.LoadSettings;
var
  INI : TINIFile;
  I,J : integer;
  Attr: string;
begin
  INI := TIniFile.Create('adv_demo.ini');
  try
    for i := 0 to ComponentCount-1 do
      if Components[i] is TmwCustomHighLighter then
        with Components[i] as TmwCustomHighLighter do
          for J := 0 to AttrCount-1 do begin
             Attr := INI.ReadString( LanguageName, Attribute[J].Name,
               FormatAttrib( Attribute[J] ));
             ParseAttr( Attr, Attribute[J] );
          end;
    frmEnvOpts.cbAutoIndent.Checked := INI.ReadBool( 'Editor', 'AutoIndent', true );
    frmEnvOpts.cbDragDropEditing.Checked := INI.ReadBool( 'Editor', 'DragDropEditing', true );
    frmEnvOpts.cbDropFiles.Checked := INI.ReadBool( 'Editor', 'DropFiles', false );
    frmEnvOpts.cbHalfPageScroll.Checked := INI.ReadBool( 'Editor', 'HalfPageScroll', false );
    frmEnvOpts.cbScrollPastEol.Checked := INI.ReadBool( 'Editor', 'ScrollPastEol', true );
    frmEnvOpts.cbTabsToSpaces.Checked := INI.ReadBool( 'Editor', 'TabsToSpaces', true );
    frmEnvOpts.cbSmartTabs.Checked := INI.ReadBool( 'Editor', 'SmartTabs', true );

    frmEnvOpts.cbShowLineNumbers.Checked := INI.ReadBool( 'Gutter', 'ShowLineNumbers', false );
    frmEnvOpts.cbxGutterSize.Text := INI.ReadString( 'Gutter', 'GutterSize', '30' );
    frmEnvOpts.cbGutterVisible.Checked := boolean(strtoint(frmEnvOpts.cbxGutterSize.Text));
  finally
    INI.Free;
  end;
end;

function TMainForm.GetEditor(Index: integer): TMyMwCustomEdit;
var
  I    : integer;
begin
  Result := nil;
  for I := 0 to PageControl.Pages[Index].ControlCount-1 do
    if PageControl.Pages[Index].Controls[I] is TMyMwCustomEdit then begin
      Result := PageControl.Pages[Index].Controls[I] as TMyMwCustomEdit;
      break;
    end;
end;

function TMainForm.GetEditorCount : integer;
begin
  Result := PageControl.PageCount;
end;

procedure TMainForm.FileCloseExecute(Sender: TObject);
var
  Edit : TMyMwCustomEdit;
begin
  Edit := CurrentEdit;
  if assigned(Edit) and Edit.Modified then
    case MessageDlg('Save changes to file '+Edit.Filename+'?', mtConfirmation,
      [mbYes, mbNo, mbCancel], 0) of
      mrYes : FileSave.Execute;
      mrNo  : ;
      mrCancel : exit;
    end;
  PageControl.ActivePage.Free;
  if PageControl.PageCount = 0 then
    FileNew.Execute;
  if PageControl.ActivePage.PageIndex = 0 then
    PageControl.ActivePage := PageControl.Pages[PageControl.PageCount-1];
end;

procedure TMainForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
var
  I : integer;
begin
  CanClose := true;
  for I := 0 to EditorCount-1 do
    if Editor[I].Modified then
      case MessageDlg('Save changes to file '+Editor[I].Filename+'?', mtConfirmation,
        [mbYes, mbNo, mbCancel], 0) of
        mrYes : FileSave.Execute;
        mrNo  : ;
        mrCancel : begin
                     CanClose := false;
                     exit;
                   end;
      end;
end;

procedure TMainForm.PageControlChange(Sender: TObject);
var
  Idx : integer;
  Edit : TMyMwCustomEdit;
begin
  Caption := 'adv_demo : '+CurrentEdit.FileName;
  Edit := CurrentEdit;
  Idx := 0;
  if assigned(Edit) and assigned(CurrentEdit.Highlighter) then begin
    Idx := cbxHighlighter.Items.IndexOf(CurrentEdit.Highlighter.LanguageName);
    if (Idx<0) then
      Idx := 0;
  end;
  cbxHighlighter.ItemIndex := Idx;
end;

procedure TMainForm.cbxHighlighterChange(Sender: TObject);
begin
  CurrentEdit.Highlighter := cbxHighlighter.Items.Objects[cbxHighlighter.ItemIndex] as TmwCustomHighLighter;
end;

procedure TMainForm.mwCustomEdit1DropFiles(Sender: TObject; X, Y: Integer;
  Files: TStrings);
var
  I : integer;
begin
  for I := 0 to Files.Count-1 do
    OpenFile(Files[I]);
end;

procedure TMainForm.EditSelectAllExecute(Sender: TObject);
var
  Edit : TMyMwCustomEdit;
begin
  Edit := CurrentEdit;
  if assigned(Edit) then
    Edit.SelectAll;
end;

procedure TMainForm.EditUndoUpdate(Sender: TObject);
var
  Edit : TMyMwCustomEdit;
begin
  Edit := CurrentEdit;
  EditUndo.Enabled := assigned(Edit) and Edit.CanUndo;
end;

procedure TMainForm.EditRedoUpdate(Sender: TObject);
var
  Edit : TMyMwCustomEdit;
begin
  Edit := CurrentEdit;
  EditRedo.Enabled := assigned(Edit) and Edit.CanRedo;
end;

procedure TMainForm.EditUndoExecute(Sender: TObject);
begin
  CurrentEdit.Undo;
end;

procedure TMainForm.EditRedoExecute(Sender: TObject);
begin
  CurrentEdit.Redo;
end;

procedure TMainForm.EditFindExecute(Sender: TObject);
var
  OldBlockBegin: TPoint;
  OldBlockEnd: TPoint;
begin
  with CurrentEdit do begin
    OldBlockBegin := BlockBegin;
    OldBlockEnd   := BlockEnd;
    SetSelWord;
    frmFind.cbFindText.Text := SelText;
    BlockBegin := OldBlockBegin;
    BlockEnd   := OldBlockEnd;
    if frmFind.ShowModal=mrOk then begin
      SearchOptions := [];
      if frmFind.cbMatchCase.Checked then
        include( SearchOptions, mwsoMatchCase );
      if frmFind.cbWholeWord.Checked then
        include( SearchOptions, mwsoWholeWord );
      if frmFind.rbBackward.Checked then
        include( SearchOptions, mwsoBackwards );
      if frmFind.rbSelectedOnly.Checked then
        include( SearchOptions, mwsoSelectedOnly );
      if frmFind.rbEntireScope.Checked then
        include( SearchOptions, mwsoEntireScope );

      SearchReplace(frmFind.cbFindText.Text, '', SearchOptions );
    end;
  end;
end;

procedure TMainForm.EditFindUpdate(Sender: TObject);
begin
  EditFind.Enabled := CurrentEdit<>nil;
end;

procedure TMainForm.EditSearchAgainUpdate(Sender: TObject);
begin
  EditSearchAgain.Enabled := frmFind.cbFindText.Text <> '';
end;

procedure TMainForm.EditSearchAgainExecute(Sender: TObject);
begin
  exclude( SearchOptions, mwsoEntireScope );
  CurrentEdit.SearchReplace(frmFind.cbFindText.Text, '', SearchOptions );
end;

procedure TMainForm.Exit1Click(Sender: TObject);
begin
  Close;
end;

procedure TMainForm.PrintSetup1Click(Sender: TObject);
begin
  PrinterSetupDialog.Execute;
end;

end.
 

⌨️ 快捷键说明

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