FaxConv.PAS
上传用户:dgeyuang
上传日期:2007-01-11
资源大小:65k
文件大小:15k
源码类别:

传真(Fax)编程

开发平台:

Delphi

  1. unit Faxconv;
  2. interface
  3. uses
  4.   SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls, IniFiles,
  5.   Forms, Dialogs, StdCtrls, FileCtrl, OoMisc, AdFaxCvt, ExtCtrls, AdMeter,
  6.   Mask, ComCtrls, RichEdit2,jpeg;
  7. type
  8.   TFaxConversionForm = class(TForm)
  9.     btnOK: TButton;
  10.     ApdFaxConverter1: TApdFaxConverter;
  11.     btnConvert: TButton;
  12.     GroupBox2: TGroupBox;
  13.     cbxEnhTextEnabled: TCheckBox;
  14.     btnEnhFont: TButton;
  15.     FontDialog1: TFontDialog;
  16.     Label3: TLabel;
  17.     Label4: TLabel;
  18.     rgpResolution: TRadioGroup;
  19.     RadioGroup2:TRadioGroup;
  20.     Label5: TLabel;
  21.     rgpWidth: TRadioGroup;
  22.     Label6: TLabel;
  23.     GroupBox3: TGroupBox;
  24.     cbxCenterImage: TCheckBox;
  25.     cbxYield: TCheckBox;
  26.     cbxYieldOften: TCheckBox;
  27.     lblFontName: TLabel;
  28.     lblFontSize: TLabel;
  29.     edtLeftMargin: TMaskEdit;
  30.     edtTopMargin: TMaskEdit;
  31.     edtLinesPerPage: TMaskEdit;
  32.     edtTabStop: TMaskEdit;
  33.     GroupBox1: TGroupBox;
  34.     Label2: TLabel;
  35.     edtOutFileName: TEdit;
  36.     Label1: TLabel;
  37.     edtFileName: TEdit;
  38.     btnBrowseInFile: TButton;
  39.     Button2: TButton;
  40.     OpenDialog1: TOpenDialog;
  41.     RadioGroup1: TRadioGroup;
  42.     Label7: TLabel;
  43.     CheckBox1: TCheckBox;
  44.     RichEdit981: TRichEdit98;
  45.     RichEdit982: TRichEdit98;
  46.     Image2: TImage;
  47.     Image1: TImage;
  48.     procedure FormCreate(Sender: TObject);
  49.     procedure btnConvertClick(Sender: TObject);
  50.     procedure ApdFaxConverter1Status(F: TObject; Starting, Ending: Boolean;
  51.       PagesConverted, LinesConverted: Integer; BytesConverted,
  52.       BytesToConvert: Longint; var Abort: Boolean);
  53.     procedure btnEnhFontClick(Sender: TObject);
  54.     procedure FormClose(Sender: TObject; var Action: TCloseAction);
  55.     procedure cbxCenterImageClick(Sender: TObject);
  56.     procedure cbxYieldClick(Sender: TObject);
  57.     procedure cbxYieldOftenClick(Sender: TObject);
  58.     procedure rgpResolutionClick(Sender: TObject);
  59.     procedure rgpWidthClick(Sender: TObject);
  60.     procedure edtLeftMarginExit(Sender: TObject);
  61.     procedure edtTopMarginExit(Sender: TObject);
  62.     procedure edtLinesPerPageExit(Sender: TObject);
  63.     procedure edtTabStopExit(Sender: TObject);
  64.     procedure btnBrowseInFileClick(Sender: TObject);
  65.     procedure Button2Click(Sender: TObject);
  66.     procedure RadioGroup2Click(Sender: TObject);
  67.     procedure edtFileNameExit(Sender: TObject);
  68.     procedure btnOKClick(Sender: TObject);
  69.   private
  70.     { Private declarations }
  71.     Meter: TApdMeter;
  72.   public
  73.     { Public declarations }
  74.     Cancelled : Boolean;
  75.     LastInDir,
  76.     LastOutDir: String;
  77.   end;
  78. const
  79.   IniName = 'TCom3.ini';
  80.   crHand = 1;
  81. var
  82.   FaxConversionForm: TFaxConversionForm;
  83.                             //选择内容
  84. implementation
  85. uses Faxcnvid, RotateUnit,CovertBmp, FDConvrt;
  86. {$R *.DFM}
  87. procedure TFaxConversionForm.FormCreate(Sender: TObject);
  88. var
  89.   Ini: TIniFile;
  90. begin
  91.   Meter := TApdMeter.Create(Self);
  92.   Meter.Parent := Self;
  93.   Meter.Top := btnConvert.Top;
  94.   Meter.Left := GroupBox1.Left;
  95.   Meter.Width := btnConvert.Left - GroupBox1.Left - 8;
  96.   Meter.Height := btnConvert.Height;
  97.   Meter.Visible := True;
  98.   Cancelled := False;
  99.   Ini := TIniFile.Create(IniName);
  100.   try
  101.     LastInDir := Ini.ReadString('FaxConvert', 'LastInDir', ExtractFilePath(Application.ExeName));
  102.     LastOutDir := Ini.ReadString('FaxConvert', 'LastOutDir', ExtractFilePath(Application.ExeName));
  103.     cbxEnhTextEnabled.Checked := Ini.ReadBool('FaxConvert', 'EnhTextEnabled', True);
  104.     ApdFaxConverter1.EnhFont.Name := Ini.ReadString('FaxConvert', 'EnhFont.Name', Font.Name);
  105.     ApdFaxConverter1.EnhFont.Size := Ini.ReadInteger('FaxConvert', 'EnhFont.Size', Font.Size);
  106.     ApdFaxConverter1.LeftMargin := Ini.ReadInteger('FaxConvert', 'LeftMargin', 50);
  107.     ApdFaxConverter1.TopMargin := Ini.ReadInteger('FaxConvert', 'TopMargin', 0);
  108.     ApdFaxConverter1.LinesPerPage := Ini.ReadInteger('FaxConvert', 'LinesPerPage', 60);
  109.     ApdFaxConverter1.TabStop := Ini.ReadInteger('FaxConvert', 'TabStop', 4);
  110.     ApdFaxConverter1.Options := [];
  111.     if Ini.ReadBool('FaxConvert', 'Options.DoubleWidth', True) then
  112.       ApdFaxConverter1.Options := ApdFaxConverter1.Options + [coDoubleWidth];
  113.     if Ini.ReadBool('FaxConvert', 'Options.HalfHeight', False) then
  114.       ApdFaxConverter1.Options := ApdFaxConverter1.Options + [coHalfHeight];
  115.     if Ini.ReadBool('FaxConvert', 'Options.CenterImage', True) then
  116.       ApdFaxConverter1.Options := ApdFaxConverter1.Options + [coCenterImage];
  117.     if Ini.ReadBool('FaxConvert', 'Options.Yield', True) then
  118.       ApdFaxConverter1.Options := ApdFaxConverter1.Options + [coYield];
  119.     if Ini.ReadBool('FaxConvert', 'Options.YieldOften', False) then
  120.       ApdFaxConverter1.Options := ApdFaxConverter1.Options + [coYieldOften];
  121.     ApdFaxConverter1.Resolution := TFaxResolution(Ini.ReadInteger('FaxConvert', 'Resolution', Ord(frNormal)));
  122.     ApdFaxConverter1.Width := TFaxWidth(Ini.ReadInteger('FaxConvert', 'Width', Ord(fwNormal)));
  123.     lblFontName.Caption := ApdFaxConverter1.EnhFont.Name;
  124.     lblFontSize.Caption := 'Size: ' + IntToStr(ApdFaxConverter1.EnhFont.Size);
  125.     edtLeftMargin.Text := IntToStr(ApdFaxConverter1.LeftMargin);
  126.     edtTopMargin.Text := IntToStr(ApdFaxConverter1.TopMargin);
  127.     edtLinesPerPage.Text := IntToStr(ApdFaxConverter1.LinesPerPage);
  128.     edtTabStop.Text := IntToStr(ApdFaxConverter1.TabStop);
  129.     cbxCenterImage.Checked := coCenterImage in ApdFaxConverter1.Options;
  130.     cbxYield.Checked := coYield in ApdFaxConverter1.Options;
  131.     cbxYieldOften.Checked := coYieldOften in ApdFaxConverter1.Options;
  132.     rgpResolution.ItemIndex := Ord(ApdFaxConverter1.Resolution);
  133.     rgpWidth.ItemIndex := Ord(ApdFaxConverter1.Width);
  134.     btnEnhFont.Enabled := cbxEnhTextEnabled.Checked;
  135.   finally
  136.     Ini.Free;
  137.   end;
  138.   RadioGroup1.ItemIndex:=0;
  139. end;
  140. procedure TFaxConversionForm.btnConvertClick(Sender: TObject);
  141. var
  142.   Ext,s: String;
  143.   RotImage1:TRotImage;
  144.   i:integer;
  145.   h:integer;
  146. begin
  147.    Ext:=LowerCase(ExtractFileExt(edtFileName.text));
  148.   if btnConvert.Caption = '取消' then begin
  149.     Cancelled := True;
  150.     btnConvert.Caption := '转换';
  151.     Exit;
  152.   end else begin
  153.     Cancelled := False;
  154.     btnConvert.Caption := '取消';
  155.   end;
  156.   if (Ext='.bmp') or (Ext='.jpg') or (Ext='.jpeg')
  157.        or (Ext='.pcx') or (Ext='.dcx')
  158.        or (Ext='.tif')  then
  159.   begin
  160.     if (CheckBmp(image1,edtfileName.text)=2)or(Ext='.jpg')or(Ext='.jpeg') then
  161.         edtFileName.text:=ConvertToBmp(Image1,edtFileName.text);
  162.     if RadioGroup1.ItemIndex=1 then
  163.     begin
  164.      RotImage1:=TRotImage.Create(self);
  165.      RotImage1.Picture.LoadFromFile(edtFileName.text);
  166.      RotImage1.RotateBitmap(TRotationType(0));
  167.      Rotimage1.Picture.SaveToFile(edtFileName.text);
  168.     end;
  169.     Ext:=LowerCase(ExtractFileExt(edtFileName.text));
  170.   end else if (Ext='.txt') then
  171.   begin
  172.     if CheckBox1.Checked then
  173.     begin
  174.       RichEdit981.Font.Assign(FontDialog1.font);
  175.      // RichEdit981.Visible:=false;
  176.       RichEdit981.WordWrap:=true;
  177.       RichEdit981.Width:=Trunc(210*GetDeviceCaps(Canvas.Handle, LOGPIXELSX) * 25.4);
  178.       RichEdit981.Height:=Trunc(297*GetDeviceCaps(Canvas.Handle, LOGPIXELSX) * 25.4);
  179.       RichEdit982.WordWrap:=true;
  180.       RichEdit982.Width:=Trunc(210*GetDeviceCaps(Canvas.Handle, LOGPIXELSX) * 25.4);
  181.       RichEdit982.Height:=Trunc(297*GetDeviceCaps(Canvas.Handle, LOGPIXELSX) * 25.4);
  182.       Try
  183.         RichEdit981.Lines.LoadFromFile(edtFileName.text);
  184.         RichEdit982.lines:=RichEdit981.lines;
  185.       except
  186.       end;
  187.        h:=filecreate(edtFileName.text);
  188.       if h=-1 then exit;
  189.       For i:=1 to RichEdit982.lines.count do
  190.       begin
  191.         Application.ProcessMessages;
  192.         s:=RichEdit982.lines[i]+#$0d+#$0a;
  193.         FileWrite(h,s[1],length(s));
  194.         s:='';
  195.       end;
  196.       FileClose(h);
  197.     end;
  198.   end;
  199.   if Ext = '.txt' then
  200.   begin
  201.     if cbxEnhTextEnabled.Checked then
  202.       ApdFaxConverter1.InputDocumentType := idTextEx
  203.     else
  204.       ApdFaxConverter1.InputDocumentType := idText;
  205.     ApdFaxConverter1.DocumentFile:=edtFileName.text;
  206.   end
  207.   else if Ext = '.bmp' then
  208.   begin
  209.     ApdFaxConverter1.InputDocumentType := idBMP;
  210.     ApdFaxConverter1.DocumentFile := edtFileName.Text;
  211.   end
  212.   else if Ext='.fcp' then
  213.   begin
  214.      ConvertFCPToAPF(edtFileName.text, 0, 0, '', '', '', '', ApdFaxConverter1Status);
  215.   end
  216.   else if Ext = '.tif' then
  217.   begin
  218.     ApdFaxConverter1.InputDocumentType := idTIFF;
  219.     ApdFaxConverter1.DocumentFile := edtFileName.Text;
  220.   end
  221.   else if Ext = '.pcx' then
  222.   begin
  223.     ApdFaxConverter1.InputDocumentType := idPCX;
  224.     ApdFaxConverter1.DocumentFile := edtFileName.Text;
  225.   end
  226.   else if Ext = '.dcx' then
  227.   begin
  228.     ApdFaxConverter1.InputDocumentType := idDCX;
  229.     ApdFaxConverter1.DocumentFile := edtFileName.Text;
  230.   end
  231.   else  ApdFaxConverter1.InputDocumentType := idNone;
  232.   if ApdFaxConverter1.InputDocumentType = idNone then
  233.   begin
  234.      btnConvert.Caption := '转换';
  235.      Exit;
  236.   end;
  237.   ApdFaxConverter1.OutFileName := edtOutFileName.Text;
  238.   Try
  239.     ApdFaxConverter1.ConvertToFile;
  240.     MessageDlg('转换成功!',mtconfirmation,[mbok],0);
  241.   except
  242.   end;
  243.   btnConvert.Caption := '转换';
  244. end;
  245. procedure TFaxConversionForm.ApdFaxConverter1Status(F: TObject; Starting,
  246.   Ending: Boolean; PagesConverted, LinesConverted: Integer; BytesConverted,
  247.   BytesToConvert: Longint; var Abort: Boolean);
  248. begin
  249.   Abort := Cancelled;
  250.   if (BytesToConvert <> 0) then
  251.     Meter.Position := (BytesConverted * 100) div BytesToConvert;
  252. end;
  253. procedure TFaxConversionForm.btnEnhFontClick(Sender: TObject);
  254. begin
  255.   FontDialog1.Font := ApdFaxConverter1.EnhFont;
  256.   if FontDialog1.Execute then begin
  257.     ApdFaxConverter1.EnhFont := FontDialog1.Font;
  258.     lblFontName.Caption := ApdFaxConverter1.EnhFont.Name;
  259.     lblFontSize.Caption := IntToStr(ApdFaxConverter1.EnhFont.Size);
  260.   end;
  261. end;
  262. procedure TFaxConversionForm.FormClose(Sender: TObject;
  263.   var Action: TCloseAction);
  264. var
  265.   Ini: TIniFile;
  266. begin
  267.   Ini := TIniFile.Create(IniName);
  268.   try
  269.     Ini.WriteString('FaxConvert', 'LastInDir', LastInDir);
  270.     Ini.WriteString('FaxConvert', 'LastOutDir', LastOutDir);
  271.     Ini.WriteBool('FaxConvert', 'EnhTextEnabled', cbxEnhTextEnabled.Checked);
  272.     Ini.WriteString('FaxConvert', 'EnhFont.Name', ApdFaxConverter1.EnhFont.Name);
  273.     Ini.WriteInteger('FaxConvert', 'EnhFont.Size', ApdFaxConverter1.EnhFont.Size);
  274.     Ini.WriteInteger('FaxConvert', 'LeftMargin', ApdFaxConverter1.LeftMargin);
  275.     Ini.WriteInteger('FaxConvert', 'TopMargin', ApdFaxConverter1.TopMargin);
  276.     Ini.WriteInteger('FaxConvert', 'LinesPerPage', ApdFaxConverter1.LinesPerPage);
  277.     Ini.WriteInteger('FaxConvert', 'TabStop', ApdFaxConverter1.TabStop);
  278.     Ini.WriteBool('FaxConvert', 'Options.DoubleWidth', coDoubleWidth in ApdFaxConverter1.Options);
  279.     Ini.WriteBool('FaxConvert', 'Options.HalfHeight', coHalfHeight in ApdFaxConverter1.Options);
  280.     Ini.WriteBool('FaxConvert', 'Options.CenterImage', coCenterImage in ApdFaxConverter1.Options);
  281.     Ini.WriteBool('FaxConvert', 'Options.Yield', coYield in ApdFaxConverter1.Options);
  282.     Ini.WriteBool('FaxConvert', 'Options.YieldOften', coYieldOften in ApdFaxConverter1.Options);
  283.     Ini.WriteInteger('FaxConvert', 'Resolution', Ord(ApdFaxConverter1.Resolution));
  284.     Ini.WriteInteger('FaxConvert', 'Width', Ord(ApdFaxConverter1.Width));
  285.   finally
  286.     Ini.Free;
  287.   end;
  288. end;
  289. procedure TFaxConversionForm.cbxCenterImageClick(Sender: TObject);
  290. begin
  291.   if cbxCenterImage.Checked then
  292.     ApdFaxConverter1.Options := ApdFaxConverter1.Options + [coCenterImage]
  293.   else
  294.     ApdFaxConverter1.Options := ApdFaxConverter1.Options - [coCenterImage];
  295. end;
  296. procedure TFaxConversionForm.cbxYieldClick(Sender: TObject);
  297. begin
  298.   if not cbxYield.Checked then cbxYieldOften.Checked:=false;
  299.   if cbxYield.Checked then
  300.     ApdFaxConverter1.Options := ApdFaxConverter1.Options + [coYield]
  301.   else
  302.     ApdFaxConverter1.Options := ApdFaxConverter1.Options - [coYield];
  303. end;
  304. procedure TFaxConversionForm.cbxYieldOftenClick(Sender: TObject);
  305. begin
  306.   if cbxYieldOften.Checked then cbxYield.Checked:=true;
  307.   if cbxYieldOften.Checked then
  308.     ApdFaxConverter1.Options := ApdFaxConverter1.Options + [coYieldOften]
  309.   else
  310.     ApdFaxConverter1.Options := ApdFaxConverter1.Options - [coYieldOften];
  311. end;
  312. procedure TFaxConversionForm.rgpResolutionClick(Sender: TObject);
  313. begin
  314.   ApdFaxConverter1.Resolution := TFaxResolution(rgpResolution.ItemIndex);
  315. end;
  316. procedure TFaxConversionForm.rgpWidthClick(Sender: TObject);
  317. begin
  318.   ApdFaxConverter1.Width := TFaxWidth(rgpWidth.ItemIndex);
  319. end;
  320. procedure TFaxConversionForm.edtLeftMarginExit(Sender: TObject);
  321. begin
  322.   ApdFaxConverter1.LeftMargin := StrToInt(edtLeftMargin.Text);
  323. end;
  324. procedure TFaxConversionForm.edtTopMarginExit(Sender: TObject);
  325. begin
  326.   ApdFaxConverter1.TopMargin := StrToInt(edtTopMargin.Text);
  327. end;
  328. procedure TFaxConversionForm.edtLinesPerPageExit(Sender: TObject);
  329. begin
  330.   ApdFaxConverter1.LinesPerPage := StrToInt(edtLinesPerPage.Text);
  331. end;
  332. procedure TFaxConversionForm.edtTabStopExit(Sender: TObject);
  333. begin
  334.   ApdFaxConverter1.TabStop := StrToInt(edtTabStop.Text);
  335. end;
  336. procedure TFaxConversionForm.btnBrowseInFileClick(Sender: TObject);
  337. begin
  338.   OpenDialog1.Filter := '提供的类型(*.txt;*.tif;*.pcx;*.dcx;*.bmp;*.fcp;*.jpg;*.jpeg)|' +
  339.     '*.txt;*.tif;*.pcx;*.dcx;*.bmp;*.fcp;*.jpg;*.jpeg|文本文件(*.txt)|*.txt|TIFF 文件(*.tif)|' +
  340.     '*.tif|PCX 文件 (*.pcx)|*.pcx|DCX 文件 (*.dcx)|*.dcx|Bitmap 文件 (*.bmp)|'+
  341.     '*.bmp|(*.jpg)|*.jpg|(*.jpeg)|*.jpg|(*.fcp)|*.fcp|全部文件 (*.*)|*.*';
  342.   OpenDialog1.InitialDir :=ExtractFilePath(Application.ExeName);
  343.   OpenDialog1.Title := '浏览要转换的文件';
  344.   OpenDialog1.FileName := edtFileName.Text;
  345.   if OpenDialog1.Execute then begin
  346.     edtFileName.Text := OpenDialog1.FileName;
  347.     edtOutFileName.Text := ChangeFileExt(edtFileName.Text, '.apf');
  348.     btnConvert.Enabled := FileExists(edtFileName.Text);
  349.     LastInDir := ExtractFilePath(edtFileName.Text);
  350.   end;
  351. end;
  352. procedure TFaxConversionForm.Button2Click(Sender: TObject);
  353. begin
  354.   OpenDialog1.Filter := '传真文件 (*.apf)|*.apf|All files (*.*)|*.*';
  355.   OpenDialog1.InitialDir := LastOutDir;
  356.   OpenDialog1.Title := '输出文件';
  357.   OpenDialog1.FileName := edtOutFileName.Text;
  358.   if OpenDialog1.Execute then begin
  359.     edtOutFileName.Text := OpenDialog1.FileName;
  360.     LastOutDir := ExtractFilePath(edtOutFileName.Text);
  361.   end;
  362. end;
  363. procedure TFaxConversionForm.RadioGroup2Click(Sender: TObject);
  364. begin
  365.    if RadioGroup2.ItemIndex=0 then
  366.      ApdFaxConverter1.Options := ApdFaxConverter1.Options - [coDoubleWidth]-[coHalfHeight]
  367.    else if RadioGroup2.ItemIndex=1 then
  368.      ApdFaxConverter1.Options := ApdFaxConverter1.Options +[coDoubleWidth]
  369.    else if RadioGroup2.ItemIndex=2 then
  370.       ApdFaxConverter1.Options := ApdFaxConverter1.Options+[coHalfHeight]
  371. end;
  372. procedure TFaxConversionForm.edtFileNameExit(Sender: TObject);
  373. begin
  374.     edtOutFileName.Text := ChangeFileExt(edtFileName.Text, '.apf');
  375.     btnConvert.Enabled := FileExists(edtFileName.Text);
  376.     LastInDir := ExtractFilePath(edtFileName.Text);
  377. end;
  378. procedure TFaxConversionForm.btnOKClick(Sender: TObject);
  379. begin
  380.    close;
  381. end;
  382. end.