📄 mainform.pas
字号:
(*======================================================================*
| 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 + -