If you've read some of my earlier posts you know I have been struggling with thinking like a Delphi OOP programmer. I am self-taught. I started with Turbo Pascal 3. And I've been stuck in the top-down, structured mindset for a very long time. Until now.
A few days ago I rediscovered an older (still relevant) book that has been siting on my bookshelf for over twenty years. It's called Delevoping Custom Delphi 3 Components. It was written by Ray Konopka ( https://delphibydesign.com/).
"This book is the greatest Delphi book ever."
I posted this image to the Delphi Developer group on Facebook.Warren Postma, who writes the Delphi Code Monkey blog (http://delphicodemonkey.blogspot.com/), made this comment about the book. "This book is the greatest Delphi book ever."
I have only read through the first 43 pages. And I agree 100% with Postma. This is probably the greatest Delphi book ever written.
I never heard of Class References before. Maybe I did and just don't remember. But it doesn't matter. Konopka introduces Delphi's Class References on page 42. He says, "Class references are typically used to treat a number of different classes as a single class." Then he goes on to explain how this works with a short, concise, extremely meaningful example. The Class Reference used is TControlClass.
Click! I get the concept. It's extremely powerful. Do I see an immediate need for implementing the use of a Class Reference? No. That doesn't mean it's not worth knowing about. Just having the knowledge that this is available is valuable.
I used to coach little league baseball when my boys were younger. There were usually twelve or thirteen kids on a team. You can only field nine kids at a time. So, a few of the kids sat on the bench and would get subbed into other positions as the game went on. One would become a right-fielder, one would become the second-baseman. And sometimes I'd do a double swap and replace the pitcher with a kid off the bench and replace the left-fielder with the kid who was pitching.
That's a nice little story Riley, but what does this have to do with Delphi's Class References?
Each position on a baseball team is filled by a baseball-player. Each individual position on the baseball team is slightly different but they all have one thing in common. They are all baseball-players for example;
- TRightFielder : TBaseballPlayer;
- TSecondBaseman : TBaseballPlayer;
- TPitcher : TBaseballPlayer;
- TLeftFielder : TBaseballPlayer;
There comes a time when you need to substitute a player or two, or three. Because we all know how mad the parents get when their kid doesn't play. So you have a player-substitute. But this player needs to play any position or quite possibly switch positions.
TBasballPlayerClass = class of TBaseballPlayer;
This lets you do suff like this:
Sub : TBaseballPlayerClass;
Sub1 : TBaseballPlayer;
Sub2 : TBaseballPlayer;
Sub3 : TBaseballPlayer;
Sub1 := Sub.Create ( Self ); //Sitting on the bench waiting to play
Sub2 := Sub.Create ( Self ); //Sitting on the bench waiting to play
Sub3 := Sub.Create ( Self ); //Sitting on the bench waiting to play
Sub1 := TBaseballPlayerClass ( TRightFielder ); //Play Right Field
Sub2 := TBaseballPlayerClass ( TSecondBaseman ); //Play Second Base
Sub3 := TBaseballPlayerClass ( TPitcher ); //Go Pitch
or if you change your mind at the last minute
Sub1 := Sub3; //You pitch instead
Sub3 := TBaseballPlayerClass ( TRightFielder ); //You go to Right Field
Once I understood the power and concept of Delphi's Class References I wondered just how many Class References are out there. So I did a search and created this list.
Enjoy
Semper Fi
Gunny Mike
https://zilchworks.com
Feedback is always welcome
Sub : TBaseballPlayerClass;
Sub1 : TBaseballPlayer;
Sub2 : TBaseballPlayer;
Sub3 : TBaseballPlayer;
Sub1 := Sub.Create ( Self ); //Sitting on the bench waiting to play
Sub2 := Sub.Create ( Self ); //Sitting on the bench waiting to play
Sub3 := Sub.Create ( Self ); //Sitting on the bench waiting to play
Sub1 := TBaseballPlayerClass ( TRightFielder ); //Play Right Field
Sub2 := TBaseballPlayerClass ( TSecondBaseman ); //Play Second Base
Sub3 := TBaseballPlayerClass ( TPitcher ); //Go Pitch
or if you change your mind at the last minute
Sub1 := Sub3; //You pitch instead
Sub3 := TBaseballPlayerClass ( TRightFielder ); //You go to Right Field
Once I understood the power and concept of Delphi's Class References I wondered just how many Class References are out there. So I did a search and created this list.
Enjoy
Semper Fi
Gunny Mike
https://zilchworks.com
Feedback is always welcome
File Location | Class Reference |
data\Data.DB.pas | TCheckConstraintClass = class of TCheckConstraint; |
data\Data.DB.pas | TCheckConstraintsClass = class of TCheckConstraints; |
data\Data.DB.pas | TDataSetClass = class of TDataSet; |
data\Data.DB.pas | TFieldClass = class of TField; |
data\Data.DB.pas | TFieldDefClass = class of TFieldDef; |
data\Data.DB.pas | TFieldDefListClass = class of TFieldDefList; |
data\Data.DB.pas | TFieldDefsClass = class of TFieldDefs; |
data\Data.DB.pas | TFieldListClass = class of TFieldList; |
data\Data.DB.pas | TFieldsClass = class of TFields; |
data\Data.DB.pas | TIndexDefClass = class of TIndexDef; |
data\Data.DB.pas | TIndexDefsClass = class of TIndexDefs; |
data\Data.DB.pas | TLookupListClass = class of TLookupList; |
data\Data.DB.pas | TParamClass = class of TParam; |
data\Data.DB.pas | TParamObjectClass = class of TParamObject; |
data\Data.DB.pas | TParamsClass = class of TParams; |
. | |
data\datasnap\Datasnap.DSHTTPClient.pas | TDSHTTPClass = class of TDSHTTP; |
. | |
data\datasnap\Datasnap.DSReflect.pas | TDSAdapterClassType = class of TDSAdapterClass; |
. | |
data\datasnap\Datasnap.DSServer.pas | TServerClassAdapterClass = class of TServerClassAdapter; |
. | |
data\dbx\Data.DBXClient.pas | TDBXClientDriverLoaderClass = class of TObject; |
. | |
data\dbx\Data.DBXCommon.pas | TDBXDriverClass = class of TDBXDriver; |
data\dbx\Data.DBXCommon.pas | TDBXDriverLoaderClass = class of TDBXDriverLoader; |
data\dbx\Data.DBXCommon.pas | TDBXPropertiesClass = class of TDBXProperties; |
. | |
data\dbx\Data.DBXDynalink.pas | TDBXDynalinkDriverCommonLoaderClass = class of TDBXDynalinkDriverCommonLoader; |
data\dbx\Data.DBXDynalink.pas | TDBXDynalinkDriverLoaderClass = class of TClassRegistryObject; // class of TObject; |
. | |
data\dbx\Data.DBXPlatform.pas | TObjectClass = class of TFactoryObject; |
data\dbx\Data.DBXPlatform.pas | TTransportFilterClass = class of TBaseTransportFilter; |
. | |
data\dsnap\Datasnap.DataBkr.pas | TRemoteDataModuleClass = class of TRemoteDataModule; |
. | |
data\ems\EMS.DataSetResource.pas | TEMSDataSetAdaptorClass = class of TEMSDataSetAdaptor; |
. | |
data\firedac\FireDAC.Comp.BatchMove.pas | TFDBatchMoveDriverClass = class of TFDBatchMoveDriver; |
. | |
data\firedac\FireDAC.Comp.Client.pas | TFDCustomConnectionClass = class of TFDCustomConnection; |
data\firedac\FireDAC.Comp.Client.pas | TFDCustomManagerClass = class of TFDCustomManager; |
. | |
data\firedac\FireDAC.Comp.Script.pas | TFDScriptCommandClass = class of TFDScriptCommand; |
. | |
data\firedac\FireDAC.DatS.pas | TFDDatSMechBaseClass = class of TFDDatSMechBase; |
data\firedac\FireDAC.DatS.pas | TFDDatSObjectClass = class of TFDDatSObject; |
. | |
data\firedac\FireDAC.Phys.MongoDBWrapper.pas | TOperationClass = class of TOperation; |
. | |
data\firedac\FireDAC.Phys.ODBCWrapper.pas | EODBCNativeExceptionClass = class of EODBCNativeException; |
data\firedac\FireDAC.Phys.ODBCWrapper.pas | TODBCLibClass = class of TODBCLib; |
. | |
data\firedac\FireDAC.Phys.OracleWrapper.pas | TOCILobLocatorClass = class of TOCILobLocator; |
data\firedac\FireDAC.Phys.OracleWrapper.pas | TOCICollectionClass = class of TOCICollection; |
. | |
data\firedac\FireDAC.Phys.pas | TFDPhysConnectionClass = class of TFDPhysConnection; |
data\firedac\FireDAC.Phys.pas | TFDPhysDriverClass = class of TFDPhysDriver; |
. | |
data\firedac\FireDAC.Phys.PGWrapper.pas | TPgVariableClass = class of TPgVariable; |
. | |
data\firedac\FireDAC.Phys.SQLiteWrapper.pas | TSQLiteExtensionClass = class of TSQLiteExtension; |
. | |
data\firedac\FireDAC.Phys.SQLiteWrapper.pas | TSQLiteVModuleClass = class of TSQLiteVModule; |
. | |
data\firedac\FireDAC.Stan.Def.pas | TFDDefinitionClass = class of TFDDefinition; |
. | |
data\firedac\FireDAC.Stan.Error.pas | EFDDBEngineExceptionClass = class of EFDDBEngineException; |
data\firedac\FireDAC.Stan.Error.pas | EFDExceptionClass = class of EFDException; |
data\firedac\FireDAC.Stan.Error.pas | TFDDBErrorClass = class of TFDDBError; |
. | |
data\firedac\FireDAC.Stan.Factory.pas | TFDObjectClass = class of TFDObject; |
. | |
data\firedac\FireDAC.Stan.Intf.pas | TFDConnectionDefParamsClass = class of TFDConnectionDefParams; |
data\firedac\FireDAC.Stan.Intf.pas | TFDStorableObjectClass = class of TFDStorableObject; |
. | |
data\firedac\FireDAC.Stan.Option.pas | TFDFetchOptionsClass = class of TFDFetchOptions; |
data\firedac\FireDAC.Stan.Option.pas | TFDResourceOptionsClass = class of TFDResourceOptions; |
data\firedac\FireDAC.Stan.Option.pas | TFDUpdateOptionsClass = class of TFDUpdateOptions; |
. | |
data\firedac\FireDAC.Stan.Util.pas | TFDThreadMsgClass = class of TFDThreadMsgBase; |
. | |
data\rest\REST.Authenticator.OAuth.pas | TOAuth1SignatureMethodClass = class of TOAuth1SignatureMethod; |
. | |
data\rest\REST.Backend.EMSApi.pas | TEMSClientHTTPErrorClass = class of EEMSClientHTTPError; |
data\rest\REST.Backend.KinveyApi.pas | TKinveyAPIErrorClass = class of EKinveyAPIError; |
data\rest\REST.Backend.ParseAPI.pas | TParseAPIErrorClass = class of EParseAPIError; |
. | |
data\vclctrls\Vcl.DBGrids.pas | TColumnClass = class of TColumn; |
. | |
databinding\components\Data.Bind.Components.pas | TBindEditorFactoryClass = class of TBindEditorFactory; |
databinding\components\Data.Bind.Components.pas | TContainedBindCompClass = class of TContainedBindComponent; |
. | |
databinding\components\Data.Bind.DBLinks.pas | TBaseDBGridLinkColumnClass = class of TBaseDBGridLinkColumn; |
databinding\components\Data.Bind.DBLinks.pas | TBindDBColumnFactoryClass = class of TBindDBColumnFactory; |
. | |
databinding\components\Data.Bind.Grid.pas | TBaseLinkGridToDataSourceColumnClass = class of TBaseLinkGridToDataSourceColumn; |
databinding\components\Data.Bind.Grid.pas | TLinkGridToDataSourceColumnFactoryClass = class of TLinkGridToDataSourceColumnFactory; |
. | |
databinding\components\Data.Bind.ObjectScope.pas | TBindFieldDefClass = class of TBindFieldDef; |
databinding\components\Data.Bind.ObjectScope.pas | TBindFieldDefsClass = class of TBindFieldDefs; |
databinding\components\Data.Bind.ObjectScope.pas | TGeneratorBindFieldDefsClass = class of TGeneratorFieldDefs; |
databinding\components\Data.Bind.ObjectScope.pas | TValueGeneratorClass = class of TValueGenerator; |
. | |
databinding\engine\System.Bindings.CustomScope.pas | TScopeClass = class of TCustomScope; |
. | |
databinding\graph\GraphView.pas | TGraphEdgeClass = class of TGraphEdge; |
databinding\graph\GraphView.pas | TGraphNodeClass = class of TGraphNode; |
. | |
DUnit\Contrib\DUnitWizard\Source\Common\XPWinBase.pas | TTEXPWin32 = class of EXPWin32; |
"DUnit\Contrib\DUnitWizard\Source\DelphiExperts\DUnitProject\ dunit\Examples\TestedUnitParserTest_1.pas" | TTClass = class of TXPStubClass1; |
. | |
DUnit\examples\testexception\Unit1Test.pas | ExceptionClass = class of Exception; |
. | |
DUnit\src\TestFramework.pas | ExceptionClass = class of Exception; |
DUnit\src\TestFramework.pas | TTestCaseClass = class of TTestCase; |
. | |
DunitX\DUnitX.ComparableFormat.pas | TDUnitXComparableFormatClass = class of TDUnitXComparableFormat; |
. | |
DunitX\DUnitX.InternalDataProvider.pas | TTestDataProviderClass = class of TTestDataProvider; |
. | |
DunitX\DUnitX.Utils.pas | TCustomAttributeClass = class of TCustomAttribute; |
. | |
Experts\DSServerMethodsExpertsCreators.pas | TDSServerMethodsCreatorModuleClass = class of TDSServerMethodsCreatorModule; |
. | |
fmx\FMX.ActnList.pas | TActionLinkClass = class of TActionLink; |
. | |
fmx\FMX.Controls.Model.pas | TDataModelClass = class of TDataModel; |
. | |
fmx\FMX.Controls.pas | TCustomTextSettingsClass = class of TCustomTextSettings; |
fmx\FMX.Controls.pas | THintClass = class of THint; |
. | |
fmx\FMX.Controls.Presentation.pas | TPresentationProxyClass = class of TPresentationProxy; |
. | |
fmx\FMX.Filter.pas | TFilterClass = class of TFilter; |
. | |
fmx\FMX.Gestures.pas | TCustomGestureRecognizerClass = class of TCustomGestureRecognizer; |
fmx\FMX.Gestures.pas | TGestureEngineClass = class of TCustomGestureEngine; |
fmx\FMX.Gestures.pas | TGestureEngineType = class of TGestureEngine; |
fmx\FMX.Gestures.pas | TGestureStreamDataClass = class of TGestureStreamData; |
. | |
fmx\FMX.Graphics.pas | TCanvasClass = class of TCanvas; |
fmx\FMX.Graphics.pas | TCustomBitmapCodecClass = class of TCustomBitmapCodec; |
fmx\FMX.Graphics.pas | TFontClass = class of TFont; |
fmx\FMX.Graphics.pas | TFontColorForStateClass = class of TFontColorForState; |
fmx\FMX.Graphics.pas | TPrinterCanvasClass = class of TPrinterCanvas; |
fmx\FMX.Graphics.pas | TTextSettingsClass = class of TTextSettings; |
. | |
fmx\FMX.Grid.iOS.pas | TColumnLinkClass = class of TColumnLink; |
fmx\FMX.Grid.iOS.pas | TiOSCellControlClass = class of TiOSCellControl; |
. | |
fmx\FMX.Grid.pas | TColumnClass = class of TColumn; |
. | |
fmx\FMX.Helpers.Mac.pas | TOSXMessageClass = class of TOSXMessage; |
. | |
fmx\FMX.ImgList.pas | TDestinationItemClass = class of TCustomDestinationItem; |
fmx\FMX.ImgList.pas | TImageListClass = class of TCustomImageList; |
fmx\FMX.ImgList.pas | TLayerClass = class of TLayer; |
fmx\FMX.ImgList.pas | TSourceItemClass = class of TCustomSourceItem; |
. | |
fmx\FMX.ListBox.pas | TListBoxSelectorClass = class of TListBoxSelector; |
. | |
fmx\FMX.ListView.Appearances.pas | TGroupClass = class of TPresetItemObjects; |
fmx\FMX.ListView.Appearances.pas | TItemAppearanceObjectsClass = class of TItemAppearanceObjects; |
fmx\FMX.ListView.Appearances.pas | TListItemObjectClass = class of TListItemDrawable; |
. | |
fmx\FMX.ListView.Types.pas | TListItemViewType = class of TListItemView; |
. | |
fmx\FMX.Media.pas | TCaptureDeviceClass = class of TCaptureDevice; |
fmx\FMX.Media.pas | TCustomMediaCodecClass = class of TCustomMediaCodec; |
. | |
fmx\FMX.MultiResBitmap.pas | TFixedBitmapItemClass = class of TFixedBitmapItem; |
fmx\FMX.MultiResBitmap.pas | TCustomBitmapItemClass = class of TCustomBitmapItem; |
. | |
fmx\FMX.MultiView.pas | TMultiViewPresentationClass = class of TMultiViewPresentation; |
. | |
fmx\FMX.Presentation.Android.pas | TAndroidNativeViewClass = class of TAndroidNativeView; |
. | |
fmx\FMX.Presentation.iOS.pas | TiOSNativeViewClass = class of TiOSNativeView; |
. | |
fmx\FMX.Presentation.Style.Common.pas | TNativeStyledControlClass = class of TNativeStyledControl; |
. | |
fmx\FMX.Presentation.Style.pas | TStyledPresentationClass = class of TStyledPresentation; |
. | |
fmx\FMX.Presentation.Win.pas | TWinPresentationClass = class of TWinPresentation; |
. | |
fmx\FMX.Printer.pas | TPrinterClass = class of TPrinter; |
. | |
fmx\FMX.StdActns.pas | TCustomValueRangeClass = class of TCustomValueRange; |
. | |
fmx\FMX.TabControl.pas | TTabItemClass = class of TTabItem; |
. | |
fmx\FMX.Text.pas | TTextServiceClass = class of TTextService; |
. | |
fmx\FMX.TextLayout.pas | TTextLayoutClass = class of TTextLayout; |
. | |
fmx\FMX.Types.pas | TCaretClass = class of TCustomCaret; |
fmx\FMX.Types.pas | TFmxObjectClass = class of TFmxObject; |
fmx\FMX.Types.pas | TTabListClass = class of TTabList; |
. | |
fmx\FMX.Types3D.pas | TContextClass = class of TContext3D; |
fmx\FMX.Types3D.pas | TMaterialClass = class of TMaterial; |
. | |
Indy10\Core\IdCommandHandlers.pas | TIdCommandHandlerClass = class of TIdCommandHandler; |
. | |
Indy10\Core\IdContext.pas | TIdContextClass = class of TIdContext; |
. | |
Indy10\Core\IdCustomTCPServer.pas | TIdServerContextClass = class of TIdServerContext; |
. | |
Indy10\Core\IdCustomTransparentProxy.pas | TIdCustomTransparentProxyClass = class of TIdCustomTransparentProxy; |
. | |
Indy10\Core\IdIOHandler.pas | TIdIOHandlerClass = class of TIdIOHandler; |
. | |
Indy10\Core\IdReply.pas | TIdRepliesClass = class of TIdReplies; |
Indy10\Core\IdReply.pas | TIdReplyClass = class of TIdReply; |
. | |
Indy10\Core\IdServerIOHandlerSocket.pas | TIdIOHandlerSocketClass = class of TIdIOHandlerSocket; |
. | |
Indy10\Core\IdThread.pas | TIdThreadClass = class of TIdThread; |
Indy10\Core\IdThread.pas | TIdThreadWithTaskClass = class of TIdThreadWithTask; |
. | |
Indy10\Core\IdUDPServer.pas | TIdUDPListenerThreadClass = class of TIdUDPListenerThread; |
. | |
Indy10\Protocols\IdAttachment.pas | TIdAttachmentClass = class of TIdAttachment; |
. | |
Indy10\Protocols\IdAuthentication.pas | TIdAuthenticationClass = class of TIdAuthentication; |
. | |
Indy10\Protocols\IdCoder.pas | TIdDecoderClass = class of TIdDecoder; |
Indy10\Protocols\IdCoder.pas | TIdEncoderClass = class of TIdEncoder; |
. | |
Indy10\Protocols\IdCoder3to4.pas | TIdEncoder3to4Class = class of TIdEncoder3to4; |
. | |
Indy10\Protocols\IdCookie.pas | TIdCookieClass = class of TIdCookie; |
. | |
Indy10\Protocols\IdDNSResolver.pas | TResultRecordClass = class of TResultRecord; |
. | |
Indy10\Protocols\IdDNSServer.pas | TIdMWayTreeNodeClass = class of TIdMWayTreeNode; |
. | |
Indy10\Protocols\IdFTPListParseBase.pas | TIdFTPListParseClass = class of TIdFTPListBase; |
. | |
Indy10\Protocols\IdHash.pas | TIdHashClass = class of TIdHash; |
. | |
Indy10\Protocols\IdHeaderCoderBase.pas | TIdHeaderCoderClass = class of TIdHeaderCoder; |
. | |
Indy10\Protocols\IdMessageCoder.pas | TIdMessageEncoderClass = class of TIdMessageEncoder; |
. | |
Indy10\Protocols\IdMessageCollection.pas | TIdMessageItems = class of TIdMessageItem; |
. | |
Indy10\Protocols\IdMessageParts.pas | TIdMessagePartClass = class of TIdMessagePart; |
. | |
Indy10\Protocols\IdSSL.pas | TIdClientSSLClass = class of TIdSSLIOHandlerSocketBase; |
Indy10\Protocols\IdSSL.pas | TIdServerSSLClass = class of TIdServerIOHandlerSSLBase; |
. | |
Indy10\Protocols\IdSSLOpenSSLHeaders.pas | TIdOpenSSLAPICryptoError = class of EIdOpenSSLAPICryptoError; |
Indy10\Protocols\IdSSLOpenSSLHeaders.pas | TIdOpenSSLAPISSLError = class of EIdOpenSSLAPISSLError; |
. | |
Indy10\Protocols\IdZLibCompressorBase.pas | TIdZLibCompressorBaseClass = class of TIdZLibCompressorBase; |
. | |
Indy10\System\IdException.pas | TClassIdException = class of EIdException; |
. | |
Indy10\System\IdStack.pas | TIdSocketListClass = class of TIdSocketList; |
Indy10\System\IdStack.pas | TIdStackClass = class of TIdStack; |
. | |
internet\WBComp.pas | TBehaviorElementEventsClass = class of TBehaviorElementEvents; |
internet\WBComp.pas | TCustomElementBehaviorClass = class of TCustomElementBehavior; |
. | |
internet\Web.CGIHTTP.pas | TCGIRequestClass = class of TCGIRequest; |
internet\Web.CGIHTTP.pas | TCGIResponseClass = class of TCGIResponse; |
internet\Web.CGIHTTP.pas | TWinCGIRequestClass = class of TWinCGIRequest; |
internet\Web.CGIHTTP.pas | TWinCGIResponseClass = class of TWinCGIResponse; |
. | |
internet\Web.DBWeb.pas | THTMLTableColumnClass = class of THTMLTableColumn; |
. | |
internet\Web.HTTPApp.pas | TContentParserClass = class of TAbstractContentParser; |
. | |
internet\Web.Win.ISAPIThreadPool.pas | TISAPIThreadPoolClass = class of TISAPIThreadPool; |
. | |
Property Editors\BindCompEdit.pas | TBindScopeFactoryClass = class of TBindScopeFactory; |
Property Editors\BindCompEdit.pas | TComponentClassFactoryClass = class of TControlClassFactory; |
Property Editors\BindCompEdit.pas | TControlFactoryClass = class of TControlFactory; |
Property Editors\BindCompEdit.pas | // TControlFrameFactoryClass = class of TControlFrameFactory; |
Property Editors\BindCompEdit.pas | TDataBindingListDesignerClass = class of TDataBindingListDesigner; |
Property Editors\BindCompEdit.pas | TNavigatorFactoryClass = class of TNavigatorFactory; |
. | |
Property Editors\BindCompExprEdit.pas | TBindCompExprDesignerClass = class of TBindCompExprDesigner; |
Property Editors\BindCompExprEdit.pas | // TItemStateClass = class of TItemState; |
. | |
Property Editors\BindVisualizers.pas | TBindExpressionVisualizerClass = class of TBindExpressionVisualizer; |
. | |
Property Editors\ColnEdit.pas | TCollectionEditorClass = class of TCollectionEditor; |
. | |
Property Editors\DSDesign.pas | TDSDesignerClass = class of TDSDesigner; |
Property Editors\DSDefine.pas | TFieldAccessClass = class of TFieldAccess; |
. | |
Property Editors\OCXReg.pas | TOleObjectEditorClass = class of TOleObjectEditor; |
. | |
rtl\common\System.Actions.pas | TContainedActionClass = class of TContainedAction; |
rtl\common\System.Actions.pas | TContainedActionLinkClass = class of TContainedActionLink; |
rtl\common\System.Actions.pas | TContainedActionListClass = class of TContainedActionList; |
. | |
rtl\common\System.Classes.pas | TBasicActionClass = class of TBasicAction; |
rtl\common\System.Classes.pas | TBasicActionLinkClass = class of TBasicActionLink; |
rtl\common\System.Classes.pas | TCollectionItemClass = class of TCollectionItem; |
rtl\common\System.Classes.pas | TComponentClass = class of TComponent; |
rtl\common\System.Classes.pas | TPersistentClass = class of TPersistent; |
. | |
rtl\common\System.Notification.pas | TBaseNotificationCenterClass = class of TBaseNotificationCenter; |
. | |
rtl\common\System.Permissions.pas | TPermissionsServiceClass = class of TPermissionsService; |
. | |
rtl\common\System.Rtti.pas | TRttiClass = class of TRttiObject; |
. | |
rtl\common\System.Sensors.pas | ESensorExceptionClass = class of ESensorException; |
rtl\common\System.Sensors.pas | TGeocoderClass = class of TGeocoder; |
rtl\common\System.Sensors.pas | TGpsStatusClass = class of TGpsStatus; |
rtl\common\System.Sensors.pas | TSensorManagerType = class of TSensorManager; |
. | |
rtl\common\System.Win.ComObj.pas | TAutoClass = class of TAutoObject; |
rtl\common\System.Win.ComObj.pas | TComClass = class of TComObject; |
rtl\common\System.Win.ComObj.pas | TTypedComClass = class of TTypedComObject; |
. | |
rtl\common\System.Win.VCLCom.pas | TComponentProtectedAccessClass = class of TComponentProtectedAccess; |
. | |
rtl\net\System.Beacon.pas | TBeaconManufacturerDataParserClass = class of TBeaconManufacturerDataParser; |
. | |
rtl\net\System.Bluetooth.pas | TBluetoothManagerClass = class of TBluetoothLEManager; |
rtl\net\System.Bluetooth.pas | TBluetoothManagerClass = class of TBluetoothManager; |
. | |
rtl\net\System.Net.URLClient.pas | TURLClientClass = class of TURLClient; |
. | |
rtl\sys\System.pas | TClass = class of TObject; |
rtl\sys\System.pas | TClassHelperBaseClass = class of TClassHelperBase; |
rtl\sys\System.pas | TInterfacedClass = class of TInterfacedObject; |
. | |
rtl\sys\System.SysUtils.pas | ExceptClass = class of Exception; |
. | |
rtl\sys\System.Types.pas | TMultiWaitEventClass = class of TMultiWaitEvent; |
. | |
rtl\sys\System.Variants.pas | TCustomVariantTypeClass = class of TCustomVariantType; |
. | |
soap\Soap.InvokeRegistry.pas | ERemotableExceptionClass = class of ERemotableException; |
soap\Soap.InvokeRegistry.pas | TInvokableClassClass = class of TInvokableClass; |
soap\Soap.InvokeRegistry.pas | TRemotableClass = class of TRemotable; |
soap\Soap.InvokeRegistry.pas | TRemotableXSClass = class of TRemotableXS; |
soap\Soap.InvokeRegistry.pas | TSOAPAttachmentClass = class of TSOAPAttachment; |
soap\Soap.InvokeRegistry.pas | TSOAPHeaderClass = class of TSOAPHeader; |
. | |
soap\wsdlimporter\WSDLCppWriter.pas | TWSDLCppWriterClass = class of TWSDLCppWriter; |
. | |
soap\wsdlimporter\WSDLImpWriter.pas | TWSDLWriterClass = class of TWSDLWriter; |
. | |
soap\wsdlimporter\WSDLpasWriter.pas | TWSDLpasWriterClass = class of TWSDLpasWriter; |
. | |
tethering\System.Tether.Manager.pas | TTetheringAdapterClass = class of TTetheringAdapter; |
tethering\System.Tether.Manager.pas | TTetheringProfileClass = class of TTetheringProfile; |
tethering\System.Tether.Manager.pas | TTetheringProtocolClass = class of TTetheringProtocol; |
. | |
ToolsAPI\ActionEditors.pas | TIDEActionsClass = class of TIDEActions; |
. | |
ToolsAPI\DataExplorerAPI.pas | TFrameClass = class of TFrame; |
. | |
ToolsAPI\DesignIntf.pas | TComponentEditorClass = class of TBaseComponentEditor; |
ToolsAPI\DesignIntf.pas | TComponentGuidelinesClass = class of TBaseComponentGuidelines; |
ToolsAPI\DesignIntf.pas | TCustomModuleClass = class of TBaseCustomModule; |
ToolsAPI\DesignIntf.pas | TDragTargetClass = class of TDragTarget; |
ToolsAPI\DesignIntf.pas | TPropertyEditorClass = class of TBasePropertyEditor; |
ToolsAPI\DesignIntf.pas | TSelectionEditorClass = class of TBaseSelectionEditor; |
. | |
ToolsAPI\PropertyCategories.pas | TPropertyCategoryClass = class of TPropertyCategory; |
. | |
ToolsAPI\TreeIntf.pas | TComponentSprigClass = class of TComponentSprig; |
ToolsAPI\TreeIntf.pas | TRootSprigClass = class of TRootSprig; |
ToolsAPI\TreeIntf.pas | TSprigClass = class of TSprig; |
. | |
vcl\CtlPanel.pas | TAppletModuleClass = class of TAppletModule; |
vcl\CtlPanel.pas | TCPLAppletClass = class of TAppletModule; |
vcl\CtlPanel.pas | TDataModuleClass = class of TDataModule; |
. | |
vcl\Vcl.ActnCtrls.pas | TCustomToolScrollBtnClass = class of TCustomToolScrollBtn; |
. | |
vcl\Vcl.ActnList.pas | TActionLinkClass = class of TActionLink; |
. | |
vcl\Vcl.ActnMan.pas | TActionBarItemClass = class of TActionBarItem; |
vcl\Vcl.ActnMan.pas | TActionBarsClass = class of TActionBars; |
vcl\Vcl.ActnMan.pas | TActionClientClass = class of TActionClient; |
vcl\Vcl.ActnMan.pas | TActionClientItemClass = class of TActionClientItem; |
vcl\Vcl.ActnMan.pas | TActionClientLinkClass = class of TActionClientLink; |
vcl\Vcl.ActnMan.pas | TActionClientsClass = class of TActionClients; |
vcl\Vcl.ActnMan.pas | TCommandPropertiesClass = class of TCommandProperties; |
vcl\Vcl.ActnMan.pas | TCustomActionBarClass = class of TCustomActionBar; |
vcl\Vcl.ActnMan.pas | TCustomActionClass = class of TCustomAction; |
vcl\Vcl.ActnMan.pas | TCustomActionControlClass = class of TCustomActionControl; |
vcl\Vcl.ActnMan.pas | TCustomColorMapClass = class of TCustomActionBarColorMap; |
. | |
vcl\Vcl.ActnMenus.pas | TAddRemoveItemClass = class of TCustomAddRemoveItem; |
vcl\Vcl.ActnMenus.pas | TCustomAddRemoveItemClass = class of TCustomAddRemoveItem; |
vcl\Vcl.ActnMenus.pas | TCustomizeActionToolBarClass = class of TCustomizeActionToolBar; |
vcl\Vcl.ActnMenus.pas | TCustomMenuExpandBtnClass = class of TCustomMenuExpandBtn; |
vcl\Vcl.ActnMenus.pas | TCustomPopupClass = class of TCustomActionPopupMenu; |
vcl\Vcl.ActnMenus.pas | TMenuButtonControlClass = class of TCustomMenuButton; |
vcl\Vcl.ActnMenus.pas | TMenuItemControlClass = class of TCustomMenuItem; |
. | |
vcl\Vcl.AxCtrls.pas | TActiveFormClass = class of TActiveForm; |
vcl\Vcl.AxCtrls.pas | TActiveXControlClass = class of TActiveXControl; |
vcl\Vcl.AxCtrls.pas | TPropertyPageClass = class of TPropertyPage; |
. | |
vcl\Vcl.ButtonGroup.pas | TGrpButtonItemClass = class of TGrpButtonItem; |
vcl\Vcl.ButtonGroup.pas | TGrpButtonItemsClass = class of TGrpButtonItems; |
. | |
vcl\Vcl.CaptionedDockTree.pas | TCaptionedDockTreeClass = class of TCaptionedDockTree; |
vcl\Vcl.CaptionedDockTree.pas | TDockCaptionDrawerClass = class of TDockCaptionDrawer; |
. | |
vcl\Vcl.CategoryButtons.pas | TBaseButtonItemClass = class of TBaseButtonItem; |
vcl\Vcl.CategoryButtons.pas | TButtonCategoriesClass = class of TButtonCategories; |
vcl\Vcl.CategoryButtons.pas | TButtonCategoryClass = class of TButtonCategory; |
vcl\Vcl.CategoryButtons.pas | TButtonItemActionLinkClass = class of TButtonItemActionLink; |
vcl\Vcl.CategoryButtons.pas | TButtonItemClass = class of TButtonItem; |
. | |
vcl\Vcl.ComCtrls.pas | ECommonCalExceptClass = class of Exception; |
vcl\Vcl.ComCtrls.pas | TComboBoxExStringsClass = class of TComboBoxExStrings; |
vcl\Vcl.ComCtrls.pas | TComboExItemClass = class of TComboExItem; |
vcl\Vcl.ComCtrls.pas | TComboExItemsClass = class of TComboExItems; |
vcl\Vcl.ComCtrls.pas | TConversionClass = class of TConversion; |
vcl\Vcl.ComCtrls.pas | THeaderSectionClass = class of THeaderSection; |
vcl\Vcl.ComCtrls.pas | TListColumnClass = class of TListColumn; |
vcl\Vcl.ComCtrls.pas | TListColumnsClass = class of TListColumns; |
vcl\Vcl.ComCtrls.pas | TListItemClass = class of TListItem; |
vcl\Vcl.ComCtrls.pas | TStatusPanelClass = class of TStatusPanel; |
vcl\Vcl.ComCtrls.pas | TToolButtonActionLinkClass = class of TToolButtonActionLink; |
vcl\Vcl.ComCtrls.pas | TTreeNodeClass = class of TTreeNode; |
. | |
vcl\Vcl.Controls.pas | TControlActionLinkClass = class of TControlActionLink; |
vcl\Vcl.Controls.pas | TControlClass = class of TControl; |
vcl\Vcl.Controls.pas | TDockTreeClass = class of TDockTree; |
vcl\Vcl.Controls.pas | TDragObjectClass = class of TDragObject; |
vcl\Vcl.Controls.pas | THintWindowClass = class of THintWindow; |
vcl\Vcl.Controls.pas | TPanningWindowClass = class of TCustomPanningWindow; |
vcl\Vcl.Controls.pas | TWinControlActionLinkClass = class of TWinControlActionLink; |
vcl\Vcl.Controls.pas | TWinControlClass = class of TWinControl; |
. | |
vcl\Vcl.DockTabSet.pas | TTabDockPanelClass = class of TTabDockPanel; |
. | |
vcl\Vcl.ExtCtrls.pas | TCategoryPanelClass = class of TCustomCategoryPanel; |
vcl\Vcl.ExtCtrls.pas | TCategoryPanelSurfaceClass = class of TCategoryPanelSurface; |
vcl\Vcl.ExtCtrls.pas | TEditButtonClass = class of TEditButton; |
. | |
vcl\Vcl.Forms.pas | TCustomFormClass = class of TCustomForm; |
vcl\Vcl.Forms.pas | TCustomFrameClass = class of TCustomFrame; |
vcl\Vcl.Forms.pas | TFormClass = class of TForm; |
. | |
vcl\Vcl.Graphics.pas | TGraphicClass = class of TGraphic; |
. | |
vcl\Vcl.Imaging.GIFImg.pas | TColorLookupClass = class of TColorLookup; |
vcl\Vcl.Imaging.GIFImg.pas | TGIFAppExtensionClass = class of TGIFApplicationExtension; |
vcl\Vcl.Imaging.GIFImg.pas | TGIFExtensionClass = class of TGIFExtension; |
. | |
vcl\Vcl.Imaging.pngimage.pas | ExceptClass = class of Exception; |
vcl\Vcl.Imaging.pngimage.pas | TChunkClass = class of TChunk; |
. | |
vcl\Vcl.ListActns.pas | TListControlItemClass = class of TListControlItem; |
. | |
vcl\Vcl.Menus.pas | TMenuActionLinkClass = class of TMenuActionLink; |
. | |
vcl\Vcl.OleAuto.pas | TAutoClass = class of TAutoObject; |
. | |
vcl\Vcl.ScreenTips.pas | TScreenTipsWindowClass = class of TScreenTipsWindow; |
. | |
vcl\Vcl.StdActns.pas | TCommonDialogClass = class of TCommonDialog; |
. | |
vcl\Vcl.StdCtrls.pas | TButtonActionLinkClass = class of TButtonActionLink; |
vcl\Vcl.StdCtrls.pas | TCustomComboBoxStringsClass = class of TCustomComboBoxStrings; |
vcl\Vcl.StdCtrls.pas | TPushButtonActionLinkClass = class of TPushButtonActionLink; |
. | |
vcl\Vcl.SvcMgr.pas | TServiceClass = class of TService; |
. | |
vcl\Vcl.Themes.pas | TCustomElementServicesClass = class of TCustomElementServices; |
vcl\Vcl.Themes.pas | TCustomStyleEngineClass = class of TCustomStyleEngine; |
vcl\Vcl.Themes.pas | TCustomStyleServicesClass = class of TCustomStyleServices; |
vcl\Vcl.Themes.pas | TStyleHookClass = class of TStyleHook; |
vcl\Vcl.Themes.pas | TSysStyleHookClass = class of TSysStyleHook; |
. | |
vcl\Vcl.Touch.GestureMgr.pas | TGestureStreamDataClass = class of TGestureStreamData; |
. | |
vcl\Vcl.Touch.Gestures.pas | TCustomGestureRecognizerClass = class of TCustomGestureRecognizer; |
vcl\Vcl.Touch.Gestures.pas | TGestureEngineClass = class of TCustomGestureEngine; |
. | |
vcl\Vcl.Touch.Keyboard.pas | TCustomKeyboardButtonClass = class of TCustomKeyboardButton; |
. | |
vcl\Vcl.WinXCtrls.pas | TToggleSwitchActionLinkClass = class of TToggleSwitchActionLink; |
. | |
vcl\Vcl.WinXPanels.pas | TCardClass = class of TCard; |
. | |
vcl\Vcl.WinXPickers.pas | TPickerColumnClass = class of TPickerColumn; |
. | |
xml\Xml.adomxmldom.pas | Tox4DOMNodeClass = class of Tox4DOMNode; |
. | |
xml\Xml.Internal.AdomCore_4_3.pas | TXmlSignalClass = class of TXmlSignal; |
. | |
xml\Xml.Internal.CodecUtilsWin32.pas | TUnicodeCodecClass = class of TUnicodeCodec; |
. | |
xml\Xml.Internal.EncodingUtils.pas | TEncodingInfoClass = class of TEncodingInfo; |
. | |
xml\Xml.Internal.OmniXML.pas | OmniTXMLAttrClass = class of OmniTXMLAttr; |
xml\Xml.Internal.OmniXML.pas | OmniTXMLCDATASectionClass = class of OmniTXMLCDATASection; |
xml\Xml.Internal.OmniXML.pas | OmniTXMLCommentClass = class of OmniTXMLComment; |
xml\Xml.Internal.OmniXML.pas | OmniTXMLDocumentTypeClass = class of OmniTXMLDocumentType; |
xml\Xml.Internal.OmniXML.pas | OmniTXMLElementClass = class of OmniTXMLElement; |
xml\Xml.Internal.OmniXML.pas | OmniTXMLProcessingInstructionClass = class of OmniTXMLProcessingInstruction; |
xml\Xml.Internal.OmniXML.pas | OmniTXMLTextClass = class of OmniTXMLText; |
. | |
xml\Xml.omnixmldom.pas | TODOMNodeClass = class of TODOMNode; |
. | |
xml\Xml.Win.msxmldom.pas | TMSDOMNodeClass = class of TMSDOMNode; |
xml\Xml.Win.msxmldom.pas | TMSXMLDOMDocumentFactoryClass = class of TMSXMLDOMDocumentFactory; |
. | |
xml\Xml.XMLDoc.pas | TXMLNodeClass = class of TXMLNode; |
xml\Xml.XMLDoc.pas | TXMLNodeCollectionClass = class of TXMLNodeCollection; |
. | |
xml\Xml.XMLSchema.pas | TSchemaTranslatorClass = class of TXMLSchemaTranslator; |
I've had to cull my programming library over the past years due to several moves. This title is pretty much always the top of the "keep" stack. A definite classic.
ReplyDeleteIt could surely stand updating to more recent Delphi features and idioms; but (as you say) still highly relevant.
I agree. The topics and concepts are brilliantly explained by Kanopka. I dismissed this book for a long time because "I wasn't really trying to create components."
DeleteComponent creation isn't everybody's end goal or passion; but there are few better ways to really "get" Delphi than to immerse yourself in it as much as you can.
Delete