home *** CD-ROM | disk | FTP | other *** search
/ PC World Plus! (NZ) 2001 June / HDC50.iso / Runimage / Delphi50 / Demos / Activex / Olectnrs / MDIMAIN.PAS < prev    next >
Pascal/Delphi Source File  |  1999-08-11  |  7KB  |  272 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.   - Local popup menu with OLE verbs and standard OLE functions
  7.     (See the popup menu in MDICHILD.PAS)
  8.   - Using the TOLEContainer's dialogs including InsertObject,
  9.     ObjectProperties and PasteSpecial.
  10.   - Using the TOLEContainer's constructors CreateLinkToFile,
  11.     CreateObjectFromFile.
  12.   - Menu merging during in-place activation
  13.   - Using OLE object verbs.
  14. }
  15. unit mdimain;
  16.  
  17. interface
  18.  
  19. uses
  20.   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  21.   ComCtrls, Buttons, ExtCtrls, Menus, OleCtnrs;
  22.  
  23. type
  24.   TMainForm = class(TForm)
  25.     MainMenu1: TMainMenu;
  26.     File1: TMenuItem;
  27.     Exit1: TMenuItem;
  28.     Window2: TMenuItem;
  29.     Tile1: TMenuItem;
  30.     Cascade1: TMenuItem;
  31.     Help1: TMenuItem;
  32.     About1: TMenuItem;
  33.     Toolbar: TPanel;
  34.     SpeedButton1: TSpeedButton;
  35.     New1: TMenuItem;
  36.     N1: TMenuItem;
  37.     TileHorizontally1: TMenuItem;
  38.     LinkButton: TSpeedButton;
  39.     CopyButton: TSpeedButton;
  40.     CutButton: TSpeedButton;
  41.     PasteButton: TSpeedButton;
  42.     OpenButton: TSpeedButton;
  43.     OpenDialog1: TOpenDialog;
  44.     StatusPanel: TPanel;
  45.     StatusBar: TStatusBar;
  46.     Save1: TMenuItem;
  47.     SaveAs1: TMenuItem;
  48.     Close2: TMenuItem;
  49.     CloseAll1: TMenuItem;
  50.     SaveDialog1: TSaveDialog;
  51.     Open1: TMenuItem;
  52.     N2: TMenuItem;
  53.     ArrangeIcons1: TMenuItem;
  54.     NewButton: TSpeedButton;
  55.     SaveButton: TSpeedButton;
  56.     procedure New1Click(Sender: TObject);
  57.     procedure Exit1Click(Sender: TObject);
  58.     procedure Tile1Click(Sender: TObject);
  59.     procedure TileHorizontally1Click(Sender: TObject);
  60.     procedure Cascade1Click(Sender: TObject);
  61.     procedure Close1Click(Sender: TObject);
  62.     procedure Copy1Click(Sender: TObject);
  63.     procedure Paste1Click(Sender: TObject);
  64.     procedure Object2Click(Sender: TObject);
  65.     procedure LinkButtonClick(Sender: TObject);
  66.     procedure About1Click(Sender: TObject);
  67.     procedure Save1Click(Sender: TObject);
  68.     procedure File1Click(Sender: TObject);
  69.     procedure Window2Click(Sender: TObject);
  70.     procedure Open1Click(Sender: TObject);
  71.     procedure CutButtonClick(Sender: TObject);
  72.     procedure ArrangeIcons1Click(Sender: TObject);
  73.     procedure CloseAll1Click(Sender: TObject);
  74.     procedure FormCreate(Sender: TObject);
  75.   private
  76.     { Private declarations }
  77.     procedure ShowHint(Sender: TObject);    
  78.   public
  79.     { Public declarations }
  80.   end;
  81.  
  82. var
  83.   MainForm: TMainForm;
  84.  
  85. implementation
  86.  
  87. uses MDIChild, about;
  88.  
  89. {$R *.DFM}
  90.  
  91. procedure TMainForm.ShowHint(Sender: TObject);
  92. begin
  93.   Statusbar.Panels[0].Text := Application.Hint;
  94. end;
  95.  
  96. procedure TMainForm.New1Click(Sender: TObject);
  97. begin
  98.   MDIChildForm := TMDIChildForm.Create(Self);
  99.   with MDIChildForm do
  100.   begin
  101.     InsertObject1Click(Sender);
  102.     with OleContainer1 do
  103.       if NewInserted then
  104.         DoVerb(PrimaryVerb);
  105.   end;
  106. end;
  107.  
  108. procedure TMainForm.Exit1Click(Sender: TObject);
  109. begin
  110.   Close;
  111. end;
  112.  
  113. procedure TMainForm.Tile1Click(Sender: TObject);
  114. begin
  115.   TileMode := tbVertical;
  116.   Tile;
  117. end;
  118.  
  119. procedure TMainForm.TileHorizontally1Click(Sender: TObject);
  120. begin
  121.   TileMode := tbHorizontal;
  122.   Tile;
  123. end;
  124.  
  125. procedure TMainForm.Cascade1Click(Sender: TObject);
  126. begin
  127.   Cascade;
  128. end;
  129.  
  130. procedure TMainForm.Close1Click(Sender: TObject);
  131. begin
  132.   if ActiveMDIChild <> nil then
  133.     TMDIChildForm(ActiveMDIChild).Close;
  134. end;
  135.  
  136. procedure TMainForm.Copy1Click(Sender: TObject);
  137. begin
  138.   if ActiveMDIChild <> nil then
  139.     TMDIChildForm(ActiveMDIChild).OleContainer1.Copy;
  140. end;
  141.  
  142. procedure TMainForm.Paste1Click(Sender: TObject);
  143. begin
  144.   if ActiveMDIChild = nil then exit;
  145.   with TMDIChildForm(ActiveMDIChild).OleContainer1 do
  146.     if (State = osEmpty) or
  147.       (MessageDlg('Replace existing object?', mtConfirmation, mbOkCancel, 0) = mrOk) then
  148.       begin
  149.         Paste;
  150.         CutButton.Enabled := True;
  151.         CopyButton.Enabled := True;
  152.       end;
  153. end;
  154.  
  155. procedure TMainForm.Object2Click(Sender: TObject);
  156. begin
  157.   if ActiveMDIChild <> nil then
  158.     TMDIChildForm(ActiveMDIChild).OleContainer1.ObjectPropertiesDialog;
  159. end;
  160.  
  161. procedure TMainForm.LinkButtonClick(Sender: TObject);
  162. var
  163.   MDIChild: TMDIChildForm;
  164. begin
  165.   if ActiveMDIChild = nil then
  166.   begin
  167.     if OpenDialog1.Execute then
  168.     begin
  169.       MDIChild := TMDIChildForm.Create(Self);
  170.       MDIChild.CreateFromFile(OpenDialog1.FileName, True);
  171.     end;
  172.   end
  173.   else
  174.     with TMDIChildForm(ActiveMDIChild) do
  175.       if (OleContainer1.State = osEmpty) or
  176.         (MessageDlg('Replace existing object?', mtConfirmation, mbOkCancel, 0) = mrOk) then
  177.         if OpenDialog1.Execute then
  178.           CreateFromFile(OpenDialog1.FileName, True);
  179. end;
  180.  
  181. procedure TMainForm.About1Click(Sender: TObject);
  182. begin
  183.   AboutBox := TAboutBox.Create(Self);
  184.   try
  185.     AboutBox.ShowModal;
  186.   finally
  187.     AboutBox.Free;
  188.   end;
  189. end;
  190.  
  191. procedure TMainForm.Save1Click(Sender: TObject);
  192. begin
  193.   with TMDIChildForm(ActiveMDIChild), SaveDialog1 do
  194.     if (Length(FileName) = 0) or (Sender = SaveAs1) then
  195.     begin
  196.       if Execute then
  197.         SaveFile(FileName);
  198.     end
  199.     else
  200.       SaveFile(FileName);
  201. end;
  202.  
  203. procedure TMainForm.File1Click(Sender: TObject);
  204. begin
  205.   if ActiveMDIChild <> nil then
  206.     with TMDIChildForm(ActiveMDIChild).OleContainer1 do
  207.     begin
  208.       Save1.Enabled := Modified;
  209.       SaveAs1.Enabled := Modified;
  210.     end
  211.   else
  212.   begin
  213.     Save1.Enabled := False;
  214.     SaveAs1.Enabled := False;
  215.   end;
  216.   Close2.Enabled := ActiveMDIChild <> nil;
  217.   CloseAll1.Enabled := ActiveMDIChild <> nil;
  218. end;
  219.  
  220. procedure TMainForm.Window2Click(Sender: TObject);
  221. begin
  222.   Tile1.Enabled := ActiveMDIChild <> nil;
  223.   TileHorizontally1.Enabled := ActiveMDIChild <> nil;
  224.   Cascade1.Enabled := ActiveMDIChild <> nil;
  225.   ArrangeIcons1.Enabled := ActiveMDIChild <> nil;
  226. end;
  227.  
  228. procedure TMainForm.Open1Click(Sender: TObject);
  229. begin
  230.   with OpenDialog1 do
  231.     if Execute then
  232.     begin
  233.       with TMDIChildForm.Create(Self) do
  234.         CreateFromFile(OpenDialog1.FileName, False);
  235.       CutButton.Enabled := True;
  236.       CopyButton.Enabled := True;
  237.     end;
  238. end;
  239.  
  240. procedure TMainForm.CutButtonClick(Sender: TObject);
  241. begin
  242.   if ActiveMDIChild <> nil then
  243.     with TMDIChildForm(ActiveMDIChild).OleContainer1 do
  244.     begin
  245.       Copy;
  246.       DestroyObject;
  247.       CutButton.Enabled := False;
  248.       CopyButton.Enabled := False;
  249.       PasteButton.Enabled := True;      
  250.     end;
  251. end;
  252.  
  253. procedure TMainForm.ArrangeIcons1Click(Sender: TObject);
  254. begin
  255.   ArrangeIcons;
  256. end;
  257.  
  258. procedure TMainForm.CloseAll1Click(Sender: TObject);
  259. var
  260.   i: integer;
  261. begin
  262.   for i := 0 to MDIChildCount - 1 do
  263.     MDIChildren[i].Close;
  264. end;
  265.  
  266. procedure TMainForm.FormCreate(Sender: TObject);
  267. begin
  268.   Application.OnHint := ShowHint;
  269. end;
  270.  
  271. end.
  272.