unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls, StdCtrls, Buttons;type
TForm1 = class(TForm)
PageControl1: TPageControl;
TabSheet1: TTabSheet;
TabSheet2: TTabSheet;
TabSheet3: TTabSheet;
ListView1: TListView;
Label1: TLabel;
Edit1: TEdit;
SpeedButton1: TSpeedButton;
Button1: TButton;
OpenDialog1: TOpenDialog;
ListView2: TListView;
Label2: TLabel;
Edit2: TEdit;
SpeedButton2: TSpeedButton;
Button2: TButton;
OpenDialog2: TOpenDialog;
OpenDialog3: TOpenDialog;
ListView3: TListView;
Label3: TLabel;
Edit3: TEdit;
SpeedButton3: TSpeedButton;
Button3: TButton;
Button4: TButton;
Button5: TButton;
Button6: TButton;
procedure SpeedButton1Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure SpeedButton2Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure SpeedButton3Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
procedure Button6Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
if OpenDialog1.Execute then Edit1.Text := OpenDialog1.FileName;
end;procedure TForm1.Button1Click(Sender: TObject);
var
fs: TFileStream;
ObjectId: DWORD;
ObjectName: string;
ObjectDesc: string;
Address: Integer;
Data: array[0..99] of Byte;
begin
ListView1.Items.Clear;
fs := TFileStream.Create(Edit1.Text, fmOpenRead);
Address := $00000008;
while(Address < $00066AE8) do
begin
fs.Seek(Address, soFromBeginning);
fs.Read(Data, 4);
ObjectId := Data[3] shl 24 + Data[2] shl 16 + Data[1] shl 8 + Data[0];
fs.Seek(Address + $00A0, soFromBeginning);
fs.Read(Data, 100);
ObjectDesc := Copy(WideCharToString(@(Data[0])),1, 100);
fs.Seek(Address + $04A0, soFromBeginning);
fs.Read(Data, 100);
ObjectName := Copy(WideCharToString(@(Data[0])),1, 100);
with ListView1.Items.Add do
begin
Caption := IntToHex(Address, 8);
SubItems.Add(IntToHex(ObjectId, 8));
SubItems.Add(ObjectName);
end;
Address := Address + $04E0
end;
fs.Free;
end;procedure TForm1.SpeedButton2Click(Sender: TObject);
begin
if OpenDialog2.Execute then Edit2.Text := OpenDialog2.FileName;
end;procedure TForm1.Button2Click(Sender: TObject);
var
fs: TFileStream;
DataSize: DWORD;
DataCount: DWORD;
ObjectId: DWORD;
ObjectName: string;
i, j, n: Integer;
Address: Integer;
Data: array[0..10240] of Byte;
begin
ListView2.Items.Clear;
fs := TFileStream.Create(Edit2.Text, fmOpenRead);
N := 0;
Address := $00000008;
while(N < 85) do
begin
fs.Seek(Address, soFromBeginning);
fs.Read(Data, 4);
Address := Address + 4;
DataSize := Data[3] shl 24 + Data[2] shl 16 + Data[1] shl 8 + Data[0];
fs.Read(Data, 4);
Address := Address + 4;
DataCount := Data[3] shl 24 + Data[2] shl 16 + Data[1] shl 8 + Data[0];
for i := 0 to DataCount - 1 do
begin
fs.Seek(Address, soFromBeginning);
fs.Read(Data, 4);
ObjectId := Data[3] shl 24 + Data[2] shl 16 + Data[1] shl 8 + Data[0];
fs.Read(Data, DataSize - 4);
case N of
3, 6, 11, 36, 57: j := 8;
19, 33, 45: j := 4;
else j := 0;
end;
ObjectName := Copy(WideCharToString(@(Data[j])),1, DataSize - 4 - j);
with ListView2.Items.Add do
begin
Caption := IntToHex(Address, 8);
SubItems.Add(IntToHex(ObjectId, 8));
SubItems.Add(ObjectName);
end;
Address := Address + DataSize;
if Address = $000FEF50 then Address := Address + $17;
if Address = $002601EB then Address := Address + $6B;
end;
Inc(N);
end;
fs.Free;
end;procedure TForm1.SpeedButton3Click(Sender: TObject);
begin
if OpenDialog3.Execute then Edit3.Text := OpenDialog3.FileName;
end;procedure TForm1.Button3Click(Sender: TObject);
var
fs: TFileStream;
TaskAddr: DWORD;
TaskId: DWORD;
TaskName: string;
Address: Integer;
Data: array[0..29] of Byte;
begin
ListView3.Items.Clear;
fs := TFileStream.Create(Edit3.Text, fmOpenRead);
Address := $00000010;
while(Address < $00002754) do
begin
fs.Seek(Address, soFromBeginning);
fs.Read(Data, 4);
TaskAddr := Data[3] shl 24 + Data[2] shl 16 + Data[1] shl 8 + Data[0];
fs.Seek(TaskAddr, soFromBeginning);
fs.Read(Data, 4);
TaskId := Data[3] shl 24 + Data[2] shl 16 + Data[1] shl 8 + Data[0];
fs.Seek(TaskAddr + 4, soFromBeginning);
fs.Read(Data, 30);
TaskName := Copy(WideCharToString(@(Data[0])),1, 30);
with ListView3.Items.Add do
begin
Caption := IntToHex(TaskAddr, 8);
SubItems.Add(IntToHex(TaskId, 8));
SubItems.Add(TaskName);
end;
Address := Address + $04
end;
fs.Free;
end;procedure TForm1.Button4Click(Sender: TObject);
var
i: Integer;
f: TStrings;
begin
f := TStringList.Create;
for i:= 0 to ListView2.Items.Count - 1 do
f.Add(ListView2.Items[i].Caption + ' ' + ListView2.Items[i].SubItems.Strings[0] + ' ' + ListView2.Items[i].SubItems.Strings[1]);
f.SaveToFile(ExtractFilePath(Edit2.Text) + '\elements.txt');
f.Free;
end;procedure TForm1.Button5Click(Sender: TObject);
var
i: Integer;
f: TStrings;
begin
f := TStringList.Create;
for i:= 0 to ListView3.Items.Count - 1 do
f.Add(ListView3.Items[i].Caption + ' ' + ListView3.Items[i].SubItems.Strings[0] + ' ' + ListView3.Items[i].SubItems.Strings[1]);
f.SaveToFile(ExtractFilePath(Edit3.Text) + '\tasks.txt');
f.Free;
end;procedure TForm1.Button6Click(Sender: TObject);
var
i: Integer;
f: TStrings;
begin
f := TStringList.Create;
for i:= 0 to ListView1.Items.Count - 1 do
f.Add(ListView1.Items[i].Caption + ' ' + ListView1.Items[i].SubItems.Strings[0] + ' ' + ListView1.Items[i].SubItems.Strings[1]);
f.SaveToFile(ExtractFilePath(Edit1.Text) + '\gshop.txt');
f.Free;
end;end.
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls, StdCtrls, Buttons;type
TForm1 = class(TForm)
PageControl1: TPageControl;
TabSheet1: TTabSheet;
TabSheet2: TTabSheet;
TabSheet3: TTabSheet;
ListView1: TListView;
Label1: TLabel;
Edit1: TEdit;
SpeedButton1: TSpeedButton;
Button1: TButton;
OpenDialog1: TOpenDialog;
ListView2: TListView;
Label2: TLabel;
Edit2: TEdit;
SpeedButton2: TSpeedButton;
Button2: TButton;
OpenDialog2: TOpenDialog;
OpenDialog3: TOpenDialog;
ListView3: TListView;
Label3: TLabel;
Edit3: TEdit;
SpeedButton3: TSpeedButton;
Button3: TButton;
Button4: TButton;
Button5: TButton;
Button6: TButton;
procedure SpeedButton1Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure SpeedButton2Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure SpeedButton3Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
procedure Button6Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
if OpenDialog1.Execute then Edit1.Text := OpenDialog1.FileName;
end;procedure TForm1.Button1Click(Sender: TObject);
var
fs: TFileStream;
ObjectId: DWORD;
ObjectName: string;
ObjectDesc: string;
Address: Integer;
Data: array[0..99] of Byte;
begin
ListView1.Items.Clear;
fs := TFileStream.Create(Edit1.Text, fmOpenRead);
Address := $00000008;
while(Address < $00066AE8) do
begin
fs.Seek(Address, soFromBeginning);
fs.Read(Data, 4);
ObjectId := Data[3] shl 24 + Data[2] shl 16 + Data[1] shl 8 + Data[0];
fs.Seek(Address + $00A0, soFromBeginning);
fs.Read(Data, 100);
ObjectDesc := Copy(WideCharToString(@(Data[0])),1, 100);
fs.Seek(Address + $04A0, soFromBeginning);
fs.Read(Data, 100);
ObjectName := Copy(WideCharToString(@(Data[0])),1, 100);
with ListView1.Items.Add do
begin
Caption := IntToHex(Address, 8);
SubItems.Add(IntToHex(ObjectId, 8));
SubItems.Add(ObjectName);
end;
Address := Address + $04E0
end;
fs.Free;
end;procedure TForm1.SpeedButton2Click(Sender: TObject);
begin
if OpenDialog2.Execute then Edit2.Text := OpenDialog2.FileName;
end;procedure TForm1.Button2Click(Sender: TObject);
var
fs: TFileStream;
DataSize: DWORD;
DataCount: DWORD;
ObjectId: DWORD;
ObjectName: string;
i, j, n: Integer;
Address: Integer;
Data: array[0..10240] of Byte;
begin
ListView2.Items.Clear;
fs := TFileStream.Create(Edit2.Text, fmOpenRead);
N := 0;
Address := $00000008;
while(N < 85) do
begin
fs.Seek(Address, soFromBeginning);
fs.Read(Data, 4);
Address := Address + 4;
DataSize := Data[3] shl 24 + Data[2] shl 16 + Data[1] shl 8 + Data[0];
fs.Read(Data, 4);
Address := Address + 4;
DataCount := Data[3] shl 24 + Data[2] shl 16 + Data[1] shl 8 + Data[0];
for i := 0 to DataCount - 1 do
begin
fs.Seek(Address, soFromBeginning);
fs.Read(Data, 4);
ObjectId := Data[3] shl 24 + Data[2] shl 16 + Data[1] shl 8 + Data[0];
fs.Read(Data, DataSize - 4);
case N of
3, 6, 11, 36, 57: j := 8;
19, 33, 45: j := 4;
else j := 0;
end;
ObjectName := Copy(WideCharToString(@(Data[j])),1, DataSize - 4 - j);
with ListView2.Items.Add do
begin
Caption := IntToHex(Address, 8);
SubItems.Add(IntToHex(ObjectId, 8));
SubItems.Add(ObjectName);
end;
Address := Address + DataSize;
if Address = $000FEF50 then Address := Address + $17;
if Address = $002601EB then Address := Address + $6B;
end;
Inc(N);
end;
fs.Free;
end;procedure TForm1.SpeedButton3Click(Sender: TObject);
begin
if OpenDialog3.Execute then Edit3.Text := OpenDialog3.FileName;
end;procedure TForm1.Button3Click(Sender: TObject);
var
fs: TFileStream;
TaskAddr: DWORD;
TaskId: DWORD;
TaskName: string;
Address: Integer;
Data: array[0..29] of Byte;
begin
ListView3.Items.Clear;
fs := TFileStream.Create(Edit3.Text, fmOpenRead);
Address := $00000010;
while(Address < $00002754) do
begin
fs.Seek(Address, soFromBeginning);
fs.Read(Data, 4);
TaskAddr := Data[3] shl 24 + Data[2] shl 16 + Data[1] shl 8 + Data[0];
fs.Seek(TaskAddr, soFromBeginning);
fs.Read(Data, 4);
TaskId := Data[3] shl 24 + Data[2] shl 16 + Data[1] shl 8 + Data[0];
fs.Seek(TaskAddr + 4, soFromBeginning);
fs.Read(Data, 30);
TaskName := Copy(WideCharToString(@(Data[0])),1, 30);
with ListView3.Items.Add do
begin
Caption := IntToHex(TaskAddr, 8);
SubItems.Add(IntToHex(TaskId, 8));
SubItems.Add(TaskName);
end;
Address := Address + $04
end;
fs.Free;
end;procedure TForm1.Button4Click(Sender: TObject);
var
i: Integer;
f: TStrings;
begin
f := TStringList.Create;
for i:= 0 to ListView2.Items.Count - 1 do
f.Add(ListView2.Items[i].Caption + ' ' + ListView2.Items[i].SubItems.Strings[0] + ' ' + ListView2.Items[i].SubItems.Strings[1]);
f.SaveToFile(ExtractFilePath(Edit2.Text) + '\elements.txt');
f.Free;
end;procedure TForm1.Button5Click(Sender: TObject);
var
i: Integer;
f: TStrings;
begin
f := TStringList.Create;
for i:= 0 to ListView3.Items.Count - 1 do
f.Add(ListView3.Items[i].Caption + ' ' + ListView3.Items[i].SubItems.Strings[0] + ' ' + ListView3.Items[i].SubItems.Strings[1]);
f.SaveToFile(ExtractFilePath(Edit3.Text) + '\tasks.txt');
f.Free;
end;procedure TForm1.Button6Click(Sender: TObject);
var
i: Integer;
f: TStrings;
begin
f := TStringList.Create;
for i:= 0 to ListView1.Items.Count - 1 do
f.Add(ListView1.Items[i].Caption + ' ' + ListView1.Items[i].SubItems.Strings[0] + ' ' + ListView1.Items[i].SubItems.Strings[1]);
f.SaveToFile(ExtractFilePath(Edit1.Text) + '\gshop.txt');
f.Free;
end;end.
不是看不起,而是非常看不起,我真还专门花了半个小时看了易语言的语法,看看到底怎么个汉语编程法。看了一会儿就明白了,不就是java/c#宏替换版本么?除了不知道怎么想出来的多返回值(这不吃饱了撑的么),需要在编译器中处理稍微麻烦点儿,剩下好像也就只有 A<x<B 和 x<=>y 之类改改预编译器就能搞定的语法,跟java/c#不太一样而已
不过据说类库做的倒是很强大,拖拖放放一个程序就出来了,连最简单的工作都包装好了。怀疑这些不懂英语的“汉编程序员”遇到类库中没有的东西的时候,除了跪求控件或者到处问怎么翻成“易语言”外,还有没有别的办法解决问题了。