Object Linking and Embedding (OLE)

§  What is OLE?
§  How to embed an object?
§  How to create linked object?
§  How to use OLE container control?
§  Properties and methods of OLE container control?
§  How to store binary data in Database using OLE?
§  What is OLE Drag & Drop and how to use it?

What is OLE?
OLE (Object Linking and Embedding) is a means to interchange data between applications. Of late OLE has been enhanced to provide not just data but also methods that can be used by client application.

Before we proceed any further, let us understand a few terms related to OLE.

OLE Server
This is an application that can provide objects to other applications.  This is also called as OLE Source application.

OLE Client
This is an application that uses objects provided by OLE Server. This is also called as OLE Container as it contains objects provided by OLE Server.

Not every application is an OLE Server. Only a few applications are capable of providing objects. In the same way not all applications are capable of receiving objects.  However, there are applications, such as MS-Word and MS-Excel that are capable of being OLE source as well as OLE Container.

What is Object Embedding?
In object embedding, an object is embedded in the client application. Along with the object, client application also stores the information regarding source application (or server) that created the object.  The data stored in client application is separate and no link is maintained between the data supplied by source application and data stored in client application.

The advantage with Object Embedding is, client application maintains its own copy of the data.

The disadvantage is, changes made to original data (in source application) will not be incorporated in the data maintained by client.

Whenever you double click on the object in container application,  the source application will be invoked (as information regarding source application is maintained)  and the data of client application is placed in source application for editing.

The following example, where we embed a few cells of Excel spreadsheet to a Word document, will make this process clear:

1.      A collection of cells from a spreadsheet of MS-Excel is copied to clipboard. As MS-Excel is an OLE Server, it copies the data in the form of an object.
2.      Paste the data (now in the form of an object) from Clipboard to a document in Ms-Word.
3.      Now the data is embedded into MS-World document as an object. Ms-Word document contains its own copy of the data.
4.      If you double click on the object in MS-Word, then an instance of MS-Excel is invoked and data from MS-Word is copied into MS-Excel.
5.      User can edit embedded data using MS-Excel.
6.      If user saves changes and exits MS-Excel then modified data is placed in MS-Word document.

As you have seen in the above example, once an object is embedded into MS-Word,  you do not have to invoke source application manually, instead just double click on the object and that will invoke source application automatically.

However, if data is changed in the original worksheet of MS-Excel then those changes are not copied to the data in MS-Word. This is because in Object Embedding, source and container applications maintain two different copies of the data.

What is Object Linking?
Object linking makes changes made to source application available to container application. This is because container doesn’t store a separate copy of the data, instead it maintains a link to data in source application.

If you take the same example as previous one, in object linking, no separate copy of the required portion of spreadsheet is stored in MS-Word document, instead, the name of the file and the location of the data in the file are only maintained. Whenever you open MS-Word document, the data is taken from the spreadsheet file from where the data for object is taken. That is the reason why changes made in spreadsheet file (source) will be available to container application.

Advantages of Object Linking are:

¨         Changes made in source document are available to clients.
¨         As no separate copy of data is stored in clients, it saves space on disk.
Disadvantage of Object Linking is:

¨         If original data is lost, then client Application cannot access data.

OLE Container Control
In Visual Basic, you can embed or link an object using OLE container control. OLE control is one of the standard set of controls. This allows you to either embed or link an object either at design time or at run time thorough its properties and methods.

OLE Container control can be bound to database using a data control. We will see more about this later.

To create OLE Container control:

1.      Select OLE control in Toolbox.
2.      Place the control on the form with the required size.
3.      As soon as OLE control is placed on the form, Insert Object Dialog is displayed to allow you to either embed or link an object into OLE Container.
4.      The available options in insert dialog are -  Create New, where you select an Object Type and create an object using the appropriate application, or  Create From File, where you can create an object by selecting a file from file system.
To embed a word document into OLE Container control:

1.      In Insert Object Dialog box select Create From File radio button.
2.      Click on Browse button and select a document file (as shown in figure 23.1). Your document file need not be the same as the one show in figure 23.1.
3.      Click on Ok
4.      An object is embedded into OLE Container control and a part of document is displayed.
5.      Run the project using F5.
6.      Double click on OLE Container control. This action will invoke MS-Word and run it in OLE Container control. When OLE Server runs in OLE Client, it is called as In-Place Activation. Please see figure 23.2.
7.      Make necessary changes using MS-Word.
8.      Press ESC key to come out of In-Place activation.

Note: When you activate object, If OLE Server runs in client application, It is called as In-place Activation.

The followings are the other options available in Insert Object Dialog box.

Option

What it does?

Create New
Allows you to create a new file and then embed an object from newly created file.
Cretate From File
Allows an object to be embedded or linked from a file.
Display As Icon
Displays an icon instead of the content of the object.
Browse
Displays a dialog box from which your can select a file.
Link
If you turn on this checkbox, then object is linked, otherwise it is embedded..
Table 23:1: Options in Insert Object Dialog.


Properties of OLE container control
The following are the important properties of  OLE Container Control.

Property

Meaning

Class
Contains the class name of the embedded object.
SizeMode
See below.

FileNumber
Contains the number of the file used in last saving or loading operation.
DisplayType
Determines whether content of the object is displayed – 0, or an icon -1.
OLEType
Contains the status of the control. Valid values are:  0- linked, 1-embedded, or  3 – none.
SourceDoc
Contains the name of the file that is used to create the object.
SourceItem
Specifies which part of SourceDoc is to be used to create object when you link object.
AppIsRunning
Indicates whether the application  that created the object is currently running.
UpdateOptions
See below.
AutoActivate
See below.
AutoVerbmenu
Specifies whether menu containing available verbs is displayed when user clicks on right button.
OLETypeAllowed
Specifes what type of  object OLE container control can contain. Valid options are: 0 – only linked, 1- only embedded, and  2- both.
MiscFlags
See below.
Table 23.2: Properties of OLE Container control.

SizeMode Property
Determines how image is displayed in OLE control. The following are the valid options.

Option
Value

Meaning

VbOLESizeClip
0
The object is displayed in orginal size.  If the size of object is larger than the size of control then object is clipped to the size of the control.
VbOLESizeStretch
1
The size of the object is resized to the size of OLE container control.
VbOLESizeAutoSize
2
OLE container is automatically resized to the size of the object.
VbOLESizeZoom
3
The object is resized to fill the OLE container control as much as possible while still maintaining the original proportions (width and height) of the object.
 
UpdateOptions property
Specifies how a linked object is updated in Container when the orginal object is modified.

The following are the valid options for it.

Option
Value

Meaning

VbOLEAutomatic
0
Object is automatically updated whenever source data is updated.
VbOLEFrozen
1
Updates object whenever data in source application is saved.
VbOLEManual
2
Object is updated by invoking Update method of OLE Control.

AutoActivate property
Specifies how an object is activated. When object is activated the source application is invoked.

The following are the available options.

Option
Value

Meaning

VbOLEActivateManual
0
Use DoVerb method to activate object.
VbOLEActivateGetFocus
1
If object supports single click activation, then source application is activated whenever OLE container control receives focus.
VbOLEActivateDoubleclick
2
Double clicking on the object activates source application.
VbOLEActivateAuto
3
Activation depends on the type of object.
 
MiscFlags Property
Allows you to specify how data is to be stored and whenever in-place activation is enabled.

The following are valid values.

Option
Value

Meaning

VbOLEMiscFlagMemStorage

1
Causes the control to use memory to store the object while it's loaded.
VbOLEMiscFlagDisableInPlace

2
Overrides the control's default behavior of allowing in-place activation for objects that support it.
 
Methods of OLE Container Control
The following are important methods of OLE Container Control.

Method

What it does?

PasteSpecialDlg
Displays Paste Special dialog box.
Copy
Copies the content of OLE container control to clipboard.
CreateEmbed
Creates an embedded object with the given source document and class, if given.
CreateLink
Creates a linked object with the given file and specified data in the file.
Delete
Deletes the specified object and frees memory allocated to object.
InsertObjDlg
Displays Insert Object Dialog box.
Paste
Creates an object with the data that is in clipboard.
ReadFromFile
Creates an object by loading the data that was written to the file using SaveToFile method.
SaveToFile
Write the data of object to the given file. The file can be read using ReadToFile method
Close
Closes the object.
DoVerb
Performs the specified operation on the object.
Update
Used to updates linked data manually.
Table 23.3: Methods of OLE container control.

Sample Application
Now, it is time to use OLE control for a real use. The sample application has a data entry screen that is used to take the details of a subject. The table that receives data is SUBJECTS and database name is COURSE.MDB. The fields of SUBJECTS table and their data types are listed in table 23.4.

Column
Type

What it stores?

Scode
Text(5)
Subject code.
Sdes
Text(20)
Subject description.
Duration
Integer
Number of hours.
Syllabus
Binary
Contains the syllabus of the subject in Word document.
Table 23.4: Columns of SUBJECTS table.
 
The controls on the form are bound to columns in SUBJECTS table. And some controls like command buttons are not bound to database and instead they play supporting role.

The following table will summarize the role played by each control on the form.

Control

Meaning

txtScode
Bound to Scode column of SUBJECTS table.
txtSdes
Bound to Sdec column of SUBJECTS table.
txtDur
Bound to Duration column of SUBJECTS table.
Select document command button
Is used to invoke Open dialog box to allow user to select the .DOC file that contains the syllabus.
Data1
Data control that is bound to SUBJECTS table of COURSE.MDB.
OLE control
Bound to Syllabus column of SUBJECTS table.
Add New Subject command button
Adds a new blank record to SUBJECTS table by using AddNew method of Recordset.
Quit Command button
Is used to terminate the program.
Table 23.5: Meaning of controls on the form.

Create sample application
The following are the steps to be taken to develop the sample application that takes input from user regarding details of a subject and stores the details into SUBJECT table of COURSE.MDB.

1.      Start a new project using File-> New Project.
2.      Select Standard EXE as the type of the project.
3.      Place required controls (controls listed in table 23.5 and labels) on the form and arrange them in the manner shown in figure 23.3.
4.      Change the following properties of the controls.

Object
Property

Value

Data1
DatabaseName
C:\BOOKS\VB60\PROGRAMS\COURSE.MDB.
Note: The path may be different on your system.

Recordsource
Subjects

Caption
Subject Details
Text1
Name
txtScode

Datasource
Data1

Datafield
Scode
Text2
Name
txtSdes

DataSource
Data1

DataField
Sdes
Text3
Name
txtdur

Datasource
Data1

Datafield
Duration
Ole1
Datasource
Data1

DataField
Syllabus
Command1
Name
CmdSelDoc

Caption
&Select Document…
Command2
Name
CmdAddNew

Caption
&Add New Subject
Command3
Name
CmdQuit

Caption
&Quit




Writing Code
The following is the code to be written for command buttons of the form.

Private Sub Cmdaddnew_Click()
    ' add a new record and allow user to enter data
    Data1.Recordset.AddNew
    txtScode.SetFocus      ' move focus to subject code
End Sub

Private Sub CmdQuit_Click()
    Unload Me
End Sub

Private Sub Cmdseldoc_Click()
  With CommonDialog1
     .Filter = "Word Documents|*.doc|All files|*.*"
     .ShowOpen
     ' embed selected file into OLE control if a filename is selected
     If .FileName <> "" Then
        ' create an embed object with the selected file
        OLE1.CreateEmbed .FileName
     End If
  End With

End Sub
Listing 23.1: Code for command buttons on the data entry screen.


Test Run
Run the sample application to understand how it behaves. Here are the steps to be taken to test the application.

1.      Run the project using F5.
2.      If you already have some records in SUBJECTS table then first of those records will be displayed, otherwise you see an empty form.
3.      Click on Add New Subject button.
4.      When an empty form is displayed enter the following details into first three text boxes.

Scode         Java
Sdes           Java Language
Duration    70       

5.      Click on Select Document button and select the document that contains Java syllabus in Open dialog box.
6.      Click on Next Record button (right arrow) in Data control to insert record into SUBJECTS table.
7.      Quit program using Quit button.
8.      Run the program again using F5. To test whether change is made.
9.      Browse the record. You must find Java2 in the list of records.
10.  If you want, you can change the document that contains the syllabus.  Just click on Select Document button and supply a new document.

That’s all you have to do to put an object in your database through OLE container control. We have seen how to store a word document into database. However, it could be any binary data and not necessarily a document. For example, it could be a picture, an audio file etc.

Next we will understand what is OLE Drag and Drop.

OLE Drag and Drop
OLE Drag and Drop allows you to drag data from one control and drop it on another control. The most interesting of all is its ability to support drag and drop across applications. That means it is possible to drag some text form a document in MS-Word and drop it in a textbox in Visual Basic.

Unlike normal drag and drop, where you drag and drop one control on to another control, in OLE Drag and Drop you deal with data and not controls. In other words, what you drag and drop is data and not the control.

Although most of the Visual Basic controls support OLE Drag and Drop, the extent of support varies.

Automatic vs. Manual
When a control support automatic OLE drag, it means you need not write any code to avail the facility. And the same is the case with OLE drop. When a control supports OLE drag (or OLE Drop) but only in manual mode, then programmer has to write code to support the facility.

Some controls support both automatic OLE Drag mode and OLE Drop mode. While some other control support only automatic OLE dragging and manual dropping.  Some controls support only automatic dropping and manual dragging.  Some other control may support only manual OLE dragging and OLE dropping.

Note: You can know whether a control supports OLE Drag and Drop by checking whether the control has OLEDragMode and OLEDropMode properties.

Note: You can find out whether a control supports automatic OLE Dragging and OLE Dropping by seeing the setting for OLEDragMode and OLEDropMode properties respectively.


Properties, Events and Methods related to OLE Drag and Drop
The following is the list of properties, methods and events related to OLE Drag and Drop. Some of the events are fired on source and some of them are fired on target.

Properties related to OLE Drag and Drop
The following are the properties that are related to OLE Drag and Drop.

Property
Meaning
OLEDragMode
Determines whether to use automatic or manual dragging. This property will not be available if the control does not support automatic dragging. 
OLEDropMode
Specifies whether to have manual dropping or automatic dropping.
Table 23.6: Properties related to OLE Drag and Drop.

The settings for these two properties will be, None, Manual, and Automatic. However, the actual options depend upon the extent of OLE Drag and Drop support the control has.

Events related to OLE Drag and Drop
The following are the events that occur during OLE Drag and Drop process. Some of the events in the list are fired at source (where OLE Drag and Drop was initiated).

Event

Meaning

Occurs At

OLEDragDrop
Recognizes when a source object is dropped on target.
Target
OLEDragOver
Recognizes when a source object is dragged over target.
Target
OLEGiveFeedback
Provides customized drag icon feedback to the user, based on the source object.
Source
OLEStartDrag
Specifies which data formats and drop effects (copy, move, or refuse data) the source supports when dragging is initiated.
Source
OLESetData
Provides data when the source object is dropped. This is called only when data is not passed in OLEStartDrag event.
Source
OLECompleteDrag
Informs the source of the action that was performed when the object was dropped into the target.
Source
Table 23.7: Events related to OLE Drag and Drop.
 
OLEDrag Method
Starts OLE dragging. This is used when you want to manually start OLE dragging.
 
Dragging text from MS-Word into a text box using OLE Drag and Drop

Let us now understand the process involved in dragging text entered in MS-Word into a textbox that is placed on a form in Visual Basic.

1.      Start a new project using File-> New Project -> Standard EXE.
2.      Place a Textbox on the form.
3.      Change OLEDropMode property of the textbox (Text1) to 1-Automatic.
4.      Run Visual Basic project using F5.
5.      Start MS-Word.
6.      Type some text in word document as shown in figure 23.4.
7.      Arrange Visual Basic project and MS-Word as shown in figure 23.4.
8.      Select the text in word document and drag the text while holding down ctrl key into textbox of the form.

Note: While you are dragging, if you hold down the CTRL key then the data is copied to target, otherwise it is moved.

The result of the above process could be seen in figure 23.4. Textbox in the form contains the text that is typed in word document. As we held down CTRL key during drag and drop, it was copied otherwise it would have been moved from MS-Word to textbox.




Sample Application for Manual OLE Drag and Drop
The sample application that we are going to develop has a simple form with two textboxes. First textbox is used as the source and second textbox is used as the target.

The sample application demonstrates how to use manual dragging and manual dropping. When user drags text from first textbox to second textbox, the text is to be moved to second textbox after it is converted to upper Case. In this, after dropping is complete, target informs to source that the text is to be moved. Then first textbox (source) removes data from the textbox.

The main purpose of the application is to let you understand the steps involved handling OLE Drag and Drop manually.

First textbox's OLEDragMode is set to Manual and OLEDropMode property is set to Automatic.

Second textbox's OLEDragMode is set to Automatic and OLEDropMode is set to Manual.

The following are the steps to be taken to develop this application.

1.      Start a new project using File-> New Project and select Standard EXE as the type of the project.
2.      Place two textboxes along with labels and a command button.
3.      Arrange the controls on the form in a neat format.
4.      Change the following properties.
Object
Property

Value

Label1
Caption
Source
Text1
Name
txtsource

Text
""

OLEDragMode
0-Manual

OLEDropMode
2-Automatic.
Text2
Name
txtTarget

Text
""

OLEDragMode
1-Automatic

OLEDropMode
1-Manual
Form
Caption
OLE Drag and Drop
Command1
Name
CmdQuit

Caption
&Quit

Writing code
Let us now understand what are the important operations in the sample application and write the code for those events. Please refer to table 23.7 for the list of events and their meaning.

¨         Start OLE Dragging when mouse button is down  (MouseDown event) on txtSource
¨         When OLEDrag method is used to initiate OLE Dragging then OLEStartDrag event for source occurs. The data that is to be dragged is copied into DataObject using SetData method of DataObject.
¨         When data is dropped on txtTarget, then OLEDragDrop event occurs for txtTarget. Then data is sought from source using GetData method of DataObject.
¨         Text is removed from the txtSource in OLECompleteDrag event, if operation is move.

Private Sub txtsource_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
 ' start OLE dragging
 txtsource.OLEDrag
End Sub

Private Sub txtsource_OLECompleteDrag(Effect As Long)
  If (Effect and vbDropEffectMove)<>0 Then   ‘ bitwise Anding
          txtsource.Text = ""
  End If
End Sub

Private Sub txtsource_OLEStartDrag(Data As DataObject, AllowedEffects As Long)
  ' set allowed effects
  AllowedEffects = vbDropEffectMove Or vbDropEffectCopy
  Data.SetData UCase(txtsource.Text)
End Sub

Private Sub txtTarget_OLEDragDrop(Data As DataObject, Effect As Long, Button As Integer, Shift As Integer, X As Single, Y As Single)

  txtTarget.Text = Data.GetData(vbCFText)
  Effect = vbDropEffectMove
 
End Sub
Listing 23.2: Code for OLE Drag and Drop sample form.

Let us now understand the code shown in listing 23.2.First let us understand DataObject, which is passed as parameter of events related to OLE Drag and Drop.

DataObject object
This is the means through which data is moved from source control to target control. It has the following properties and methods.

Type
Name

Meaning

Property
Files
Contains the names of the files being dragged from windows explorer.
Method
Clear
Clears the content of the DataObject.

GetData
Retrieves the data from DataObject.

SetData
Places the given data in the DataObject or specifies the type of data that will be made available upon request.

GetFormat
Determines if the specified DataObject format is available in the DataObject.
Table 23.8: Properties and Methods of DataObject.

AllowedEffects parameter of OLEStartDrag event
Specifies the effects that are supported by the source object. The following are the available settings for this.

0  -       None, Target cannot accept the data.
1  -       Copy, dropping results in copying the data from source to target.
2  -       Move, dropping results in moving the data from source to target.

Note: You can use bitwise OR operator to combine more than one setting

Note: OLEStartDrag event occurs even if object's OLEDragMode property is set to Automatic.

Effect parameter of OLEDragDrop Event
Allows the target object to specify to source object the action it has taken on the data. For valid values, please see on-line documentation.

Effect parameter of OLECompleDrag Event
Informs the source object the action that has been performed on the target object.

Note: If you are interested in exploring OLE Drag and Drop, read "OLE Drag and Drop" in "Responding to Mouse and Keyboard events" chapter of  "Programmer's Guide".

OLE Drag and Drop is an exciting topic. There are so many interesting things that you can do with this. Go on and explore it. In the next chapter, we will discuss about class modules and collections.

No comments:

Object Linking and Embedding (OLE)

§  What is OLE?
§  How to embed an object?
§  How to create linked object?
§  How to use OLE container control?
§  Properties and methods of OLE container control?
§  How to store binary data in Database using OLE?
§  What is OLE Drag & Drop and how to use it?

What is OLE?
OLE (Object Linking and Embedding) is a means to interchange data between applications. Of late OLE has been enhanced to provide not just data but also methods that can be used by client application.

Before we proceed any further, let us understand a few terms related to OLE.

OLE Server
This is an application that can provide objects to other applications.  This is also called as OLE Source application.

OLE Client
This is an application that uses objects provided by OLE Server. This is also called as OLE Container as it contains objects provided by OLE Server.

Not every application is an OLE Server. Only a few applications are capable of providing objects. In the same way not all applications are capable of receiving objects.  However, there are applications, such as MS-Word and MS-Excel that are capable of being OLE source as well as OLE Container.

What is Object Embedding?
In object embedding, an object is embedded in the client application. Along with the object, client application also stores the information regarding source application (or server) that created the object.  The data stored in client application is separate and no link is maintained between the data supplied by source application and data stored in client application.

The advantage with Object Embedding is, client application maintains its own copy of the data.

The disadvantage is, changes made to original data (in source application) will not be incorporated in the data maintained by client.

Whenever you double click on the object in container application,  the source application will be invoked (as information regarding source application is maintained)  and the data of client application is placed in source application for editing.

The following example, where we embed a few cells of Excel spreadsheet to a Word document, will make this process clear:

1.      A collection of cells from a spreadsheet of MS-Excel is copied to clipboard. As MS-Excel is an OLE Server, it copies the data in the form of an object.
2.      Paste the data (now in the form of an object) from Clipboard to a document in Ms-Word.
3.      Now the data is embedded into MS-World document as an object. Ms-Word document contains its own copy of the data.
4.      If you double click on the object in MS-Word, then an instance of MS-Excel is invoked and data from MS-Word is copied into MS-Excel.
5.      User can edit embedded data using MS-Excel.
6.      If user saves changes and exits MS-Excel then modified data is placed in MS-Word document.

As you have seen in the above example, once an object is embedded into MS-Word,  you do not have to invoke source application manually, instead just double click on the object and that will invoke source application automatically.

However, if data is changed in the original worksheet of MS-Excel then those changes are not copied to the data in MS-Word. This is because in Object Embedding, source and container applications maintain two different copies of the data.

What is Object Linking?
Object linking makes changes made to source application available to container application. This is because container doesn’t store a separate copy of the data, instead it maintains a link to data in source application.

If you take the same example as previous one, in object linking, no separate copy of the required portion of spreadsheet is stored in MS-Word document, instead, the name of the file and the location of the data in the file are only maintained. Whenever you open MS-Word document, the data is taken from the spreadsheet file from where the data for object is taken. That is the reason why changes made in spreadsheet file (source) will be available to container application.

Advantages of Object Linking are:

¨         Changes made in source document are available to clients.
¨         As no separate copy of data is stored in clients, it saves space on disk.
Disadvantage of Object Linking is:

¨         If original data is lost, then client Application cannot access data.

OLE Container Control
In Visual Basic, you can embed or link an object using OLE container control. OLE control is one of the standard set of controls. This allows you to either embed or link an object either at design time or at run time thorough its properties and methods.

OLE Container control can be bound to database using a data control. We will see more about this later.

To create OLE Container control:

1.      Select OLE control in Toolbox.
2.      Place the control on the form with the required size.
3.      As soon as OLE control is placed on the form, Insert Object Dialog is displayed to allow you to either embed or link an object into OLE Container.
4.      The available options in insert dialog are -  Create New, where you select an Object Type and create an object using the appropriate application, or  Create From File, where you can create an object by selecting a file from file system.
To embed a word document into OLE Container control:

1.      In Insert Object Dialog box select Create From File radio button.
2.      Click on Browse button and select a document file (as shown in figure 23.1). Your document file need not be the same as the one show in figure 23.1.
3.      Click on Ok
4.      An object is embedded into OLE Container control and a part of document is displayed.
5.      Run the project using F5.
6.      Double click on OLE Container control. This action will invoke MS-Word and run it in OLE Container control. When OLE Server runs in OLE Client, it is called as In-Place Activation. Please see figure 23.2.
7.      Make necessary changes using MS-Word.
8.      Press ESC key to come out of In-Place activation.

Note: When you activate object, If OLE Server runs in client application, It is called as In-place Activation.

The followings are the other options available in Insert Object Dialog box.

Option

What it does?

Create New
Allows you to create a new file and then embed an object from newly created file.
Cretate From File
Allows an object to be embedded or linked from a file.
Display As Icon
Displays an icon instead of the content of the object.
Browse
Displays a dialog box from which your can select a file.
Link
If you turn on this checkbox, then object is linked, otherwise it is embedded..
Table 23:1: Options in Insert Object Dialog.


Properties of OLE container control
The following are the important properties of  OLE Container Control.

Property

Meaning

Class
Contains the class name of the embedded object.
SizeMode
See below.

FileNumber
Contains the number of the file used in last saving or loading operation.
DisplayType
Determines whether content of the object is displayed – 0, or an icon -1.
OLEType
Contains the status of the control. Valid values are:  0- linked, 1-embedded, or  3 – none.
SourceDoc
Contains the name of the file that is used to create the object.
SourceItem
Specifies which part of SourceDoc is to be used to create object when you link object.
AppIsRunning
Indicates whether the application  that created the object is currently running.
UpdateOptions
See below.
AutoActivate
See below.
AutoVerbmenu
Specifies whether menu containing available verbs is displayed when user clicks on right button.
OLETypeAllowed
Specifes what type of  object OLE container control can contain. Valid options are: 0 – only linked, 1- only embedded, and  2- both.
MiscFlags
See below.
Table 23.2: Properties of OLE Container control.

SizeMode Property
Determines how image is displayed in OLE control. The following are the valid options.

Option
Value

Meaning

VbOLESizeClip
0
The object is displayed in orginal size.  If the size of object is larger than the size of control then object is clipped to the size of the control.
VbOLESizeStretch
1
The size of the object is resized to the size of OLE container control.
VbOLESizeAutoSize
2
OLE container is automatically resized to the size of the object.
VbOLESizeZoom
3
The object is resized to fill the OLE container control as much as possible while still maintaining the original proportions (width and height) of the object.
 
UpdateOptions property
Specifies how a linked object is updated in Container when the orginal object is modified.

The following are the valid options for it.

Option
Value

Meaning

VbOLEAutomatic
0
Object is automatically updated whenever source data is updated.
VbOLEFrozen
1
Updates object whenever data in source application is saved.
VbOLEManual
2
Object is updated by invoking Update method of OLE Control.

AutoActivate property
Specifies how an object is activated. When object is activated the source application is invoked.

The following are the available options.

Option
Value

Meaning

VbOLEActivateManual
0
Use DoVerb method to activate object.
VbOLEActivateGetFocus
1
If object supports single click activation, then source application is activated whenever OLE container control receives focus.
VbOLEActivateDoubleclick
2
Double clicking on the object activates source application.
VbOLEActivateAuto
3
Activation depends on the type of object.
 
MiscFlags Property
Allows you to specify how data is to be stored and whenever in-place activation is enabled.

The following are valid values.

Option
Value

Meaning

VbOLEMiscFlagMemStorage

1
Causes the control to use memory to store the object while it's loaded.
VbOLEMiscFlagDisableInPlace

2
Overrides the control's default behavior of allowing in-place activation for objects that support it.
 
Methods of OLE Container Control
The following are important methods of OLE Container Control.

Method

What it does?

PasteSpecialDlg
Displays Paste Special dialog box.
Copy
Copies the content of OLE container control to clipboard.
CreateEmbed
Creates an embedded object with the given source document and class, if given.
CreateLink
Creates a linked object with the given file and specified data in the file.
Delete
Deletes the specified object and frees memory allocated to object.
InsertObjDlg
Displays Insert Object Dialog box.
Paste
Creates an object with the data that is in clipboard.
ReadFromFile
Creates an object by loading the data that was written to the file using SaveToFile method.
SaveToFile
Write the data of object to the given file. The file can be read using ReadToFile method
Close
Closes the object.
DoVerb
Performs the specified operation on the object.
Update
Used to updates linked data manually.
Table 23.3: Methods of OLE container control.

Sample Application
Now, it is time to use OLE control for a real use. The sample application has a data entry screen that is used to take the details of a subject. The table that receives data is SUBJECTS and database name is COURSE.MDB. The fields of SUBJECTS table and their data types are listed in table 23.4.

Column
Type

What it stores?

Scode
Text(5)
Subject code.
Sdes
Text(20)
Subject description.
Duration
Integer
Number of hours.
Syllabus
Binary
Contains the syllabus of the subject in Word document.
Table 23.4: Columns of SUBJECTS table.
 
The controls on the form are bound to columns in SUBJECTS table. And some controls like command buttons are not bound to database and instead they play supporting role.

The following table will summarize the role played by each control on the form.

Control

Meaning

txtScode
Bound to Scode column of SUBJECTS table.
txtSdes
Bound to Sdec column of SUBJECTS table.
txtDur
Bound to Duration column of SUBJECTS table.
Select document command button
Is used to invoke Open dialog box to allow user to select the .DOC file that contains the syllabus.
Data1
Data control that is bound to SUBJECTS table of COURSE.MDB.
OLE control
Bound to Syllabus column of SUBJECTS table.
Add New Subject command button
Adds a new blank record to SUBJECTS table by using AddNew method of Recordset.
Quit Command button
Is used to terminate the program.
Table 23.5: Meaning of controls on the form.

Create sample application
The following are the steps to be taken to develop the sample application that takes input from user regarding details of a subject and stores the details into SUBJECT table of COURSE.MDB.

1.      Start a new project using File-> New Project.
2.      Select Standard EXE as the type of the project.
3.      Place required controls (controls listed in table 23.5 and labels) on the form and arrange them in the manner shown in figure 23.3.
4.      Change the following properties of the controls.

Object
Property

Value

Data1
DatabaseName
C:\BOOKS\VB60\PROGRAMS\COURSE.MDB.
Note: The path may be different on your system.

Recordsource
Subjects

Caption
Subject Details
Text1
Name
txtScode

Datasource
Data1

Datafield
Scode
Text2
Name
txtSdes

DataSource
Data1

DataField
Sdes
Text3
Name
txtdur

Datasource
Data1

Datafield
Duration
Ole1
Datasource
Data1

DataField
Syllabus
Command1
Name
CmdSelDoc

Caption
&Select Document…
Command2
Name
CmdAddNew

Caption
&Add New Subject
Command3
Name
CmdQuit

Caption
&Quit




Writing Code
The following is the code to be written for command buttons of the form.

Private Sub Cmdaddnew_Click()
    ' add a new record and allow user to enter data
    Data1.Recordset.AddNew
    txtScode.SetFocus      ' move focus to subject code
End Sub

Private Sub CmdQuit_Click()
    Unload Me
End Sub

Private Sub Cmdseldoc_Click()
  With CommonDialog1
     .Filter = "Word Documents|*.doc|All files|*.*"
     .ShowOpen
     ' embed selected file into OLE control if a filename is selected
     If .FileName <> "" Then
        ' create an embed object with the selected file
        OLE1.CreateEmbed .FileName
     End If
  End With

End Sub
Listing 23.1: Code for command buttons on the data entry screen.


Test Run
Run the sample application to understand how it behaves. Here are the steps to be taken to test the application.

1.      Run the project using F5.
2.      If you already have some records in SUBJECTS table then first of those records will be displayed, otherwise you see an empty form.
3.      Click on Add New Subject button.
4.      When an empty form is displayed enter the following details into first three text boxes.

Scode         Java
Sdes           Java Language
Duration    70       

5.      Click on Select Document button and select the document that contains Java syllabus in Open dialog box.
6.      Click on Next Record button (right arrow) in Data control to insert record into SUBJECTS table.
7.      Quit program using Quit button.
8.      Run the program again using F5. To test whether change is made.
9.      Browse the record. You must find Java2 in the list of records.
10.  If you want, you can change the document that contains the syllabus.  Just click on Select Document button and supply a new document.

That’s all you have to do to put an object in your database through OLE container control. We have seen how to store a word document into database. However, it could be any binary data and not necessarily a document. For example, it could be a picture, an audio file etc.

Next we will understand what is OLE Drag and Drop.

OLE Drag and Drop
OLE Drag and Drop allows you to drag data from one control and drop it on another control. The most interesting of all is its ability to support drag and drop across applications. That means it is possible to drag some text form a document in MS-Word and drop it in a textbox in Visual Basic.

Unlike normal drag and drop, where you drag and drop one control on to another control, in OLE Drag and Drop you deal with data and not controls. In other words, what you drag and drop is data and not the control.

Although most of the Visual Basic controls support OLE Drag and Drop, the extent of support varies.

Automatic vs. Manual
When a control support automatic OLE drag, it means you need not write any code to avail the facility. And the same is the case with OLE drop. When a control supports OLE drag (or OLE Drop) but only in manual mode, then programmer has to write code to support the facility.

Some controls support both automatic OLE Drag mode and OLE Drop mode. While some other control support only automatic OLE dragging and manual dropping.  Some controls support only automatic dropping and manual dragging.  Some other control may support only manual OLE dragging and OLE dropping.

Note: You can know whether a control supports OLE Drag and Drop by checking whether the control has OLEDragMode and OLEDropMode properties.

Note: You can find out whether a control supports automatic OLE Dragging and OLE Dropping by seeing the setting for OLEDragMode and OLEDropMode properties respectively.


Properties, Events and Methods related to OLE Drag and Drop
The following is the list of properties, methods and events related to OLE Drag and Drop. Some of the events are fired on source and some of them are fired on target.

Properties related to OLE Drag and Drop
The following are the properties that are related to OLE Drag and Drop.

Property
Meaning
OLEDragMode
Determines whether to use automatic or manual dragging. This property will not be available if the control does not support automatic dragging. 
OLEDropMode
Specifies whether to have manual dropping or automatic dropping.
Table 23.6: Properties related to OLE Drag and Drop.

The settings for these two properties will be, None, Manual, and Automatic. However, the actual options depend upon the extent of OLE Drag and Drop support the control has.

Events related to OLE Drag and Drop
The following are the events that occur during OLE Drag and Drop process. Some of the events in the list are fired at source (where OLE Drag and Drop was initiated).

Event

Meaning

Occurs At

OLEDragDrop
Recognizes when a source object is dropped on target.
Target
OLEDragOver
Recognizes when a source object is dragged over target.
Target
OLEGiveFeedback
Provides customized drag icon feedback to the user, based on the source object.
Source
OLEStartDrag
Specifies which data formats and drop effects (copy, move, or refuse data) the source supports when dragging is initiated.
Source
OLESetData
Provides data when the source object is dropped. This is called only when data is not passed in OLEStartDrag event.
Source
OLECompleteDrag
Informs the source of the action that was performed when the object was dropped into the target.
Source
Table 23.7: Events related to OLE Drag and Drop.
 
OLEDrag Method
Starts OLE dragging. This is used when you want to manually start OLE dragging.
 
Dragging text from MS-Word into a text box using OLE Drag and Drop

Let us now understand the process involved in dragging text entered in MS-Word into a textbox that is placed on a form in Visual Basic.

1.      Start a new project using File-> New Project -> Standard EXE.
2.      Place a Textbox on the form.
3.      Change OLEDropMode property of the textbox (Text1) to 1-Automatic.
4.      Run Visual Basic project using F5.
5.      Start MS-Word.
6.      Type some text in word document as shown in figure 23.4.
7.      Arrange Visual Basic project and MS-Word as shown in figure 23.4.
8.      Select the text in word document and drag the text while holding down ctrl key into textbox of the form.

Note: While you are dragging, if you hold down the CTRL key then the data is copied to target, otherwise it is moved.

The result of the above process could be seen in figure 23.4. Textbox in the form contains the text that is typed in word document. As we held down CTRL key during drag and drop, it was copied otherwise it would have been moved from MS-Word to textbox.




Sample Application for Manual OLE Drag and Drop
The sample application that we are going to develop has a simple form with two textboxes. First textbox is used as the source and second textbox is used as the target.

The sample application demonstrates how to use manual dragging and manual dropping. When user drags text from first textbox to second textbox, the text is to be moved to second textbox after it is converted to upper Case. In this, after dropping is complete, target informs to source that the text is to be moved. Then first textbox (source) removes data from the textbox.

The main purpose of the application is to let you understand the steps involved handling OLE Drag and Drop manually.

First textbox's OLEDragMode is set to Manual and OLEDropMode property is set to Automatic.

Second textbox's OLEDragMode is set to Automatic and OLEDropMode is set to Manual.

The following are the steps to be taken to develop this application.

1.      Start a new project using File-> New Project and select Standard EXE as the type of the project.
2.      Place two textboxes along with labels and a command button.
3.      Arrange the controls on the form in a neat format.
4.      Change the following properties.
Object
Property

Value

Label1
Caption
Source
Text1
Name
txtsource

Text
""

OLEDragMode
0-Manual

OLEDropMode
2-Automatic.
Text2
Name
txtTarget

Text
""

OLEDragMode
1-Automatic

OLEDropMode
1-Manual
Form
Caption
OLE Drag and Drop
Command1
Name
CmdQuit

Caption
&Quit

Writing code
Let us now understand what are the important operations in the sample application and write the code for those events. Please refer to table 23.7 for the list of events and their meaning.

¨         Start OLE Dragging when mouse button is down  (MouseDown event) on txtSource
¨         When OLEDrag method is used to initiate OLE Dragging then OLEStartDrag event for source occurs. The data that is to be dragged is copied into DataObject using SetData method of DataObject.
¨         When data is dropped on txtTarget, then OLEDragDrop event occurs for txtTarget. Then data is sought from source using GetData method of DataObject.
¨         Text is removed from the txtSource in OLECompleteDrag event, if operation is move.

Private Sub txtsource_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
 ' start OLE dragging
 txtsource.OLEDrag
End Sub

Private Sub txtsource_OLECompleteDrag(Effect As Long)
  If (Effect and vbDropEffectMove)<>0 Then   ‘ bitwise Anding
          txtsource.Text = ""
  End If
End Sub

Private Sub txtsource_OLEStartDrag(Data As DataObject, AllowedEffects As Long)
  ' set allowed effects
  AllowedEffects = vbDropEffectMove Or vbDropEffectCopy
  Data.SetData UCase(txtsource.Text)
End Sub

Private Sub txtTarget_OLEDragDrop(Data As DataObject, Effect As Long, Button As Integer, Shift As Integer, X As Single, Y As Single)

  txtTarget.Text = Data.GetData(vbCFText)
  Effect = vbDropEffectMove
 
End Sub
Listing 23.2: Code for OLE Drag and Drop sample form.

Let us now understand the code shown in listing 23.2.First let us understand DataObject, which is passed as parameter of events related to OLE Drag and Drop.

DataObject object
This is the means through which data is moved from source control to target control. It has the following properties and methods.

Type
Name

Meaning

Property
Files
Contains the names of the files being dragged from windows explorer.
Method
Clear
Clears the content of the DataObject.

GetData
Retrieves the data from DataObject.

SetData
Places the given data in the DataObject or specifies the type of data that will be made available upon request.

GetFormat
Determines if the specified DataObject format is available in the DataObject.
Table 23.8: Properties and Methods of DataObject.

AllowedEffects parameter of OLEStartDrag event
Specifies the effects that are supported by the source object. The following are the available settings for this.

0  -       None, Target cannot accept the data.
1  -       Copy, dropping results in copying the data from source to target.
2  -       Move, dropping results in moving the data from source to target.

Note: You can use bitwise OR operator to combine more than one setting

Note: OLEStartDrag event occurs even if object's OLEDragMode property is set to Automatic.

Effect parameter of OLEDragDrop Event
Allows the target object to specify to source object the action it has taken on the data. For valid values, please see on-line documentation.

Effect parameter of OLECompleDrag Event
Informs the source object the action that has been performed on the target object.

Note: If you are interested in exploring OLE Drag and Drop, read "OLE Drag and Drop" in "Responding to Mouse and Keyboard events" chapter of  "Programmer's Guide".

OLE Drag and Drop is an exciting topic. There are so many interesting things that you can do with this. Go on and explore it. In the next chapter, we will discuss about class modules and collections.

No comments: