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

📄 mainform.pas

📁 學習資料網上下載
💻 PAS
📖 第 1 页 / 共 5 页
字号:
(*======================================================================*
 | MainForm                                                             |
 |                                                                      |
 | Main Form for PE Resource Explorer /Editor                           |
 |                                                                      |
 | Version  Date        By    Description                               |
 | -------  ----------  ----  ------------------------------------------|
 | 1.0      05/01/2001  CPWW  Original                                  |
 *======================================================================*)

unit MainForm;

{$WARN SYMBOL_PLATFORM OFF}

interface

uses
  Windows, Messages, SysUtils, SysConst, Classes, Graphics, Controls, Forms, Dialogs,
  ComCtrls, Menus, ToolWin, ExtCtrls, ImgList, StdActns, ActnList, unitResourceDetails,
  cmpStandardSystemMenu, cmpPersistentPosition, cmpMRUList,
  StdCtrls, shellapi, unitPEResourceExplorerProperties,
  cmpNTAboutBox, ExtDlgs, ResourceForm, GifImage, JPeg, PngImage,
  AppEvnts, XPMan;

const
  WM_INITIALIZE = WM_USER + $200;
  WM_STATUSBAR = WM_USER + $203;
  WM_ADDIMAGERESOURCE = WM_USER + $204;

type

//======================================================================
// TfmMain

  TfmMain = class(TForm)
    mnuMain: TMainMenu;
    coolMain: TCoolBar;
    psMenu: TPageScroller;
    tbMenu: TToolBar;
    psToolbar: TPageScroller;
    tbMain: TToolBar;
    btnFile: TToolButton;
    btnEdit: TToolButton;
    btnHelp: TToolButton;
    ilMain: TImageList;
    alMain: TActionList;
    actHelpContents: THelpContents;
    actHelpHelpOnHelp: THelpOnHelp;
    actHelpTopicSearch: THelpTopicSearch;
    mnuEdit: TMenuItem;
    mnuHelp: TMenuItem;
    mnuEditUndo: TMenuItem;
    N1: TMenuItem;
    mnuEditCut: TMenuItem;
    mnuEditCopy: TMenuItem;
    mnuEditPaste: TMenuItem;
    mnuEditSelectAll: TMenuItem;
    mnuHelpContents: TMenuItem;
    mnuHelpHelpOnHelp: TMenuItem;
    mnuHelpTopicSearch: TMenuItem;
    actFileNew: TAction;
    actFileOpenFile: TAction;
    actFileSave: TAction;
    actFileSaveAs: TAction;
    actFilePrint: TAction;
    mnuFile: TMenuItem;
    mnuFileNew: TMenuItem;
    mnuFileSave: TMenuItem;
    mnuFileSaveAs: TMenuItem;
    N2: TMenuItem;
    mnuFilePrint: TMenuItem;
    N3: TMenuItem;
    actFileExit: TAction;
    mnuFileExit: TMenuItem;
    btnFileNew: TToolButton;
    btnFileOpen: TToolButton;
    btnFileSave: TToolButton;
    sbMain: TStatusBar;
    OpenDialog: TOpenDialog;
    SaveDialog: TSaveDialog;
    PrintDialog: TPrintDialog;
    tvResources: TTreeView;
    Splitter1: TSplitter;
    MRUList1: TMRUList;
    PersistentPosition1: TPersistentPosition;
    StandardSystemMenu1: TStandardSystemMenu;
    pomMRU: TPopupMenu;
    pnlResource: TPanel;
    ToolButton1: TToolButton;
    mnuResource: TMenuItem;
    actResourceAddResource: TAction;
    actResourceDeleteResource: TAction;
    mnuResourceAddResource: TMenuItem;
    mnuResourceDeleteResource: TMenuItem;
    N4: TMenuItem;
    actViewToolbar: TAction;
    actViewStatusbar: TAction;
    actViewProperties: TAction;
    mnuView: TMenuItem;
    mnuViewToolbar: TMenuItem;
    mnuViewStatusbar: TMenuItem;
    N5: TMenuItem;
    mnuViewProperties: TMenuItem;
    ToolButton2: TToolButton;
    btnResourceObject: TToolButton;
    actEditCopy: TAction;
    actEditPaste: TAction;
    actEditCut: TAction;
    actEditSelectAll: TAction;
    actEditUndo: TAction;
    actEditRedo: TAction;
    mnuEditRedo: TMenuItem;
    Open1: TMenuItem;
    actHelpAbout: TAction;
    N6: TMenuItem;
    mnuHelpAbout: TMenuItem;
    NTAboutBox1: TNTAboutBox;
    actResourceExportResource: TAction;
    ExportResource1: TMenuItem;
    ilResources: TImageList;
    actResourceImportResource: TAction;
    N7: TMenuItem;
    OpenPictureDialog1: TOpenPictureDialog;
    actResourceProperties: TAction;
    N8: TMenuItem;
    mnuResourceProperties: TMenuItem;
    pomResources: TPopupMenu;
    AddResource1: TMenuItem;
    DeleteResource1: TMenuItem;
    N9: TMenuItem;
    ImportResource1: TMenuItem;
    ExportResource2: TMenuItem;
    N10: TMenuItem;
    Properties1: TMenuItem;
    actEditDelete: TAction;
    mnuEditDelete: TMenuItem;
    actResourceGrab: TAction;
    Grab1: TMenuItem;
    GrabBitmap1: TMenuItem;
    SavePictureDialog1: TSavePictureDialog;
    ApplicationEvents1: TApplicationEvents;
    actResourceImportRCDataResource: TAction;
    ImportRCDataResource1: TMenuItem;
    ImportRCDataResource2: TMenuItem;
    OpenDialog1: TOpenDialog;
    ToolButton3: TToolButton;
    ToolButton4: TToolButton;
    ToolButton5: TToolButton;
    actResourceImportOtherResource: TAction;
    ImportUserResource1: TMenuItem;
    N11: TMenuItem;
    ImportUserResource2: TMenuItem;
    N12: TMenuItem;
    XPManifest1: TXPManifest;
    procedure actFileOpenFileExecute(Sender: TObject);
    procedure actFileSaveAsExecute(Sender: TObject);
    procedure actFilePrintExecute(Sender: TObject);
    procedure actFileNewExecute(Sender: TObject);
    procedure actFileExitExecute(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure MRUList1PopupMenuClick(Sender: TObject);
    procedure tvResourcesChange(Sender: TObject; Node: TTreeNode);
    procedure actEditDeleteExecute(Sender: TObject);
    procedure actFileSaveExecute(Sender: TObject);
    procedure actEditCutExecute(Sender: TObject);
    procedure actViewToolbarExecute(Sender: TObject);
    procedure actViewStatusbarExecute(Sender: TObject);
    procedure actViewPropertiesExecute(Sender: TObject);
    procedure actEditUndoExecute(Sender: TObject);
    procedure actEditRedoExecute(Sender: TObject);
    procedure mnuEditClick(Sender: TObject);
    procedure actHelpAboutExecute(Sender: TObject);
    procedure actResourceExportResourceExecute(Sender: TObject);
    procedure actResourceAddResourceExecute(Sender: TObject);
    procedure tvResourcesExpanded(Sender: TObject; Node: TTreeNode);
    procedure tvResourcesCollapsed(Sender: TObject; Node: TTreeNode);
    procedure actResourceDeleteResourceExecute(Sender: TObject);
    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
    procedure actResourceImportResourceExecute(Sender: TObject);
    procedure actResourcePropertiesExecute(Sender: TObject);
    procedure actEditSelectAllExecute(Sender: TObject);
    procedure actEditCopyExecute(Sender: TObject);
    procedure actEditPasteExecute(Sender: TObject);
    procedure FormKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure FormKeyPress(Sender: TObject; var Key: Char);
    procedure actHelpContentsExecute(Sender: TObject);
    function ApplicationEvents1Help(Command: Word; Data: Integer;
      var CallHelp: Boolean): Boolean;
    procedure actResourceImportRCDataResourceExecute(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure actResourceImportOtherResourceExecute(Sender: TObject);
  private
    fResourceModule : TResourceModule;
    fProperties : TPEResourceExplorerProperties;
    fCOFFSectionsShowing : boolean;
    fUndo, fRedo : string;
    fFileName : string;
    fIgnoreChar : Boolean;
    fBlockUpdate : Boolean;

    procedure SetCaption;
    procedure UpdateDisplay;
    procedure OpenFile (const fileName : string);
    procedure SwitchView (details : TObject);
    procedure WmInitialize (var msg : TMessage); message WM_INITIALIZE;
    procedure WmStatusBar (var Msg : TMessage); message WM_STATUSBAR;
    procedure WmPropertiesChanged (var msg : TMessage); message WM_PROPERTIES_CHANGED;
    procedure WmAddImageResource (var msg : TMessage); message WM_ADDIMAGERESOURCE;
    procedure SetFormMenuButton (item : TMenuItem);
    procedure SetFileName(const Value: string);

    function SaveFile : boolean;
    function SaveFileAs : Boolean;
    function SaveChanges : Boolean;
    function IsDirty : Boolean;

    function SelectedResourceDetails : TResourceDetails;
    function ResourceForm : TfmResource;

    property FileName : string read fFileName write SetFileName;
  protected
    procedure Loaded; override;
    procedure UpdateActions; override;
  public
    { Public declarations }
  end;

//----------------------------------------------------------------------
var
  fmMain: TfmMain;

//----------------------------------------------------------------------
procedure AttachMenu (const buttonCaption : string; menu : TMenuItem);
procedure DetachMenu (const buttonCaption : string);
function GetTypeName (const tp : string) : string;
function GetTypeImage (const tp : string) : Integer;

implementation

{$R *.DFM}

uses Registry, RawResourceForm,
     unitPEFile,                        // Accept resources from PE files
     unitResFile,                       // Accept resources from .RES files

     unitResourceGraphics,              // Decoder unit for Icons, Bitmaps, Cursors
     unitResourceMessages,              //    "     "    "  String and Message tables
     unitResourceVersionInfo,           //    "     "    "  Version Info
     unitResourceMenus,                 //    "     "    "  Menus
     unitResourceDialogs,               //    "     "    "  Dialogs
     unitResourceRCData,                //    "     "    "  RCData
     unitResourceJPEG,                  //    "     "    "  JPEG Images
     unitResourceGIF,                   //    "     "    "  GIF Images
     unitResourceXPManifests,

     GroupResourceForm,                 // Display form for Icons & cursor groups
     GraphicsResourceForm,              // Editor   "   "  Icons, Bitmaps, Cursors
     TextResourceForm,                  //   "      "   "   String and MEssage tables
     VersionResourceForm,               //   "      "   "   Version Info
     MenuResourceForm,                  //   "      "   "   Menus
     DialogResourceForm,                //   "      "   "   Dialogs
     DescriptionRCDataResourceForm,
     PackagesResourceForm,
     FormResourceForm,
     XPManifestResourceForm,

     PEHeaderForm,                      // PE File section display forms
     PESectionForm,
     COFFHeaderForm,
     OptionalHeaderForm,
     DOSHeaderForm,

     PropertiesForm,                    // Program properties dialog
     AddResourceDialog,                 // Add Resource dialog
     ResourcePropertiesDialog,
     unitExIcon,
     HelpContext, ResourceObjectForm;

//----------------------------------------------------------------------
resourcestring
  rstColors = '%d colours';
  rstHighColor = 'High Colour';
  rstTrueColor = 'True Colour';
  rstLanguageNeutral = 'Language Neutral';
  rstDuplicateResourceName = 'Duplicate Resource Name';
  rstAnyFileFilter = 'Any File (*.*)|*.*';

  rstBitmap       = 'Bitmap';
  rstIcon         = 'Icon';
  rstCursor       = 'Cursor';
  rstMenu         = 'Menu';
  rstDialog       = 'Dialog';
  rstAccelerator  = 'Accelerator';
  rstString       = 'String Table';
  rstRCData       = 'RC Data';
  rstMessageTable = 'MessageTable';
  rstVersion      = 'Version';
  rstGroupCursor  = 'Cursor Group';
  rstGroupIcon    = 'Icon Group';
  rstXPManifest   = 'XP Theme Manifest'; 

  rstUndo         = '&Undo %s';
  rstRedo         = '&Redo %s';
  rstUntitled     = '<Untitled>';
  rstResFilter    = 'Resource Files (*.res;*.dcr)|*.RES;*.DCR';
  rstModuleFilter = 'Module Files (*.exe;*.dll;*.ocx)|*.EXE;*.DLL;*.OCX';
  rstChanges      = 'Save changes to %s';

  rstChangeResourceProperties = 'change resource properties';

//----------------------------------------------------------------------
const
  otDOSHeader = 1;
  otCOFFHeader = 2;
  otOptionalHeader = 3;
  otSections = 4;

  imgClosedFolder = 10;
  imgOpenFolder = 11;


function SplitString (const search : string; var s : string) : string;
var
  p : Integer;
begin
  p := Pos (search, s);
  if p > 0 then
  begin
    result := Trim (Copy (s, 1, p - 1));
    s := Trim (Copy (s, p + 1, maxInt))
  end
  else
  begin
    result := Trim (s);
    s := ''
  end
end;

(*----------------------------------------------------------------------*
 | procedure AttachMenu                                                 |
 |                                                                      |
 | Global procedure - attaches a menu to a button (the ...Object one)   |
 *----------------------------------------------------------------------*)
procedure AttachMenu (const buttonCaption : string; menu : TMenuItem);
var
  i : Integer;
  btn : TToolButton;
begin
  exit;
  if csDestroying in fmMain.ComponentState then Exit;
  btn := Nil;
  for i := 0 to fmMain.tbMenu.ButtonCount - 1 do
    if fmMain.tbMenu.Buttons [i].Caption = buttonCaption then
    begin
      btn := fmMain.tbMenu.Buttons [i];
      break
    end;

  if Assigned (btn) then
  begin
    btn.MenuItem := menu;
    btn.Visible := True
  end
end;

(*----------------------------------------------------------------------*

⌨️ 快捷键说明

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