1 / 46

Windows Software Development Lecture 8

Windows Software Development Lecture 8. MIS288 Instructor – Larry Langellier. Where Are We?. Last Lecture Creating a Collection Hierarchy Create a collection using the Collection object Create an object hierarchy Implement default properties and methods Working with Project Groups

adlai
Download Presentation

Windows Software Development Lecture 8

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Windows Software DevelopmentLecture 8 MIS288 Instructor – Larry Langellier

  2. Where Are We? • Last Lecture • Creating a Collection Hierarchy • Create a collection using the Collection object • Create an object hierarchy • Implement default properties and methods • Working with Project Groups • Enumerate a collection – For Each • Tonight – Creating an ActiveX Control • Create an ActiveX control from constituent controls • Understand design time and run time when developing ActiveX controls • Create ActiveX controls that support Property Pages

  3. ActiveX Control Creation • Visual Basic supports ActiveX control creation by: • Enhancing existing controls • Creating controls from multiple existing controls • Creating controls from scratch

  4. Container Terminology • Control instances must exist inside a container • Containers are not unique to Visual Basic but general to Windows • Controls and their container interact • A VB Form window is but one example of a container • Internet Explorer is a container

  5. Creating an ActiveX Control • Create an ActiveX control project type • New Project -> ActiveX Control • Name property of an ActiveX control is the name known to the developer • ToolBoxIcon contains the icon that appears in the toolbox • Public property defines whether another project can create a control instance

  6. Design time vs. run time • An Author develops and maintains an ActiveX control • The Developer uses the ActiveX control created by the Author • In the past you have always assumed the role of developer in relation to controls • The meaning of design time and run time is expanded when creating an ActiveX Control • ActiveX control can be in design or run mode • When visual designer is open, the ActiveX control is in design mode • When visual designer is closed, the ActiveX control instance is running • Standard EXE project can be in design mode or run mode

  7. ActiveX Control Objects • UserControl is the core object just as the Form object is the core of a form • Several other objects provide support to the ActiveX Control • The Container suggests initial values to a control through the AmbientProperties object • Properties defined by the container are available through the Extender object • The PropertyBag object makes properties persistent

  8. UserControl Interaction UserControl object Developer Author User control properties Extender Object Public Property procedures (properties) Public Sub and Function procedures (methods) Constituent control (TextBox) PropertyBag object

  9. Predefined Extender Properties and Events • Supports the Cancel property if DefaultCancel is set to True • Parent property (at run time) contains a reference to the container • TabStop and TabIndex properties appear if UserControl’s CanGetFocus property is True • GotFocus and LostFocus events occur only if the UserControl’s CanGetFocus property is True

  10. Predefined Ambient Properties • TextAlign property defines alignment of text • UserMode property indicates whether the control is in design mode or run mode • Font contains suggested font • BackColor and ForeColor properties suggest colors

  11. Ways to create an ActiveX control • Enhance an existing control • Create a control based upon multiple existing controls • Create a control from scratch • Difficult in Visual Basic • Other two methods are preferable

  12. Constituent Controls • Create an ActiveX control by enhancing an existing control • Existing control is called a Constituent control • Properties, methods, and events of constituent control are hidden from the developer and must be explicitly exposed • The Author may more than one constituent control instance on the User control

  13. User Control Events • User controls respond to events – but the events of the constituent controls are hidden • Therefore, the Author writes code to respond to these events • The response varies depending on Mode • Example: Clicking on a CommandButton in Design Mode allows the developer to resize or move it, while the user clicking during Run Mode generates a Click event • Resize event occurs when the developer resizes the ActiveX control instance • What should the author do if more than one constituent control is involved (like the TextBoxPlus)? • Adjust the width of both to fill the region (with a minimum) • Fixed height for Label, TextBox fills the rest • Example – Ch11_C.vbg • TextBoxPlus control – UserControl_Resize

  14. User Control Event Sequences • Developer creates a control instance • Initialize, InitProperties, Resize, Paint • Switch from design mode to run mode • WriteProperties, Terminate (Design time instance), Initialize (Run time instance), ReadProperties, Resize, Paint • Switch from run mode to design mode • Terminate (Run time instance), Initialize (Design time instance), ReadProperties, Resize, Paint • Developer exits Visual Basic • WriteProperties, Terminate • User runs executable program containing control instance • Initialize, ReadProperties, Resize, Paint

  15. Object Focus • Examine GotFocus event • Container raises GotFocus when the object (ActiveX control instance) gets focus • If no constituent control can get focus, GotFocus event pertaining to UserControl is raised • If a constituent control can get focus, GotFocus event pertaining to the constituent control is raised

  16. User Control Focus Events • EnterFocus event occurs when the UserControl or constituent control gets focus • GotFocus occurs next (if there are no constituent controls) • When the User control loses focus, the LostFocus event occurs (if there are no constituent controls) • ExitFocus event occurs when UserControl loses focus • EnterFocus and ExitFocus always occur, regardless of whether a constituent control can get focus

  17. Raising an Event for the Developer • Event must be declared in the User control module • Event statement • Event must be raised in the User control module • Raise statement At run time, user clicks a constituent text box UserControl object Public Event Click() Private Sub Text1_Click() RaiseEvent Click End Sub Click event occurs for the constituent text box. Visual Basic raises the Click event. Form Module Private Sub tbpName_Click Debug.Print "Clicked" End Sub

  18. Techniques to Expose Properties to the Developer • Three techniques • Delegation • Expose a property of a constituent control • Aggregation • Group the properties of more than one constituent control • Create a new property • Do NOT • Modify the behavior of an existing property

  19. PropertyChanged method • Advise the container that the value of a property has changed • Necessary so the Properties window value can be updated or the control instance on the form can be drawn with the new property value • Call PropertyChanged whenever setting a property • Syntax object.PropertyChangedPropertyName • Public variables should not be used to implement ActiveX control properties

  20. Delegation • Constituent control property is exposed to the developer • Text1.Enabled property is delegated Public Property Get Enabled() As Boolean Enabled = Text1.Enabled End Property Public Property Let Enabled ( _ ByVal New_Enabled As Boolean) Text1.Enabled = New_Enabled PropertyChanged "Enabled" End Property

  21. Aggregation • Properties from multiple constituent controls aggregated into one property Public Property Get FontSize() As Integer FontSize = Text1.FontSize End Property Public Property Let FontSize( _ ByVal New_Size As Integer) Text1.FontSize = New_Size Text2.FontSize = New_Size PropertyChanged "FontSize" End Property

  22. Property Persistence • Remember that a control’s run time instance is different than the design time instance • You must explicitly make a property persistent between design time and run time • Container saves property - not the control itself

  23. The PropertyBag object • PropertyBag object reads and writes persistent properties • The Container reads/writes the PropertyBag • Methods • ReadProperty method reads a property from the PropertyBag • WriteProperty method saves a property to the property bag • UserControl Events • InitProperties occurs when the control is first created • WriteProperties occurs before a design time instance is destroyed • ReadProperties occurs when creating a preexisting design time control instance

  24. ReadProperties Example • Read the value of the Enabled property from the PropertyBag Private Sub UserControl_ReadProperties _ (PropBag As PropertyBag) Text1.Enabled = PropBag.ReadProperty _ ("Enabled", True) End Sub Property Name Value used if no entry in PropertyBag

  25. WriteProperties Example • Save the Enabled property to the PropertyBag Private Sub UserControl_WriteProperties _ (PropBag As PropertyBag) Call PropBag.WriteProperty _ ("Enabled", Text1.Enabled,True) End Sub Property Name Default value

  26. Types of Properties • Read-write properties • Read-only properties • Write-Once properties • Property may be hidden depending on the run state

  27. Just Do It! • Work on Exercise 11.2 from the textbook (pages 678-679) • There is an executable demo (JDI1.exe) located in the Classroom Lecture Demos – feel free to run that to get a better idea of what you’re being asked to do • We will discuss the solution after you’ve worked on problem for a while • Call me over if you have questions – don’t sit there stumped for long

  28. Special Property Types • OLE_COLOR • Boolean Values • Enumerated types • Intrinsic • User-Defined

  29. OLE_COLOR Properties • Properties of type OLE_COLOR store a Long Integer color • User sees a color palette Public Property Get ForeColor() As OLE_COLOR ForeColor = object.ForeColor End Property Data type is OLE_COLOR

  30. Boolean Properties • Properties window displays a list box • List box contains True / False values • IntelliSense works too

  31. Enumerated Properties • Like Boolean properties • Properties window displays a list box • List box contains enumerated values • IntelliSense works too • Both intrinsic and user-defined enumerated properties are supported

  32. Intrinsic Enumerated Properties • Use constants such as MousePointerConstants • Values derived from type libraries - Use Object Browser to locate Public Property Get MousePointer() _ As MousePointerConstants ' Statements End Property Intrinsic Enumerated constant

  33. User Defined Enumerated Properties • Define an Enumerated type • Create properties of that type Public tbpEnum tbpMaybe = 0 tbpYes = 1 tbpNo = 2 End Enum Public Property Get Indecision() _ As tbpEnum End Property

  34. Property Pages Introduction • Adding Property Pages to an existing control • Sample control and properties in this chapter are more complex • Chapter example implements a calendar to display the days of the week and the corresponding date • Example – Ch12_C.vbg UserControl Hidden constituent controls Properties window Exposed properties Property Pages

  35. Introduction to Property Pages • Just another type of module • Each Tab on the set of PropertyPages corresponds to a Property Page module

  36. Creating Property Pages • Add Property Page modules to a project • Set the PropertyPages property for an ActiveX control to add the pages

  37. Designing Property Pages • When displayed, first tab should receive focus • All fields should support an access key • Use a standard size • Use a label prompt having the same caption as the property name • When a property stores an enumerated type, use a ListBox or ComboBox for selection • Properties having a similar purpose should appear on the same tab • Standard page tabs should appear last • Do not display dialogs • Avoid graphics. Keep the pages fast

  38. Standard Property Pages • StandardFont allows the user to set fonts • StandardColor allows the user to select colors • StandardPicture allows the user to select pictures • StandardDataFormat used with data binding

  39. Connecting Property Pages • From the Properties window for the User control, select PropertyPages to display this dialog User-defined property pages Standard property pages

  40. StandardColor Property Page Automatically displays properties of type OLE_COLOR

  41. User-Defined Property Page Modules • Module type is PropertyPage • Events • SelectionChanged occurs when the user selects different control instances • ApplyChanges occurs when developer clicks OK or Apply on PropertyPages • Initialize event occurs when PropertyPage is displayed • Properties • Boolean Changed property indicates that a value has changed (OK and Apply are enabled) • SelectedControls collection contains a reference to control instances selected by the developer

  42. Creating Property Pages • Create constituent controls similar to a User control • Must initialize constituent controls using SelectedControls collection • Enumerated types must be managed manually • Load the valid enumerations at design time • Explicitly set the selected item to the current property value

  43. SelectedControls Collection • Contains a reference to the controls selected by the user • Zero-based txtEndYear = SelectedControls(0).EndYear First control instance

  44. Applying Changes • Respond to the ApplyChanges event • Use SelectedControls collection to get a reference to the control instance Private Sub PropertyPage_ApplyChanges() SelectedControls(0).StartYear = txtStartYear SelectedControls(0).EndYear = txtEndYear End Sub First control instance

  45. Just Do It! • Work on Exercise 12.1 from the textbook (page 725) • There is an executable demo (JDI2.exe) located in the Classroom Lecture Demos – feel free to run that to get a better idea of what you’re being asked to do • We will discuss the solution after you’ve worked on problem for a while • Call me over if you have questions – don’t sit there stumped for long

  46. What Next? • Next Week • Read Chapter 16 – Understanding the Windows Application Programming Interface • Programming the Windows Registry • The Basics of Windows Dynamic Link Libraries • No Homework – work on your Midterm Project

More Related