📄 maptojdbgmain.pas
字号:
unit MapToJdbgMain;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ComCtrls, ImgList, ActnList, Menus, ToolWin;
type
TMainForm = class(TForm)
ToolBar1: TToolBar;
MainMenu1: TMainMenu;
ActionList1: TActionList;
ImageList1: TImageList;
StatusBar1: TStatusBar;
Exit1: TAction;
Open1: TAction;
Convert1: TAction;
File1: TMenuItem;
Open2: TMenuItem;
N1: TMenuItem;
Exit2: TMenuItem;
OpenDialog1: TOpenDialog;
FilesListView: TListView;
ToolButton1: TToolButton;
ToolButton2: TToolButton;
ToolButton3: TToolButton;
Run1: TMenuItem;
Convert2: TMenuItem;
procedure Exit1Execute(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Open1Execute(Sender: TObject);
procedure Convert1Execute(Sender: TObject);
procedure Convert1Update(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
MainForm: TMainForm;
implementation
{$R *.DFM}
uses
JclCounter, JclDebug, JclFileUtils, JclUnitConv;
resourcestring
RsConverting = 'Converting ...';
RsConversionStatus = '%d file(s) converted, Conversion time: %5.3f sec.';
RsLinkerBugs = 'Linker bugs: %d';
procedure TMainForm.FormCreate(Sender: TObject);
var
MapFileName: TFileName;
begin
MapFileName := ParamStr(1);
if MapFileName <> '' then
begin
ConvertMapFileToJdbgFile(MapFileName);
Application.ShowMainForm := False;
Application.Terminate;
end;
end;
procedure TMainForm.Exit1Execute(Sender: TObject);
begin
Close;
end;
procedure TMainForm.Open1Execute(Sender: TObject);
var
I, FileSize: Integer;
begin
with OpenDialog1 do
begin
FileName := '';
if Execute then
begin
with FilesListView.Items do
begin
BeginUpdate;
try
Clear;
for I := 0 to Files.Count - 1 do
with Add do
begin
Caption := PathExtractFileNameNoExt(Files[I]);
FileSize := FileGetSize(Files[I]);
SubItems.AddObject(IntToStr(FileSize), Pointer(FileSize));
SubItems.Add('');
SubItems.Add('');
SubItems.Add(Files[I]);
SubItems.Add('');
SubItems.Add('');
ImageIndex := 1;
end;
finally
EndUpdate;
end;
end;
StatusBar1.Panels[0].Text := '';
end;
end;
end;
procedure TMainForm.Convert1Execute(Sender: TObject);
var
I, JdbgFileSize, FilesConverted, LineNumberErrors, LinkerBugCnt: Integer;
MapFileName, JdbgFileName: TFileName;
Ratio: Extended;
LinkerBugUnit: string;
Cnt: TJclCounter;
begin
Screen.Cursor := crHourGlass;
try
with FilesListView do
begin
StatusBar1.Panels[0].Text := RsConverting;
StatusBar1.Panels[1].Text := '';
StatusBar1.Update;
Items.BeginUpdate;
for I := 0 to Items.Count - 1 do
with Items[I] do
begin
SubItems[1] := '';
SubItems[2] := '';
SubItems[4] := '';
SubItems[5] := '';
ImageIndex := 1;
end;
Items.EndUpdate;
Update;
FilesConverted := 0;
LinkerBugCnt := 0;
StartCount(Cnt);
for I := 0 to Items.Count - 1 do
begin
with Items[I] do
begin
MapFileName := SubItems[3];
JdbgFileName := ChangeFileExt(MapFileName, JclDbgFileExtension);
if ConvertMapFileToJdbgFile(MapFileName, LinkerBugUnit, LineNumberErrors) then
begin
ImageIndex := 3;
JdbgFileSize := FileGetSize(JdbgFileName);
Ratio := JdbgFileSize * 100 / Integer(SubItems.Objects[0]);
SubItems[1] := IntToStr(JdbgFileSize);
SubItems[2] := Format('%3.1f %%', [Ratio]);
SubItems[4] := LinkerBugUnit;
if LinkerBugUnit <> '' then
Inc(LinkerBugCnt);
if LineNumberErrors > 0 then
SubItems[5] := IntToStr(LineNumberErrors);
Inc(FilesConverted);
end
else
begin
SubItems[0] := '';
ImageIndex := 4;
end;
end;
Update;
end;
StatusBar1.Panels[0].Text := Format(RsConversionStatus, [FilesConverted, StopCount(Cnt)]);
StatusBar1.Panels[1].Text := Format(RsLinkerBugs, [LinkerBugCnt]);
end;
finally
Screen.Cursor := crDefault;
end;
end;
procedure TMainForm.Convert1Update(Sender: TObject);
begin
Convert1.Enabled := FilesListView.Items.Count > 0;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -