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

📄 main.pas

📁 著名的Handle
💻 PAS
📖 第 1 页 / 共 2 页
字号:
unit main;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdActns, ActnList, ImgList, Menus, ToolWin, ComCtrls, ExtCtrls,
  wmPHPSyn, wmMultiSyn, mwDmlSyn, nhAsmSyn, dmBatSyn, dmDfmSyn,
  mwHtmlExport, mwExport, mwRtfExport, mkGalaxySyn, odPythonBehaviour,
  odPySyn, lbVBSSyn, hkAWKSyn, hkHTMLSyn, siTCLTKSyn, wmSQLSyn, cwCACSyn,
  DcjJavaSyn, cbHPSyn, mwGeneralSyn, DcjPerlSyn, DcjCppSyn, mwHighlighter,
  mwPasSyn, mwCustomEdit, StdCtrls;

type
  TMyMwCustomEdit = class(TmwCustomEdit)
  public
    Filename : string;
  end;

  TMainForm = class(TForm)
    MainMenu: TMainMenu;
    ControlBar1: TControlBar;
    tbMenu: TToolBar;
    File1: TMenuItem;
    Exit1: TMenuItem;
    N1: TMenuItem;
    PrintSetup1: TMenuItem;
    Print1: TMenuItem;
    N2: TMenuItem;
    SaveAs1: TMenuItem;
    Save1: TMenuItem;
    N3: TMenuItem;
    Close1: TMenuItem;
    Open1: TMenuItem;
    New1: TMenuItem;
    Edit1: TMenuItem;
    GoTo1: TMenuItem;
    Replace1: TMenuItem;
    Find1: TMenuItem;
    Paste1: TMenuItem;
    Copy1: TMenuItem;
    Cut1: TMenuItem;
    N6: TMenuItem;
    Repeatcommand1: TMenuItem;
    Undo1: TMenuItem;
    ActionList: TActionList;
    ImageList: TImageList;
    EditCopy1: TEditCopy;
    EditCut1: TEditCut;
    EditPaste1: TEditPaste;
    ToolButton1: TToolButton;
    ToolButton2: TToolButton;
    tbMain: TToolBar;
    ToolButton3: TToolButton;
    ToolButton4: TToolButton;
    ToolButton5: TToolButton;
    ToolButton6: TToolButton;
    ToolButton7: TToolButton;
    ToolButton8: TToolButton;
    ToolButton9: TToolButton;
    ToolButton10: TToolButton;
    FileNew: TAction;
    FileOpen: TAction;
    FileSave: TAction;
    FileSaveAs: TAction;
    PageControl: TPageControl;
    StatusBar: TStatusBar;
    View1: TMenuItem;
    Toolbar1: TMenuItem;
    Statusbar2: TMenuItem;
    ToolButton11: TToolButton;
    mwPasSyn1: TmwPasSyn;
    DcjCppSyn1: TDcjCppSyn;
    DcjPerlSyn1: TDcjPerlSyn;
    mwGeneralSyn1: TmwGeneralSyn;
    cbHPSyn1: TcbHPSyn;
    DcjJavaSyn1: TDcjJavaSyn;
    cwCACSyn1: TcwCACSyn;
    wmSQLSyn1: TwmSQLSyn;
    siTCLTKSyn1: TsiTCLTKSyn;
    hkHTMLSyn1: ThkHTMLSyn;
    hkAWKSyn1: ThkAWKSyn;
    lbVbsSyn1: TlbVbsSyn;
    odPySyn1: TodPySyn;
    odPythonBehaviour1: TodPythonBehaviour;
    mkGalaxySyn1: TmkGalaxySyn;
    mwRtfExport1: TmwRtfExport;
    mwHtmlExport1: TmwHtmlExport;
    dmDfmSyn1: TdmDfmSyn;
    dmBatSyn1: TdmBatSyn;
    nhAsmSyn1: TnhAsmSyn;
    mwDmlSyn1: TmwDmlSyn;
    wmPHPSyn1: TwmPHPSyn;
    OpenDialog: TOpenDialog;
    SaveDialog: TSaveDialog;
    Toolbars1: TMenuItem;
    EnvironmentOptions1: TMenuItem;
    FileClose: TAction;
    EditorPopup: TPopupMenu;
    Cut2: TMenuItem;
    Copy2: TMenuItem;
    Paste2: TMenuItem;
    Close2: TMenuItem;
    N7: TMenuItem;
    EditSelectAll: TAction;
    SelectAll1: TMenuItem;
    N8: TMenuItem;
    tbHighlighter: TToolBar;
    cbxHighlighter: TComboBox;
    ToolButton12: TToolButton;
    ToolButton13: TToolButton;
    ToolButton14: TToolButton;
    ToolButton15: TToolButton;
    EditUndo: TAction;
    EditRedo: TAction;
    EditFind: TAction;
    SelectAll2: TMenuItem;
    EditSearchAgain: TAction;
    SearchAgain1: TMenuItem;
    PrinterSetupDialog: TPrinterSetupDialog;
    wmMultiSyn1: TwmMultiSyn;
    procedure FormShow(Sender: TObject);
    procedure FileNewExecute(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FileOpenExecute(Sender: TObject);
    procedure mwCustomEdit1StatusChange(Sender: TObject;
      Changes: TmwStatusChanges);
    procedure FileSaveExecute(Sender: TObject);
    procedure FileSaveAsExecute(Sender: TObject);
    procedure EditCopy1Execute(Sender: TObject);
    procedure EditCopy1Update(Sender: TObject);
    procedure EditCut1Execute(Sender: TObject);
    procedure EditCut1Update(Sender: TObject);
    procedure EditPaste1Execute(Sender: TObject);
    procedure EditPaste1Update(Sender: TObject);
    procedure EnvironmentOptions1Click(Sender: TObject);
    procedure FileCloseExecute(Sender: TObject);
    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
    procedure PageControlChange(Sender: TObject);
    procedure cbxHighlighterChange(Sender: TObject);
    procedure mwCustomEdit1DropFiles(Sender: TObject; X, Y: Integer;
      Files: TStrings);
    procedure EditSelectAllExecute(Sender: TObject);
    procedure EditUndoUpdate(Sender: TObject);
    procedure EditRedoUpdate(Sender: TObject);
    procedure EditUndoExecute(Sender: TObject);
    procedure EditRedoExecute(Sender: TObject);
    procedure EditFindExecute(Sender: TObject);
    procedure EditFindUpdate(Sender: TObject);
    procedure EditSearchAgainUpdate(Sender: TObject);
    procedure EditSearchAgainExecute(Sender: TObject);
    procedure Exit1Click(Sender: TObject);
    procedure PrintSetup1Click(Sender: TObject);
  private
    SearchOptions: TmwSearchOptions;
    function GetEditor(Index: integer): TMyMwCustomEdit;
    function GetEditorCount : integer;
    { Private declarations }
  public
    procedure OpenFile( aFileName : string );
    procedure EnumerateHighlighters;
    function CurrentEdit : TMyMwCustomEdit;

    procedure StoreSettings;
    procedure LoadSettings;
    property Editor[Index:integer] : TMyMwCustomEdit read GetEditor;
    property EditorCount : integer read GetEditorCount;
  end;

var
  MainForm: TMainForm;

implementation

uses env_opt, inifiles, find;

{$R *.DFM}

procedure TMainForm.FormShow(Sender: TObject);
begin
  LoadSettings;
  FileNew.Execute;
end;

procedure TMainForm.OpenFile(aFileName: string);
var
  Page : TTabSheet;
  Edit : TMyMwCustomEdit;

  procedure LoadFile(const FileName: string);
  (* This bit is stolen from EditU2.pas *)
    function MatchesExtension(ext: string; light: TmwCustomHighlighter): boolean;
      var
      fext  : string;
//      idx   : integer;
      ucext : string;
      filter: string;
      p     : integer;
    begin
      Result := false;
      ucext := UpperCase(ext);
      p := Pos('.',ucext);
      if p > 0 then ucext := Copy(ucext,p+1,Length(ucext)-p);
      p := Pos('|',light.DefaultFilter);
      if p > 0 then begin
        filter := Copy(light.DefaultFilter,p+1,Length(light.DefaultFilter)-p);
        while filter <> '' do begin
          p := Pos(';',filter);
          if p = 0 then p := Length(filter)+1;
          fext := Copy(filter,1,p-1);
          filter := Copy(filter,p+1,Length(filter)-p);
          p := Pos('.',fext);
          if p > 0 then fext := Copy(fext,p+1,Length(fext)-p);
          if UpperCase(fext) = ucext then begin
(*
            idx := cbxHighlighterSelect.Items.IndexOf(light.LanguageName);
            if idx >= 0 then cbxHighlighterSelect.ItemIndex := idx;
            cbxHighlighterSelectChange(Self);
*)
            Edit.Highlighter := light;
            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]);
      ext := UpperCase(ExtractFileExt(aFileName));
      for i := 0 to ComponentCount-1 do
        if Components[i] is TmwCustomHighLighter then begin
          if MatchesExtension(ext,Components[i] as TmwCustomHighlighter) then break;
        end;
      if Edit.HighLighter = dmDfmSyn1 then
        LoadDFMFile2Strings(aFileName, Edit.Lines, bWasText)                        //mh 1999-10-04
      else
        Edit.Lines.LoadFromFile(aFileName);
    finally
      Cursor := backCursor;
    end;
  end;

begin
  Page := TTabSheet.Create(self);
  try
    Page.PageControl := PageControl;
    Edit := TMyMwCustomEdit.Create(Page);
    Edit.Parent := Page;
    Edit.Align  := alClient;
    if (aFileName<>'') then begin
      Page.Caption := ExtractFileName(aFileName);
      Edit.FileName := aFileName;
      LoadFile( aFileName );
    end
    else
      Page.Caption := 'Untitled';
    PageControl.ActivePage := Page;
    Edit.Modified := false;
    Edit.ClearUndo;
    Edit.Options := Edit.Options - [mweoShowScrollHint];
    frmEnvOpts.AssignOptions(Edit);

    Edit.OnStatusChange := mwCustomEdit1StatusChange;
    Edit.OnDropFiles    := mwCustomEdit1DropFiles;
    Edit.PopupMenu      := EditorPopup;
    mwCustomEdit1StatusChange( Edit, [] );

    Edit.SetFocus;
    PageControlChange(self);
  except
    on exception do
      Page.Free;
  end;
end;

procedure TMainForm.FileNewExecute(Sender: TObject);
begin
  OpenFile('');
end;

procedure TMainForm.EnumerateHighlighters;
var
  i: integer;
  f, s: string;
begin
  OpenDialog.Filter := '';
  s := '';
  cbxHighlighter.Items.Clear;
  cbxHighlighter.Items.Add( 'None' );
  for i := 0 to ComponentCount-1 do
    if Components[i] is TmwCustomHighLighter then begin
      if (Components[i] as TmwCustomHighLighter).DefaultFilter <> '' then begin
        cbxHighlighter.Items.AddObject((Components[i] as TmwCustomHighLighter).LanguageName,
         Components[i]);
        if OpenDialog.Filter <> '' then
          OpenDialog.Filter := OpenDialog.Filter + '|';
        OpenDialog.Filter := OpenDialog.Filter + (Components[i] as TmwCustomHighLighter).DefaultFilter;
        f := (Components[i] as TmwCustomHighLighter).DefaultFilter;
        s := s + copy(f, pos('|',f)+1, length(f)) + ';';
      end;
    end;
  if OpenDialog.Filter <> '' then
    OpenDialog.Filter := OpenDialog.Filter + '|';
  OpenDialog.Filter := 'All known files|'+s+'|'+OpenDialog.Filter + 'All files (*.*)|*.*';
  SaveDialog.Filter := OpenDialog.Filter;
end;

procedure TMainForm.FormCreate(Sender: TObject);
begin
  EnumerateHighlighters;
end;

procedure TMainForm.FileOpenExecute(Sender: TObject);
var
  I : integer;
begin
  if OpenDialog.Execute then
    for I := 0 to OpenDialog.Files.Count-1 do
      OpenFile(OpenDialog.Files[I]);
end;

procedure TMainForm.mwCustomEdit1StatusChange(Sender: TObject;
  Changes: TmwStatusChanges);
begin
  with Sender as TmwCustomEdit do begin
    StatusBar.Panels[0].Text := Format('%d:%d', [CaretY, CaretX]);
    if Modified then
      StatusBar.Panels[1].Text := 'Modified'
    else
      StatusBar.Panels[1].Text := '';
    if InsertMode then
      StatusBar.Panels[2].Text := 'Insert'
    else
      StatusBar.Panels[2].Text := 'Overwrite';
  end;
end;

procedure TMainForm.FileSaveExecute(Sender: TObject);
var
  Edit : TMyMwCustomEdit;
begin
  Edit := CurrentEdit;
  if assigned(Edit) then begin
    if Edit.Filename = '' then
      FileSaveAs.Execute
    else begin
      Edit.Lines.SaveToFile( Edit.FileName );
      Edit.Modified := false;
    end;
  end;

end;

function TMainForm.CurrentEdit: TMyMwCustomEdit;
begin
  Result := Editor[PageControl.ActivePage.PageIndex];
end;

procedure TMainForm.FileSaveAsExecute(Sender: TObject);
var
  Edit : TMyMwCustomEdit;
begin
  Edit := CurrentEdit;

⌨️ 快捷键说明

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