home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
PC World Plus! (NZ) 2001 June
/
HDC50.iso
/
Runimage
/
Delphi50
/
Demos
/
Activex
/
Olectnrs
/
MDICHILD.PAS
< prev
next >
Wrap
Pascal/Delphi Source File
|
1999-08-11
|
7KB
|
243 lines
unit mdichild;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
OleCtnrs, Menus, ExtCtrls;
type
TMDIChildForm = class(TForm)
Cut1: TMenuItem;
Copy1: TMenuItem;
Paste1: TMenuItem;
PasteSpecial1: TMenuItem;
LocalMenu: TPopupMenu;
InsertObject1: TMenuItem;
CopyObject1: TMenuItem;
DeleteObject1: TMenuItem;
Properties1: TMenuItem;
Panel1: TPanel;
OleContainer1: TOleContainer;
MainMenu1: TMainMenu;
Insert1: TMenuItem;
Object2: TMenuItem;
CLear1: TMenuItem;
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure LocalMenuPopup(Sender: TObject);
procedure InsertObject1Click(Sender: TObject);
procedure CopyObject1Click(Sender: TObject);
procedure DeleteObject1Click(Sender: TObject);
procedure Properties1Click(Sender: TObject);
procedure Cut1Click(Sender: TObject);
procedure Copy1Click(Sender: TObject);
procedure Paste1Click(Sender: TObject);
procedure PasteSpecial1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Edit1Click(Sender: TObject);
procedure OleContainer1Activate(Sender: TObject);
procedure FormActivate(Sender: TObject);
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
private
FFileName: TFileName;
FSaved: Boolean;
procedure VerbClick(Sender: TObject);
public
procedure CreateFromFile(FileName: TFileName; Linked: Boolean);
procedure SaveFile(FileName: TFileName);
property FileName: TFileName read FFileName;
end;
var
MDIChildForm: TMDIChildForm;
implementation
uses mdimain;
{$R *.DFM}
procedure TMDIChildForm.SaveFile(FileName: TFileName);
begin
OleContainer1.SaveAsDocument(FileName);
FFileName := FileName;
Caption := FFileName;
OleContainer1.Modified := False;
end;
procedure TMDIChildForm.CreateFromFile(FileName: TFileName; Linked: Boolean);
begin
if Linked then
OleContainer1.CreateLinkToFile(FileName, False)
else
OleContainer1.CreateObjectFromFile(FileName, False);
Caption := FileName;
FFileName := FileName;
end;
procedure TMDIChildForm.VerbClick(Sender: TObject);
begin
with Sender as TMenuItem do
OleContainer1.DoVerb(OleContainer1.ObjectVerbs.IndexOf(Caption));
end;
procedure TMDIChildForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action := caFree;
with MainForm do
begin
CutButton.Enabled := False;
CopyButton.Enabled := False;
PasteButton.Enabled := False;
SaveButton.Enabled := False;
end;
end;
procedure TMDIChildForm.LocalMenuPopup(Sender: TObject);
var
i: integer;
begin
with OleContainer1 do
begin
CopyObject1.Enabled := State <> osEmpty;
DeleteObject1.Enabled := State <> osEmpty;
Properties1.Enabled := State <> osEmpty;
if LocalMenu.Tag > 0 then exit;
if (State <> osEmpty) and (ObjectVerbs.Count > 0) then
begin
LocalMenu.Items.Insert(0, NewLine);
for i := 0 to ObjectVerbs.Count - 1 do
LocalMenu.Items.Insert(i, NewItem(ObjectVerbs[i], 0, false, true, VerbClick, 0, ''));
LocalMenu.Tag := 1;
end;
end;
end;
procedure TMDIChildForm.InsertObject1Click(Sender: TObject);
begin
if (OleContainer1.State = osEmpty) or
(MessageDlg('Delete current OLE object?', mtConfirmation, mbOkCancel, 0) = mrOk) then
if OleContainer1.InsertObjectDialog then
begin
MainForm.CutButton.Enabled := True;
MainForm.CopyButton.Enabled := True;
MainForm.SaveButton.Enabled := OleContainer1.Modified;
end;
end;
procedure TMDIChildForm.CopyObject1Click(Sender: TObject);
begin
OleContainer1.Copy;
MainForm.PasteButton.Enabled := True;
end;
procedure TMDIChildForm.DeleteObject1Click(Sender: TObject);
begin
if (OleContainer1.State = osEmpty) or
(MessageDlg('Delete current OLE object?', mtConfirmation, mbOkCancel, 0) = mrOk) then
begin
OleContainer1.DestroyObject;
LocalMenu.Tag := 0;
while LocalMenu.Items.Count <> 4 do
LocalMenu.Items[0].Free;
end;
MainForm.SaveButton.Enabled := OleContainer1.State <> osEmpty;
end;
procedure TMDIChildForm.Properties1Click(Sender: TObject);
begin
OleContainer1.ObjectPropertiesDialog;
end;
procedure TMDIChildForm.Cut1Click(Sender: TObject);
begin
OleContainer1.Copy;
OleContainer1.DestroyObject;
MainForm.CutButton.Enabled := False;
MainForm.CopyButton.Enabled := False;
MainForm.PasteButton.Enabled := True;
FFileName := '';
end;
procedure TMDIChildForm.Copy1Click(Sender: TObject);
begin
OleContainer1.Copy;
MainForm.PasteButton.Enabled := True;
end;
procedure TMDIChildForm.Paste1Click(Sender: TObject);
begin
if (OleContainer1.State = osEmpty) or
(MessageDlg('Delete current OLE object?', mtConfirmation, mbOkCancel, 0) = mrOk) then
OleContainer1.Paste;
MainForm.SaveButton.Enabled := OleContainer1.Modified;
end;
procedure TMDIChildForm.PasteSpecial1Click(Sender: TObject);
begin
if (OleContainer1.State = osEmpty) or
(MessageDlg('Delete current OLE object?', mtConfirmation, mbOkCancel, 0) = mrOk) then
begin
if OleContainer1.PasteSpecialDialog then
with MainForm do
begin
CutButton.Enabled := True;
CopyButton.Enabled := True;
PasteButton.Enabled := OleContainer1.CanPaste;
end;
end;
end;
procedure TMDIChildForm.FormCreate(Sender: TObject);
begin
FFileName := '';
FSaved := False;
end;
procedure TMDIChildForm.Edit1Click(Sender: TObject);
begin
with OleContainer1 do
begin
Cut1.Enabled := State <> osEmpty;
Copy1.Enabled := State <> osEmpty;
Paste1.Enabled := CanPaste;
PasteSpecial1.Enabled := CanPaste;
Object2.Enabled := State <> osEmpty;
Clear1.Enabled := State <> osEmpty;
end;
end;
procedure TMDIChildForm.OleContainer1Activate(Sender: TObject);
begin
OleContainer1.Modified := True;
end;
procedure TMDIChildForm.FormActivate(Sender: TObject);
begin
with MainForm, OleContainer1 do
begin
CopyButton.Enabled := State <> osEmpty;
CutButton.Enabled := State <> osEmpty;
PasteButton.Enabled := CanPaste;
SaveButton.Enabled := Modified;
end;
end;
procedure TMDIChildForm.FormCloseQuery(Sender: TObject;
var CanClose: Boolean);
begin
CanClose := True;
if OleContainer1.Modified then
case MessageDlg('Save changes to object?', mtConfirmation, mbYesNoCancel, 0) of
mrYes:
begin
MainForm.Save1Click(Sender);
if OleContainer1.Modified then
CanClose := False;
end;
mrCancel: CanClose := False;
end;
end;
end.