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

  1. { This sample application demonstrates the following features of the
  2.   TOLEContainer:
  3.  
  4.   - Toolbar negotiation
  5.   - Status bar hints while inplace editing
  6.   - Using the TOLEContainer's dialogs including InsertObject,
  7.     ObjectProperties and PasteSpecial.
  8.   - Using the TOLEContainer's constructors CreateLinkToFile,
  9.     CreateObjectFromFile.
  10.   - Menu merging during in-place activation
  11. }
  12. unit sdimain;
  13.  
  14. interface
  15.  
  16. uses
  17.   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  18.   ComCtrls, Buttons, ExtCtrls, Menus, OleCtnrs, StdCtrls;
  19.  
  20. type
  21.   TMainForm = class(TForm)
  22.     MainMenu1: TMainMenu;
  23.     File1: TMenuItem;
  24.     Exit1: TMenuItem;
  25.     Help1: TMenuItem;
  26.     About1: TMenuItem;
  27.     Toolbar: TPanel;
  28.     SpeedButton1: TSpeedButton;
  29.     LinkButton: TSpeedButton;
  30.     CopyButton: TSpeedButton;
  31.     CutButton: TSpeedButton;
  32.     PasteButton: TSpeedButton;
  33.     OpenButton: TSpeedButton;
  34.     OpenDialog1: TOpenDialog;
  35.     StatusPanel: TPanel;
  36.     StatusBar: TStatusBar;
  37.     Save1: TMenuItem;
  38.     SaveAs1: TMenuItem;
  39.     SaveDialog1: TSaveDialog;
  40.     Open1: TMenuItem;
  41.     N2: TMenuItem;
  42.     SaveButton: TSpeedButton;
  43.     Edit1: TMenuItem;
  44.     Object1: TMenuItem;
  45.     N4: TMenuItem;
  46.     PasteSpecial1: TMenuItem;
  47.     Paste1: TMenuItem;
  48.     Copy1: TMenuItem;
  49.     Cut1: TMenuItem;
  50.     New1: TMenuItem;
  51.     Panel1: TPanel;
  52.     OleContainer1: TOleContainer;
  53.     procedure Exit1Click(Sender: TObject);
  54.     procedure Copy1Click(Sender: TObject);
  55.     procedure Paste1Click(Sender: TObject);
  56.     procedure Object2Click(Sender: TObject);
  57.     procedure LinkButtonClick(Sender: TObject);
  58.     procedure About1Click(Sender: TObject);
  59.     procedure Save1Click(Sender: TObject);
  60.     procedure File1Click(Sender: TObject);
  61.     procedure Open1Click(Sender: TObject);
  62.     procedure CutButtonClick(Sender: TObject);
  63.     procedure New1Click(Sender: TObject);
  64.     procedure FormCreate(Sender: TObject);
  65.     procedure Object1Click(Sender: TObject);
  66.     procedure Cut1Click(Sender: TObject);
  67.     procedure PasteSpecial1Click(Sender: TObject);
  68.     procedure Edit1Click(Sender: TObject);
  69.   private
  70.     ObjectFileName: TFileName;
  71.     InsertCanceled: Boolean;
  72.     procedure ShowHint(Sender: TObject);
  73.   end;
  74.  
  75. var
  76.   MainForm: TMainForm;
  77.  
  78. implementation
  79.  
  80. uses about;
  81.  
  82. {$R *.DFM}
  83.  
  84. procedure TMainForm.ShowHint(Sender: TObject);
  85. begin
  86.   Statusbar.Panels[0].Text := Application.Hint;
  87. end;
  88.  
  89. procedure TMainForm.Exit1Click(Sender: TObject);
  90. begin
  91.   Close;
  92. end;
  93.  
  94. procedure TMainForm.Copy1Click(Sender: TObject);
  95. begin
  96.   OleContainer1.Copy;
  97.   PasteButton.Enabled := True;
  98. end;
  99.  
  100. procedure TMainForm.Paste1Click(Sender: TObject);
  101. begin
  102.   if (OleContainer1.State = osEmpty) or
  103.     (MessageDlg('Replace existing object?', mtConfirmation, mbOkCancel, 0) = mrOk) then
  104.   begin
  105.     OleContainer1.Paste;
  106.     CopyButton.Enabled := True;
  107.     CutButton.Enabled := True;
  108.   end;
  109. end;
  110.  
  111. procedure TMainForm.Object2Click(Sender: TObject);
  112. begin
  113.   if OleContainer1.State <> osEmpty then
  114.     OleContainer1.ObjectPropertiesDialog;
  115. end;
  116.  
  117. procedure TMainForm.LinkButtonClick(Sender: TObject);
  118. begin
  119.   if (OleContainer1.State = osEmpty) or
  120.     (MessageDlg('Replace existing object?', mtConfirmation, mbOkCancel, 0) = mrOk) then
  121.     with OpenDialog1 do
  122.       if OpenDialog1.Execute then
  123.       begin
  124.         OleContainer1.CreateLinkToFile(FileName, False);
  125.         ObjectFileName := FileName;
  126.         CutButton.Enabled := True;
  127.         CopyButton.Enabled := True;
  128.         PasteButton.Enabled := OleContainer1.CanPaste;
  129.       end;
  130. end;
  131.  
  132. procedure TMainForm.About1Click(Sender: TObject);
  133. begin
  134.   AboutBox := TAboutBox.Create(Self);
  135.   try
  136.     AboutBox.ShowModal;
  137.   finally
  138.     AboutBox.Free;
  139.   end;
  140. end;
  141.  
  142. procedure TMainForm.Save1Click(Sender: TObject);
  143. begin
  144.   with SaveDialog1 do
  145.   begin
  146.     SaveDialog1.FileName := ObjectFileName;
  147.     if (Length(FileName) = 0) or (Sender = SaveAs1) then
  148.     begin
  149.       if Execute then
  150.       begin
  151.         OleContainer1.SaveToFile(FileName);
  152.         ObjectFileName := FileName;
  153.       end
  154.     end
  155.     else
  156.       OleContainer1.SaveToFile(FileName);
  157.   end;
  158. end;
  159.  
  160. procedure TMainForm.File1Click(Sender: TObject);
  161. begin
  162.   with OleContainer1 do
  163.   begin
  164.     Save1.Enabled := Modified;
  165.     SaveAs1.Enabled := Modified;
  166.   end;
  167. end;
  168.  
  169. procedure TMainForm.Open1Click(Sender: TObject);
  170. begin
  171.   with OpenDialog1 do
  172.     if Execute then
  173.     begin
  174.       OleContainer1.CreateObjectFromFile(FileName, False);
  175.       ObjectFileName := FileName;
  176.       CutButton.Enabled := True;
  177.       CopyButton.Enabled := True;
  178.       PasteButton.Enabled := True;
  179.     end;
  180. end;
  181.  
  182. procedure TMainForm.CutButtonClick(Sender: TObject);
  183. begin
  184.   if OleContainer1.State <> osEmpty then
  185.     with OleContainer1 do
  186.     begin
  187.       Copy;
  188.       DestroyObject;
  189.       CopyButton.Enabled := False;
  190.       PasteButton.Enabled := OleContainer1.CanPaste;
  191.       ObjectFilename := '';
  192.     end;
  193. end;
  194.  
  195. procedure TMainForm.New1Click(Sender: TObject);
  196. begin
  197.   if (OleContainer1.State = osEmpty) or
  198.     (MessageDlg('Delete existing object?', mtConfirmation, mbOkCancel, 0) = mrOk) then
  199.     begin
  200.       InsertCanceled := false;
  201.       with OleContainer1 do
  202.       begin
  203.         DestroyObject;
  204.         Object1Click(Sender);
  205.         if not InsertCanceled then
  206.         begin
  207.         DoVerb(PrimaryVerb);
  208.         ObjectFileName := '';
  209.         end;
  210.       end
  211.     end;
  212. end;
  213.  
  214. procedure TMainForm.FormCreate(Sender: TObject);
  215. begin
  216.   ObjectFileName := '';
  217.   Application.OnHint := ShowHint;
  218. end;
  219.  
  220. procedure TMainForm.Object1Click(Sender: TObject);
  221. begin
  222.   if (OleContainer1.State = osEmpty) or
  223.     (MessageDlg('Delete current OLE object?', mtConfirmation, mbOkCancel, 0) = mrOk) then
  224.     if OleContainer1.InsertObjectDialog then
  225.     begin
  226.       CutButton.Enabled := True;
  227.       CopyButton.Enabled := True;
  228.       PasteButton.Enabled := OleContainer1.CanPaste;
  229.       with OleContainer1 do
  230.         DoVerb(PrimaryVerb);
  231.     end
  232.     else
  233.      InsertCanceled := true;
  234. end;
  235.  
  236. procedure TMainForm.Cut1Click(Sender: TObject);
  237. begin
  238.   OleContainer1.Copy;
  239.   OleContainer1.DestroyObject;
  240.   CutButton.Enabled := False;
  241.   CopyButton.Enabled := False;  
  242.   PasteButton.Enabled := OleContainer1.CanPaste;  
  243. end;
  244.  
  245. procedure TMainForm.PasteSpecial1Click(Sender: TObject);
  246. begin
  247.   if (OleContainer1.State = osEmpty) or
  248.     (MessageDlg('Delete current OLE object?', mtConfirmation, mbOkCancel, 0) = mrOk) then
  249.   begin
  250.     if OleContainer1.PasteSpecialDialog then
  251.     begin
  252.       CutButton.Enabled := True;
  253.       CopyButton.Enabled := True;
  254.       PasteButton.Enabled := OleContainer1.CanPaste;
  255.     end;
  256.   end;
  257. end;
  258.  
  259. procedure TMainForm.Edit1Click(Sender: TObject);
  260. begin
  261.   with OleContainer1 do
  262.   begin
  263.     Cut1.Enabled := State <> osEmpty;
  264.     Copy1.Enabled := State <> osEmpty;
  265.     Paste1.Enabled := CanPaste;
  266.     PasteSpecial1.Enabled := CanPaste;
  267.   end;
  268. end;
  269.  
  270. end.
  271.