BmpViewForm.pas
上传用户:fh681027
上传日期:2022-07-23
资源大小:1959k
文件大小:5k
源码类别:

Delphi控件源码

开发平台:

Delphi

  1. unit BmpViewForm;
  2. interface
  3. uses
  4.   Windows, Classes, SysUtils, Graphics, Forms, Controls, StdCtrls,
  5.   Tabs, Menus, Dialogs, ExtCtrls, Printers, ComCtrls;
  6. type
  7.   TFormBmpViewer = class(TForm)
  8.     OpenDialog1: TOpenDialog;
  9.     MainMenu1: TMainMenu;
  10.     File1: TMenuItem;
  11.     Open1: TMenuItem;
  12.     Print1: TMenuItem;
  13.     N1: TMenuItem;
  14.     Exit1: TMenuItem;
  15.     Edit1: TMenuItem;
  16.     Cut1: TMenuItem;
  17.     Copy1: TMenuItem;
  18.     Paste1: TMenuItem;
  19.     N2: TMenuItem;
  20.     Delete1: TMenuItem;
  21.     Help1: TMenuItem;
  22.     About1: TMenuItem;
  23.     TabControl1: TTabControl;
  24.     Image1: TImage;
  25.     procedure Open1Click(Sender: TObject);
  26.     procedure Exit1Click(Sender: TObject);
  27.     procedure About1Click(Sender: TObject);
  28.     procedure Print1Click(Sender: TObject);
  29.     procedure TabControl1Change(Sender: TObject);
  30.     procedure Edit1Click(Sender: TObject);
  31.     procedure Paste1Click(Sender: TObject);
  32.     procedure Copy1Click(Sender: TObject);
  33.     procedure Cut1Click(Sender: TObject);
  34.     procedure Delete1Click(Sender: TObject);
  35.     procedure File1Click(Sender: TObject);
  36.     procedure TabControl1DrawTab(Control: TCustomTabControl;
  37.       TabIndex: Integer; const Rect: TRect; Active: Boolean);
  38.     procedure FormCreate(Sender: TObject);
  39.     procedure FormDestroy(Sender: TObject);
  40.   private
  41.     TabBmp: TBitmap;
  42.   public
  43.     { Public declarations }
  44.   end;
  45. var
  46.   FormBmpViewer: TFormBmpViewer;
  47. implementation
  48. {$R *.DFM}
  49. uses
  50.   Clipbrd, BmpPreview;
  51. const
  52.   BmpSide = 20;
  53. procedure TFormBmpViewer.Open1Click(Sender: TObject);
  54. begin
  55.   if OpenDialog1.Execute then
  56.   begin
  57.     TabControl1.Tabs.AddStrings (OpenDialog1.Files);
  58.     TabControl1.TabIndex := 0;
  59.     TabControl1Change (TabControl1);
  60.   end;
  61. end;
  62. procedure TFormBmpViewer.Exit1Click(Sender: TObject);
  63. begin
  64.   Close;
  65. end;
  66. procedure TFormBmpViewer.About1Click(Sender: TObject);
  67. begin
  68.   MessageDlg ('Bitmap Viewer with Tabs, from "Mastering Delphi"',
  69.     mtInformation, [mbOk], 0);
  70. end;
  71. procedure TFormBmpViewer.Print1Click(Sender: TObject);
  72. begin
  73.   {double checks if an image is selected}
  74.   if Image1.Picture.Graphic <> nil then
  75.   begin
  76.     {set a default scale, and start the preview}
  77.     PreviewForm.Scale := 2;
  78.     PreviewForm.SetPage;
  79.     PreviewForm.DrawPreview;
  80.     PreviewForm.ShowModal;
  81.   end;
  82. end;
  83. procedure TFormBmpViewer.TabControl1Change(Sender: TObject);
  84. var
  85.   TabText: string;
  86. begin
  87.   Image1.Visible := True;
  88.   TabText := TabControl1.Tabs [TabControl1.TabIndex];
  89.   if TabText <> 'Clipboard' then
  90.     // load the file indicated in the tab
  91.     Image1.Picture.LoadFromFile (TabText)
  92.   else
  93.     {if the tab is 'Clipboard' and a bitmap
  94.     is available in the clipboard}
  95.     if Clipboard.HasFormat (cf_Bitmap) then
  96.       Image1.Picture.Assign (Clipboard)
  97.     else
  98.     begin
  99.       // else remove the clipboard tab
  100.       TabControl1.Tabs.Delete (TabControl1.TabIndex);
  101.       if TabControl1.Tabs.Count = 0 then
  102.         Image1.Visible := False;
  103.     end;
  104. end;
  105. procedure TFormBmpViewer.Edit1Click(Sender: TObject);
  106. begin
  107.   Paste1.Enabled := Clipboard.HasFormat (cf_Bitmap);
  108.   if TabControl1.Tabs.Count > 0 then
  109.   begin
  110.     Cut1.Enabled := True;
  111.     Copy1.Enabled := True;
  112.     Delete1.Enabled := True;
  113.   end
  114.   else
  115.   begin
  116.     Cut1.Enabled := False;
  117.     Copy1.Enabled := False;
  118.     Delete1.Enabled := False;
  119.   end;
  120. end;
  121. procedure TFormBmpViewer.Paste1Click(Sender: TObject);
  122. var
  123.   TabNum: Integer;
  124. begin
  125.   // try to locate the page
  126.   TabNum := TabControl1.Tabs.IndexOf ('Clipboard');
  127.   if TabNum < 0 then
  128.     // create a new page for the clipboard
  129.     TabNum := TabControl1.Tabs.Add ('Clipboard');
  130.   // go to the clipboard page and force repaint
  131.   TabControl1.TabIndex := TabNum;
  132.   TabControl1Change (Self);
  133. end;
  134. procedure TFormBmpViewer.Copy1Click(Sender: TObject);
  135. begin
  136.   Clipboard.Assign (Image1.Picture.Graphic);
  137. end;
  138. procedure TFormBmpViewer.Cut1Click(Sender: TObject);
  139. begin
  140.   Copy1Click (Self);
  141.   Delete1Click (Self);
  142. end;
  143. procedure TFormBmpViewer.Delete1Click(Sender: TObject);
  144. begin
  145.   with TabControl1 do
  146.   begin
  147.     if TabIndex >= 0 then
  148.       Tabs.Delete (TabIndex);
  149.     if Tabs.Count = 0 then
  150.       Image1.Visible := False
  151.     else
  152.       TabControl1Change (Self);
  153.   end;
  154. end;
  155. procedure TFormBmpViewer.File1Click(Sender: TObject);
  156. begin
  157.   Print1.Enabled := TabControl1.Tabs.Count > 0;
  158. end;
  159. procedure TFormBmpViewer.TabControl1DrawTab(Control: TCustomTabControl;
  160.   TabIndex: Integer; const Rect: TRect; Active: Boolean);
  161. var
  162.  TabText: string;
  163.  OutRect: TRect;
  164. begin
  165.   TabText := TabControl1.Tabs [TabIndex];
  166.   OutRect := Rect;
  167.   InflateRect (OutRect, -3, -3);
  168.   OutRect.Left := OutRect.Left + BmpSide + 3;
  169.   DrawText (Control.Canvas.Handle,
  170.     PChar (ExtractFileName (TabText)),
  171.     Length (ExtractFileName (TabText)),
  172.     OutRect, dt_Left or dt_SingleLine or dt_VCenter);
  173.   if TabText = 'Clipboard' then
  174.     if Clipboard.HasFormat (cf_Bitmap) then
  175.       TabBmp.Assign (Clipboard)
  176.     else
  177.       TabBmp.FreeImage
  178.   else
  179.     TabBmp.LoadFromFile (TabText);
  180.   OutRect.Left := OutRect.Left - BmpSide - 3;
  181.   OutRect.Right := OutRect.Left + BmpSide;
  182.   Control.Canvas.StretchDraw (OutRect, TabBmp);
  183. end;
  184. procedure TFormBmpViewer.FormCreate(Sender: TObject);
  185. begin
  186.   TabControl1.TabHeight := BmpSide + 6;
  187.   TabBmp := TBitmap.Create;
  188. end;
  189. procedure TFormBmpViewer.FormDestroy(Sender: TObject);
  190. begin
  191.   TabBmp.Free;
  192. end;
  193. end.