📄 main.~pas
字号:
unit MAIN;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, WinSkinData, Menus, StdCtrls, ExtCtrls,RtlWil, ComCtrls;
type
TForm1 = class(TForm)
SkinData1: TSkinData;
MainMenu1: TMainMenu;
N1: TMenuItem;
N3: TMenuItem;
N4: TMenuItem;
N5: TMenuItem;
N6: TMenuItem;
N7: TMenuItem;
N8: TMenuItem;
N11: TMenuItem;
OD: TOpenDialog;
GroupBox1: TGroupBox;
Label1: TLabel;
lsize: TLabel;
Label2: TLabel;
Edit1: TEdit;
Edit2: TEdit;
Label3: TLabel;
Label5: TLabel;
Edit4: TEdit;
Edit3: TEdit;
Label4: TLabel;
Button1: TButton;
lPos: TLabel;
Label7: TLabel;
GroupBox2: TGroupBox;
Edit5: TEdit;
Label8: TLabel;
Label9: TLabel;
Edit6: TEdit;
Bevel1: TBevel;
Bevel3: TBevel;
Button2: TButton;
RadioButton1: TRadioButton;
RadioButton2: TRadioButton;
N12: TMenuItem;
Button3: TButton;
Button4: TButton;
N10: TMenuItem;
SD: TSaveDialog;
GT1: TMenuItem;
EI3WIL1: TMenuItem;
GT3WIL1: TMenuItem;
N13: TMenuItem;
KEN1: TMenuItem;
N24BitBMP2: TMenuItem;
KEN2: TMenuItem;
N9: TMenuItem;
GroupBox3: TGroupBox;
IMG: TImage;
SB: TStatusBar;
CK: TCheckBox;
Edit7: TEdit;
CheckBox1: TCheckBox;
T1: TTimer;
CheckBox2: TCheckBox;
N2: TMenuItem;
N14: TMenuItem;
N17: TMenuItem;
N18: TMenuItem;
TSGT: TImage;
TSEI: TImage;
N15: TMenuItem;
LegendOfMir3ResourcesEditer1: TMenuItem;
N16: TMenuItem;
OD2: TOpenDialog;
SD2: TSaveDialog;
CheckBox3: TCheckBox;
procedure FormCreate(Sender: TObject);
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
procedure N3Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure EI3WIL1Click(Sender: TObject);
procedure GT3WIL1Click(Sender: TObject);
procedure N4Click(Sender: TObject);
procedure N24BitBMP2Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
procedure KEN2Click(Sender: TObject);
procedure CheckBox1Click(Sender: TObject);
procedure T1Timer(Sender: TObject);
procedure N9Click(Sender: TObject);
procedure N8Click(Sender: TObject);
procedure KEN1Click(Sender: TObject);
procedure N12Click(Sender: TObject);
procedure N11Click(Sender: TObject);
procedure N16Click(Sender: TObject);
private
{ Private declarations }
public
procedure ImThreadProc;
{ Public declarations }
end;
var
Form1: TForm1;
ID:integer;
mImage:Integer;
crPos:integer;
mImgLen:DWORD;
mWidth,mHigh:WORD;
mshadow:char;
Opfile:string;
aOpen:Byte;
b3,b4:HWND;
implementation
uses _DI,_define;
{$R *.dfm}
procedure TForm1.ImThreadProc;
begin
WaitForSingleObject(hEvent,INFINITE);
if bImp then
begin
SendMessage(b4,BM_CLICK,0,0);
SendMessage(b3,BM_CLICK,0,0);
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
TSEI.Visible:=FALSE;
TSGT.Visible:=FALSE;
hEvent:=CreateEvent(nil,False,False,nil);
fOpen:=TWIL.Create;
fOpen.Clear;
end;
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
fOpen.Free;
end;
procedure OpenFile;
begin
aOpen:=fOpen.LoadFromFile(Opfile);
end;
procedure TForm1.N3Click(Sender: TObject);
var tmpWILINFO:PWILFILEIMAGEINFO;
tpe:BYTE;
i,j:integer;
buf:Pointer;
aBitMap:tBitMap;
tThread,tId:Cardinal;
begin
try
OD.Filter:='传奇3资源文件 (*.WIX)|*.wix';
if OD.Execute then
begin
Opfile:=OD.FileName;
tThread:=CreateThread(
nil,0,@OpenFile,nil,0,tId
);
WaitForSingleObject(tThread,INFINITE);
CloseHandle(tThread);
tpe:=aOpen;
if tpe<>0 then
begin
edit7.Text:='0';
SB.Panels.Items[0].Text:=' '+OD.FileName;
if tpe = EI3 then
begin
TSEI.Visible:=TRUE;
TSGT.Visible:=FALSE;
end
else
begin
TSEI.Visible:=FALSE;
TSGT.Visible:=TRUE;
end;
Opfile:=Od.FileName;
tmpWILINFO:=fOpen.InfoOfImage[0];
crPos:=0;
mImage:=fOpen.Count;
lPos.Caption:=IntToStr(crPos)+ ' / '+IntToStr(mImage - 1);
if tmpWILINFO<>nil then
begin
mImgLen:=tmpWILINFO^.dwImageLength;
mWidth:=tmpWILINFO^.shWidth;
mHigh:=tmpWILINFO^.shHeight;
mshadow:=tmpWILINFO^.bShadow;
Button1.Enabled:=TRUE;
edit1.Enabled:=TRUE;
edit2.Enabled:=TRUE;
edit3.Enabled:=TRUE;
edit4.Enabled:=TRUE;
edit1.Color:=clWindow;
edit2.Color:=clWindow;
edit3.Color:=clWindow;
edit4.Color:=clWindow;
lsize.Caption:=IntToStr(tmpWILINFO^.shWidth)+' * '+IntToStr(tmpWILINFO^.shHeight);
edit1.Text:=IntToStr(SmallInt(tmpWILINFO^.shPX));
edit2.Text:=IntToStr(SmallInt(tmpWILINFO^.shPY));
edit3.Text:=IntToStr(SmallInt(tmpWILINFO^.shShadowPX));
edit4.Text:=IntToStr(SmallInt(tmpWILINFO^.shShadowPY));
edit7.Text:='0';
IMG.Picture.Bitmap.FreeImage;
aBitMap:=fOpen.IndexOfBitMap[crPos];
if aBitMap <> nil then begin
IMG.Picture.Bitmap:=aBitMap;
IMG.Repaint;
IMG.Refresh;
end;
dispose(tmpWILINFO);
end
else
begin
Button1.Enabled:=FALSE;
edit1.Enabled:=FALSE;
edit2.Enabled:=FALSE;
edit3.Enabled:=FALSE;
edit4.Enabled:=FALSE;
edit1.Color:=clMenuHighlight;
edit2.Color:=clMenuHighlight;
edit3.Color:=clMenuHighlight;
edit4.Color:=clMenuHighlight;
end;
end
else Opfile:='';
end;
except
MessageBoxA(0,PCHAR('文件打开时发生致命错误,可能文件已经损坏,或者格式不符!'),PCHAR(''),mb_OK + mb_IconError);
end;
end;
procedure TForm1.Button3Click(Sender: TObject);
var tmpWILINFO:PWILFILEIMAGEINFO;
x,y,dx,dy:SmallInt;
nPos:integer;
aBitMap:tBitMap;
begin
if fOpen.Count > 0 then
begin
if crPos - 1 >= 0 then
begin
try nPos:= StrToInt(edit7.Text) except nPos:=crPos;end;
if nPos=crPos then
begin
if not CK.Checked then dec(crPos) else
crPos:=fOpen.GetPrevValidImageIndex(crPos);
end
else
begin
if (nPos>=0) then
begin
if nPos<fOpen.Count then crPos:=nPos
else
begin
crPos:=fOpen.Count;
end;
end;
end;
edit7.Text:=IntToStr(crPos);
tmpWILINFO:=fOpen.InfoOfImage[crPos];
mImage:=fOpen.Count;
lPos.Caption:=IntToStr(crPos)+ ' / '+IntToStr(mImage - 1);
if tmpWILINFO<>nil then
begin
mImgLen:=tmpWILINFO^.dwImageLength;
mWidth:=tmpWILINFO^.shWidth;
mHigh:=tmpWILINFO^.shHeight;
mshadow:=tmpWILINFO^.bShadow;
Button1.Enabled:=TRUE;
edit1.Enabled:=TRUE;
edit2.Enabled:=TRUE;
edit3.Enabled:=TRUE;
edit4.Enabled:=TRUE;
edit1.Color:=clWindow;
edit2.Color:=clWindow;
edit3.Color:=clWindow;
edit4.Color:=clWindow;
lsize.Caption:=IntToStr(tmpWILINFO^.shWidth)+' * '+IntToStr(tmpWILINFO^.shHeight);
edit1.Text:=IntToStr(SmallInt(tmpWILINFO^.shPX));
edit2.Text:=IntToStr(SmallInt(tmpWILINFO^.shPY));
edit3.Text:=IntToStr(SmallInt(tmpWILINFO^.shShadowPX));
edit4.Text:=IntToStr(SmallInt(tmpWILINFO^.shShadowPY));
aBitMap:=fOpen.IndexOfBitMap[crPos];
if aBitMap <> nil then begin
IMG.Picture.Bitmap:=aBitMap;
IMG.Repaint;
IMG.Refresh;
end;
dispose(tmpWILINFO);
end
else
begin
Button1.Enabled:=FALSE;
edit1.Enabled:=FALSE;
edit2.Enabled:=FALSE;
edit3.Enabled:=FALSE;
edit4.Enabled:=FALSE;
edit1.Color:=clMenuHighlight;
edit2.Color:=clMenuHighlight;
edit3.Color:=clMenuHighlight;
edit4.Color:=clMenuHighlight;
end;
end;
end;
end;
procedure TForm1.Button4Click(Sender: TObject);
var tmpWILINFO:PWILFILEIMAGEINFO;
x,y,dx,dy:SmallInt;
i,j:integer;
nPos:integer;
aBitMap:tBitMap;
begin
if fOpen.Count > 0 then
begin
if crPos + 1 < fOpen.Count then
begin
try nPos:= StrToInt(edit7.Text) except nPos:=crPos;end;
if nPos=crPos then
begin
if not CK.Checked then Inc(crPos) else
crPos:=fOpen.GetNextValidImageIndex(crPos);
end
else
begin
if (nPos>=0) then
begin
if nPos<fOpen.Count then crPos:=nPos
else
begin
crPos:=fOpen.Count;
end;
end;
end;
edit7.Text:=IntToStr(crPos);
tmpWILINFO:=fOpen.InfoOfImage[crPos];
mImage:=fOpen.Count;
lPos.Caption:=IntToStr(crPos)+ ' / '+IntToStr(mImage - 1);
if tmpWILINFO<>nil then
begin
mImgLen:=tmpWILINFO^.dwImageLength;
mWidth:=tmpWILINFO^.shWidth;
mHigh:=tmpWILINFO^.shHeight;
mshadow:=tmpWILINFO^.bShadow;
Button1.Enabled:=TRUE;
edit1.Enabled:=TRUE;
edit2.Enabled:=TRUE;
edit3.Enabled:=TRUE;
edit4.Enabled:=TRUE;
edit1.Color:=clWindow;
edit2.Color:=clWindow;
edit3.Color:=clWindow;
edit4.Color:=clWindow;
lsize.Caption:=IntToStr(tmpWILINFO^.shWidth)+' * '+IntToStr(tmpWILINFO^.shHeight);
lPos.Caption:=IntToStr(crPos)+ ' / '+IntToStr(mImage - 1);
edit1.Text:=IntToStr(SmallInt(tmpWILINFO^.shPX));
edit2.Text:=IntToStr(SmallInt(tmpWILINFO^.shPY));
edit3.Text:=IntToStr(SmallInt(tmpWILINFO^.shShadowPX));
edit4.Text:=IntToStr(SmallInt(tmpWILINFO^.shShadowPY));
IMG.Picture.Bitmap.FreeImage;
aBitMap:=fOpen.IndexOfBitMap[crPos];
if aBitMap <> nil then begin
IMG.Picture.Bitmap:=aBitMap;
IMG.Repaint;
IMG.Refresh;
end;
dispose(tmpWILINFO);
end
else
begin
Button1.Enabled:=FALSE;
edit1.Enabled:=FALSE;
edit2.Enabled:=FALSE;
edit3.Enabled:=FALSE;
edit4.Enabled:=FALSE;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -