196 lines
5.4 KiB
Plaintext
196 lines
5.4 KiB
Plaintext
unit umain;
|
|
|
|
interface
|
|
|
|
uses
|
|
Windows, Messages, SysUtils, {$IfNDef VER130} Variants, {$EndIf} Classes, Graphics, Controls, Forms,
|
|
Dialogs, hyieutils, StdCtrls, ieview, iemview, imageenview, imageenio,
|
|
ComCtrls, Menus, ImgList, ExtCtrls, iexBitmaps, hyiedefs, iesettings, iexLayers,
|
|
iexRulers;
|
|
|
|
type
|
|
TMainForm = class(TForm)
|
|
OpenDialog1: TOpenDialog;
|
|
MainMenu1: TMainMenu;
|
|
File1: TMenuItem;
|
|
Open1: TMenuItem;
|
|
N1: TMenuItem;
|
|
Exit1: TMenuItem;
|
|
ImageList1: TImageList;
|
|
Panel1: TPanel;
|
|
TreeView1: TTreeView;
|
|
Splitter1: TSplitter;
|
|
Panel2: TPanel;
|
|
ComboBox1: TComboBox;
|
|
CheckBox1: TCheckBox;
|
|
ImageEnView1: TImageEnView;
|
|
Saveimageas1: TMenuItem;
|
|
Button1: TButton;
|
|
procedure FormCreate(Sender: TObject);
|
|
procedure FormDestroy(Sender: TObject);
|
|
procedure Exit1Click(Sender: TObject);
|
|
procedure Open1Click(Sender: TObject);
|
|
procedure ComboBox1Change(Sender: TObject);
|
|
procedure CheckBox1Click(Sender: TObject);
|
|
procedure TreeView1Change(Sender: TObject; Node: TTreeNode);
|
|
procedure TreeView1GetImageIndex(Sender: TObject; Node: TTreeNode);
|
|
procedure Saveimageas1Click(Sender: TObject);
|
|
procedure Button1Click(Sender: TObject);
|
|
private
|
|
{ Private declarations }
|
|
procedure LoadFile(const sFileName: string);
|
|
public
|
|
{ Public declarations }
|
|
m_ResourceExtractor:TIEResourceExtractor;
|
|
end;
|
|
|
|
var
|
|
MainForm: TMainForm;
|
|
|
|
implementation
|
|
|
|
{$R *.DFM}
|
|
{$R WindowsTheme.res}
|
|
|
|
|
|
procedure TMainForm.FormCreate(Sender: TObject);
|
|
begin
|
|
m_ResourceExtractor := nil;
|
|
ImageEnView1.DisplayGrid := true;
|
|
ComboBox1.ItemIndex := 0;
|
|
end;
|
|
|
|
procedure TMainForm.FormDestroy(Sender: TObject);
|
|
begin
|
|
m_ResourceExtractor.Free;
|
|
end;
|
|
|
|
// File | Exit
|
|
procedure TMainForm.Exit1Click(Sender: TObject);
|
|
begin
|
|
Close;
|
|
end;
|
|
|
|
// File | Open
|
|
procedure TMainForm.Open1Click(Sender: TObject);
|
|
begin
|
|
if OpenDialog1.Execute and FileExists(OpenDialog1.FileName) then
|
|
LoadFile(OpenDialog1.FileName);
|
|
end;
|
|
|
|
|
|
// Load Resources
|
|
procedure TMainForm.LoadFile(const sFileName: string);
|
|
var
|
|
i, j, k:integer;
|
|
p1, p2:TTreeNode;
|
|
begin
|
|
if assigned(m_ResourceExtractor) then
|
|
m_ResourceExtractor.Free;
|
|
TreeView1.Items.Clear;
|
|
|
|
m_ResourceExtractor := TIEResourceExtractor.Create( sFilename );
|
|
|
|
if m_ResourceExtractor.IsValid then
|
|
for i:=0 to m_ResourceExtractor.TypesCount-1 do
|
|
begin
|
|
p1 := TreeView1.Items.Add(nil, m_ResourceExtractor.FriendlyTypes[i]);
|
|
for j:=0 to m_ResourceExtractor.NamesCount[i]-1 do
|
|
if m_ResourceExtractor.IsGroup[i] then
|
|
begin
|
|
p2 := TreeView1.Items.AddChild(p1, m_ResourceExtractor.Names[i, j]);
|
|
for k:=0 to m_ResourceExtractor.GroupCountFrames[i, j]-1 do
|
|
TreeView1.Items.AddChildObject(p2, IntToStr(m_ResourceExtractor.GroupFrameWidth[i, j, k])+' x ' +
|
|
IntToStr(m_ResourceExtractor.GroupFrameHeight[i, j, k])+' ' +
|
|
IntToStr(m_ResourceExtractor.GroupFrameDepth[i, j, k])+'-bit',
|
|
m_ResourceExtractor.GetResourceBookmark(i, j, k));
|
|
end
|
|
else
|
|
TreeView1.Items.AddChildObject(p1, m_ResourceExtractor.Names[i, j], m_ResourceExtractor.GetResourceBookmark(i, j));
|
|
end;
|
|
end;
|
|
|
|
|
|
|
|
// change zoom
|
|
procedure TMainForm.ComboBox1Change(Sender: TObject);
|
|
const
|
|
zoomv:array [0..6] of double = (0, 25, 50, 100, 200, 400, 800);
|
|
begin
|
|
if ComboBox1.ItemIndex = 0 then
|
|
begin
|
|
ImageEnView1.AutoFit := true;
|
|
ImageEnView1.Update;
|
|
end
|
|
else
|
|
begin
|
|
ImageEnView1.AutoFit := false;
|
|
ImageEnView1.Zoom := zoomv[ComboBox1.ItemIndex];
|
|
end;
|
|
end;
|
|
|
|
// Show Grid
|
|
procedure TMainForm.CheckBox1Click(Sender: TObject);
|
|
begin
|
|
ImageEnView1.DisplayGrid := CheckBox1.Checked;
|
|
end;
|
|
|
|
|
|
procedure TMainForm.TreeView1Change(Sender: TObject; Node: TTreeNode);
|
|
var
|
|
res:TIEResourceBookmark;
|
|
buffer:pointer;
|
|
bufferLen:integer;
|
|
fileType:TIOFileType;
|
|
begin
|
|
if not Node.HasChildren and assigned(Node.Data) then
|
|
begin
|
|
res := TIEResourceBookmark(Node.Data);
|
|
buffer := m_ResourceExtractor.GetBuffer(res, bufferLen);
|
|
|
|
// We cannot use ioUnknown (autodect) for BMP, CUR and ICO because it is not possible to autodetect BMP, CUR and ICO when they are resources.
|
|
fileType := ioUnknown;
|
|
if (m_ResourceExtractor.FriendlyTypes[res.TypeIndex] = 'GroupIcon') or (m_ResourceExtractor.FriendlyTypes[res.TypeIndex] = 'Icon') then
|
|
fileType := ioICO
|
|
else if (m_ResourceExtractor.FriendlyTypes[res.TypeIndex] = 'GroupCursor') or (m_ResourceExtractor.FriendlyTypes[res.TypeIndex] = 'Cursor') then
|
|
fileType := ioCUR
|
|
else if m_ResourceExtractor.FriendlyTypes[res.TypeIndex] = 'Bitmap' then
|
|
fileType := ioBMP;
|
|
|
|
ImageEnView1.IO.Params.IsResource := true;
|
|
ImageEnView1.IO.LoadFromBuffer(buffer, bufferLen, fileType);
|
|
|
|
end;
|
|
end;
|
|
|
|
procedure TMainForm.TreeView1GetImageIndex(Sender: TObject; Node: TTreeNode);
|
|
begin
|
|
if Node.HasChildren then
|
|
begin
|
|
if Node.Expanded then
|
|
Node.ImageIndex := 11
|
|
else
|
|
Node.ImageIndex := 12;
|
|
Node.SelectedIndex := 12;
|
|
end
|
|
else
|
|
begin
|
|
Node.ImageIndex := 118;
|
|
Node.SelectedIndex := 118;
|
|
end;
|
|
end;
|
|
|
|
// Save image as...
|
|
procedure TMainForm.Saveimageas1Click(Sender: TObject);
|
|
begin
|
|
ImageEnView1.IO.SaveToFile( ImageEnView1.IO.ExecuteSaveDialog() );
|
|
end;
|
|
|
|
|
|
procedure TMainForm.Button1Click(Sender: TObject);
|
|
begin
|
|
LoadFile(Application.Exename);
|
|
end;
|
|
|
|
end.
|