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

📄 main.~pas

📁 传奇3 ei3 / 1.45 / 3G 版本 wil 资源编辑器源代码!
💻 ~PAS
📖 第 1 页 / 共 2 页
字号:
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 + -