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

📄 maptojdbgmain.pas

📁 Jedi Code Library JCL JVCL 组件包 JCL+JVCL超过300个组件的非可视/可视大型组件包。
💻 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 + -