📄 make.pas
字号:
unit Make;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons, Grids, DBGrids, ComCtrls;
type
TForm1 = class(TForm)
bt_add: TBitBtn;
s_grid: TStringGrid;
bt_close: TBitBtn;
od: TOpenDialog;
StatusBar1: TStatusBar;
bt_del: TBitBtn;
bt_done: TBitBtn;
GroupBox1: TGroupBox;
GroupBox2: TGroupBox;
Label1: TLabel;
m_startAddress: TComboBox;
procedure bt_addClick(Sender: TObject);
procedure bt_closeClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure s_gridDblClick(Sender: TObject);
procedure bt_delClick(Sender: TObject);
procedure bt_doneClick(Sender: TObject);
procedure m_startAddressChange(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.bt_addClick(Sender: TObject);
begin
s_grid.RowCount := s_grid.RowCount + 1;
s_grid.Cells[1,s_grid.RowCount-1] := IntToStr(s_grid.RowCount-1);
end;
procedure TForm1.bt_closeClick(Sender: TObject);
begin
Exit;
end;
procedure TForm1.FormCreate(Sender: TObject);
var
i :integer;
F: TextFile;
S: string;
begin
//s_grid.RowCount := s_grid.RowCount-1;
if FileExists(ExtractFilePath(Application.ExeName) + '\res_list.txt') = FALSE then
begin
ShowMessage('文本数据库为空.');
end
else
begin
AssignFile(F, ExtractFilePath(Application.ExeName) + '\res_list.txt');
Reset(F);
//test code
// ShowMessage(inttostr(len));
i :=1;
while not EOF(F) Do
begin
readln(F, s);
if Length(s) > 10 then
begin
if i>=2 then s_grid.RowCount := s_grid.RowCount + 1;
s_grid.Cells[1,i] := IntToStr(i);
s_grid.Cells[2,i] := s;
i := i + 1;
end
end ;
CloseFile(F);
end;
s_grid.Cells[1,0] := '编号';
s_grid.Cells[2,0] := '文件路径';
end;
procedure TForm1.s_gridDblClick(Sender: TObject);
var y:integer;
begin
//x := s_grid.Col;
y := s_grid.Row;
if od.Execute then
begin
s_grid.Cells[2,y] := ExtractFilePath(od.FileName) + ExtractFileName(od.FileName);
end
end;
procedure TForm1.bt_delClick(Sender: TObject);
begin
if s_grid.RowCount > 2 then
begin
s_grid.RowCount := s_grid.RowCount - 1;
end
end;
procedure TForm1.bt_doneClick(Sender: TObject);
var
i:integer;
FileName:String;
szFileName:String;
F: TextFile;
res_f:file of Byte;
res_fw:file of byte;
FileLen : integer;
FileHeader : integer;
StartAddress:integer;
TempInt:integer;
TotalLen:integer;
TempByte : array[0..3] of byte;
begin
StartAddress := 0;
if m_startAddress.text = '0' then
begin
ShowMessage('FLASH地址没有设置');
exit;
end ;
if m_startAddress.Text = '效果音' then
begin
StartAddress := 3342336;// 0x00330000;
szFileName := 'voice.bin';
end
else if m_startAddress.Text = '可视主题' then
begin
StartAddress := 1114112;//0x00110000;
szFileName := 'vcall.bin';
end
else if m_startAddress.Text = '数码相框' then
begin
StartAddress := 1245184;//0x00130000;
szFileName := 'dpf.bin';
end
else if m_startAddress.Text = '屏保' then
begin
StartAddress := 3145728;//0x00300000;
szFileName := 'scr.bin'
end
else if m_startAddress.Text = '日历' then
begin
StartAddress := 2883584;//0x002c0000;
szFileName := 'cldr.bin';
end
else if m_startAddress.Text = 'UI' then
begin
StartAddress := 1835008;//0x001c0000;
szFileName := 'uires.bin';
end
else if m_startAddress.Text = '开机动画' then
begin
StartAddress := 3014656; //0x002E0000
szFileName := 'switch.bin';
end
else if m_startAddress.Text = '桌面主题' then
begin
StartAddress := 2752512;//0x002a0000
szFileName := 'desktop.bin';
end;
//end;
//保存资源列表
FileName := ExtractFilePath(Application.ExeName) + '\res_list.txt';
if FileExists(FileName) then DeleteFile(FileName);
AssignFile(F, FileName);
//ShowMessage(Application.ExeName+ '\res_list.txt');
Rewrite(F);
//s_grid.RowCount := s_grid.RowCount-1;
for i:=1 to s_grid.RowCount-1 Do
if i = s_grid.RowCount-1 then Write(F, s_grid.Cells[2, i])
else
Writeln(F, s_grid.Cells[2,i]);
next ;
CloseFile(F);
//制作资源内容并保存
//FileHeader := 0;
//StartAddress := FlashStartAddress;//StrToInt(m_startAddress.Text);
FileLen := 0;
TotalLen := 0;
try
FileName := ExtractFilePath(Application.ExeName) + szFileName ;
//创建要保存的文件
AssignFile(res_fw, FileName);
rewrite(res_fw);
//每个文件偏移地址4个字节,长度四个字节
FileHeader := (s_grid.RowCount-1) * 8;
//创建文件表
for i:=1 to s_grid.RowCount-1 Do
begin
AssignFile(res_f, s_grid.Cells[2,i]);
Reset(res_f);
//写文件起始地址
TempInt := StartAddress+FileHeader+TotalLen;
move(TempInt, TempByte[0], 4);
Write(res_fw, TempByte[0]);
Write(res_fw, TempByte[1]);
Write(res_fw, TempByte[2]);
Write(res_fw, TempByte[3]);
//写文件长度
FileLen := FileSize(res_f);
TotalLen := TotalLen + FileLen;
move(FileLen, TempByte[0],4);
Write(res_fw, TempByte[0]);
Write(res_fw, TempByte[1]);
Write(res_fw, TempByte[2]);
Write(res_fw, TempByte[3]);
CloseFile(res_f);
end;
//创建文件内服
for i:=1 to s_grid.RowCount-1 Do
begin
AssignFile(res_f, s_grid.Cells[2,i]);
Reset(res_f);
//写文件数据
while not EOF(res_f) Do
Begin
Read(res_f, TempByte[0]);
Write(Res_Fw, TempByte[0]);
End;
CloseFile(res_f);
end;
CloseFile(Res_Fw);
except
ShowMessage('Write Error');
end;//end of try
end;
procedure TForm1.m_startAddressChange(Sender: TObject);
begin
if m_startAddress.Text <> '0' then
begin
Label1.Caption := 'FLASH地址已设置';
end
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -