Teigha File Converter を使って、DWG/DXF 変換 2016/ 9/ 3 (2016/ 9/ 6 更新)

■Teigha File Converter の入手先
 Open Design Alliance
 https://www.opendesign.com/guestfiles/TeighaFileConverter

■Teigha File Converter の起動オプション(コマンドラインフォーマット)
 下図、ダイアログは、TeighaFileConverter.exe を、" /?" オプションで起動すると出てきます。
 ・Recurse Input Folder : サブフォルダ以内のファイルを含めるかどうか
 ・Audit each file :監査を行うかどうか
 
 ※Input、Output のファイルタイプが同じ場合は、Input、Output 同じフォルダ名は指定できません。
 ※ファイルフィルターに、ワイルドカードを使わずにファイル名をそのまま指定すると、そのファイルだけが変換対象になります。



■Teigha File Converter をプログラムから起動する
 ShellExecute、ShellExecuteEx を SW_HIDE で使うと非表示で実行できます。



■ソースコード

unit TeighaFCUnit;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls,
  ExtCtrls, ShellApi;


type
  TForm3 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    Edit5: TEdit;
    Edit6: TEdit;
    Edit7: TEdit;
    Button1: TButton;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    Edit8: TEdit;
    Label8: TLabel;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private 宣言 }
  public
    { Public 宣言 }
  end;

var
  Form3: TForm3;

implementation

{$R *.dfm}

// 起動する
procedure TForm3.Button1Click(Sender: TObject);
var
  ExeFile   : String;
  Params    : String;
  hInstance : Cardinal;
begin
  ExeFile := Edit1.Text;
  Params := Edit2.Text + ' ' + Edit3.Text + ' ' + Edit4.Text + ' ' +
    Edit5.Text + ' ' + Edit6.Text + ' ' + Edit7.Text + ' ' + Edit8.Text;

  hInstance := ShellExecute(Handle, 'open', PChar(ExeFile), PChar(Params), nil,
                             SW_SHOWNORMAL);  // SW_HIDE or SW_SHOW

  if hInstance <= 32 then begin
    MessageBox(Handle, '起動に失敗しました.', 'エラー', MB_ICONSTOP);
  end;
end;

// 起動して終了を待つ
procedure TForm3.Button2Click(Sender: TObject);
var
  SEInfo: TShellExecuteInfo;
  ExitCode : DWORD;
  ExeFile, Params : string;
begin
  ExeFile := Edit1.Text;
  Params := Edit2.Text + ' ' + Edit3.Text + ' ' + Edit4.Text + ' ' +
    Edit5.Text + ' ' + Edit6.Text + ' ' + Edit7.Text + ' ' + Edit8.Text;

  FillChar(SEInfo, SIzeOf(SEInfo), 0);
  with SEInfo do begin
    cbSize := SizeOf(TShellExecuteInfo);
    fMask := SEE_MASK_NOCLOSEPROCESS;
    Wnd := Handle;
    lpFile := PChar(ExeFile);
    lpParameters := PChar(Params);
    // 表示・非表示
    nShow := SW_SHOWNORMAL; // or SW_HIDE
  end;
  if ShellExecuteEx(@SEInfo) then begin
    Caption := '変換中...';
    repeat
      Application.ProcessMessages;
      GetExitCodeProcess(SEInfo.hProcess, ExitCode);
    until (ExitCode <> STILL_ACTIVE) or Application.Terminated;
    MessageBox(Handle, '終了しました.', '情報', MB_ICONINFORMATION);
  end
  else begin
    MessageBox(Handle, '起動に失敗しました.', 'エラー', MB_ICONSTOP);
  end;
  Caption := '';
end;

end.