home *** CD-ROM | disk | FTP | other *** search
/ PC World Plus! (NZ) 2001 June / HDC50.iso / Runimage / Delphi50 / Demos / Activex / Olectnrs / MDICHILD.PAS < prev    next >
Pascal/Delphi Source File  |  1999-08-11  |  7KB  |  243 lines

  1. unit mdichild;
  2.  
  3. interface
  4.  
  5. uses
  6.   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  7.   OleCtnrs, Menus, ExtCtrls;
  8.  
  9. type
  10.   TMDIChildForm = class(TForm)
  11.     Cut1: TMenuItem;
  12.     Copy1: TMenuItem;
  13.     Paste1: TMenuItem;
  14.     PasteSpecial1: TMenuItem;
  15.     LocalMenu: TPopupMenu;
  16.     InsertObject1: TMenuItem;
  17.     CopyObject1: TMenuItem;
  18.     DeleteObject1: TMenuItem;
  19.     Properties1: TMenuItem;
  20.     Panel1: TPanel;
  21.     OleContainer1: TOleContainer;
  22.     MainMenu1: TMainMenu;
  23.     Insert1: TMenuItem;
  24.     Object2: TMenuItem;
  25.     CLear1: TMenuItem;
  26.     procedure FormClose(Sender: TObject; var Action: TCloseAction);
  27.     procedure LocalMenuPopup(Sender: TObject);
  28.     procedure InsertObject1Click(Sender: TObject);
  29.     procedure CopyObject1Click(Sender: TObject);
  30.     procedure DeleteObject1Click(Sender: TObject);
  31.     procedure Properties1Click(Sender: TObject);
  32.     procedure Cut1Click(Sender: TObject);
  33.     procedure Copy1Click(Sender: TObject);
  34.     procedure Paste1Click(Sender: TObject);
  35.     procedure PasteSpecial1Click(Sender: TObject);
  36.     procedure FormCreate(Sender: TObject);
  37.     procedure Edit1Click(Sender: TObject);
  38.     procedure OleContainer1Activate(Sender: TObject);
  39.     procedure FormActivate(Sender: TObject);
  40.     procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
  41.   private
  42.     FFileName: TFileName;
  43.     FSaved: Boolean;
  44.     procedure VerbClick(Sender: TObject);
  45.   public
  46.     procedure CreateFromFile(FileName: TFileName; Linked: Boolean);
  47.     procedure SaveFile(FileName: TFileName);
  48.     property FileName: TFileName read FFileName;
  49.   end;
  50.  
  51. var
  52.   MDIChildForm: TMDIChildForm;
  53.  
  54. implementation
  55.  
  56. uses mdimain;
  57.  
  58. {$R *.DFM}
  59.  
  60. procedure TMDIChildForm.SaveFile(FileName: TFileName);
  61. begin
  62.   OleContainer1.SaveAsDocument(FileName);
  63.   FFileName := FileName;
  64.   Caption := FFileName;
  65.   OleContainer1.Modified := False;
  66. end;
  67.  
  68. procedure TMDIChildForm.CreateFromFile(FileName: TFileName; Linked: Boolean);
  69. begin
  70.   if Linked then
  71.     OleContainer1.CreateLinkToFile(FileName, False)
  72.   else
  73.     OleContainer1.CreateObjectFromFile(FileName, False);
  74.   Caption := FileName;
  75.   FFileName := FileName;
  76. end;
  77.  
  78. procedure TMDIChildForm.VerbClick(Sender: TObject);
  79. begin
  80.   with Sender as TMenuItem do
  81.     OleContainer1.DoVerb(OleContainer1.ObjectVerbs.IndexOf(Caption));
  82. end;
  83.  
  84. procedure TMDIChildForm.FormClose(Sender: TObject; var Action: TCloseAction);
  85. begin
  86.   Action := caFree;
  87.   with MainForm do
  88.   begin
  89.     CutButton.Enabled := False;
  90.     CopyButton.Enabled := False;
  91.     PasteButton.Enabled := False;
  92.     SaveButton.Enabled := False;
  93.   end;
  94. end;
  95.  
  96. procedure TMDIChildForm.LocalMenuPopup(Sender: TObject);
  97. var
  98.   i: integer;
  99. begin
  100.   with OleContainer1 do
  101.   begin
  102.     CopyObject1.Enabled := State <> osEmpty;
  103.     DeleteObject1.Enabled := State <> osEmpty;
  104.     Properties1.Enabled := State <> osEmpty;
  105.     if LocalMenu.Tag > 0 then exit;
  106.     if (State <> osEmpty) and (ObjectVerbs.Count > 0) then
  107.     begin
  108.       LocalMenu.Items.Insert(0, NewLine);
  109.       for i := 0 to ObjectVerbs.Count - 1 do
  110.         LocalMenu.Items.Insert(i, NewItem(ObjectVerbs[i], 0, false, true, VerbClick, 0, ''));
  111.       LocalMenu.Tag := 1;
  112.     end;
  113.   end;
  114. end;
  115.  
  116. procedure TMDIChildForm.InsertObject1Click(Sender: TObject);
  117. begin
  118.   if (OleContainer1.State = osEmpty) or
  119.     (MessageDlg('Delete current OLE object?', mtConfirmation, mbOkCancel, 0) = mrOk) then
  120.     if OleContainer1.InsertObjectDialog then
  121.     begin
  122.       MainForm.CutButton.Enabled := True;
  123.       MainForm.CopyButton.Enabled := True;
  124.       MainForm.SaveButton.Enabled := OleContainer1.Modified;
  125.     end;
  126. end;
  127.  
  128. procedure TMDIChildForm.CopyObject1Click(Sender: TObject);
  129. begin
  130.   OleContainer1.Copy;
  131.   MainForm.PasteButton.Enabled := True;
  132. end;
  133.  
  134. procedure TMDIChildForm.DeleteObject1Click(Sender: TObject);
  135. begin
  136.   if (OleContainer1.State = osEmpty) or
  137.     (MessageDlg('Delete current OLE object?', mtConfirmation, mbOkCancel, 0) = mrOk) then
  138.   begin
  139.     OleContainer1.DestroyObject;
  140.     LocalMenu.Tag := 0;
  141.     while LocalMenu.Items.Count <> 4 do
  142.       LocalMenu.Items[0].Free;
  143.   end;
  144.   MainForm.SaveButton.Enabled := OleContainer1.State <> osEmpty;  
  145. end;
  146.  
  147. procedure TMDIChildForm.Properties1Click(Sender: TObject);
  148. begin
  149.   OleContainer1.ObjectPropertiesDialog;
  150. end;
  151.  
  152. procedure TMDIChildForm.Cut1Click(Sender: TObject);
  153. begin
  154.   OleContainer1.Copy;
  155.   OleContainer1.DestroyObject;
  156.   MainForm.CutButton.Enabled := False;
  157.   MainForm.CopyButton.Enabled := False;
  158.   MainForm.PasteButton.Enabled := True;
  159.   FFileName := '';
  160. end;
  161.  
  162. procedure TMDIChildForm.Copy1Click(Sender: TObject);
  163. begin
  164.   OleContainer1.Copy;
  165.   MainForm.PasteButton.Enabled := True;
  166. end;
  167.  
  168. procedure TMDIChildForm.Paste1Click(Sender: TObject);
  169. begin
  170.   if (OleContainer1.State = osEmpty) or
  171.     (MessageDlg('Delete current OLE object?', mtConfirmation, mbOkCancel, 0) = mrOk) then
  172.     OleContainer1.Paste;
  173.   MainForm.SaveButton.Enabled := OleContainer1.Modified;
  174. end;
  175.  
  176. procedure TMDIChildForm.PasteSpecial1Click(Sender: TObject);
  177. begin
  178.   if (OleContainer1.State = osEmpty) or
  179.     (MessageDlg('Delete current OLE object?', mtConfirmation, mbOkCancel, 0) = mrOk) then
  180.   begin
  181.     if OleContainer1.PasteSpecialDialog then
  182.     with MainForm do
  183.     begin
  184.       CutButton.Enabled := True;
  185.       CopyButton.Enabled := True;
  186.       PasteButton.Enabled := OleContainer1.CanPaste;
  187.     end;
  188.   end;
  189. end;
  190.  
  191. procedure TMDIChildForm.FormCreate(Sender: TObject);
  192. begin
  193.   FFileName := '';
  194.   FSaved := False;
  195. end;
  196.  
  197. procedure TMDIChildForm.Edit1Click(Sender: TObject);
  198. begin
  199.   with OleContainer1 do
  200.   begin
  201.     Cut1.Enabled := State <> osEmpty;
  202.     Copy1.Enabled := State <> osEmpty;
  203.     Paste1.Enabled := CanPaste;
  204.     PasteSpecial1.Enabled := CanPaste;
  205.     Object2.Enabled := State <> osEmpty;
  206.     Clear1.Enabled := State <> osEmpty;
  207.   end;
  208. end;
  209.  
  210. procedure TMDIChildForm.OleContainer1Activate(Sender: TObject);
  211. begin
  212.   OleContainer1.Modified := True;
  213. end;
  214.  
  215. procedure TMDIChildForm.FormActivate(Sender: TObject);
  216. begin
  217.   with MainForm, OleContainer1 do
  218.   begin
  219.     CopyButton.Enabled := State <> osEmpty;
  220.     CutButton.Enabled := State <> osEmpty;
  221.     PasteButton.Enabled := CanPaste;
  222.     SaveButton.Enabled := Modified;
  223.   end;
  224. end;
  225.  
  226. procedure TMDIChildForm.FormCloseQuery(Sender: TObject;
  227.   var CanClose: Boolean);
  228. begin
  229.   CanClose := True;
  230.   if OleContainer1.Modified then
  231.     case MessageDlg('Save changes to object?', mtConfirmation, mbYesNoCancel, 0) of
  232.       mrYes:
  233.         begin
  234.           MainForm.Save1Click(Sender);
  235.           if OleContainer1.Modified then
  236.             CanClose := False;
  237.         end;
  238.       mrCancel: CanClose := False;
  239.     end;
  240. end;
  241.  
  242. end.
  243.