IMAGEWIN.PAS
上传用户:yuandong
上传日期:2022-08-08
资源大小:954k
文件大小:8k
源码类别:

Delphi控件源码

开发平台:

C++ Builder

  1. unit ImageWin;
  2. interface
  3. uses Windows, Classes, Graphics, Forms, Controls,
  4.   FileCtrl, StdCtrls, ExtCtrls, Buttons, ComCtrls, Dialogs, Printers;
  5. type
  6.   TImageForm = class(TForm)
  7.     PrinterSetupDialog1: TPrinterSetupDialog;
  8.     PrintDialog1: TPrintDialog;
  9.     m_butClose: TButton;
  10.     m_butPrinterSetup: TButton;
  11.     m_butPrint: TButton;
  12.     GroupBox1: TGroupBox;
  13.     LoadButton: TButton;
  14.     m_butFore: TBitBtn;
  15.     m_butStart: TBitBtn;
  16.     m_labelFileName: TLabel;
  17.     m_ComboBoxZoom: TComboBox;
  18.     Label1: TLabel;
  19.     Button1: TButton;
  20.     GroupBox2: TGroupBox;
  21.     m_butRew: TBitBtn;
  22.     procedure m_butPrinterSetupClick(Sender: TObject);
  23.     procedure m_butPrintClick(Sender: TObject);
  24.     procedure m_butCloseClick(Sender: TObject);
  25.     procedure LoadButtonClick(Sender: TObject);
  26.     procedure ViewPic(strPicFile : string);
  27.     procedure FormShow(Sender: TObject);
  28.     procedure m_butStartClick(Sender: TObject);
  29.     procedure FormCreate(Sender: TObject);
  30.     procedure m_butForeClick(Sender: TObject);
  31.     procedure m_butRewClick(Sender: TObject);
  32.     procedure InitFileCounter(n : integer);
  33.     procedure m_ComboBoxZoomClick(Sender: TObject);
  34.     procedure m_ComboBoxZoomKeyPress(Sender: TObject; var Key: Char);
  35.     procedure Zoom;
  36.     procedure Button1Click(Sender: TObject);
  37.   public
  38.     strTempDir : string;
  39.     lpszTempDir : PChar;
  40.     strTempFirstFileName : string;
  41.     nMetaWidth, nMetaHeight : integer;
  42.   private
  43.     FormCaption: string;
  44.     nFileCounter : integer;
  45.     strFileCounter : string;
  46.   end;
  47. var
  48.   ImageForm: TImageForm;
  49. implementation
  50. uses ViewWin, SysUtils, LoadWin, about;
  51. {$R *.DFM}
  52. procedure TImageForm.m_butPrinterSetupClick(Sender: TObject);
  53. begin
  54.   PrinterSetupDialog1.Execute;
  55. end;
  56. procedure TImageForm.m_butPrintClick(Sender: TObject);
  57. var
  58.   rRec : TRect;
  59.   strTmpFile : string;
  60.   SearchRes : TSearchRec; // search structure
  61.   i, nMax, nTemp, nFound : integer;
  62.   hmf : HMETAFILE;
  63. begin
  64.   rRec.Left := 0;
  65.   rRec.Top := 0;
  66.   rRec.Bottom := Printer.PageHeight;
  67.   rRec.Right := Printer.PageWidth;
  68.   // search min and max values for printing (0..1.EMF .. 0..n.EMF)
  69.   PrintDialog1.MinPage := 1;
  70.   nMax := 1;
  71.   nFound := FindFirst(strTempDir + '*.EMF', faAnyFile, SearchRes);
  72.   while nFound = 0 do begin
  73.     nTemp := StrToInt(Copy(ExtractFileName(SearchRes.Name),1,Pos('.',ExtractFileName(SearchRes.Name))-1));
  74.     if (nMax<nTemp) then nMax := nTemp;
  75.     nFound := FindNext(SearchRes);
  76.   end;
  77.   FindClose(SearchRes);
  78.   PrintDialog1.MaxPage := nMax;
  79.   if (PrintDialog1.Execute) then begin
  80.     try
  81.       if (PrintDialog1.PrintRange = prAllPages) then begin
  82.         PrintDialog1.FromPage := 0;
  83.         PrintDialog1.ToPage := nMax;
  84.       end;
  85.       for i:=PrintDialog1.FromPage to PrintDialog1.ToPage do begin
  86.         strTmpFile := IntToStr(i);
  87.         while (Length(strTmpFile)<8) do
  88.           insert('0', strTmpFile, 1);
  89.         // load pic
  90.         strTmpFile := strTempDir + '' + strTmpFile + '.EMF';
  91.         if (FileExists(strTmpFile)) then begin
  92.           hmf := GetEnhMetaFile(PChar(strTmpFile));
  93.           // print pic
  94.           Printer.BeginDoc;
  95.           PlayEnhMetaFile(Printer.Handle, hmf, rRec);
  96.           Printer.EndDoc;
  97.           DeleteEnhMetaFile(hmf);
  98.         end;
  99.       end;
  100.     except
  101.       on Exception do begin { just in case an error happens... }
  102.         Printer.Abort;
  103.         Printer.EndDoc;
  104.         Raise;
  105.       end;
  106.     end;
  107.   end;
  108. end;
  109. procedure TImageForm.m_butCloseClick(Sender: TObject);
  110. begin
  111.   Close;
  112. end;
  113. procedure TImageForm.LoadButtonClick(Sender: TObject);
  114. begin
  115.   LoadForm.Show;
  116. end;
  117. procedure TImageForm.ViewPic(strPicFile : string);
  118. begin
  119.   if (FileExists(strPicFile)) then begin  // this is the name of a file that exists
  120.     m_labelFileName.Caption := Copy(ExtractFileName(strPicFile), 1, Pos('.', ExtractFileName(strPicFile))-1);
  121.     m_labelFileName.Refresh;
  122.     ViewForm.Image1.Picture.LoadFromFile(strPicFile);
  123.     ViewForm.Caption := FormCaption + ExtractFilename(strPicFile);
  124.     ViewForm.HorzScrollBar.Range := ViewForm.Image1.Picture.Width;
  125.     ViewForm.VertScrollBar.Range := ViewForm.Image1.Picture.Height;
  126.     ViewForm.ClientHeight := ViewForm.Image1.Picture.Height;
  127.     ViewForm.ClientWidth := ViewForm.Image1.Picture.Width;
  128.     nMetaWidth := ViewForm.Image1.Picture.Metafile.Width;
  129.     nMetaHeight := ViewForm.Image1.Picture.Metafile.Height;
  130.     ViewForm.Show;
  131.   end;
  132. end;
  133. procedure TImageForm.FormShow(Sender: TObject);
  134. var strParam : string;
  135. begin
  136.   GetMem(lpszTempDir, 255);
  137.   GetEnvironmentVariable('temp', lpszTempDir, 255);
  138.   strTempDir := string(lpszTempDir);
  139.   LoadForm.strTempDir := strTempDir;
  140.   FreeMem(lpszTempDir, 255);
  141.   strTempFirstFileName := strTempDir + '' + strFileCounter + '.EMF';
  142.   if (ParamCount <> 0) then begin
  143.     strParam := ParamStr(1);
  144.     if (FileExists(ParamStr(1))) then begin
  145.       // parameter is a valid filename
  146.       strTempFirstFileName := strParam;
  147.       strFileCounter := Copy(ExtractFileName(strParam), 1, Pos('.', ExtractFileName(strParam))-1);
  148.       nFileCounter := StrToInt(strFileCounter);
  149.     end else if (DirectoryExists(strParam)) then begin
  150.       // parameter is a valid directory name -> load 1st file of it
  151.       strTempDir := strParam;
  152.       LoadForm.strTempDir := strTempDir;
  153.       strTempFirstFileName := strTempDir + '0000001.EMF';
  154.     end;
  155.   end;
  156.   if (FileExists(strTempFirstFileName)) then ViewPic(strTempFirstFileName);
  157. end;
  158. procedure TImageForm.m_butStartClick(Sender: TObject);
  159. begin
  160.   nFileCounter := 0;
  161.   InitFileCounter(nFileCounter);
  162.   ViewPic(strTempFirstFileName);
  163.   if (m_ComboBoxZoom.Text <> '100') then Zoom;
  164. end;
  165. procedure TImageForm.InitFileCounter(n : integer);
  166. begin
  167.   nFileCounter := n;
  168.   strFileCounter := IntToStr(nFileCounter);
  169.   while (Length(strFileCounter)<8) do
  170.     insert('0', strFileCounter, 1);
  171. end;
  172. procedure TImageForm.FormCreate(Sender: TObject);
  173. begin
  174.   InitFileCounter(1);
  175. end;
  176. procedure TImageForm.m_butForeClick(Sender: TObject);
  177. var
  178.   strTmpFile,
  179.   strTmpFilCnt : string;
  180. begin
  181.   strTmpFilCnt := strFileCounter;
  182.   Inc(nFileCounter);
  183.   InitFileCounter(nFileCounter);
  184.   strTmpFile := strTempDir + '' + strFileCounter + '.EMF';
  185.   if (FileExists(strTmpFile)) then begin
  186.     ViewPic(strTmpFile);
  187.     if (m_ComboBoxZoom.Text <> '100') then Zoom;
  188.   end else begin
  189.     Dec(nFileCounter);
  190.     strFileCounter := strTmpFilCnt;
  191.   end;
  192. end;
  193. procedure TImageForm.m_butRewClick(Sender: TObject);
  194. var
  195.   strTmpFile,
  196.   strTmpFilCnt : string;
  197. begin
  198.   strTmpFilCnt := strFileCounter;
  199.   if (nFileCounter-1) >= 0 then begin
  200.     Dec(nFileCounter);
  201.     InitFileCounter(nFileCounter);
  202.     strTmpFile := strTempDir + '' + strFileCounter + '.EMF';
  203.     if (FileExists(strTmpFile)) then begin
  204.       ViewPic(strTmpFile);
  205.       if (m_ComboBoxZoom.Text <> '100') then Zoom;
  206.     end else begin
  207.       Inc(nFileCounter);
  208.       strFileCounter := strTmpFilCnt;
  209.     end;
  210.   end;
  211. end;
  212. procedure TImageForm.Zoom;
  213. begin
  214.   ViewForm.Image1.Picture.Metafile.Height := (nMetaHeight div 100) * StrToInt(m_ComboBoxZoom.Text);
  215.   ViewForm.Image1.Picture.Metafile.Width := (nMetaWidth div 100) * StrToint(m_ComboBoxZoom.Text);
  216.   ViewForm.HorzScrollBar.Range := ViewForm.Image1.Picture.Width;
  217.   ViewForm.VertScrollBar.Range := ViewForm.Image1.Picture.Height;
  218.   ViewForm.ClientHeight := ViewForm.Image1.Picture.Height;
  219.   ViewForm.ClientWidth := ViewForm.Image1.Picture.Width;
  220.   ViewForm.Repaint;
  221. end;
  222. procedure TImageForm.m_ComboBoxZoomClick(Sender: TObject);
  223. begin
  224.   Zoom;
  225. end;
  226. procedure TImageForm.m_ComboBoxZoomKeyPress(Sender: TObject;
  227.   var Key: Char);
  228. begin
  229.   if Key = #13 then Zoom;
  230. end;
  231. procedure TImageForm.Button1Click(Sender: TObject);
  232. begin
  233.   AboutBox.ShowModal;
  234. end;
  235. end.