Presentation is loading. Please wait.

Presentation is loading. Please wait.

Ray Konopka Creating Custom Microsoft.NET Framework Controls in Delphi.

Similar presentations


Presentation on theme: "Ray Konopka Creating Custom Microsoft.NET Framework Controls in Delphi."— Presentation transcript:

1 Ray Konopka Creating Custom Microsoft.NET Framework Controls in Delphi

2 2 Agenda.NET Component Model Comparing the FCL to the VCL Custom Events Custom Painting Component Related Attributes Sample Control.NET Component Model Comparing the FCL to the VCL Custom Events Custom Painting Component Related Attributes Sample Control

3 3.NET Component Model Defined in the System.ComponentModel namespace Includes System.ComponentModel.Component declaration Common Delegates Component Related Attribute declarations Licensing Classes Design-time Support Classes Defined in the System.ComponentModel namespace Includes System.ComponentModel.Component declaration Common Delegates Component Related Attribute declarations Licensing Classes Design-time Support Classes

4 4 Component Class System.ComponentModel.Component provides the base implementation of IComponent in the FCL Defines the following properties DesignMode Container Site Events Descend from System.ComponentModel.Component to create a nonvisual component System.ComponentModel.Component provides the base implementation of IComponent in the FCL Defines the following properties DesignMode Container Site Events Descend from System.ComponentModel.Component to create a nonvisual component

5 5 Two Control Classes in.NET Most visual controls in.NET will descend from one of two classes: System.Windows.Forms.Control Base WinForms Control class Most similar to existing component models (e.g. VCL) Rendering handled through Graphics class (i.e. GDI+) System.Web.UI.Control Base ASP.NET Server Control class Renders markup text used by a client’s browser or viewing device to display visual elements. Most visual controls in.NET will descend from one of two classes: System.Windows.Forms.Control Base WinForms Control class Most similar to existing component models (e.g. VCL) Rendering handled through Graphics class (i.e. GDI+) System.Web.UI.Control Base ASP.NET Server Control class Renders markup text used by a client’s browser or viewing device to display visual elements.

6 6 System.Windows.Forms.Control Implements basic functionality for visualization Defines the control’s bounds (i.e. its Position and Size) Provides a window handle (Handle) Provides access to keyboard events Provides access to mouse events Provides access to paint events Supports ambient properties Cursor, Font, BackColor, ForeColor, RightToLeft. Implements basic functionality for visualization Defines the control’s bounds (i.e. its Position and Size) Provides a window handle (Handle) Provides access to keyboard events Provides access to mouse events Provides access to paint events Supports ambient properties Cursor, Font, BackColor, ForeColor, RightToLeft.

7 7 Comparing the FCL to the VCL FCL is quite similar to the VCL, but there are significant differences No equivalent to TGraphicControl Actually, no TWinControl or TCustomControl classes either System.Windows.Forms.Control is more like TCustomControl than TControl Significantly fewer TCustomXxxx class called XxxxBase in FCL FCL is quite similar to the VCL, but there are significant differences No equivalent to TGraphicControl Actually, no TWinControl or TCustomControl classes either System.Windows.Forms.Control is more like TCustomControl than TControl Significantly fewer TCustomXxxx class called XxxxBase in FCL

8 8 Where is the Align property? Most of the functionality implemented in the VCL base classes is available in the base FCL classes However, there are many property name changes Align  Dock Caption  Text Color  BackColor Font.Color  ForeColor PopupMenu  ContextMenu ModalResult  DialogResult etc. Tag is an Object ParentXxxx properties replaced with ambient properties Most of the functionality implemented in the VCL base classes is available in the base FCL classes However, there are many property name changes Align  Dock Caption  Text Color  BackColor Font.Color  ForeColor PopupMenu  ContextMenu ModalResult  DialogResult etc. Tag is an Object ParentXxxx properties replaced with ambient properties

9 9 Control Styles TControl.ControlStyle replaced with GetStyle/SetStyle method pair Some, but not all, styles have corresponding public properties ResizeRedraw TControl.ControlStyle replaced with GetStyle/SetStyle method pair Some, but not all, styles have corresponding public properties ResizeRedraw SetStyle( ControlStyles.ResizeRedraw, True ); SetStyle( ControlStyles.Opaque, True ); // Double Buffering SetStyle( ControlStyles.UserPaint, True ); SetStyle( ControlStyles.AllPaintingInWmPaint, True ); SetStyle( ControlStyles.DoubleBuffer, True ); SetStyle( ControlStyles.ResizeRedraw, True ); SetStyle( ControlStyles.Opaque, True ); // Double Buffering SetStyle( ControlStyles.UserPaint, True ); SetStyle( ControlStyles.AllPaintingInWmPaint, True ); SetStyle( ControlStyles.DoubleBuffer, True );

10 10 Component Notifications Component notifications allow descendants to react to state changes implemented in an ancestor class In the VCL, a component responds to notifications by handling special messages e.g. cm_EnabledChanged In.NET, a component responds to notifications by overriding a method OnEnabledChanged Event Dispatch Method.NET even surfaces component notifications as public events EnabledChanged Event Component notifications allow descendants to react to state changes implemented in an ancestor class In the VCL, a component responds to notifications by handling special messages e.g. cm_EnabledChanged In.NET, a component responds to notifications by overriding a method OnEnabledChanged Event Dispatch Method.NET even surfaces component notifications as public events EnabledChanged Event

11 11 FCL and VCL Events Unfortunately, the naming convention used for events in the FCL is opposite that used in the VCL In the VCL… OnPaint is the event Paint is the event dispatch method In the FCL… OnPaint is the event dispatch method Paint is the event Unfortunately, the naming convention used for events in the FCL is opposite that used in the VCL In the VCL… OnPaint is the event Paint is the event dispatch method In the FCL… OnPaint is the event dispatch method Paint is the event

12 12 FCL and VCL Events Please Note: Unfortunately, it is common in.NET literature to see statements like “…take a look at the OnPaint event handler…” Problem is that base (ancestor) does not get called and thus the real event never gets raised Please Note: Unfortunately, it is common in.NET literature to see statements like “…take a look at the OnPaint event handler…” Problem is that base (ancestor) does not get called and thus the real event never gets raised

13 13 Events Events allow customization through delegation Events are properties Implemented using Delegates Events are optional Events allow customization through delegation Events are properties Implemented using Delegates Events are optional

14 14 Creating a Custom Event Determine the action that triggers event Define the event type (i.e. the Delegate) Specifies the parameters that will be sent to an event handler Declare the event property Singleton Event (read/write) Multicast Event (add/remove) Dispatch the event when it occurs. Determine the action that triggers event Define the event type (i.e. the Delegate) Specifies the parameters that will be sent to an event handler Declare the event property Singleton Event (read/write) Multicast Event (add/remove) Dispatch the event when it occurs.

15 15 Determine Event Trigger Events allow developers to “hook” into normal processing Example Generate a ValueChanged event when data represented by the component changes Events allow developers to “hook” into normal processing Example Generate a ValueChanged event when data represented by the component changes

16 16 Delegates The FCL utilizes Delegates to support events A delegate is a class that encapsulates a linked-list of method pointers With delegates an event can be sent to multiple subscribers Specify the parameters that will be sent to event handlers. The FCL utilizes Delegates to support events A delegate is a class that encapsulates a linked-list of method pointers With delegates an event can be sent to multiple subscribers Specify the parameters that will be sent to event handlers.

17 17 Define the Delegate May be possible to use predefined delegate e.g. EventHandler First parameter always “object sender” Second parameter always EventArgs or descendant If you require passing additional parameters, you’ll need to create a new EventArgs descendant May be possible to use predefined delegate e.g. EventHandler First parameter always “object sender” Second parameter always EventArgs or descendant If you require passing additional parameters, you’ll need to create a new EventArgs descendant ValueChangingEventHandler = procedure ( sender: System.Object; e: ValueChangingEventArgs ) of object; ValueChangingEventHandler = procedure ( sender: System.Object; e: ValueChangingEventArgs ) of object;

18 18 Declare the Event Property Unlike the VCL, by convention event names in the FCL do not start with “On” // Multicast Event property ValueChanged: EventHandler add FValueChanged remove FValueChanged; // Singleton Event property ValueChanging: ValueChangingEventHandler read FValueChanging write FValueChanging; // Multicast Event property ValueChanged: EventHandler add FValueChanged remove FValueChanged; // Singleton Event property ValueChanging: ValueChangingEventHandler read FValueChanging write FValueChanging;

19 19 Raise the Event Use an Event Dispatch Method In FCL, event dispatch methods start with “On” Usually defined as strict protected and virtual Calling the event (e.g. FValueChanged) causes all of the event handlers in the delegate’s list to be called Use an Event Dispatch Method In FCL, event dispatch methods start with “On” Usually defined as strict protected and virtual Calling the event (e.g. FValueChanged) causes all of the event handlers in the delegate’s list to be called procedure RkSpinner.OnValueChanged( E: EventArgs ); begin if Assigned( FValueChanged ) then FValueChanged( Self, E ); end; procedure RkSpinner.OnValueChanged( E: EventArgs ); begin if Assigned( FValueChanged ) then FValueChanged( Self, E ); end;

20 20 Custom Painting Custom painting is supported by Graphics class (i.e. GDI+) System.Drawing System.Drawing.Drawing2D System.Drawing.Imaging System.Drawing.Text GDI+ Features Alpha Blending & Anti-Aliased 2D Drawing Gradient Brushes Universal Transformations & Floating Point coordinates Support for more Image formats BMP, GIF, JPEG, PNG, TIFF, ICON, WMF, EMF. Custom painting is supported by Graphics class (i.e. GDI+) System.Drawing System.Drawing.Drawing2D System.Drawing.Imaging System.Drawing.Text GDI+ Features Alpha Blending & Anti-Aliased 2D Drawing Gradient Brushes Universal Transformations & Floating Point coordinates Support for more Image formats BMP, GIF, JPEG, PNG, TIFF, ICON, WMF, EMF.

21 21 GDI+ Programming Model No more device contexts (DC) – Graphics Object GDI+ is Stateless No more selecting pens and brushes into a DC Pens, Brushes, etc. are passed to each GDI+ drawing method Graphic elements are no longer drawn with both Pen and Brush Draw methods use a Pen (eg. DrawRectangle) Fill methods use a Brush (eg. FillEllipse). No more device contexts (DC) – Graphics Object GDI+ is Stateless No more selecting pens and brushes into a DC Pens, Brushes, etc. are passed to each GDI+ drawing method Graphic elements are no longer drawn with both Pen and Brush Draw methods use a Pen (eg. DrawRectangle) Fill methods use a Brush (eg. FillEllipse).

22 22 GDI+ Programming Model Colors support Alpha Channels ARGB format 0x880000FF semi-transparent blue A = 0x00 fully transparent A = 0xFF fully opaque Rectangles, Points, etc. are classes r.Inflate( 5, 5 ); // Instead of InflateRect( r, 5, 5 ); Rectangles are defined differently! Left, Top, Width, Height. Colors support Alpha Channels ARGB format 0x880000FF semi-transparent blue A = 0x00 fully transparent A = 0xFF fully opaque Rectangles, Points, etc. are classes r.Inflate( 5, 5 ); // Instead of InflateRect( r, 5, 5 ); Rectangles are defined differently! Left, Top, Width, Height.

23 23 GDI+ Programming Model Obtaining a Graphics Object Passed to OnPaint methods in PaintEventArgs Request one using Graphics.FromHwnd( Handle ) If utilizing double-buffering, do not use FromHwnd Cleaning Up Dispose all GDI+ objects Dispose Graphics object if requested via FromHwnd Obtaining a Graphics Object Passed to OnPaint methods in PaintEventArgs Request one using Graphics.FromHwnd( Handle ) If utilizing double-buffering, do not use FromHwnd Cleaning Up Dispose all GDI+ objects Dispose Graphics object if requested via FromHwnd

24 24 Attributes Attributes used to modify the behavior of properties, methods, events [ Category( 'Appearance' ), Description( 'The width of buttons, in pixels.' ), DefaultValue( 18 ) ] property ButtonWidth: Integer read FButtonWidth write SetButtonWidth; [ Category( 'Appearance' ), Description( 'The width of buttons, in pixels.' ), DefaultValue( 18 ) ] property ButtonWidth: Integer read FButtonWidth write SetButtonWidth;

25 25 Attributes Category Description Browsable DefaultValue DefaultProperty & DefaultEvent Localizable ToolboxBitmap Category Description Browsable DefaultValue DefaultProperty & DefaultEvent Localizable ToolboxBitmap

26 26 Example RayKonopka.Delphi.Controls Assembly RkSpinner Component RayKonopka.Delphi.Controls Assembly RkSpinner Component

27 27 References Microsoft Development Network (MSDN) Design Guidelines for Class Library Developers Developing Components Developing Windows Forms Controls Applied.NET Framework Development Jeffrey Richter Programming Microsoft.NET Jeff Prosise Microsoft Development Network (MSDN) Design Guidelines for Class Library Developers Developing Components Developing Windows Forms Controls Applied.NET Framework Development Jeffrey Richter Programming Microsoft.NET Jeff Prosise

28 28 The Finish Line Contact Information Evaluation Forms Questions & Answers Contact Information Evaluation Forms Questions & Answers Ray Konopka rkonopka@raize.com http://www.raize.com Ray Konopka rkonopka@raize.com http://www.raize.com


Download ppt "Ray Konopka Creating Custom Microsoft.NET Framework Controls in Delphi."

Similar presentations


Ads by Google