tms web core · 2020-04-07 · 3 tms software tms web core developers guide html template tag...
TRANSCRIPT
1
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
TMS WEB Core v1.3.6.0 Ferrara
DEVELOPERS GUIDE
Mar 2020
Copyright © 2018 – 2020 by tmssoftware.com bvba
Web: http://www.tmssoftware.com
Email: [email protected]
2
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
Index
Introduction ...............................................................................................................................19
Scope and architecture .............................................................................................................19
Getting started ..........................................................................................................................21
Configuring TMS WEB Core settings ........................................................................................27
Configuring TMS WEB Core project settings .............................................................................29
Installation for Lazarus ..............................................................................................................31
Your first TMS WEB Core application .......................................................................................33
Your first TMS WEB Core progressive web application .............................................................37
Your first TMS WEB Core Electron Application .........................................................................42
Debugging ................................................................................................................................44
Pascal to JavaScript Compiler ..................................................................................................47
RTL ...........................................................................................................................................48
Preprocessor ............................................................................................................................49
Utility functions ..........................................................................................................................50
Page Design .............................................................................................................................53
Absolute positioning ...........................................................................................................53
Relative positioning ............................................................................................................54
Use of HTML templates .....................................................................................................55
JavaScript and CSS ..................................................................................................................61
Application ................................................................................................................................62
Forms .......................................................................................................................................66
Creating forms at runtime ......................................................................................................68
Hosting forms in other controls ..............................................................................................70
Form inheritance ...................................................................................................................72
Frames ..................................................................................................................................73
UI control types .......................................................................................................................73
UI controls encapsulating HTML elements ............................................................................74
Custom drawn controls using the HTML5 CANVAS element .................................................74
TMS FNC controls .................................................................................................................74
jQuery UI controls ..................................................................................................................75
Standard Components ..............................................................................................................76
Common properties of visual controls ....................................................................................76
TWebLabel ............................................................................................................................78
Description .........................................................................................................................78
HTML template tag ............................................................................................................79
Properties for TWebLabel ..................................................................................................79
Events for TWebLabel........................................................................................................80
TWebButton ..........................................................................................................................80
Description .........................................................................................................................80
3
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
HTML template tag ............................................................................................................81
Properties for TWebButton .................................................................................................81
Events for TWebButton ......................................................................................................82
TWebEdit ..............................................................................................................................82
Description .........................................................................................................................82
HTML template tag ............................................................................................................82
Properties for TWebEdit .....................................................................................................83
Methods for TWebEdit .......................................................................................................84
Events for TWebEdit ..........................................................................................................84
TWebEditAutocomplete .........................................................................................................84
Description .........................................................................................................................84
Properties for TWebEditAutocomplete ...............................................................................85
Events for TWebEditAutocomplete.....................................................................................86
TWebSpinEdit .......................................................................................................................87
Description .........................................................................................................................87
HTML template tag ............................................................................................................87
Properties for TWebSpinEdit ..............................................................................................87
Events for TWebSpinEdit ...................................................................................................88
TWebMaskEdit ......................................................................................................................89
Description .........................................................................................................................89
Properties for TWebMaskEdit ............................................................................................89
Events for TWebMaskEdit ..................................................................................................90
TWebDateTimePicker ...........................................................................................................90
Description .........................................................................................................................90
HTML template tag ............................................................................................................91
Properties for TWebDateTimePicker ..................................................................................91
Events for TWebDateTimePicker .......................................................................................92
TWebListBox .........................................................................................................................92
Description .........................................................................................................................92
HTML template tag ............................................................................................................92
Properties for TWebListBox ...............................................................................................93
Events for TWebListBox .....................................................................................................94
TWebComboBox ...................................................................................................................94
Description .........................................................................................................................94
HTML template tag ............................................................................................................94
Properties for TWebComboBox .........................................................................................95
Events for TWebComboBox ...............................................................................................95
TWebLookupComboBox .......................................................................................................96
Description .........................................................................................................................96
HTML template tag ............................................................................................................96
Properties for TWebLookupComboBox ..............................................................................96
Events for TWebLookupComboBox ...................................................................................97
4
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
TWebColorPicker ..................................................................................................................98
Description .........................................................................................................................98
HTML template tag ............................................................................................................98
Properties for TWebColorPicker .........................................................................................98
Events for TWebColorPicker ..............................................................................................99
TWebCheckBox ....................................................................................................................99
Description .........................................................................................................................99
Properties for TWebCheckBox ...........................................................................................99
Events for TWebCheckBox .............................................................................................. 100
TWebMainMenu .................................................................................................................. 100
Description ....................................................................................................................... 100
HTML template tag .......................................................................................................... 101
Properties for TWebMainMenu ........................................................................................ 102
Events for TWebMainMenu .............................................................................................. 103
TWebMemo ......................................................................................................................... 103
Description ....................................................................................................................... 103
HTML template tag .......................................................................................................... 104
Properties for TWebMemo ............................................................................................... 104
Methods for TWebMemo .................................................................................................. 105
Events for TWebMemo .................................................................................................... 105
TWebRadioGroup ............................................................................................................... 105
Description ....................................................................................................................... 105
Properties for TWebRadioGroup ...................................................................................... 106
Events for TWebRadioGroup ........................................................................................... 106
TWebProgressBar ............................................................................................................... 107
Description ....................................................................................................................... 107
HTML template tag .......................................................................................................... 107
Properties for TWebProgressBar ..................................................................................... 107
TWebBadge ........................................................................................................................ 109
Description ....................................................................................................................... 109
HTML template tag .......................................................................................................... 109
Properties for TWebBadge ............................................................................................... 109
TWebPaintBox .................................................................................................................... 110
Description ....................................................................................................................... 110
Properties for TWebPaintBox ........................................................................................... 110
Events for TWebPaintBox ................................................................................................ 110
TWebTrackBar .................................................................................................................... 111
Description ....................................................................................................................... 112
HTML template tag .......................................................................................................... 112
Properties for TWebTrackBar ........................................................................................... 112
Events for TWebTrackBar ................................................................................................ 113
TWebScrollBox .................................................................................................................... 113
5
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
Description ....................................................................................................................... 113
HTML template tag .......................................................................................................... 114
Properties for TWebScrollBox .......................................................................................... 114
Events for TWebScrollBox ............................................................................................... 114
TWebSplitter........................................................................................................................ 115
Description ....................................................................................................................... 115
Properties for TWebSplitter .............................................................................................. 115
Events for TWebSplitter ................................................................................................... 116
TWebSignIn......................................................................................................................... 116
Description ....................................................................................................................... 116
HTML template tag .......................................................................................................... 116
Properties for TWebSignIn ............................................................................................... 117
Methods for TWebSignIn ................................................................................................. 117
Events for TWebSignIn .................................................................................................... 118
TWebPanel ......................................................................................................................... 118
Description ....................................................................................................................... 118
HTML template tag .......................................................................................................... 119
Properties for TWebPanel ................................................................................................ 119
Events for TWebPanel ..................................................................................................... 119
TWebHTMLContainer .......................................................................................................... 120
Description ....................................................................................................................... 120
HTML template tag .......................................................................................................... 120
Properties for TWebHTMLContainer ................................................................................ 121
Events for TWebHTMLContainer ..................................................................................... 121
TWebHTMLForm ................................................................................................................. 121
Description ....................................................................................................................... 121
HTML template tag .......................................................................................................... 122
Properties for TWebHTMLForm ....................................................................................... 122
TWebHTMLDiv .................................................................................................................... 123
Description ....................................................................................................................... 123
HTML template tag .......................................................................................................... 123
Properties for TWebHTMLDiv .......................................................................................... 123
TWebHTMLSpan ................................................................................................................. 124
Description ....................................................................................................................... 124
HTML template tag .......................................................................................................... 124
Properties for TWebHTMLSpan ....................................................................................... 124
TWebHTMLAnchor .............................................................................................................. 125
Description ....................................................................................................................... 125
HTML template tag .......................................................................................................... 125
Properties for TWebHTMLSpan ....................................................................................... 125
TWebImageControl ............................................................................................................. 127
Description ....................................................................................................................... 127
6
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
HTML template tag .......................................................................................................... 127
Properties for TWebImageControl .................................................................................... 127
Methods for TWebImageControl ...................................................................................... 128
Events for TWebImageControl ......................................................................................... 128
TWebImageZoomControl .................................................................................................... 129
Description ....................................................................................................................... 129
HTML template tag .......................................................................................................... 129
Properties for TWebImageControl .................................................................................... 129
Events for TWebImageControl ......................................................................................... 131
TWebLinkLabel ................................................................................................................... 131
Description ....................................................................................................................... 131
HTML template tag .......................................................................................................... 131
Properties for TWebLinkLabel .......................................................................................... 132
Events for TWebLinkLabel ............................................................................................... 132
TWebRichEdit ..................................................................................................................... 133
Description ....................................................................................................................... 133
HTML template tag .......................................................................................................... 134
Properties for TWebRichEdit ............................................................................................ 134
Events for TWebRichEdit ................................................................................................. 134
TWebSyntaxMemo ................................................................................................................. 135
Loading a file ................................................................................................................... 135
Downloading a file ............................................................................................................ 136
Properties for TWebSyntaxMemo .................................................................................... 137
Methods for TWebSyntaxMemo ....................................................................................... 138
Events for TWebSyntaxMemo .......................................................................................... 139
TWebTabSet ....................................................................................................................... 140
Description ....................................................................................................................... 140
HTML template tag .......................................................................................................... 140
Properties for TWebTabSet ............................................................................................. 140
Methods for TWebTabSet ................................................................................................ 141
Events for TWebTabSet ................................................................................................... 141
TWebPageControl ............................................................................................................... 141
Description ....................................................................................................................... 141
HTML template tag .......................................................................................................... 142
Properties for TWebPageControl ..................................................................................... 142
Methods for TWebPageControl ........................................................................................ 143
Events for TWebPageControl ........................................................................................... 143
TWebSpeedButton .............................................................................................................. 144
Description ....................................................................................................................... 144
HTML template tag .......................................................................................................... 144
Properties for TWebSpeedButton .................................................................................... 144
Events for TWebSpeedButton .......................................................................................... 145
7
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
TWebPayPal ....................................................................................................................... 145
Description ....................................................................................................................... 146
HTML template tag .......................................................................................................... 147
Properties for TWebPayPal .............................................................................................. 147
Events for TWebPayPal ................................................................................................... 149
TWebToolbar ....................................................................................................................... 150
Description ....................................................................................................................... 150
Properties for TWebToolbar ............................................................................................. 150
Events for TWebToolbar .................................................................................................. 151
TWebRichEditToolbar ......................................................................................................... 152
Description ....................................................................................................................... 152
Properties for TWebRichEditToolbar ................................................................................ 152
Events for TWebRichEditToolbar ..................................................................................... 153
TWebGridPanel ................................................................................................................... 153
Description ....................................................................................................................... 153
HTML template tag .......................................................................................................... 153
Properties for TWebGridPanel ......................................................................................... 154
Events for TWebGridPanel .............................................................................................. 155
TWebTreeview .................................................................................................................... 155
Description ....................................................................................................................... 155
HTML template tag .......................................................................................................... 156
Properties for TWebTreeview ........................................................................................... 156
Methods for TWebTreeview ............................................................................................. 156
Events for TWebTreeview ................................................................................................ 156
Sample code .................................................................................................................... 157
TWebAccordion ................................................................................................................... 158
Description ....................................................................................................................... 158
HTML template tag .......................................................................................................... 158
Properties for TWebAccordion ......................................................................................... 158
Events for TWebAccordion .............................................................................................. 159
Properties for TAccordionSection ..................................................................................... 159
TWebResponsiveGridPanel ................................................................................................ 160
Description ....................................................................................................................... 160
HTML template tag .......................................................................................................... 160
Properties for TWebResponsiveGridPanel ....................................................................... 160
Methods for TWebResponsiveGridPanel ......................................................................... 161
Events for TWebResponsiveGridPanel ............................................................................ 161
Properties for TResponsiveLayoutItem ............................................................................ 161
TWebMessageDlg ............................................................................................................... 162
Description ....................................................................................................................... 162
Properties for TWebMessageDlg ..................................................................................... 162
Methods for TWebMessageDlg ........................................................................................ 163
8
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
Events for TWebMessageDlg........................................................................................... 163
TWebFileUpload .................................................................................................................. 164
Description ....................................................................................................................... 164
Properties for TWebFileUpload ........................................................................................ 164
HTML template tag .......................................................................................................... 164
Events for TWebFileUpload ............................................................................................. 164
Properties for TFile .......................................................................................................... 165
Methods for TFile ............................................................................................................. 165
TWebFilePicker ................................................................................................................... 166
Description ....................................................................................................................... 166
HTML template tag .......................................................................................................... 167
Properties for TWebFilePicker ......................................................................................... 167
Events for TWebFilePicker ............................................................................................... 167
Example code .................................................................................................................. 168
TWebOpenDialog ................................................................................................................ 168
Description ....................................................................................................................... 168
Properties for TWebOpenDialog ...................................................................................... 168
Methods for TWebOpenDialog ......................................................................................... 169
Events for TWebOpenDialog............................................................................................ 169
TWebToggleButton.............................................................................................................. 170
Description ....................................................................................................................... 170
Properties for TWebToggleButton .................................................................................... 170
Events for TWebToggleButton ......................................................................................... 170
TWebBitBtn ......................................................................................................................... 170
Description ....................................................................................................................... 171
HTML template tag .......................................................................................................... 171
Properties for TWebBitBtn ............................................................................................... 172
Events for TWebBitBtn ..................................................................................................... 172
TWebGroupBox ................................................................................................................... 173
Description ....................................................................................................................... 173
HTML template tag .......................................................................................................... 173
Properties for TWebGroupBox ......................................................................................... 173
Events for TWebGroupBox .............................................................................................. 174
TWebStretchPanel .............................................................................................................. 175
Description ....................................................................................................................... 175
HTML template tag .......................................................................................................... 176
Properties for TWebStretchPanel ..................................................................................... 177
Events for TWebStretchPanel .......................................................................................... 177
TWebStringGrid ................................................................................................................... 178
Description ....................................................................................................................... 178
HTML template tag .......................................................................................................... 178
Properties for TWebStringGrid ......................................................................................... 179
9
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
Methods for TWebStringGrid............................................................................................ 179
Events for TWebStringGrid .............................................................................................. 180
TWebListControl .................................................................................................................. 182
Description ....................................................................................................................... 182
Properties for TListItem .................................................................................................... 183
Properties for TWebListControl ........................................................................................ 183
Events for TWebListControl ............................................................................................. 184
TWebTableControl .............................................................................................................. 185
Description ....................................................................................................................... 185
HTML template tag .......................................................................................................... 186
Properties for TWebTableControl ..................................................................................... 186
Methods for TWebTableControl ....................................................................................... 186
Events for TWebTableControl .......................................................................................... 187
TWebResponsiveGrid ......................................................................................................... 189
Description ....................................................................................................................... 189
HTML template tag .......................................................................................................... 189
Properties for TWebResponsiveGrid ................................................................................ 190
Methods for TWebResponsiveGrid .................................................................................. 191
Events for TWebResponsiveGrid ..................................................................................... 191
TWebLoginPanel ................................................................................................................. 193
Description ....................................................................................................................... 193
Properties for TWebLoginPanel ....................................................................................... 193
Events for TWebLoginPanel............................................................................................. 194
TWebGoogleReCaptcha ..................................................................................................... 194
Description ....................................................................................................................... 194
Properties for TWebGoogleReCaptcha ............................................................................ 194
Methods for TWebGoogleReCaptcha .............................................................................. 195
Events for TWebGoogleReCaptcha ................................................................................. 195
TWebGoogleDrive ............................................................................................................... 195
Description ....................................................................................................................... 195
HTML template tag .......................................................................................................... 196
Properties for TWebGoogleDrive ..................................................................................... 196
TWebGoogleMaps............................................................................................................... 197
Description ....................................................................................................................... 197
HTML template tag .......................................................................................................... 197
Properties for TWebGoogleMaps ..................................................................................... 197
Methods for TWebGoogleMaps ....................................................................................... 198
Events for TWebGoogleMaps .......................................................................................... 202
TWebGoogleChart............................................................................................................... 202
Description ....................................................................................................................... 203
Properties for TWebGoogleChart ..................................................................................... 204
Methods for TWebGoogleChart ....................................................................................... 206
10
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
Events for TWebGoogleChart .......................................................................................... 207
Examples ......................................................................................................................... 207
TWebBrowserControl .......................................................................................................... 209
Description ....................................................................................................................... 209
HTML template tag .......................................................................................................... 209
Properties for TWebBrowserControl ................................................................................. 210
TWebMultimediaPlayer ....................................................................................................... 210
Description ....................................................................................................................... 210
HTML template tag .......................................................................................................... 211
Properties for TWebMultimediaPlayer .............................................................................. 211
TWebYoutube ..................................................................................................................... 212
Description ....................................................................................................................... 212
HTML template tag .......................................................................................................... 212
Properties for TWebYoutube ............................................................................................ 213
TWebTwitterFeed ................................................................................................................ 214
Description ....................................................................................................................... 214
HTML template tag .......................................................................................................... 215
Properties for TWebTwitterFeed ...................................................................................... 215
TWebCamera ...................................................................................................................... 215
Description ....................................................................................................................... 215
Selecting a device ............................................................................................................ 216
Starting the camera stream automatically ........................................................................ 217
HTML template tag .......................................................................................................... 217
Properties for TwebCamera ............................................................................................. 217
Methods for TWebCamera ............................................................................................... 218
Events for TwebCamera .................................................................................................. 218
DB-aware components ............................................................................................................ 220
TWebDBLabel ..................................................................................................................... 220
Description ....................................................................................................................... 220
TWebDBEdit........................................................................................................................ 221
Description ....................................................................................................................... 221
TWebDBCheckBox.............................................................................................................. 221
Description ....................................................................................................................... 221
TWebDBSpinEdit ................................................................................................................ 221
Description ....................................................................................................................... 221
TWebDBMaskEdit ............................................................................................................... 222
Description ....................................................................................................................... 222
TWebDBComboBox ............................................................................................................ 222
Description ....................................................................................................................... 222
TWebDBLookupComboBox ................................................................................................. 222
Description ....................................................................................................................... 222
TWebDBMemo .................................................................................................................... 223
11
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
Description ....................................................................................................................... 223
TWebDBDateTimePicker..................................................................................................... 223
Description ....................................................................................................................... 223
TWebDBRadioGroup ........................................................................................................... 223
Description ....................................................................................................................... 223
TWebDBLinkLabel............................................................................................................... 224
Description ....................................................................................................................... 224
TWebDBImageControl ........................................................................................................ 224
Description ....................................................................................................................... 224
TWebDBTableControl ......................................................................................................... 225
TWebDBResponsiveGrid..................................................................................................... 225
Description ....................................................................................................................... 225
TWebDBGrid ....................................................................................................................... 226
Description ....................................................................................................................... 226
TWebDBNavigator............................................................................................................... 227
Description ....................................................................................................................... 227
Non visual components ........................................................................................................... 228
TWebTimer ......................................................................................................................... 228
TWebLocalStorage .............................................................................................................. 228
TWebSessionStorage .......................................................................................................... 228
TWebURLValidator.............................................................................................................. 229
TWebGeoLocation............................................................................................................... 229
TWebSocketClient ............................................................................................................... 230
TWebHttpRequest ............................................................................................................... 231
TWebCookies ...................................................................................................................... 234
TWebClientConnector ......................................................................................................... 235
TWebAESEncryption ........................................................................................................... 238
Properties for TWebAESEncryption ................................................................................. 238
Methods for TWebAESEncryption .................................................................................... 238
Events for TWebAESEncryption ...................................................................................... 239
TWebRSAEncryption ........................................................................................................... 239
Properties for TWebRSAEncryption ................................................................................. 239
Methods for TWebRSAEncryption ................................................................................... 240
Events for TWebRSAEncryption ...................................................................................... 241
TWebRSASignature ............................................................................................................ 241
Properties for TWebRSASignature................................................................................... 242
Methods for TWebRSASignature ..................................................................................... 242
Events for TWebRSASignature ........................................................................................ 243
TWebHMACSignature ......................................................................................................... 243
Properties for TWebHMACSignature ............................................................................... 243
Methods for TWebHMACSignature .................................................................................. 243
Events for TWebHMACSignature ..................................................................................... 244
12
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
TWebPushNotifications ....................................................................................................... 244
Registration for push notifications .................................................................................... 245
Multiple users on the same device ................................................................................... 245
Properties for TWebPushNotifications .............................................................................. 245
Methods for TWebPushNotifications ................................................................................ 246
Events for TWebPushNotifications ................................................................................... 247
TMS WEB Core 3D ................................................................................................................. 248
Your first 3D Chart application ............................................................................................. 248
3D Business Chart Applications........................................................................................... 250
The 3D Bar Chart Demo .................................................................................................. 250
The Terminology for Axes ................................................................................................ 251
Creating the Data Series object ....................................................................................... 251
Other features shown in the Demo ................................................................................... 252
Events .............................................................................................................................. 253
3D Math Chart Applications ................................................................................................. 253
The 3D Scatter Chart Demo ............................................................................................. 253
The Terminology for Axes ................................................................................................ 253
Creating the Data Series object ....................................................................................... 254
Other features shown in the Demo ................................................................................... 254
The 3D Surface Chart Demo ............................................................................................ 254
How it works .................................................................................................................... 255
Creating the Data Series object ....................................................................................... 255
Other features shown in the Demo ................................................................................... 256
3D PaintBox Applications .................................................................................................... 256
The 3D PaintBox Demo ................................................................................................... 257
The Terminology for Axes.................................................................................................... 257
The code for adding objects ................................................................................................ 257
Direct Use of the Three.Js API ......................................................................................... 258
Sample code for Other features ....................................................................................... 258
Events .............................................................................................................................. 259
3D Model Applications ......................................................................................................... 259
“ThreeJS Models (3d)” JS Library is required ................................................................... 259
The 3D Model Demo ........................................................................................................ 259
The Code to Load OBJ/MTL Models ................................................................................ 260
The code to Load GLTF Model ........................................................................................ 260
Additional features for Models .......................................................................................... 261
TWebMyCloudDbClientDataset Component ........................................................................... 262
Introduction ......................................................................................................................... 262
Your first web application using TWebmyCloudDbClientDataset ......................................... 262
Set up your myCloudData project in the myCloudData console ....................................... 262
Create a TMS Web Application ........................................................................................ 262
Set up the TWebmyCloudDbClientDataset component .................................................... 262
13
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
Specify the Component Properties ................................................................................... 263
Create the Fields or Properties of each object in the Object Store ................................... 263
Select the fields in the Object Inspector .................................................................................. 263
Create the Fields in code ........................................................................................................... 263
Add Data Components that connect to the DataSet ............................................................. 263
Set up the DataSource and Data components ................................................................. 264
Set up the Columns of the DBGrid ................................................................................... 264
Set up a New Record event ............................................................................................. 264
Run the Web Application ..................................................................................................... 264
Todo List Demo ................................................................................................................... 264
Additional features in this Demo ....................................................................................... 264
Troubleshooting ............................................................................................................... 265
Reference Section ............................................................................................................... 265
TWebMyCloudDbClientDataset ....................................................................................... 265
Properties of TWebIndexedDbClientDataSet ................................................................... 265
Methods of TWebmyCloudDbClientDataset ......................................................................... 266
TWebFirestoreClientDataset Component ................................................................................ 268
Introduction ......................................................................................................................... 268
Your first web application using TWebFirestoreClientDataset .............................................. 268
Set up your Firestore project in the Firebase console ...................................................... 268
Create a TMS web application ......................................................................................... 269
Add Data Components that connect to the DataSet ......................................................... 271
Run the Web Application .................................................................................................. 271
Todo List Demo ................................................................................................................... 272
Troubleshooting ............................................................................................................... 272
TWebFirestoreClientDataset reference ................................................................................ 272
Methods of TWebFirestoreClientDataset ......................................................................... 273
jQuery components ................................................................................................................. 275
TWebJQXButton ................................................................................................................. 276
Description ....................................................................................................................... 276
HTML template tag .......................................................................................................... 277
Properties for TWebJQXButton ........................................................................................ 277
Events for TWebJQXButton ............................................................................................. 278
TWebJQXButtonGroup ........................................................................................................ 278
Description ....................................................................................................................... 278
HTML template tag .......................................................................................................... 279
Properties for TWebJQXButtonGroup .............................................................................. 279
Events for TWebJQXButtonGroup ................................................................................... 279
TWebJQXCalendar ............................................................................................................. 279
Description ....................................................................................................................... 280
HTML template tag .......................................................................................................... 280
14
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
Properties for TWebJQXCalendar .................................................................................... 280
Events for TWebJQXCalendar ......................................................................................... 281
TWebJQXColorPicker ......................................................................................................... 281
Description ....................................................................................................................... 282
HTML template tag .......................................................................................................... 282
Properties for TWebJQXColorPicker ................................................................................ 282
Events for TWebJQXColorPicker ..................................................................................... 283
TWebJQXComboBox .......................................................................................................... 283
Description ....................................................................................................................... 283
HTML template tag .......................................................................................................... 284
Properties for TWebJQXComboBox ................................................................................. 284
Methods for TWebJQXComboBox ................................................................................... 284
Events for TWebJQXComboBox ...................................................................................... 285
TWebJQXDateTimeInput..................................................................................................... 285
Description ....................................................................................................................... 285
HTML template tag .......................................................................................................... 285
Properties for TWebJQXDateTimeInput ........................................................................... 286
Events for TWebJQXDateTimeInput ................................................................................ 286
TWebJQXDropDownList ..................................................................................................... 287
Description ....................................................................................................................... 287
HTML template tag .......................................................................................................... 287
Properties for TWebJQXDropDownList ............................................................................ 287
Methods for TWebJQXDropDownList .............................................................................. 288
Events for TWebJQXDropDownList ................................................................................. 288
TWebJQXGrid ..................................................................................................................... 288
Description ....................................................................................................................... 288
HTML template tag .......................................................................................................... 289
Properties for TWebJQXGrid ........................................................................................... 290
Methods for TWebJQXGrid .............................................................................................. 292
Events for TWebJQXGrid ................................................................................................. 292
TWebJQXKnob ................................................................................................................... 293
Description ....................................................................................................................... 293
HTML template tag .......................................................................................................... 294
Properties for TWebJQXKnob .......................................................................................... 294
Events for TWebJQXKnob ............................................................................................... 296
TWebJQXMaskedInput ....................................................................................................... 296
Description ....................................................................................................................... 296
HTML template tag .......................................................................................................... 296
Properties for TWebJQXMaskedInput .............................................................................. 297
Events for TWebJQXMaskedInput ................................................................................... 297
TWebJQXMenu ................................................................................................................... 297
Description ....................................................................................................................... 297
15
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
HTML template tag .......................................................................................................... 298
Properties for TWebJQXMenu ......................................................................................... 298
Events for TWebJQXMenu .............................................................................................. 299
TWebJQXNumberInput ....................................................................................................... 299
Description ....................................................................................................................... 299
HTML template tag .......................................................................................................... 300
Properties for TWebJQXNumberInput .............................................................................. 300
Events for TWebJQXNumberInput ................................................................................... 300
TWebJQXProgressBar ........................................................................................................ 301
Description ....................................................................................................................... 301
HTML template tag .......................................................................................................... 301
Properties for TWebJQXProgressBar .............................................................................. 301
TWebJQXRangeSelector .................................................................................................... 302
Description ....................................................................................................................... 302
HTML template tag .......................................................................................................... 303
Properties for TWebJQXRangeSelector ........................................................................... 303
Events for TWebJQXRangeSelector ................................................................................ 304
TWebJQXRating ................................................................................................................. 304
Description ....................................................................................................................... 304
HTML template tag .......................................................................................................... 304
Properties for TWebJQXRating ........................................................................................ 304
Events for TWebJQXRating ............................................................................................. 305
TWebJQXResponsivePanel ................................................................................................ 305
Description ....................................................................................................................... 305
Properties for TWebJQXResponsivePanel ....................................................................... 306
Methods for TWebJQXResponsivePanel ......................................................................... 307
Events for TWebJQXResponisvePanel ............................................................................ 307
TWebJQXSlider ................................................................................................................... 307
Description ....................................................................................................................... 307
HTML template tag .......................................................................................................... 308
Properties for TWebJQXSlider ......................................................................................... 308
Events for TWebJQXSlider .............................................................................................. 309
TWebJQXTabs .................................................................................................................... 309
Description ....................................................................................................................... 309
HTML template tag .......................................................................................................... 310
Properties for TWebJQXTabs .......................................................................................... 310
Events for TWebJQXTabs ............................................................................................... 311
TWebJQXTagCloud ............................................................................................................ 311
Description ....................................................................................................................... 311
HTML template tag .......................................................................................................... 312
Properties for TWebJQXTagCloud ................................................................................... 312
Events for TWebJQXTagCloud ........................................................................................ 313
16
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
Connecting to data .................................................................................................................. 314
Using WebSockets .................................................................................................................. 319
IndexedDB .............................................................................................................................. 324
TMS WEB Core IndexedDB Library ..................................................................................... 324
TIndexedDbClientDataset Component ................................................................................ 324
TIndexedDb class ................................................................................................................ 324
Your first IndexedDB application .......................................................................................... 324
Create a TMS web application ......................................................................................... 324
Add DB-aware components that connect to the DataSet .................................................. 326
Run the Web Application .................................................................................................. 326
Managing the IndexedDB Database .................................................................................... 326
Todo List Demo ................................................................................................................... 327
Additional features in this Demo ....................................................................................... 327
TWebIndexedDbClientDataSet ............................................................................................ 328
Description ....................................................................................................................... 328
Properties of TWebIndexedDbClientDataSet ................................................................... 328
Methods of TWebIndexedDbClientDataSet ...................................................................... 329
TIndexedDb (Advanced Use) .............................................................................................. 330
Description ....................................................................................................................... 330
Properties ........................................................................................................................ 330
Methods and Events of TIndexedDb ................................................................................ 330
Out-of-line key specification ..................................................................................................... 333
Setting up the Indexes ..................................................................................................... 336
TMS WEB Electron ................................................................................................................. 338
Your first TMS Web Electron Application................................................................................. 338
Building the application ........................................................................................................... 341
Building on a Mac ................................................................................................................... 342
Accessing the Developer Tools ............................................................................................... 342
Drag and drop ......................................................................................................................... 342
From Electron to desktop ........................................................................................................ 343
Fonts ....................................................................................................................................... 344
Electron Components.............................................................................................................. 345
TElectronOpenDialog .......................................................................................................... 345
Description ....................................................................................................................... 345
Properties for TElectronOpenDialog ................................................................................. 346
Methods for TElectronOpenDialog ................................................................................... 346
TElectronSaveDialog ........................................................................................................... 347
Description ....................................................................................................................... 347
Properties for TElectronSaveDialog ................................................................................. 347
Methods for TElectronSaveDialog .................................................................................... 347
TElectronMessageBox ........................................................................................................ 348
17
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
Description ....................................................................................................................... 348
Properties for TElectronMessageBox ............................................................................... 348
Methods for TElectronMessageBox ................................................................................. 349
TElectronErrorBox ............................................................................................................... 349
Description ....................................................................................................................... 349
Properties for TElectronErrorBox ..................................................................................... 349
Methods for TElectronErrorBox ........................................................................................ 350
TElectronMainMenu ............................................................................................................ 350
Description ....................................................................................................................... 350
TElectronPopupMenu .......................................................................................................... 350
Description ....................................................................................................................... 350
Methods for TElectronPopupMenu ................................................................................... 351
TElectronBrowserWindow ................................................................................................... 351
Description ....................................................................................................................... 351
Properties for TElectronBrowserWindow .......................................................................... 352
Methods for TElectronBrowserWindow ............................................................................ 352
Events for TElectronBrowserWindow ............................................................................... 353
Multiple windows using forms ........................................................................................... 353
TElectronTrayIcon ............................................................................................................... 355
Description ....................................................................................................................... 355
Properties for TElectronTrayIcon ..................................................................................... 355
Events for TElectronTrayIcon ........................................................................................... 355
TElectronIPCCommunication .............................................................................................. 355
Description ....................................................................................................................... 355
Properties for TElectronIPCCommunication ..................................................................... 356
Methods for TElectronIPCCommunication ....................................................................... 356
Events for TElectronIPCCommunication .......................................................................... 356
TElectronFileWatcher .......................................................................................................... 357
Description ....................................................................................................................... 357
Properties for TElectronFileWatcher ................................................................................ 357
TElectronGlobalShortcut ..................................................................................................... 358
Description ....................................................................................................................... 358
Properties for TElectronGlobalShortcut ............................................................................ 358
Events for TElectronGlobalShortcut ................................................................................. 358
TElectronStringList .............................................................................................................. 358
Methods for TElectronStringList ....................................................................................... 358
TElectronBinaryDataStream ................................................................................................ 359
Properties for TElectronBinaryDataStream ...................................................................... 359
Methods for TElectronBinaryDataStream ......................................................................... 360
TElectronClipboard .............................................................................................................. 360
Properties of TElectronClipboard ..................................................................................... 360
Methods of TElectronClipboard ........................................................................................ 360
18
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
TElectronShell ..................................................................................................................... 361
Methods for TElectronShell .............................................................................................. 361
TElectronIPCMain ............................................................................................................... 361
Methods for TElectronIPCMain ........................................................................................ 361
TElectronIPCRenderer ........................................................................................................ 362
Methods for TElectronIPCRenderer ................................................................................. 362
TElectronDragAndDrop ....................................................................................................... 363
TElectronPath ...................................................................................................................... 363
Methods for TElectronPath .............................................................................................. 363
TElectronWindow ................................................................................................................ 364
Methods for TElectronWindow ......................................................................................... 364
Other available methods .................................................................................................. 365
Custom control development ................................................................................................... 365
Appendix ................................................................................................................................. 377
Browser locale values .......................................................................................................... 377
TUILanguage....................................................................................................................... 379
19
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
Introduction Welcome to TMS WEB Core. TMS WEB Core is the foundation of an exciting new and modern
way for creating web client applications from Delphi using RAD development methodology and
using a component-based framework.
Scope and architecture
TMS WEB Core is based on compiling Delphi UI code to JavaScript and creating this way what
is called Single-Page-Applications. The terminology “page” should not be confused with forms
that Delphi developers are used to. A TMS WEB Core application can contain multiple forms.
These multiple forms will be hosted in a JavaScript application a web browser user can navigate
to via a single page URL. Any modern HTML5 compliant browser can run TMS WEB Core web
client applications. This includes Chrome, Safari, Edge, Firefox, Firefox Developer Edition,
Opera.
We will further refer to TMS WEB Core applications as web client applications. This means
applications running as JavaScript code in the browser client (left). The web client application
will typically communicate with a server or servers for working with data or other services (right).
The TMS WEB Core web client application is open to work with different server technologies.
This includes but is not limited to TMS XData, Embarcadero RAD Server, node.js, ASP.NET
Core microservices. The typical technology used for this communication is via HTTP REST
APIs.
20
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
More information about using TMS XData as a backend for TMS WEB Core web client
applications can be found at:
https://download.tmssoftware.com/business/xdata/doc/web/web-applications-tms-web-core.html
TMS XData provides 3 components to make it easier to consume a TMS XData REST API:
TXDataWebConnection:
https://download.tmssoftware.com/business/xdata/doc/web/txdatawebconnection.html
TXDataWebClient:
https://download.tmssoftware.com/business/xdata/doc/web/using-txdatawebclient.html
TXDataWebDataset:
https://download.tmssoftware.com/business/xdata/doc/web/using-txdatawebdataset.html
21
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
Getting started
From the Delphi IDE, choose File, New, Other and pick from the wizard either a TMS Web
Application or TMS Web Console application:
When you created a new project, it is shown in the project manager:
The project consists of a project source file and one or more form files similar to how VCL
Windows applications and FMX cross platform applications work.
Other than the project source file (.DPR file), there is a project HTML file. This HTML file
22
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
contains the body HTML for your application and this can include references to CSS and/or
JavaScript files. For each form, there is a .PAS file, a .DFM file and a .HTML file. The .PAS file
contains the user interface logic for the form and its controls. The purpose of the .DFM file is to
persist the component settings and the HTML file serves as the HTML container in which the
form controls will be hosted or that contains the HTML elements to which the Delphi control
class instances will be mapped.
The project context menu in the IDE also shows a number of extra items:
23
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
From this context menu, the output path (where HTML, JS, CSS are generated) can be opened
via Windows Explorer. It is also possible to add a new web form or data module directly from
24
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
this context menu and finally, the JavaScript Library Manager can be started. For details about
the JavaScript Library Manager, see the paragraph specifically about that.
Technically, a TMS WEB Core application is at design-time in Delphi a VCL Windows
application. This is for the technical reason to make use of the Delphi IDE form designer to
create the web client application. The TMS WEB Core Delphi IDE plugin takes care to compile
the project with all its form files with the pas2js compiler to a JavaScript (.JS) file and deploy it to
a web server.
The default project source is:
This looks very much the same as a standard VCL application. When the project is compiled to
a JavaScript application, it can be automatically launched in the browser from the IDE. This is
done via a browser launcher application (TMSWEBRunner.exe) that is configured in the IDE
under Tools, Options, TMS Web, Web Runner. By default, the JavaScript application is
launched in the browser that is set in the operating system as default browser. If you want to
launch the application in a different browser, this can be set at project level via Project, Options,
TMS Web, Browser.
To get the browser start the web client application, by default TMS WEB Core ships with a
lightweight debug webserver and this is configured at install time to operate at port 8000. The
web server is specified under Tools, Options, TMS Web, Web Server. See the paragraph on
“Configuring TMS WEB Core settings” for more information on how to specify the web server to
be used.
The default project HTML file contains:
25
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
This is a HTML file specifying the HTML5 DOCTYPE. As you can see, by default, there is only
one reference in the HTML file and that is to $(ProjectName).js. The TMS WEB Core IDE plugin
will in this case compile the application to Project1.js and in the deployed HTML file, this
reference will as such be:
<script type="text/javascript" src="Project1.js"></script>
From the HTML file, you can see that the application is launched by
<script type="text/javascript">
rtl.run();
</script>
When the form file in the web project is open, the IDE tool palette offers all components /
controls that have been designed & registered for use with TMS WEB Core:
26
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
Just like with VCL applications, drag the controls on the form and add the UI logic code to the
form file.
As you can see, with each form file comes a HTML file, unit1.html in this case. This is the HTML
container in which the web form will be embedded. This HTML file will be loaded in to the
browser document BODY when the web application launches the form. The HTML file can be
directly edited from the IDE in its embedded HTML editor but it can also be edited by any web
editor or by a separate web designer using his own tools.
27
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
This is an empty HTML file. When adding UI controls to the form file, at runtime the HTML
elements of which these controls are composed will be dynamically added to the HTML BODY.
Configuring TMS WEB Core settings
The configuration of TMS WEB Core can be found in the Delphi IDE under Tools, Options, TMS
WEB:
The settings are:
Web Compiler: this points to the location where the Pascal to Javascript compiler (pas2js) is
located.
Library path: this is the path the Pascal to Javascript compiler uses. Note that 3rd party controls
can separately register paths and this does not affect the general library path.
28
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
Open Output path in Explorer: this is the default path the compiler uses to generate the resulting
project Javascript (.JS) file. The default is under the project source folder \TMSWeb\Debug or
\TMSWeb\Release
URL: this is the URL with which the web application can be launched via the browser. If another
web server than the default TMS webserver is used, the URL can be modified here.
Single JS file: Default a single Javascript for the entire web application is generated. If this is
turned off, it will be needed to specify each generated .js file reference (for each unit there is a
.js file in this case) in the project HTML file.
ECMA Script: This sets the JavaScript standards level for which to generate the compiled
application.
Installation directory: this holds the path where TMS WEB Core is installed. Relative to this path,
the compiler searches for source files & resources.
Web Runner: this is a the path to the application that is used to start the selected browser for
running the web application
Web Server: this is the path where the webserver that is used and that will be launched is
located.
Use ShellExecute : this setting controls whether the IDE plugin will use Windows ShellExecute
to launch the web runner application or create the process directly
Web Server Params: can contain extra command-line parameters to launch the web server
Web Server Visibility: configures whether the web server is hidden when launched or remains
visible.
Wait for Web Server: when true, the IDE will wait until the webserver is effectively running
before launching the browser to open the web application URL.
Browser: specifies if the preferred browser to launch to debug the web application.
Debug Manager: this specifies the debug tool that is used to communicate between the IDE and
the browser. Via this debug manager it is possible to relaunch a web application in the same
browser tab when a new version is compiled instead of launching the application in a new
browser window or new browser tab.
29
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
Under the list of settings, you can find a list of installed 3rd party components for TMS WEB Cor
and you can check or uncheck what 3rd party component paths will be used to compile the web
client application.
Configuring TMS WEB Core project settings
From the project context menu in the IDE project manager, a new pane is added to configure
the options of the TMS WEB Core application:
This contains the project specific settings. By default, the TMS WEB Core general settings
defined in the IDE are applied when a new project is created.
TMS Web Source Paths: optional project specific source library paths.
Open Output Path in Explorer: optional custom output path. When nothing is specified, the
default output path is the folder TMSWeb\Debug or TMSWeb\Release under the project source
folder
Browser: sets the browser to launch to run the application. When nothing is specified, this is the
default operating system browser.
30
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
Debug Information: when true, the JavaScript debug map file is generated. This option is set by
default for the Debug mode of the application.
Directives: Sets the compiler directives to use for compiling the application
ECMA Script: sets the JavaScript standards level to compile for
HTML file: sets optionally a different HTML file to launch the web application
Optimization: defines whether to compile with or without compiler optimization. When
optimization is enabled (default), unused Pascal code does not get compiled to JavaScript,
reducing the size of the generated JavaScript file significantly.
Single Tab in Browser: when enabled and in Debug mode, when compiling a new version of an
already running web application in the browser, will result in relaunching the web application in
the same browser tab as the already running application instead of opening it in a new tab.
Web Server: optionally specifies a project specific web server to use
Web Server Visibility: configures whether the web server is hidden when launched or remains
visible.
Wait for Web Server: when true, the IDE will wait until the webserver is effectively running
before launching the browser to open the web application URL.
31
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
Installation for Lazarus
The compilation of the design-time package for Lazarus v2.0 needs to be done different from
Lazarus v1.x
This can be configured by opening and installing the package tmswebcorepkgdelaz.lpk
Open Tools, Environment where you can see as the last item in the list TMS WebCore where
you can find all paths that need to be set:
32
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
After verifying the settings, you are ready to create your first TMS WEB Core project. Go to
Project, New project
33
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
TMS WEB Core will appear in the wizard:
For a first basic application, leave the options unchecked and proceed to create the application.
34
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
Your first TMS WEB Core application
Let’s create step by step a first TMS WEB Core application. After creating a new TMS WEB
Core project from the wizard
and opening the Delphi IDE form designed for the web form, let’s add a TWebButton, TWebEdit
and TWebListBox:
35
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
Now, let’s add a WebButton event handler for OnClick:
When running this project, the result we see in the browser is:
36
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
When you have compiled the application in debug mode, the output folder contains the following
files:
The file project1.js contains the Javascript compiled application. The file project1.html is the
general project HTML file. The unit1.html is the HTML that is specific to form1 which is the
default form in the project here.
An interesting file is the project1.js.map file. This is the file that facilitates debugging directly
using the Delphi language from the browser. When compiling in release mode, this file is not
generated.
When one would want to deploy the application to a web server, all that is needed to do is put
the files project1.html / project1.js and unit1.html in a folder on a web server.
37
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
Your first TMS WEB Core progressive web application
It is also possible to automatically create a progressive web application (PWA) from the IDE
wizard. A progressive web application is a web application designed to adapt itself to
online/offline situations, to various device types and most importantly, to let itself install similar
to a native application on the desktop and start from a desktop icon. More information about
progressive web applications can be found here:
https://developers.google.com/web/progressive-web-apps/
To create a new progressive web application from TMS WEB Core, select the icon “TMS Web
PWA Application” from the wizard:
At first sight, it looks like this generates the template for a regular TMS WEB Core web
application. However, several important additional files are generated: the manifest file, the
JavaScript serviceworker file and application icons in different sizes:
38
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
The manifest file is the file that contains the name, description, icons and general information of
your progressive web application. This manifest must be conform to the standard:
https://developers.google.com/web/fundamentals/web-app-manifest/ When it is available, it
allows the browser to identify the application as progressive web application and offer to install
the application from the desktop.
In a TMS WEB Core, the manifest is automatically linked from the project main HTML file via:
<link rel=manifest href="Manifest.json"/>
The serviceworker is registered and invoked as well from the main HTML script
<script type="text/javascript">
if ("serviceWorker" in navigator)
{
navigator.serviceWorker.register("ServiceWorker.js").then(
function(ARegistration)
{}).catch(
function(AErr)
{
console.log("TMS WEB Core service worker registration failed", AErr);
});
}
</script>
While the default generated serviceworker.js contains all functionality to automatically cache
your entire TMS WEB Core application for offline use, it can be further customized by editing
this file in JavaScript.
39
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
The manifest file content can be customized directly from the project options:
When the progressive web application is launched from the browser via its URL, browsers
supporting progressive web applications (Safare on iOS, Chrome on Android), will show a
dialog upon launching to offer the possibility to add the application icons to the home screen:
40
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
When a progressive web application is used, the Application singleton object returns the
online/offline state of the application and will also trigger an event when the online/offline state
changes.
Check the property
Application.IsOnline: boolean
to check whether the application is online or offline.
Or attach an event handler to:
41
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
Application.OnOnlineChange: TApplicationOnlineChangeEvent
with
TOnlineStatus = (osOnline, osOffline);
TApplicationOnlineChangeEvent = procedure(Sender: TObject; AStatus:
TOnlineStatus) of object;
This event handler will be triggered when the internet connection availability changes on the
device where the application is run.
42
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
Your first TMS WEB Core Electron Application
TMS WEB Core allow to create cross platform Electron applications. These are packaged web
applications that can be deployed as executable code for Windows, macOS and Linux. You can
learn about the exciting Electron framework at: https://electronjs.org/
It is the Electron framework that offers a large API to take advantage of operating system
features such as application menu, notifications, local file access, … Your TMS WEB Core
application gets compiled to JavaScript and it is the Electron packager that turns the compiled
result into an executable for the 3 operating systems: Windows, macOS, Linux. TMS WEB Core
integrates all these steps for you from the IDE for Windows & Linux. For macOS, the packager
needs to be run separately from a macOS operating system.
To create a new Electron application from TMS WEB Core, select the “TMS Web Electron
Application” from the wizard:
43
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
It generates a project that is similar to a TMS Web PWA Application, but instead of the manifest
and serviceworker files, it has generated a main javascript file, a package file and 3 icons for the
different platforms:
For Electron application development with TMS WEB Core, a whole range of components is
available that let you take advantage of the Electron APIs for interfacing with the operating
system. This is covered in the chapter specifically about Electron.
44
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
Debugging
As explained in the previous paragraph, when compiling in the Delphi IDE in debug mode, the
extra file project1.js.map is generated to offer the capability to debug the application directly
from Delphi code in the browser. This capability is supported in both the Chrome and Firefox
browser.
To start the debugger, press F12 from the browser and go to the Sources tab. On the source
window, press shortcut Ctrl-P and you get to see the file list of all files involved in the project.
From the file list, pick unit1.pas:
After picking this file unit1.pas, you can add breakpoints by clicking in the line number gutter:
45
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
Now, adding a value in the TWebEdit control and pressing the TWebButton triggers the
breakpoint:
and as you can see in the browser debugger, you can step Delphi line by Delphi line through the
code and see the values of Delphi variables directly in the browser debugger:
46
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
This shows how easy and comfortable it is to debug TMS WEB Core application using the
Delphi language directly from the browser.
To make it even more convenient to debug your TMS WEB Core applications in the browser,
when you compile your application in Debug mode and you have added a breakpoint in the
Delphi IDE, this is automatically converted to a debugger breakpoint in the browser.
For example, set the breakpoint in the Delphi IDE:
and run the web application in the browser results in:
So, the browser debugger is automatically forced to stop just before the line where the
breakpoint was set in the IDE. This saves you from locating the code in the browser console
and set any breakpoints again from there.
An alternative to setting breakpoints via the IDE, is to set a breakpoint by inserting the identifier
{BP} in the code. For every line in the Pascal code that contains {BP}, a JavaScript code line
“debugger” will be inserted.
47
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
Pascal to JavaScript Compiler
For creating the single-page JavaScript application, the Pascal code of your project is compiled
to JavaScript and this JavaScript application runs in the browser. Typically, a connection to the
server will be made by HTTP REST requests or via WebSocket communication. To compile the
Pascal code to JavaScript code, the pas2js compiler is used that is an open-source project and
builds on years of experience of the FPC compiler team. More information about the pas2js
project can be found here: http://wiki.freepascal.org/pas2js
At this moment, this support for the Pascal language is highly compatible with the Delphi
language. Some newer Delphi language features are not yet supported in v1.x though but are
on the roadmap. The language features not yet supported but planned for the 2020 timeframe
are:
- Generics
- Attributes
- Advanced Records
- Advanced RTTI
- Type helpers
For more details about the capabilities of the pas2js compiler, please refer to
http://wiki.freepascal.org/pas2js#Compiler
TMS WEB Core ships with a validated version of the pas2js compiler. We recommend using the
pas2js compiler included in the TMS WEB Core distribution as this is the version we test &
approve our entire framework and IDE integration with.
48
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
RTL
Equally important to move existing VCL or FMX code bases to the web is the support for RTL. A
huge part of the Delphi RTL is available and delivered with the compiler. This includes now:
There is a basic Object Pascal RTL, several units from the FPC Packages are also available
-system
-sysutils
-math
-strutils
-rtlconst
-classes
-contnrs
-typinfo
-objpas
-dateutils
-DB
-js (javascript system objects)
-web (browser provided objects)
-libjquery
For more information about RTL support, please see: http://wiki.freepascal.org/pas2js#RTL
49
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
Preprocessor
As a webbrowser does not know the concept of DFM files to load form configuration from and
as the form designer in the Delphi IDE is technically a VCL form, there is a preprocessing step
before compiling the code to JavaScript. This preprocessing step handles the conversion from
DFM file to code for initialization of the form. The pre-processor will also convert the unit
namespaces from VCL to WEBLib. This unit namespace conversion not only applies to unit
names but also when unit name prefixes are explicitly used for types. If there is a special reason
to disallow the pre-processor to skip lines in the code, prefix these lines with the {NOPP}
specifier.
So, the line
VCL.StdCtrls.TLabel
will be converted to
WEBLib.StdCtrls.TLabel
The line
{NOPP} VCL.MyUnit.MyType
will remain as-is before it is being compiled, i.e.
VCL.MyUnit.MyType
50
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
Utility functions
The unit WEBLib.WebTools contains several helper functions that can be handy.
The list of available utility functions is:
procedure MessageBeep(AType: integer);
Method with a VCL compatible signature playing a beep in the browser.
procedure OutputDebugString(const s: string);
Sends the string to the browser event log
function GetTickCount: longint;
Returns the number of ticks since browser start in milliseconds
function GetQueryParam(AName: string): string;
Returns the URL query parameter value for the URL with which the web application was started.
Example:
https://www.myserver.com/mysite?user=Admin
with return ‘Admin’ for GetQueryParam(‘user’);
function HasQueryParam(AName: string; var AValue: string): boolean;
Returns true if a specific query parameter is present in the URL with which the application was
launched.
function GetLocaleShortDateFormat(ALocale: string = ''): string;
Gets the short date format according to the browser locale
function GetLocaleLongDayName(DayOfWeek: integer; ALocale: string =
''): string;
Gets the long day name for a specific day in the week according to the browser locale
51
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
function GetLocaleShortDayName(DayOfWeek: integer; ALocale: string =
''): string;
Gets the short day name for a specific day in the week according to the browser locale
function GetLocaleLongMonthName(Month: integer; ALocale: string = ''):
string;
Gets the long month name for a specific day in the week according to the browser locale
function GetLocaleShortMonthName(Month: integer; ALocale: string =
''): string;
Gets the short month name for a specific month in the year according to the browser locale
function GetLocaleDecimalSeparator(ALocale: string = ‘’): string;
Gets the decimal separator character according to the browser locale or the specified locale
function GetLocaleThousandSeparator(ALocale: string = ‘’): string;
Gets the thousand separator character according to the browser locale or the specified locale
function GetLocaleCurrency(ALocale: string = ‘’): string;
Gets the currency according to the browser locale or the specified locale
function LocaleFormatCurrency(Value: double; ACurrency: string;
ALocale: string = ''): string;
Formats a value with a currency according to the browser locale or the specified locale
function GetBrowserLocale: string;
Retrieves the browser locale as string. See appendix for possible locale names.
function ProcessAccelerator(AValue: string; var Accelerator: string):
string;
Converts a string using accelerator keys (i.e. characters preceeded by &) as underlined HTML
text. The Accelerator var parameter is set to the accelerator key value.
52
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
Example:
‘My &Button’
will be converted to
‘My <B>utton’ and the Accelerator var parameter will be set to ‘B’
function GetBase64Image(AImage: TJSHTMLElement): string
Retrieves the image data as base64 encoded string
procedure DebugBreak;
Sets a breakpoint in the code at the line where DebugBreak is called.
53
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
Page Design
Absolute positioning
By default, the Delphi form designer serves as a WYSIWYG design surface for your web
application forms. This means that the UI controls on the Delphi form will appear absolute
positioned on the web page. For page layout & organization, there are the typical Delphi
container controls like a panel, groupbox, scrollbox, gridpanel.
54
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
The parent/child relationship of the Delphi controls is also reflected on the produced web pages.
Additional facilities like control alignment, anchoring, grid panel and a splitter control are
available to let you and the end user control the layout of the pages. In this default mode,
everything is as such very familiar to Delphi developers and users of Delphi VCL Windows
applications and sometimes this similarity is desirable.
Relative positioning
Controls can also be added to the designer and positioning set to relative position. This is set by
the property Control.ElementPosition to epRelativate. In this mode, coordinates for the control
are not rendered. It is up to the browser DOM to determine the layout. If for the Control the
HeightStyle and WidthStyle are set to ssAuto, also the DOM will determine the runtime size of
the control. There is one very important consideration with relative positioned controls and that
is control order. The relative ordering of controls is set by the Control.ChildOrder property.
When Control.ElementPosition is epRelative, the Control.ChildOrder is used to control the
ordering of the HTML elements of the control in the parent. The control with Control.ChildOrder
set to 0 will be the first control under the parent HTML element hierarchy, the next control will be
the control with Control.ChildOrder set to 1 and so on …
Example:
In the designer, there is a panel with ElementPosition = epRelative and WidthStyle, HeightStyle
are set to ssAuto. It contains 3 child controls, a label, edit and button with ElementPosition set to
epRelative as well. The label’s ChildOrder is set to 0, the edit’s ChildOrder to 1 and the button’s
ChildOrder to 2.
The result in the browser is:
55
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
The corresponding HTML will be: a HTML SPAN element for the panel, a DIV element with
child HTML LABEL element for the label. A HTML INPUT element for the edit control and a
HTML BUTTON element for the button:
<SPAN>
<DIV><LABEL></LABEL></DIV>
<INPUT type=”TEXT”>
<BUTTON type=”BUTTON”>
</SPAN>
Now, CSS can take care of further styling of the generated HTML elements.
Use of HTML templates
The TMS WEB Core framework is also completely open to have the page layout designed
directly from HTML & CSS. The architecture of the framework provides for separating design &
code and even have the design done by people with a role, i.e. graphical designers.
So, how is this separation handled? Fortunately, in a very easy and straightforward way. The
link between HTML and the UI controls and code used in the Delphi IDE is based on the unique
HTML element ID. Every TMS WEB Core control has a property ElementID. When the
ElementID is not used, i.e. left empty, the HTML elements the control consists of is generated
by the TMS WEB Core framework. When the ElementID is specified, the HTML element found
is hooked up to the Pascal class for the control. This means that property accessors directly get
and set values from the HTML element and the various HTML element Javascript events are
hooked up the class and exposed as Pascal event handlers.
Here the TWebMemo is hooked up via the ElementID property to a TEXTAREA HTML element
with ID set to “mem” and already in the HTML file.
56
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
The software developer and the graphical designer can collaborate by simply ensuring that the
designer provides the HTML element IDs to the software developer or the software developer
can provide a list of IDs of controls needed to the graphical designer.
Alternatively, the mapping between UI controls on the form designer and HTML elements can
also be done via the binding editor which is invoked from the TWebForm context menu of the
form designer:
57
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
In this control binding editor, two views are possible: the view that shows the UI controls found
on the form in the first column and the possibility to pick in the right column the HTML element
to map the control to and vice versa in the HTML Element-Control tab.
It speaks for itself that using this technique empowers us to take advantage of responsive
design for TMS WEB Core web applications. When the HTML template for the page is applying
responsive design techniques, i.e. different layouts for different device screen sizes, the UI
controls will appear where the designer defined these should appear depending on the screen
size. That is not all though. It is also possible to let the Delphi designed UI be generated in the
body part of a HTML page or in any specified HTML container element in a HTML page. As
such, a graphical designer could create a page layout with a header, footer and other elements
in the HTML page and add a specific area via a HTML DIV or SPAN element where the Delphi
designed UI will be generated in. To do so, all that is needed is set to the ID for the HTML
element where the form should be generated via the Form.AppContent property. Finally, each
UI control also exposes an ElementClass property. Via this ElementClass property a CSS style
can be specified for an UI control. Via this way for example, it is very easy to use a popular
framework like bootstrap. It is sufficient to set the bootstrap CSS class names to the UI controls
on the Delphi form designer by their ElementClass properties.
58
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
Here the ElementClass property of the edit control on the form is set to the bootstrap ‘form-
control’ style:
One of the demos included in the TMS WEB Core framework shows this. By simply changing
the bootstrap theme via changing the reference in the HTML page template, the appearance of
the web application will adapt automatically.
Demo without styling:
http://www.tmssoftware.biz/tmsweb/demos/tmsweb_simple/
Demo with bootstrap styling applied:
http://www.tmssoftware.biz/tmsweb/demos/tmsweb_bootstrap/
Further fine-tuning on how the design-time setup translates to run-time look & feel and layout is
possible via the UI control properties ElementFont and ElementPosition.
Default, the UI control ElementFont property is set to efProperty. This means that the UI control
Font property values will be used to generate the style attributes for the HTML element (in case
ElementID and ElementClassName are blank). When ElementFont is set to efCSS, this means
the font for the HTML element will be determined by the browser CSS resolving.
Example:
59
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
This is a TMS WEB Core project web form with 3 controls. The font for the controls was set at
design-time to Verdana, 10pt. In the browser, this renders exactly the same:
Now, changing the ElementFont property on the 3 controls to efCSS and including the following
CSS in the form’s unit1.html:
results in:
60
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
The ElementPosition property determines how the form designer based coordinates are used as
style attributes for the HTML element. When ElementPosition is set to epAbsolute (default), the
HTML element style attributes are set to absolute and the control position and size will match
exactly how it was designed in the form designer. When the setting is epRelative or epNone, the
HTML element layout, position and size will be determined by the browser and possible CSS
applied to the HTML element(s).
61
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
JavaScript and CSS
In the previous paragraph, it was explained how a form uses a HTML file and that the HTML file
can contain HTML elements, CSS, JavaScript as well as references to existing JavaScript
libraries and CSS. While these references can always be manually added to the HTML file, the
IDE also provides for automatic insertion or removal of such references.
To do this, choose from the project context menu in the project explorer pane in the IDE the
menu option:
“Manage JavaScript Libraries …”
This brings a dialog with several preconfigured popular JavaScript libraries that can be added:
From this dialog, simply check the JavaScript libraries you want to use for your project.
62
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
Application
Just like in a VCL application, a TMS WEB Core application has a singleton TApplication object.
The application is mainly responsible for creating and managing forms and provides in addition
a couple of methods, properties and events to help in various ways. The Application object is
also responsible to retrieve various formatting settings (date, time, numbers) from the browser
locale.
Normally, the IDE will automatically generate the needed code so the main application form is
created. Following methods, properties and events are available:
Application.CreateForm(AInstanceClass:
TFormClass; var AReference);
Creates a new instance of a form class. The
new form instance is returned via the
AReference parameter. Note that creating a
new form involves loading the form HTML file
and as such, this is an asynchronous process.
Application.CreateForm(AInstanceClass:
TFormClass; AElementID: string; var
AReference);
Creates a new instance of a form class. The
new form instance is returned via the
AReference parameter. The form content is
loaded in the HTML element set via
ElementID. Thus, the form is hosted in the
element in the form that contains it. Note that
creating a new form involves loading the form
HTML file and as such, this is an
asynchronous process.
Application.CreateForm(AInstanceClass:
TFormClass; AElementID: string; var
AReference; AProc: TFormCreatedProc);
Overload of the CreateForm() method that has
an extra parameter AProc. This allows to pass
a procedure pointer for the procedure that will
be called when the asynchronous creation of
the form is ready.
Application.CreateForm(AInstanceClass:
TDataModuleClass; var AReference);
Creates a new instance of a data module
Application.ErrorType Defines the type of error messages that is
displayed.
aeSilent: non-obtrusive message in the
browser console. Default when application is
compiled in release mode
aeDialog: HTML dialog with error message
centered in browser window
aeAlert:Javascript alert with error message
aeFooter: Rectangular area in footer of
63
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
browser window containing error message
Application.LoadForm(AForm: TCustomForm;
AFormFile: string);
Loads the HTML file corresponding with the
form instance. This is an asynchronous
process.
Application.InitFormatSettings(const
BrowserLocale: string);
This allows to override the automatic
initialization of format settings from the default
browser locale. See Appendix for possible
browser locale values.
Application.Navigate(AURL: string; ATarget:
TNavigationTarget);
Method to navigate from the application to a
given URL. With the ATarget parameter it can
be set to navigate to the URL in a new
browser window or in the window where the
current application is running.
Application.Download(AURL: string); Starts the download of a file from the
application from location AURL
Application.DownloadTextFile(const AText:
string; AFileName: string);
Starts the download of a text file from the
application with content of the text file set as
AText
Application.DownloadBinaryFile(const Data:
TJSUint8Array; AFileName: string);
Starts the download of a binary file from the
application with content of the binary file set as
Data, an array of bytes
Application.EXEName: string Returns the application URL
Application.InsertCSS(CSSID, CSSFile:
string);
Insert a CSS library reference with CSSID
dynamically into the application main form
HTML
Application.RemoveCSS(CSSID: string); Removes the CSS library reference with
CSSID dynamically from the application main
form HTML
Application.ActiveForm: TForm Returns the active form of the application
Application.AutoRouteForm: boolean When true, a form classname can be passed
as a hash on the URL and then the application
will automatically create and display a form of
this classname.
Application.IsOnline: boolean Read-only property returning the online status
of the application
Application.IsMobile: boolean Read-only property returning whether the web
application is running on a mobile device
(smartphone or table)
Application.MainForm: TForm Returns the main form of the application
Application.ObjectURL(Afile: TJSHTMLFile):
string;
Returns a data URL from a file object
64
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
Application.RouteForm(AParameter: string); Automatically start the form with class name
passed as request parameter
form=TFormClassName
Application.RunScript(AScript: string); Executes a block of JavaScript code
immediately
Application.MainForm Returns the form instance that is the current
active main form of application.
Application.Parameters: TStrings; Returns the list of possible optional URL
request parameters with which the application
was started
Application.Language: TUILanguage Sets optionally the application language.
When the application language is set, it is
possible that a language specific HTML file for
a form is loaded. Default,
Application.Language is set to lNone. When
Application.Language is set to a different
value, the HTML file loaded for a form gets a
language specific suffix. For example, when
Application.Language is set to lGerman, the
application will load for a form in unit1.pas and
having the form HTML file named unit1.html as
unit1_de.html. This way, it is possible to have
different language specific HTML files and
have the application load the desired HTML
form file when the language is set. The list of
supported languages and the used language
suffix is found in the appendix.
Application.ThemeColor: TColor Gets and sets the application theme
background color. This theme background
color is used as form caption background color
when popup forms are created.
Application.ThemeTextColor: TColor Gets and sets the application theme text color.
This theme text color is used as form caption
text color when popup forms are created.
Application.ThemeButtonClassName Gets and sets the application CSS style
classname for the buttons created on dialog
boxes.
Application.OnError Event triggered when an error occurs in the
application. This can be a Pascal exception or
any HTML DOM specific error. The event
passes the information about the error in the
65
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
parameter AError: TAppplicationError. When
the Handled parameter is set to true, the
standard error is not longer performed.
Application.OnFontCacheReady Event triggered when fonts were successfully
loaded in the cache. Font caching is used for
client-side PDF generation
Application.OnHashChange Event triggered when a hash query parameter
in the application URL changes. When the
application was started with myapp.html and
then the URL myapp.html#newform is used,
the OnHashChange event will be triggered.
When used in combination with
AutoRouteForm, the form classname can be
passed as a hash and this form will be created
when the hash changes.
Application.OnImageCacheReady Event triggered when images that were set to
be loaded by setting the URL are finished with
loading asynchronously. It might be necessary
to force a repaint of controls from this event.
Application.OnOnlineChange Event triggered when the online status of the
application changes. That is, when the device
goes from online to offline or vice versa, this
event is triggered
Application.OnOAuthToken This event is triggered when the token is
returned from a REST API service after
authentication & authorization through a popup
window.
Application.OnOAuthCallBack This event is triggered when the REST API
service against which authentication &
authorization is performed by means of a
popup window is doing a callback to the
application from where it was started.
66
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
Forms
In TMS WEB Core, the base class for forms is TWebForm.TWebForm is similar to a TForm in
the VCL. Controls can be put at design time on the TWebForm and will be displayed. The
TWebForm is by default displayed as a full page in the browser. In addition to the controls that
the form hosts that are created at design-time or at runtime, there is also the HTML code
associated with the form. This HTML can be an empty HTML BODY when all controls are
created by Delphi classes or it can contain additional HTML elements or HTML elements to
which Delphi classes are mapped.
The default project looks like:
and you see under unit1.pas not only a reference to the DFM file where Delphi class properties
are stored but also the HTML file associated with the form in Unit1. The default HTML for this
form can be opened & edited from the Delphi IDE but can also be ‘designed’ by any other tool
for creating HTML files. The default content of the HTML file is:
67
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
In the default HTML files, the BODY is empty and the controls defined in Delphi will be put in the
BODY upon creation of the form instance. The application creates the main form in the same
way as in a VCL application, i.e. with the code:
Application.CreateForm(TForm1, Form1);
It is also possible that the Delphi controls will be created within another HTML element than the
HTML BODY element.
If unit1.html contains:
we can specify at form class level Form.FormContainer: string and set this to the HTML
element ID of the HTML element in which the form should be rendered, i.e. in this case it could
be set to “form”.
68
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
Creating forms at runtime
Due to the asynchronous behaviour of loading the HTML for a form, the creation of a form in
code is slightly different in the web than in VCL. To create a form, following code can be used:
procedure TForm1.WebButton1Click(Sender: TObject);
var
newform: TForm2;
// async called when the form is closed (via form.Close method where
ModalResult can be set)
procedure AfterShowModal(AValue: TModalResult);
begin
ShowMessage('Form 2 closed with new
value:'+newform.frm2Edit.Text);
WebEdit1.Text := newform.frm2Edit.Text;
end;
// async called OnCreate for TForm2
procedure AfterCreate(AForm: TObject);
begin
(AForm as TForm2).frm2Edit.Text := WebEdit1.Text;
end;
begin
newform := TForm2.CreateNew(@AfterCreate);
newform.ShowModal(@AfterShowModal);
end;
By default, the new form TForm2 will replace the page showing the actual form. When this form
is closed, the original form from where TForm2 is shown, will be displayed in the browser page
again. The procedure AfterCreate is shown when the HTML for TForm2 is loaded and its
controls are created. The ShowModal() method will display the actual form in the browser page
and a reference to the method that will be called when the form is closed can be passed as
parameter as ShowModal is not a blocking method, as such blocking methods are not possible
in a browser environment.
In addition to forms displayed in the full browser page, it is also possible to create popup forms.
These forms will be displayed on top of other forms, effectively disabling the forms on top of
69
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
which the new form is displayed till this new form is closed. To display a form as popup, all that
is needed is setting form.Popup = true.
Example:
begin
newform := TForm2.CreateNew(@AfterCreate);
newform.Popup := true;
newform.PopupOpacity := 0.2; // only needed when main form should
// remain visible under a layer with
// opacity
newform.ShowModal(@AfterShowModal);
end;
For popup forms, 2 more settings are relevant.
The popup form can have a caption or not. When the popup form has a caption, the user will be
able ot move the popup form on the screen via the caption. The caption of the form is set via
WebForm.Caption: string;
The popup form can be resizable (on desktop browsers) via a resizer area in the bottom-right
corner of the form.
These extra form settings are done via the TWebForm.Border property:
WebForm.Border setting Description
fbDialogSizeable Popup form has caption and can be sized
fbDialog Popup form has caption and has a fixed size
fbSingle Not sizeable form, no caption
70
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
Hosting forms in other controls
Finally, it is also possible to embed other forms in controls or HTML elements in other forms.
To do so, create the form with overloads of the CreateForm method of the Application object or
via the CreateNew constructor overload of TWebForm:
Via the TApplication object:
procedure CreateForm(AInstanceClass: TWebFormClass; AElementID:
string; var AReference); overload;
procedure CreateForm(AInstanceClass: TWebFormClass; AElementID:
string; var AReference; AProc: TFormCreatedProc); overload;
The AInstanceClass is the class type of the form to be created. The AElementID is the ID of the
HTML element (or Delphi class control ID) that is the HTML container in which the form will be
created. The AReference is a reference to the form instance that will be created and optionally a
referene to a procedure that will be called when the form was effectively created can be passed.
Via the TWebForm CreateNew overload:
constructor TWebForm.CreateNew(AElementID: string; AProc:
TFormCreatedProc);
The AElementID is the ID of the HTML element (or Delphi class control ID) that is the HTML
container in which the form will be created. Optionally a method can be passed that will be
called when the form was created.
Example code:
71
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
In this sample code, a new form of the type TSubForm1 is created. The form will be displayed
inside a panel on the form as we use the panel’s HTML element ID. When the form is created,
and this all controls on the form are accessible, the AfterCreate() procedure is called.
72
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
Form inheritance
Just like in a Delphi VCL application, TMS WEB Core web client applications can also work with
the concept of visual form inheritance. This means that a TWebForm can be created, UI
controls and UI control logic can be applied to this form and then a form descending from this
base form class can be created. The difference with a VCL application form is that for a
TWebForm, there is also an associated HTML template. As each form has a HTML template,
when creating a new descending form, a new HTML template will be created. Note that for a
descending form, the HTML template belonging to the descending form will be used to render
the form rather than the HTML template belonging to the base form.
The process to create a descending form is done from the context menu in the Delphi IDE
project manager:
73
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
Frames
In a TMS WEB Core application, the concept for frames can also be used. Frames can
encapsulate specific UI control logic in combination with UI controls. A frame in a TMS WEB
Core application has no associated HTML template. The template of the form hosting the frame
is used.
To create a new frame, follow the same steps as for adding a new VCL frame. After the frame is
added to the project, TMS WEB Core components can be dropped on the frame and the UI
control logic can be written in the frame unit.
Then, to use the frame, enter ‘Frames’ on the object inspector and select the frame you want to
add to a form from the frames list
74
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
UI control types
TMS WEB Core supports 4 types of UI controls
UI controls encapsulating HTML elements
These are UI controls that are built-up from one or more HTML elements. All UI controls
included in TMS WEB Core are of this type. In its most basic form, this is for example a
TWebButton that maps on a HTML <BUTTON> element. In a more complex form, this is a
TWebLoginPanel that consists of several <INPUT> elements, a <BUTTON> element and <DIV>
elements.
Custom drawn controls using the HTML5 CANVAS element
These are UI controls that are based on the HTML5 CANVAS element and that are similar to
VCL custom controls, custom drawn using the override of the Paint method. For UI interaction,
the base class TCustomControl provides the exact same protected methods
KeyPress/KeyDown/KeyUp/MouseDown/MouseMove/MouseUp to override. The control
exposes a Canvas: TCanvas that has the same interface as the VCL TCanvas, i.e. a Pen,
Brush, methods MoveTo(), LineTo(), Rectangle(), etc...
In addition to the VCL TCanvas object, it features methods to get the content of the control as
image or to download it as image:
TCanvas.GetBase64Image: string;
TCanvas.DownloadImage( AFileName: string; AType: TImageType = itPNG);
function GetAsImage(AType: TImageType): string;
With TimageType = (itBase64, itBMP, itPNG, itJPEG, itGIF);
TMS FNC controls
The TMS FNC component framework is an abstraction layer that facilitates writing UI controls
with a single code base that can be used for VCL, FMX, LCL and also TMS WEB Core
applications. Several TMS FNC products, i.e. TMS FNC Chart, TMS FNC UI Pack and TMS
FNC Dashboard Controls Pack support to use of the components also in web applications.
For documentation about FNC controls, this is included in the different TMS FNC products and
75
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
all documentation that applies to use of the controls in VCL, FMX or LCL applications also
applies to use of the controls in TMS WEB Core applications.
jQuery UI controls
Several controls are provided that are actually Pascal wrapper classes for underlying jQuery UI
controls. This includes a set of Pascal wrapper classes for the jQWidget controls
(www.jqwidgets.com)
76
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
Standard Components TMS WEB Core comes with a lot of components out of the box enabling you to go ahead
immediately creating web applications from the Delphi IDE. Many of these standard controls
resemble VCL controls and great care has been taken to give these controls class names and
properties, methods and event handlers that match their VCL counterparts. This has been done
to make the learning curve for Delphi developers used to create Windows VCL applications as
light as possible to create web applications. The standard controls have the prefix “TWeb”, i.e.
where in VCL a TButton is used, there is in TMS WEB Core a component TWebButton. Where
there is in VCL a TListBox, in TMS WEB Core, its counterpart is TWebListBox etc…
Common properties of visual controls
Visual controls are descending from TControl. For controls without a Canvas, i.e. controls that
map directly on a hierary of HTML elements (excluding the HTML5 CANVAS element),
TWinControl descending from TControl is defined. Controls doing custom painting are
descending from TCustomControl that descends from TControl. Finally, when the control does
not need user-interface interaction via mouse or keyboard, the TGraphicControl is introduced
that descends from TCustomControl. At TControl level, a number of properties is introduced that
are then further common for all descending user interface controls.
Align Sets the alignment of the control in
relationship to its parent control:
alLeft: control aligns to the left-side of its
parent
alTop:control aligns to the top of its parent
alBottom:aligns to the bottom of its parent
alRight:aligns to the right-side of its parent
alClient:aligns to the client-size of its parent
AlignWithMargin When true, the margins settings are taking in
account for calculating the alignment
Anchors Gets or sets the anchoring of the control.
Values can be
akLeft
akTop
akRight
akBottom
Cursor Sets the mouse cursor used when the mouse
77
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
is over the control
Enabled Sets the control to enabled or disabled
ElementClassName Sets the CSS class name(s) for the HTML
element used to represent the control
ElementFont Sets whether the control Font property is used
to set the font (efProperty) or CSS will control
the font (efCSS)
ElementID Sets the HTML ID of the HTML element
already present in the HTML document that
the Pascal class needs to connect to (instead
of creating a new HTML element instance)
ElementPosition Sets the position of the element in the HTML
page as epAbsolute, epRelative or epNone.
EventStopPropagation: TEventPropagation Different from the Windows operating system,
a HTML element event such as for mouse and
keyboard are sent to the element but also to
the parent element and so on by default. This
is for UI controls typically not desired and as
such for TMS WEB Core controls by default
disabled. However, with the
EventStopPropagation, you can control what
event are propagated and what not.
EventStopPropagation: TEventPropagation is
defined as:
TElementEvent = (eeClick, eeMouseDown,
eeMouseUp, eeMouseMove, eeDblClick,
eeKeyPress, eeKeyDown, eeKeyUp);
TEventPropagation = set of TElementEvent;
As such, by default it is initialized to:
EventStopPropagation := [eeClick, eeDblClick,
eeMouseUp, eeMouseMove, eeMouseDown,
eeKeypress, eeKeyDown, eeKeyUp];
so all event propagation is blocked.
To allow all event propagation, you would set
Control.EventStopPropagation := [];
Height Absolute height value for the control
HeightPercent Height value used when HeightStyle is
78
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
ssPercent
HeightStyle When HeightStyle is set to ssAbsolute, the
Height value is used to set the absolute height
of the container HTML element of the control.
When HeightStyle is set to ssPercent, the
HeightPercent value is used. When
HeightStyle is set to ssNone, no height is
specified on the container HTML element,
meaning it will auto size.
Hint Sets the hint value for the container HTML
element
Margins Sets the margin values
ShowHint When true, the hint is used for the control
Visible When true, the control is visible
Width Absolute width value for the control
WidthPercent Width value used when WidthStyle is
ssPercent
WidthStyle When WidthStyle is set to ssAbsolute, the
Width value is used to set the absolute width
of the container HTML element of the control.
When WidthStyle is set to ssPercent, the
WidthPercent value is used. When WidthStyle
is set to ssNone, no width is specified on the
container HTML element, meaning it will auto
size.
TWebLabel
Description
Below is a list of the most important properties methods and events for the TWebLabel.
TWebLabel is a label control similar to a VCL TLabel.
79
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
Designtime
Runtime
HTML template tag
The HTML tag the component can be associated with in an HTML template. Assign the ID
attribute with a unique value and set the identical value to the ElementID property. Detailed
information can be found in the Use of HTML templates topic.
HTML tag <DIV ID=”UniqueID”></DIV>
ElementID UniqueID
Properties for TWebLabel
Alignment Sets the alignment of the text within the label
control
AutoSize When true, the size of the label adapts to the
text in the label
Caption Sets the text for the label
ElementClassName Optionally sets the CSS classname for the
outer DIV element of the label when styling
via CSS is used
ElementLabelClassName Optionally sets the CSS classname for the
label HTML element
ElementID Optionally sets the HTML element ID for a
HTML element in the form HTML file the
label needs to be connected with. When
connected, no new label is created but the
Delphi class is connected with the existing
HTML element in the form HTML file
EllipsisPosition Sets the type of ellipsis to use for showing
the text when it doesn’t fit in the label
rectangle.
epNone: no ellipsis used
epEndEllipsis: ellipsis at the end of the text
epPathEllipsis: label text contains a path
name and ellipsis is set taking a file path in
account
80
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
epWordEllipsis: ellipsis is positioned at word
boundary
HTMLType Sets the type of the HTML element that is
created for the label. This can be:
tDIV
tH1..tH6
tLABEL
tSPAN
The respective HTML elements created
within the label will be
<DIV><H1>..<H6><LABEL><SPAN>
Layout Sets the vertical text position in the label
tlTop: top aligned
tlCenter: center aligned
tlBottom: bottom aligned
Transparent When true, no background color is used
WordWrap When true, the text is rendered with
automatic wordwrap
Events for TWebLabel
OnClick Triggered when the mouse is clicked on the
label
OnDblClick Triggered when the mouse is double-clicked
on the label
TWebButton
Description
Below is a list of the most important properties methods and events for TWebButton.
TWebButton is a button control similar to a VCL TButton control.
81
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
Designtime
Runtime
HTML template tag
The HTML tag the component can be associated with in an HTML template. Assign the id
attribute with a unique value and set the identical value to the ElementID property. Detailed
information can be found in the Use of HTML templates topic.
HTML tag <BUTTON ID=”UniqueID”></BUTTON>
ElementID UniqueID
Properties for TWebButton
ButtonType Allows to set the type attribute for the HTML
button element when needed
(button|submit|reset)
Caption Sets the text for the button
ElementClassName Optionally sets the CSS classname for the
button when styling via CSS is used
ElementID Optionally sets the HTML element ID for a
HTML BUTTON element in the form HTML
file the button needs to be connected with.
When connected, no new button is created
but the Delphi class is connected with the
existing HTML element in the form HTML file
TabOrder Sets the tab order of the control
TabStop When true, the focus is turned to the control
when pressing tab
TextDirection Sets the text direction to
tdDefault: does not use direction attribute
tdInherit: uses TextDirection of parent control
tdRightToLeft:uses rtl direction attribute
82
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
tdLeftToRight: uses ltr direction attribute
Events for TWebButton
OnClick Event is triggered when the button is clicked
OnEnter Event triggered when the button gets focus
OnExit Event triggered when the focus leaves the
button
TWebEdit
Description
Below is a list of the most important properties methods and events for TWebEdit. TWebEdit is
an edit input control similar to a TEdit in VCL.
Designtime
Runtime
HTML template tag
The HTML tag the component can be associated with in an HTML template. Assign the ID
attribute with a unique value and set the identical value to the ElementID property. Detailed
information can be found in the Use of HTML templates topic.
HTML tag <DIV ID=”UniqueID”></DIV>
83
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
ElementID UniqueID
Properties for TWebEdit
AutoCompletion Sets the auto completion type that the
browser uses to fill the edit controls on a
form based on its cache of entries previously
made. Note that in order to have
autocompletion working, it is required that
the TWebEdit control is placed on a
TWebHTMLForm
AutoFocus When true and the control is the first control
in the tab order, it will display focused
BorderStyle Sets the border style for the control
EditType Sets the allowed type of characters that can
be entered. Options are weFloat, weHex,
weNumeric, weSignedFloat,
weSignedNumeric, weString, weSearch
ElementClassName Optionally sets the CSS classname for the
edit control when styling via CSS is used
ElementID Optionally sets the HTML element ID for a
HTML INPUT element in the form HTML file
the edit control needs to be connected with.
When connected, no new edit control is
created but the Delphi class is connected
with the existing HTML element in the form
HTML file
Pattern Sets the pattern of accepted characters for
form validation (used when TWebEdit is
used on a TWebHTMLForm)
Required When true, the content of the TWebEdit
being empty will cause a validation popup
when used on a TWebHTMLForm.
SelLength Gets or sets the length of selected text in the
edit control
SelStart Gets or sets the caret position in the edit
control
ShowFocus When true, the border color changes when
the control has focus
TabOrder Sets the tab order of the control
84
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
TabStop When true, the focus is turned to the control
when pressing tab
Text Gets or sets the text of the edit control
TextDirection Sets the text direction to
tdDefault: does not use direction attribute
tdInherit: uses TextDirection of parent control
tdRightToLeft:uses rtl direction attribute
tdLeftToRight: uses ltr direction attribute
Methods for TWebEdit
Clear Removes text from the edit
ClearSelection Removes the selected text from the edit
Events for TWebEdit
OnClick Event triggered when the control is clicked
OnChange Event triggered when the value in the edit
control is changed via the UI
OnEnter Event triggered when the control gets focus
OnExit Event triggered when focus leaves the
control
TWebEditAutocomplete
Description
Below is a list of the most important properties methods and events for TWebEditAutocomplete.
TWebEditAutocomplete is an edit control with the possibility to display a list of predefined values
in a popup, filtered based on user input.
85
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
Designtime
Runtime
HTML template tag
The HTML tag the component can be associated with in an HTML template. Assign the ID
attribute with a unique value and set the identical value to the ElementID property. Detailed
information can be found in the Use of HTML templates topic.
Note that for the popup to be displayed at the correct position, it is required to add a set the
CSS position property to relative or absolute.
HTML tag <DIV ID=”UniqueID”
style=”position:relative”></DIV>
ElementID UniqueID
Properties for TWebEditAutocomplete
ActiveItemClassName Optionally sets the CSS classname for the
active item in the popup list when styling via
CSS is used
BorderStyle Sets the border style for the control
ElementClassName Optionally sets the CSS classname for the
edit control when styling via CSS is used
ElementID Optionally sets the HTML element ID for a
HTML INPUT element in the form HTML file
the edit control needs to be connected with.
86
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
When connected, no new edit control is
created but the Delphi class is connected
with the existing HTML element in the form
HTML file
Items The list of pre-defined values to display in
the popup
ItemIndex Gets the currently selected item index
ItemClassName Optionally sets the CSS classname for the
items in the popup list when styling via CSS
is used
LookupCaseSensitive Sets if the lookup search is case sensitive
LookupMinLength The minimum text length required before the
lookup is initiated.
LookupType The type of lookup search that is performed.
ltAnywhere: Search for the character(s)
anywhere in the text
ltFirstCharacter: Search for the character(s)
in the beginning of the text
PopupClassName Optionally sets the CSS classname for the
the popup styling via CSS is used
PopupHeight Sets the height of the popup. If the number
of visible items exceeds the height of the
popup a scrollbar is displayed.
Set to 0 to let the popup autosize based on
the number of displayed items.
TabOrder Sets the tab order of the control
TabStop When true, the focus is turned to the control
when pressing tab
Text Gets or sets the text of the edit control
Events for TWebEditAutocomplete
OnClick Event triggered when the control is clicked
OnChange Event triggered when the value in the edit
control is changed via the UI
OnEnter Event triggered when the control gets focus
OnExit Event triggered when focus leaves the
control
OnRenderItem Event triggered for each displayed item.
87
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
Items can be customized with the
Args.ItemElement parameter
OnSelect Event triggered when an item is selected
from the popup list
TWebSpinEdit
Description
Below is a list of the most important properties methods and events for TWebSpinEdit.
TWebSpinEdit is an edit control with an embedded spin up & down button, similar to a VCL
TSpinEdit. The TWebSpinEdit requires a fully HTML5 compliant browser.
Designtime
Runtime
HTML template tag
The HTML tag the component can be associated with in an HTML template. Assign the ID
attribute with a unique value and set the identical value to the ElementID property. Detailed
information can be found in the Use of HTML templates topic.
HTML tag <INPUT TYPE=”NUMBER” ID=”UniqueID”>
ElementID UniqueID
Properties for TWebSpinEdit
88
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
AutoSize When true, the width of the control adapts to
the text
BorderStyle Sets the border style for the control
ElementClassName Optionally sets the CSS classname for the
spin control when styling via CSS is used
ElementID Optionally sets the HTML element ID for a
HTML element in the form HTML file the spin
control needs to be connected with. When
connected, no new spin contrl is created but
the Delphi class is connected with the
existing HTML element in the form HTML file
Increment Gets or sets the step to increment the value
with the up/down buttons
ShowFocus When true, the border color changes when
the control has focus
TabOrder Sets the tab order of the control
TabStop When true, the focus is turned to the control
when pressing tab
TextDirection Sets the text direction to
tdDefault: does not use direction attribute
tdInherit: uses TextDirection of parent control
tdRightToLeft:uses rtl direction attribute
tdLeftToRight: uses ltr direction attribute
Value Sets or gets the value of the control
Events for TWebSpinEdit
OnChange Event triggered when the value of the spin
edit control changes from the UI
OnClick Event triggered when the control is clicked
OnDblClick Event triggered when the control is double-
clicked
OnEnter Event triggered when the control gets focus
OnExit Event triggered when focus leaves the
control
89
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
TWebMaskEdit
Description
Below is a list of the most important properties methods and events for TWebMaskEdit.
TWebMaskEdit is an edit control with a edit mask capability that controls what character(s) can
be typed at what position in the edit control, similar to a VCL TMaskEdit.
EditMask property set to: !99/99/00;1;_
Designtime
Runtime
Properties for TWebMaskEdit
Alignment Sets the alignment of the entered text in the edit control
AutoSelect When true, all text gets selected when the control gets focus
AutoSize When true, the width of the control adapts to the text
BorderStyle Sets the border style for the control
CharCase Controls whether characters are automatically entered as lowercase, uppercase
or entered as typed.
EditMask Sets the mask for the inplace editor. The mask that can be used for the
TWebMaskEdit is compatible with the mask available for a VCL TMaskEdit
control. The description of the mask capabilities can be found here:
http://docwiki.embarcadero.com/Libraries/Tokyo/en/System.MaskUtils.TEditMask
EditText Sets & gets the value of the edit control without taking the mask in account
ElementClassName Optionally sets the CSS classname for the spin control when styling via CSS is
used
ElementID Optionally sets the HTML element ID for a HTML element in the form HTML file
the spin control needs to be connected with. When connected, no new spin
contrl is created but the Delphi class is connected with the existing HTML
element in the form HTML file
ShowFocus When true, the border color changes when the control has focus
TabOrder Sets the tab order of the control
90
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
TabStop When true, the focus is turned to the control when pressing tab
Text Sets or gets the text in the edit control
Events for TWebMaskEdit
OnChange Event triggered when the value of the spin
edit control changes from the UI
OnClick Event triggered when the control is clicked
OnDblClick Event triggered when the control is double-
clicked
OnEnter Event triggered when the control gets focus
OnExit Event triggered when focus leaves the
control
OnKeyDown Event triggered on key down in the edit
control
OnKeyPress Event triggered on key press in the edit
control
OnKeyUp Event triggered on key up in the edit control
TWebDateTimePicker
Description
Below is a list of the most important properties methods and events for the
TWebDateTimePicker. TWebDateTimePicker allows to select a date or time, similar to a
date/time picker in VCL. This control requires a fully HTML5 compliant browser.
Designtime
Runtime
91
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
HTML template tag
The HTML tag the component can be associated with in an HTML template. Assign the ID
attribute with a unique value and set the identical value to the ElementID property. Detailed
information can be found in the Use of HTML templates topic.
HTML tag <INPUT TYPE=”DATE” ID=”UniqueID”>
ElementID UniqueID
Properties for TWebDateTimePicker
BorderStyle Sets the border style for the control
Date Gets or sets the date value of the control
ElementClassName Optionally sets the CSS classname for the
date/time picker when styling via CSS is
used
ElementID Optionally sets the HTML element ID for a
HTML element in the form HTML file the
date picker needs to be connected with.
When connected, no new date picker is
created but the Delphi class is connected
with the existing HTML element in the form
HTML file
Kind Configures the control as date or as time
picker
ShowFocus When true, the border color changes when
the control has focus
TabOrder Sets the tab order of the control
TabStop When true, the focus is turned to the control
when pressing tab
TextDirection Sets the text direction to
tdDefault: does not use direction attribute
tdInherit: uses TextDirection of parent control
tdRightToLeft:uses rtl direction attribute
tdLeftToRight: uses ltr direction attribute
Time Gets or sets the
92
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
Events for TWebDateTimePicker
OnChange Event triggered when the date or time
changes via the UI
OnClick Event triggered when the control is clicked
OnDblClick Event triggered when the control is double-
clicked
OnEnter Event triggered when the control gets focus
OnExit Event triggered when focus leaves the
control
TWebListBox
Description
Below is a list of the most important properties methods and events for TWebListBox. A
TWebListBox is a control having a list of (text) items, similar to a VCL TListBox.
Designtime
Runtime
HTML template tag
93
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
The HTML tag the component can be associated with in an HTML template. Assign the ID
attribute with a unique value and set the identical value to the ElementID property. Detailed
information can be found in the Use of HTML templates topic.
HTML tag <SELECT ID=”UniqueID”></SELECT>
ElementID UniqueID
Properties for TWebListBox
BorderStyle Sets the border style for the control
ElementClassName Optionally sets the CSS classname for the
date/time picker when styling via CSS is
used
ElementID Optionally sets the HTML element ID for a
HTML element in the form HTML file the
date picker needs to be connected with.
When connected, no new date picker is
created but the Delphi class is connected
with the existing HTML element in the form
HTML file
Enabled Sets whether the control is enabled or
disabled
ItemHeight Sets the height of individual items in the
listbox
ItemIndex Sets or gets the index of the selected item
Items Access to the items in the listbox as a
TStringList
MultiSelect When true, multiple items can be selected in
the listbox
ShowFocus When true, the border color changes when
the control has focus
TabOrder Sets the tab order of the control
TabStop When true, the focus is turned to the control
when pressing tab
TextDirection Sets the text direction to
tdDefault: does not use direction attribute
tdInherit: uses TextDirection of parent control
tdRightToLeft:uses rtl direction attribute
tdLeftToRight: uses ltr direction attribute
94
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
Events for TWebListBox
OnChange Event triggered when the selected item
changes in the listbox
OnClick Event triggered when the listbox is clicked
OnDblClick Event triggered when the listbox is double-
clicked
OnEnter Event triggered when the control gets focus
OnExit Event triggered when focus leaves the
control
TWebComboBox
Description
Below is a list of the most important properties methods and events for TWebComboBox. A
TWebComboBox is a control having a list of (text) items, similar to a VCL TComboBox
Designtime
Runtime
HTML template tag
The HTML tag the component can be associated with in an HTML template. Assign the ID
attribute with a unique value and set the identical value to the ElementID property. Detailed
information can be found in the Use of HTML templates topic.
HTML tag <SELECT ID=”UniqueID”></SELECT>
ElementID UniqueID
95
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
Properties for TWebComboBox
ElementClassName Optionally sets the CSS classname for the
label when styling via CSS is used
ElementID Optionally sets the HTML element ID for a
HTML element in the form HTML file the
label needs to be connected with. When
connected, no new label is created but the
Delphi class is connected with the existing
HTML element in the form HTML file
ItemIndex Sets or gets the index of the selected item
Items Access to the items in the listbox as a
TStringList
ShowFocus When true, the border color changes when
the control has focus
TabOrder Sets the tab order of the control
TabStop When true, the focus is turned to the control
when pressing tab
Text Gets or sets the selected value in the
combobox
TextDirection Sets the text direction to
tdDefault: does not use direction attribute
tdInherit: uses TextDirection of parent control
tdRightToLeft:uses rtl direction attribute
tdLeftToRight: uses ltr direction attribute
Events for TWebComboBox
OnChange Event triggered when the selected item
changes in the listbox
OnClick Event triggered when the listbox is clicked
OnDblClick Event triggered when the listbox is double-
clicked
OnEnter Event triggered when the control gets focus
OnExit Event triggered when focus leaves the
control
96
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
TWebLookupComboBox
Description
Below is a list of the most important properties methods and events for
TWebLookupComboBox. A TWebLookupComboBox is a control having a list of (text) items,
similar to a VCL TComboBox
Designtime
Runtime
HTML template tag
The HTML tag the component can be associated with in an HTML template. Assign the ID
attribute with a unique value and set the identical value to the ElementID property. Detailed
information can be found in the Use of HTML templates topic.
HTML tag <SELECT ID=”UniqueID”></SELECT>
ElementID UniqueID
Properties for TWebLookupComboBox
DisplayText: string Public property returning the selected item
DisplayText
ElementClassName Optionally sets the CSS classname for the
label when styling via CSS is used
ElementID Optionally sets the HTML element ID for a
97
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
HTML element in the form HTML file the
label needs to be connected with. When
connected, no new label is created but the
Delphi class is connected with the existing
HTML element in the form HTML file
ItemIndex Sets or gets the index of the selected item
LookupValues Access to a collection of items of the
TWebLookupComboBox where each item
has DisplayText: string and Value: string
property.
ShowFocus When true, the border color changes when
the control has focus
TabOrder Sets the tab order of the control
TabStop When true, the focus is turned to the control
when pressing tab
Text Gets or sets the selected value in the
combobox
TextDirection Sets the text direction to
tdDefault: does not use direction attribute
tdInherit: uses TextDirection of parent control
tdRightToLeft:uses rtl direction attribute
tdLeftToRight: uses ltr direction attribute
Value: string Public property returning the selected item
value.
Events for TWebLookupComboBox
OnChange Event triggered when the selected item
changes in the listbox
OnClick Event triggered when the listbox is clicked
OnDblClick Event triggered when the listbox is double-
clicked
OnEnter Event triggered when the control gets focus
OnExit Event triggered when focus leaves the
control
Add DisplayText/Value pairs to the TWebLookupCombobox with
TWebLookupCombobox.LookupValues.AddPair(AValue, ADisplayText);
98
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
TWebColorPicker
Description
Below is a list of the most important properties methods and events for TWebColorPicker.
TWebColorPicker is a control to allow selecting a color. Note that a browser with full HTML5
compliance is needed for this control.
Designtime
Runtime
HTML template tag
The HTML tag the component can be associated with in an HTML template. Assign the ID
attribute with a unique value and set the identical value to the ElementID property. Detailed
information can be found in the Use of HTML templates topic.
HTML tag <INPUT TYPE=”COLOR” ID=”UniqueID”>
ElementID UniqueID
Properties for TWebColorPicker
Color Gets or sets the selected color of the color
picker
ElementClassName Optionally sets the CSS classname for the
label when styling via CSS is used
ElementID Optionally sets the HTML element ID for a
HTML element in the form HTML file the
label needs to be connected with. When
99
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
connected, no new label is created but the
Delphi class is connected with the existing
HTML element in the form HTML file
Events for TWebColorPicker
OnSelect Event triggered when a color is selected via
the color picker
TWebCheckBox
Description
Below is a list of the most important properties methods and events for TWebCheckBox,
TWebCheckBox represents a two-state checkbox or three-state checkbox and is similar to a
VCL TCheckBox
Designtime
Runtime
Properties for TWebCheckBox
Caption Sets or gets the text for the checkbox
Checked Sets or gets the checkbox state
ElementClassName Optionally sets the CSS classname for the
label when styling via CSS is used
ElementID Optionally sets the HTML element ID for a
HTML element in the form HTML file the
100
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
label needs to be connected with. When
connected, no new label is created but the
Delphi class is connected with the existing
HTML element in the form HTML file
ShowFocus When true, the border color changes when
the control has focus
State Allows to get or set the checkbox state in
three states: checked, unchecked, grayed.
TabOrder Sets the tab order of the control
TabStop When true, the focus is turned to the control
when pressing tab
Events for TWebCheckBox
OnClick Event triggered when the checkbox is
clicked
TWebMainMenu
Description
Below is a list of the most important properties methods and events for TWebMainMenu.
Represents a menu control with support for sub-menus. The TWebMainMenu optionally can be
displayed as a vertical hamburger menu. By default the menu automatically transforms into a
hamburger menu if the available browser width is 768 pixels or less. This behavior can be
customized with the HamburgerMenu properties.
101
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
Designtime
Runtime
HTML template tag
The HTML tag the component can be associated with in an HTML template. Assign the ID
attribute with a unique value and set the identical value to the ElementID property. Detailed
information can be found in the Use of HTML templates topic.
HTML tag <DIV ID=”UniqueID”></DIV>
102
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
ElementID UniqueID
Properties for TWebMainMenu
Appearance
BackgroundColor Sets the background color of the menu
HamburgerMenu
BackgroundColor Sets the background color the menu
caption
Caption Sets the caption text
CaptionColor Sets the caption font color
ResponsiveMaxWidth Sets the maximum browser window width
for which the hamburger menu is
displayed
Visible Sets when the hamburger menu is visible.
hmAlways: The menu is always displayed
as a hamburger menu regardless of
window width
hmNever: the hamburger menu is never
displayed and the default main menu is
always displahed.
hmResponsive: the hamburger menu is
only displayed when the available browser
window width is 768 pixels or less.
HoverColor Sets the background color of a hovered
menu item
HoverFontColor Sets the font color of a hovered menu item
ImageSize Sets the size of the image if available
ImageURLs Set the list of images available to use for
menu items. Set the MenuItem.ImageIndex
value to the index of the image that should
be displayed in the menu item.
SubmenuIndicator Sets the symbol used to indicate a
submenu is available
103
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
Container Sets the external control the menu is
displayed in. For example, a TWebPanel
control. By default, the menu is displayed in
the top left corner of the browser window.
ElementClassName Optionally sets the CSS classname for the
label when styling via CSS is used
Items
Caption The caption text
Checked Sets if a checkmark is displayed next to the
caption text
Enabled Sets if the item is enabled
ImageIndex Sets the index of the image from the
Appearance.imageURLs list that should be
displayed next to the caption text
RadioItem Sets if the menu item should be displayed
as a readiobutton
Visible Sets if the menu item is visible
Events for TWebMainMenu
OnChange Event triggered when a menu item is clicked.
TWebMemo
Description
Below is a list of the most important properties methods and events for the TWebMemo.
TWebMemo is a multiline editable control, similar to a VCL TMemo. It is based on the HTML
TEXTAREA element.
104
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
Designtime
Runtime
HTML template tag
The HTML tag the component can be associated with in an HTML template. Assign the ID
attribute with a unique value and set the identical value to the ElementID property. Detailed
information can be found in the Use of HTML templates topic.
HTML tag <TEXTAREA ID=”UniqueID”></TEXTAREA>
ElementID UniqueID
Properties for TWebMemo
AutoSize When true, the size of the control will
automatically adapt to the text in the memo
BorderStyle Sets the border style of the control
ElementClassName Optionally sets the CSS classname for the
label when styling via CSS is used
ElementID Optionally sets the HTML element ID for a
HTML element in the form HTML file the
label needs to be connected with. When
connected, no new label is created but the
Delphi class is connected with the existing
HTML element in the form HTML file
Lines Access to the content of the memo via a
TStringList property
SelLength Gets or sets the length of the selection in the
memo
SelStart Gets or sets the selection starting point in
105
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
the memo
ShowFocus When true, the border color changes when
the control has focus
TabOrder Sets the tab order of the control
TabStop When true, the focus is turned to the control
when pressing tab
TextDirection Sets the text direction to
tdDefault: does not use direction attribute
tdInherit: uses TextDirection of parent control
tdRightToLeft:uses rtl direction attribute
tdLeftToRight: uses ltr direction attribute
Methods for TWebMemo
Clear Removes text from the memo
ClearSelection Removes the selected text from the memo
Events for TWebMemo
OnChange Event triggered when the content of the
memo changes
OnClick Event triggered when the memo is clicked
OnDblClick Event triggered when the memo is double-
clicked
TWebRadioGroup
Description
106
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
Below is a list of the most important properties methods and events for the TWebRadioGroup.
TWebRadioGroup is a group of radio button controls similar to a VCL TRadioGroup.
Designtime
Runtime
Properties for TWebRadioGroup
Caption Sets the caption text of the radiogroup
Columns Defines in how many columns the
radiobuttons are displayed. Default is 1.
ElementClassName Optionally sets the CSS classname for the
label when styling via CSS is used
ElementID Optionally sets the HTML element ID for a
HTML element in the form HTML file the
label needs to be connected with. When
connected, no new label is created but the
Delphi class is connected with the existing
HTML element in the form HTML file
ItemIndex Sets or gets the selected radio button in the
group
Items Access to the radio button captions in the
group via a TStringList property
Events for TWebRadioGroup
OnChange Event triggered when the selected radio
button in the radiogroup changes
107
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
TWebProgressBar
Description
The TWebProgressBar is a progress indicating bar control that shows the progress (position)
between a configurable minimum and maximum. It can be also be shown in marquee style,
indicating that a process of indeterminate duration is busy.
Designtime
Runtime
HTML template tag
The HTML tag the component can be associated with in an HTML template. Assign the ID
attribute with a unique value and set the identical value to the ElementID property. Detailed
information can be found in the Use of HTML templates topic.
HTML tag <DIV
ID=”UniqueID”><PROGRESS></PROGRESS></DIV>
ElementID UniqueID
Properties for TWebProgressBar
Max Sets the maximum value of the progress bar
Min Sets the minimum value of the progress bar
Position Sets the position of the progress bar
108
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
Style Sets the style of the progress bar:
pbstNormal: normal progress bar style
pbstMarquee: marquee progress bar style
for processes of indeterminate duration
pbstDIV: progressbar is made up of DIV
elements that can be styled by Bootstrap
109
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
TWebBadge
Description
The TWebBadge is a badge control that can be used standalone or as part of other controls
(like a TWebListControl, TWebTableControl, …)
The badge can work standalone but is also designed so it can directly use Bootstrap styles.
Designtime
Runtime
HTML template tag
The HTML tag the component can be associated with in an HTML template. Assign the ID
attribute with a unique value and set the identical value to the ElementID property. Detailed
information can be found in the Use of HTML templates topic.
HTML tag <SPAN ID=”UniqueID”></SPAN>
ElementID UniqueID
Properties for TWebBadge
Color Sets the background color of the badge
Text Sets the text in the badge
TextColor Sets the badge text color
110
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
TWebPaintBox
Description
Below is a list of the most important properties methods and events for the TWebPaintBox.
TWebPaintBox is a group of radio button controls similar to a VCL TPaintBox.
Designtime
Runtime
Properties for TWebPaintBox
ElementClassName Optionally sets the CSS classname for the
label when styling via CSS is used
ElementID Optionally sets the HTML element ID for a
HTML element in the form HTML file the
label needs to be connected with. When
connected, no new label is created but the
Delphi class is connected with the existing
HTML element in the form HTML file
Events for TWebPaintBox
OnPaint Event triggered when the paintbox needs to
be repainted. The WebPaintBox.Canvas can
be used as in the VCL TPaintBox to draw
within the paintbox control
OnTouchEnd Event triggered when a touch on the
111
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
paintbox ends
OnTouchMove Event triggered when a move is made while
touching the paintbox control
OnTouchStart Event triggered when a touch on the
paintbox starts
This example code snippet demonstrates how to paint something in the TWebPaintBox:
Result:
TWebTrackBar
112
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
Description
Below is a list of the most important properties methods and events for TWebTrackBar.
TWebTrackBar is a trackbar control similar to a VCL TTrackBar. Note: in order to use the
TWebTrackBar control, a fully HTML5 compliant browser is needed.
Designtime
Runtime
HTML template tag
The HTML tag the component can be associated with in an HTML template. Assign the ID
attribute with a unique value and set the identical value to the ElementID property. Detailed
information can be found in the Use of HTML templates topic.
HTML tag <INPUT TYPE=”RANGE” ID=”UniqueID”>
ElementID UniqueID
Properties for TWebTrackBar
ElementClassName Optionally sets the CSS classname for the
label when styling via CSS is used
ElementID Optionally sets the HTML element ID for a
HTML element in the form HTML file the
label needs to be connected with. When
connected, no new label is created but the
Delphi class is connected with the existing
HTML element in the form HTML file
Max Sets the maximum value of the trackbar
Min Sets the minimum value of the trackbar
Position Sets the thumb position of the trackbar
113
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
TabOrder Sets the tab order of the control
TabStop When true, the focus is turned to the control
when pressing tab
Events for TWebTrackBar
OnChange Event triggered when the thumb on the
trackbar is moved
TWebScrollBox
Description
Below is a list of the most important properties methods and events for TWebScrollBox.
TWebScrollBox is a container control that shows a scrollbar when it hosts child controls
exceeding the client area of the control. TWebScrollBox is similar to a VCL TScrollBox.
Designtime
Runtime
114
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
HTML template tag
The HTML tag the component can be associated with in an HTML template. Assign the ID
attribute with a unique value and set the identical value to the ElementID property. Detailed
information can be found in the Use of HTML templates topic.
HTML tag <SPAN ID=”UniqueID”></SPAN>
ElementID UniqueID
Properties for TWebScrollBox
AutoScroll When true, the scrollbar will be automatically
displayed when child controls exceed the
client rectangle of the scrollbox control
BorderStyle Sets the border style of the scrollbox
ElementClassName Optionally sets the CSS classname for the
label when styling via CSS is used
ElementID Optionally sets the HTML element ID for a
HTML element in the form HTML file the
label needs to be connected with. When
connected, no new label is created but the
Delphi class is connected with the existing
HTML element in the form HTML file
Events for TWebScrollBox
OnClick Event triggered when the scrollbox is clicked
OnDblClick Event triggered when the scrollbox is
double-clicked
115
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
TWebSplitter
Description
Below is a list of the most important properties methods and events for TWebSplitter.
TWebSplitter is a splitter control that allows to change sizes of other controls aligned on the
form when the splitter is moved. TWebSplitter is similar to the VCL TSplitter.
Designtime
Runtime
Properties for TWebSplitter
ElementClassName Optionally sets the CSS classname for the
label when styling via CSS is used
ElementID Optionally sets the HTML element ID for a
HTML element in the form HTML file the
label needs to be connected with. When
connected, no new label is created but the
Delphi class is connected with the existing
HTML element in the form HTML file
116
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
GripColor Sets the color of the grip dots in the middle
of the splitter control
Events for TWebSplitter
OnMoved Event triggered when the splitter was moved
by the user
TWebSignIn
Description
Below is a list of the most important properties methods and events for TWebSignIn.
TWebSignIn allows letting users sign in through an existing Google or Facebook account.
Designtime
Runtime
HTML template tag
The HTML tag the component can be associated with in an HTML template. Assign the ID
attribute with a unique value and set the identical value to the ElementID property. Detailed
information can be found in the Use of HTML templates topic.
117
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
HTML tag <DIV ID=”UniqueID”></DIV>
ElementID UniqueID
Properties for TWebSignIn
ElementClassName Optionally sets the CSS classname for the
edit control when styling via CSS is used
ElementID Optionally sets the HTML element ID for a
HTML INPUT element in the form HTML file
the edit control needs to be connected with.
When connected, no new edit control is
created but the Delphi class is connected
with the existing HTML element in the form
HTML file
Services: Google and Facebook
Enabled Sets if signin through the resepective
service is enabled
Visible Sets if the signin button is visible. If Visible
is False and Enabled is True you can still
start the signin procedure programmatically
(See SignIn method)
AppKey Sets the API Key used to identify with the
respective service. (See the topic
“TWebSignIn usage” for information on how
to obtain an API Key)
ControlID Sets the ID of the HTML element where the
signin button should be displayed. If the
value is left empty the button is rendered
inside the TWebSignIn control.
Methods for TWebSignIn
SignIn(Service) Starts the signin procedure programmatically
for the service specified with the Service
parameter
SignOut(Service) Starts the signout procedure
programmatically for the service specified
118
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
with the Service parameter
Events for TWebSignIn
OnGoogleSignedIn Event triggered if a user successfully signed
in through Google.
The event provides the user’s Token, ID,
FirstName, LastName, ImageUrl and Email
via the Args parameter values.
OnGoogleSignedOut Event triggered if a user successfully signed
out through Google
OnFacebookSignedIn Event triggered if a user successfully signed
in through Facebook.
The event provides the user’s ID, Name and
Email via the Args parameter values.
OnFacebookSignedOut Event triggered if a user successfully signed
out through Facebook
TWebPanel
Description
Below is a list of the most important properties methods and events for TWebPanel. TWebPanel
is a container control that can host other child controls. TWebPanel is similar to a VCL TPanel.
119
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
Designtime
Runtime
HTML template tag
The HTML tag the component can be associated with in an HTML template. Assign the ID
attribute with a unique value and set the identical value to the ElementID property. Detailed
information can be found in the Use of HTML templates topic.
HTML tag <DIV ID=”UniqueID”></DIV>
ElementID UniqueID
Properties for TWebPanel
AutoSize When true, the size of the panel
automatically adapts to space the child
controls it contains takes.
BorderStyle Sets the style of the border
ElementClassName Optionally sets the CSS classname for the
label when styling via CSS is used
ElementID Optionally sets the HTML element ID for a
HTML element in the form HTML file the
label needs to be connected with. When
connected, no new label is created but the
Delphi class is connected with the existing
HTML element in the form HTML file
Events for TWebPanel
OnClick Event triggered when the panel is clicked
OnDblClick Event triggered when the panel is double-
clicked
120
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
TWebHTMLContainer
Description
Below is a list of the most important properties methods and events for TWebHTMLContainer.
TWebHTMLContainer is basically a placeholder to add any HTML to be rendered on the page
directly on the form. The HTML is added as text via the property WebHTMLContainer.HTML.
The outer element of the HTML container is a DIV element.
Designtime
Runtime
HTML template tag
The HTML tag the component can be associated with in an HTML template. Assign the ID
attribute with a unique value and set the identical value to the ElementID property. Detailed
information can be found in the Use of HTML templates topic.
HTML tag <SPAN ID=”UniqueID”></SPAN>
ElementID UniqueID
121
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
Properties for TWebHTMLContainer
HTML A stringlist holding the HTML (as text) that
will be rendered in a DIV
ElementClassName Optionally sets the CSS classname for the
label when styling via CSS is used
ElementID Optionally sets the HTML element ID for a
HTML element in the form HTML file the
label needs to be connected with. When
connected, no new label is created but the
Delphi class is connected with the existing
HTML element in the form HTML file
Events for TWebHTMLContainer
OnClick Event triggered when the outer DIV of the
HTML container is clicked
OnDblClick Event triggered when the outer DIV of the
HTML container is double-clicked
OnMouseDown Event triggered when the outer DIV of the
HTML container is clicked
OnMouseUp Event triggered when the mouse goes up on
the outer DIV of the HTML container
OnMouseMove Event triggered when the mouse moves over
the outer DIV of the HTML container
TWebHTMLForm
Description
122
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
TWebHTMLForm is just a structural control that represents the FORM HTML element as
structural element for the INPUT controls it has. The TWebHTMLForm is needed to indicate a
section of INPUT controls on the page and it will be rendered as <FORM> … child controls here
</FORM>
Designtime
The HTML form is a structural element and
not visible at runtime. Controls in the form are
positioned on the form as if the
TWebHTMLForm does not exist.
Runtime
HTML template tag
The HTML tag the component can be associated with a FORM element in a HTML template.
Assign the ID attribute with a unique value and set the identical value to the ElementID property.
Detailed information can be found in the Use of HTML templates topic.
HTML tag <FORM ID=”UniqueID”></FORM>
ElementID UniqueID
Properties for TWebHTMLForm
Name Sets the name of the HTML FORM element
123
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
TWebHTMLDiv
Description
TWebHTMLDiv is just a structural control that represents the DIV HTML element.
Designtime
The TWebHTMLDIV is a control that
represents a HTML DIV element
Runtime
HTML template tag
The HTML tag the component can be associated with a DIV element in an HTML template.
Assign the ID attribute with a unique value and set the identical value to the ElementID property.
Detailed information can be found in the Use of HTML templates topic.
HTML tag <DIV ID=”UniqueID”></DIV>
ElementID UniqueID
Properties for TWebHTMLDiv
ElementClassName Sets the CSS class name attributes
ElementFont Determines whether the Font property
values will be applied as font style or if CSS
based font settings will be used
ElementPosition Defines whether the DIV is shown absolute
positions or relative positioned
HTML: THTMLText Sets the innerHTML text value for the DIV
element
Name Sets the name of the HTML DIV element
124
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
TWebHTMLSpan
Description
TWebHTMLSpan is just a structural control that represents the SPAN HTML element.
Designtime
The TWebHTMLSpan is a control that
represents a HTML SPAN element
Runtime
HTML template tag
The HTML tag the component can be associated with a SPAN element in an HTML template.
Assign the ID attribute with a unique value and set the identical value to the ElementID property.
Detailed information can be found in the Use of HTML templates topic.
HTML tag <SPAN ID=”UniqueID”></SPAN>
ElementID UniqueID
Properties for TWebHTMLSpan
ElementClassName Sets the CSS class name attributes
ElementFont Determines whether the Font property
values will be applied as font style or if CSS
based font settings will be used
ElementPosition Defines whether the SPAN is shown
absolute positions or relative positioned
HTML: THTMLText Sets the innerHTML text value for the SPAN
element
Name Sets the name of the HTML SPAN element
125
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
TWebHTMLAnchor
Description
TWebHTMLAnchor is just a structural control that represents the ANCHOR HTML element <A>.
Designtime
The TWebHTMLAnchor is a control that
represents a HTML ANCHOR element
Runtime
HTML template tag
The HTML tag the component can be associated with a ANCHOR element in an HTML
template. Assign the ID attribute with a unique value and set the identical value to the
ElementID property. Detailed information can be found in the Use of HTML templates topic.
HTML tag <A ID=”UniqueID”></A>
ElementID UniqueID
Properties for TWebHTMLSpan
ElementClassName Sets the CSS class name attributes
ElementFont Determines whether the Font property
values will be applied as font style or if CSS
based font settings will be used
ElementPosition Defines whether the ANCHOR is shown
absolute positions or relative positioned
HTML: THTMLText Sets the innerHTML text value for the
ANCHOR element
Name Sets the name of the HTML ANCHOR
element
126
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
127
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
TWebImageControl
Description
Below is a list of the most important properties methods and events for TWebImageControl.
TWebImageControl can display an image on the form. TWebImageControl is similar to a VCL
TImage.
Designtime
Runtime
HTML template tag
The HTML tag the component can be associated with in an HTML template. Assign the ID
attribute with a unique value and set the identical value to the ElementID property. Detailed
information can be found in the Use of HTML templates topic.
HTML tag <IMG ID=”UniqueID”>
ElementID UniqueID
Properties for TWebImageControl
AutoSize When true, the size of the control
automatically adapts to the size of the image
it contains
ElementClassName Optionally sets the CSS classname for the
128
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
label when styling via CSS is used
ElementID Optionally sets the HTML element ID for a
HTML element in the form HTML file the
label needs to be connected with. When
connected, no new label is created but the
Delphi class is connected with the existing
HTML element in the form HTML file
Picture Sets the picture at design time. Note that the
image is automatically deployed by the
compiling process to a separate image file
with a unique name.
URL Specifies the image as an URL
Methods for TWebImageControl
DataURL: string Returns the image control image content as
data URL string
DataURL(Width,Height: integer): string; Returns the image control image content at
size width/height as data URL string
Events for TWebImageControl
OnClick Event triggered when the image is clicked
OnDblClick Event triggered when the image is double-
clicked
OnLoaded Event triggered when the image load
completed after assigning the URL or
DataURL
129
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
TWebImageZoomControl
Description
Below is a list of the most important properties methods and events for
TWebImageZoomControl. TWebImageZoomControl can display an image on the form and
display a zoomed-in image version in a popup when it is clicked.
Designtime
Runtime
HTML template tag
The HTML tag the component can be associated with in an HTML template. Assign the ID
attribute with a unique value and set the identical value to the ElementID property. Detailed
information can be found in the Use of HTML templates topic.
HTML tag <IMG ID=”UniqueID”>
ElementID UniqueID
Properties for TWebImageControl
Appearance
HeightPercent Sets the percent of the browser window
height that is taken up by the popup
130
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
ResponsiveHeightPercent Sets the percent of the browser window
height that is taken up by the popup when
the available browser window width is equal
or less than ResponsiveMaxWidth
ResponsiveWidthPercent Sets the percent of the browser window
width that is taken up by the popup when
the available browser window width is equal
or less than ResponsiveMaxWidth
ResponsiveMaxWidth Sets the maximum browser window width
for the ResponsiveHeightPercent and
ResponsiveWidthPercent values are used,
otherwise the HeightPercent and
WidthPercent values are used
WidthPercent Sets the percent of the browser window
width that is taken up by the popup
AutoSize When true, the size of the control
automatically adapts to the size of the image
it contains
ElementClassName Optionally sets the CSS classname for the
label when styling via CSS is used
ElementID Optionally sets the HTML element ID for a
HTML element in the form HTML file the
label needs to be connected with. When
connected, no new label is created but the
Delphi class is connected with the existing
HTML element in the form HTML file
Picture Sets the picture at design time. Note that the
image is automatically deployed by the
compiling process to a separate image file
with a unique name.
PictureZoom Sets the zoom picture at design time. Note
that the image is automatically deployed by
the compiling process to a separate image
file with a unique name.
URL Specifies the image as an URL
URLZoom Specifies the zoom image that is displayed
when the image is clicked as an URL
131
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
Events for TWebImageControl
OnClick Event triggered when the image is clicked
OnDblClick Event triggered when the image is double-
clicked
TWebLinkLabel
Description
Below is a list of the most important properties methods and events for TWebLinkLabel.
TWebLinkLabel is similar to a VCL TLinkLabel.
For a sample TWebLinkLabel with caption set to:
This is a link to <a href="https://www.tmssoftware.com">tms</a>
the result is:
Designtime
Runtime
Runtime
HTML template tag
132
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
The HTML tag the component can be associated with in an HTML template. Assign the ID
attribute with a unique value and set the identical value to the ElementID property. Detailed
information can be found in the Use of HTML templates topic.
HTML tag <DIV ID=”UniqueID”></DIV>
ElementID UniqueID
Properties for TWebLinkLabel
AutoSize When true, the size of the label control
automatically adapts to the text it contains
ElementClassName Optionally sets the CSS classname for the
label when styling via CSS is used
ElementID Optionally sets the HTML element ID for a
HTML element in the form HTML file the
label needs to be connected with. When
connected, no new label is created but the
Delphi class is connected with the existing
HTML element in the form HTML file
EllipsisPosition Sets the type of ellipsis to use for showing
the text when it doesn’t fit in the label
rectangle.
epNone: no ellipsis used
epEndEllipsis: ellipsis at the end of the text
epPathEllipsis: label text contains a path
name and ellipsis is set taking a file path in
account
epWordEllipsis: ellipsis is positioned at word
boundary
Layout Sets the vertical text position in the label
tlTop: top aligned
tlCenter: center aligned
tlBottom: bottom aligned
WordWrap When true, the text can be displayed
wordwrapped in the label client rect
Events for TWebLinkLabel
133
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
OnClick Triggered when the label is clicked
OnDblClick Triggered when the label is double-clicked
OnLinkClick Event triggered when a hyperlink in the
TWebLinkLabel is clicked
TWebRichEdit
Description
Below is a list of the most important properties methods and events for TWebRichEdit.
TWebRichEdit is a control that allows to edit text and apply text formatting. TWebRichEdit is
similar to a VCL TRichEdit.
134
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
Designtime
Runtime
HTML template tag
The HTML tag the component can be associated with in an HTML template. Assign the ID
attribute with a unique value and set the identical value to the ElementID property. Detailed
information can be found in the Use of HTML templates topic.
HTML tag <DIV ID=”UniqueID”></DIV>
ElementID UniqueID
Properties for TWebRichEdit
AutoSize
BorderStyle Sets the border style
ElementClassName Optionally sets the CSS classname for the
label when styling via CSS is used
ElementID Optionally sets the HTML element ID for a
HTML element in the form HTML file the
label needs to be connected with. When
connected, no new label is created but the
Delphi class is connected with the existing
HTML element in the form HTML file
PlainText Gets or sets the text of the rich editor control
as plain text
SelAttributes Gets or sets the attributes of the selected
text in the rich editor control
Text Gets or sets the text of the rich editor control
as HTML formatted text
Events for TWebRichEdit
OnClick Triggered when the rich editor is clicked
OnDblClick Triggered when the rich editor is double-
clicked
135
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
OnSelectionChange Triggered when the selection within the rich
editor is changed
TWebSyntaxMemo Below is a list of the most important properties methods and events for the TWebSyntaxMemo.
TWebSyntaxMemo is using the external JavaScript written Ace editor.
Designtime
Runtime
Loading a file
Loading with TWebFilePicker
First the file should be retrieved as a text. This can be done in the TWebFilePicker’s OnChange
event:
procedure TForm4.WebFilePicker1Change(Sender: TObject);
begin
136
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
//First nake sure that there's a file available
if Assigned(WebFilePicker1.Files[0]) then
begin
WebFilePicker1.Files[0].GetFileAsText;
//Additional code here
end;
end;
Then assign the retrieved text to the TWebSyntaxMemo:
procedure TForm4.WebFilePicker1GetFileAsText(Sender: TObject;
AFileIndex: Integer; AText: string);
begin
WebSyntaxMemo1.Text := AText;
end;
Loading with drag and drop
For this approach a TWebFileReader is needed. Once the file is readed, the text content can be
assigned to the TWebSyntaxMemo.
procedure TForm4.WebFormCreate(Sender: TObject);
begin
fr := TWebFileReader.Create(Self);
fr.OnReadDone := DoReadLoaded;
end;
procedure TForm4.DoReadLoaded(aFileName: string; AResult: JSValue);
begin
WebSyntaxMemo1.Text := JS.toString(AResult);
end;
What’s left to handle is the file reading itself when a file has been dropped onto the
TWebSyntaxMemo. In the OnDragDrop event, the following can be written:
procedure TForm4.WebSyntaxMemo1DragDrop(Sender, Source: TObject; X, Y:
Integer);
var
f: TJSHTMLFile;
begin
f := TJSDragEvent(TDragSourceObject(Source).Event).dataTransfer.files[0];
//Get the file
//Make sure it's available
if Assigned(f) then
fr.readAsBinaryString(f); //Read the file using the TWebFileReader
end;
Downloading a file
137
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
Downloading a file means a single line of code only.
For example with the code below, the contents of the editor can be downloaded to the test.txt
file.
Application.DownloadTextFile(WebSyntaxMemo1.Text, 'test.txt');
Properties for TWebSyntaxMemo
Property Description
Autocompletion There are 3 options: saNone to disable
autocompletion, saLive to autocomplete during
typing and saBasic to show autocompleting
keywords by pressing Ctrl+Space.
CaretPosition: Integer Position of the caret.
CustomAutocomplete A collection of custom keywords that can be added
to autocollection. Keyword highlighting is not
available.
FadeFoldWidgets: Boolean Enable or disable fading fold widgets.
FixedGutterWidth: Boolean Gutter width can be fixed up to 1000 lines.
FontName: string Name of the font. Only monospaced fonts will
work.
FontSize: Integer Size of the font.
HighlightActiveLine: Boolean Highlight the line where the caret is.
Lines: TStringList Access the editor’s content as a TStringList.
Mode: TSyntaxMemoMode Language mode for the editor.
PersistentHorizontalScrollbar: Boolean Always show horizontal scrollbar.
PersistentVerticalScrollbar: Boolean Always show vertical scrollbar.
PrintMargin: Integer Value of the print margin position. Default is 80.
ReadOnly: Boolean Enable or disable read only mode.
SelLength: Integer Selection length.
SelStart: Integer Selection start.
ShowFoldWidgets: Boolean Hide or show the fold widgets.
ShowGutter: Boolean Hide or show the gutter.
ShowIndentGuides: Boolean Hide or show the indent guides.
ShowInvisibles: Boolean Hide or show the invisible characters such as
whitespaces.
ShowLineNumbers: Boolean Hide or show the line numbers.
ShowPrintMargin: Boolean Hide or show the print margin.
SoftTabs: Boolean Enable or disable soft tabs.
TextDirection: TSyntaxTextDirection Text direction from left to right or right to left.
138
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
TabSize: Integer Size of the tab in spaces.
Text: string Access the editor’s content as a single string.
Theme: TSyntaxMemoTheme The theme of the editor.
WordWrap There are 4 options for
wordwrapping: swNone means there’s no
wordwrap, swPrintMargin will wrap at the print
margin, swView will wrap at what’s visible
and swValue will use the WordWrapValue to wrap
at a configured length.
WordWrapIndented: Boolean Allow indenting in wordwrap.
WordWrapValue: Integer Wordwrap size. Only used if the WordWrap is set
to swValue
Methods for TWebSyntaxMemo
Property Description
Clear Clears the content of the editor.
DisableLocalKeywords Disables local keywords that are added
constantly while content is being added to the
editor.
Find(AText: string) Finds and highlights the AText (if exists) in the
editor’s content.
FindAll(AText: string) Finds all and highlights the first AText (if exists) in
the editor’s content.
FindNext Finds the next occurrence of the highlighted text.
FindPrevious Finds the previous occurrence of the highlighted
text.
Focus Focuses the editor.
InitializeKeyWords(ACompleter:
TSyntaxCompleter)
Initialize a set of keywords with ACompleter.
InsertText(AText: string) Insert AText at the caret position.
InsertText(APosition: TPoint; AText: string) Insert AText at APosition.
OpenSearchBox Opens the editor’s searchbox.
PreloadPascalKeywords Earlier versions of Ace does not support Pascal
keywords in autocompletion. With this function,
they can be preloaded as autocompletion
keywords.
Redo ‘Redo’ edit command. Redoes an undid change.
RemoveSelectedText Remove the selected text.
RemoveCustomAutocompleter Remove the added custom autocompleter.
139
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
RemovePascalKeywords Earlier versions of Ace does not support Pascal
keywords in autocompletion. With this function,
they can be removed from autocompletion
keywords if they had been added previously.
Replace(AReplacement: string) ‘Replace’ edit command. It replaces the selected
text with AReplacement.
Replace(AText, AReplacement: string) ‘Replace’ edit command. It replaces AText with
AReplacement.
ReplaceAll(AReplacement: string) ‘Replace all’ edit command. It replaces all
occurrences of the selected text with
AReplacement.
ReplaceAll(AText, AReplacement: string) ‘Replace all’ edit command. It replaces all
occurrences of AText with AReplacement.
SelectAll ‘Select all’ edit command. Selects all of the text.
Undo ‘Undo’ edit command. Undoes the previous
change.
Unselect ‘Unselect’ edit command. Unselects everything.
Events for TWebSyntaxMemo
Property Description
OnChangeCursor Event triggered when cursor position has changed.
OnChangeSelection Event triggered when text selection has changed.
OnDragDrop Event triggered when something is dropped onto the editor.
OnDragOver Event triggered when something is dragged over the editor.
140
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
TWebTabSet
Description
Below is a list of the most important properties methods and events for TWebTabSet.
TWebTabSet is similar to a VCL TTabSet.
Designtime
Runtime
HTML template tag
The HTML tag the component can be associated with in an HTML template. Assign the ID
attribute with a unique value and set the identical value to the ElementID property. Detailed
information can be found in the Use of HTML templates topic.
HTML tag <SPAN ID=”UniqueID”></SPAN>
ElementID UniqueID
Properties for TWebTabSet
ElementClassName Optionally sets the CSS classname for the
label when styling via CSS is used
ElementID Optionally sets the HTML element ID for a
HTML element in the form HTML file the
label needs to be connected with. When
connected, no new label is created but the
Delphi class is connected with the existing
HTML element in the form HTML file
141
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
ItemIndex Sets or gets the selected tab
Items List of tab captions
SelectedColor Sets the background color of the selected
tab
Methods for TWebTabSet
Clear Removes all tabs
SelectNextTab Selects the next or previous page in the
page control, depending on the value of the
parameter.
Events for TWebTabSet
OnClick Event triggered when a tab is clicked
OnDblClick Event triggered when a tab is double-clicked
OnSelectionChange Event triggered when the selected tab
changes
TWebPageControl
Description
Below is a list of the most important properties methods and events for TWebPageControl.
TWebPageControl is similar to a VCL TPageControl.
142
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
Designtime
Runtime
HTML template tag
The HTML tag the component can be associated with in an HTML template. Assign the ID
attribute with a unique value and set the identical value to the ElementID property. Detailed
information can be found in the Use of HTML templates topic.
HTML tag <SPAN ID=”UniqueID”></SPAN>
ElementID UniqueID
Make sure to set at least a width/height for the outer span as the tabsheet HTML elements in
the pagecontrol are set in the outer container element as absolute positioned.
Properties for TWebPageControl
ElementClassName Optionally sets the CSS classname for the
label when styling via CSS is used
ElementID Optionally sets the HTML element ID for a
HTML element in the form HTML file the
label needs to be connected with. When
connected, no new label is created but the
143
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
Delphi class is connected with the existing
HTML element in the form HTML file
SelectedColor Sets the background color of the selected
tab
TabIndex Sets or gets the selected page index
Methods for TWebPageControl
SelectNextPage Selects the next or previous page in the
page control, depending on the value of the
parameter.
Events for TWebPageControl
OnChange Event triggered when the active page of the
page control changes
OnClick Event triggered when the page is clicked
OnDblClick Event triggered when the page is double-
clicked
144
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
TWebSpeedButton
Description
Below is a list of the most important properties methods and events for TWebSpeedButton.
TWebSpeedButton is similar to a VCL TSpeedButton.
Designtime
Runtime
HTML template tag
The HTML tag the component can be associated with in an HTML template. Assign the ID
attribute with a unique value and set the identical value to the ElementID property. Detailed
information can be found in the Use of HTML templates topic.
HTML tag <BUTTON ID=”UniqueID”></BUTTON>
ElementID UniqueID
Properties for TWebSpeedButton
AllowAllUp When there is a group of speed buttons,
depending on AllowAllUp, there is always a
button down or not
Caption Sets the speedbutton text
ElementClassName Optionally sets the CSS classname for the
label when styling via CSS is used
ElementID Optionally sets the HTML element ID for a
HTML element in the form HTML file the
label needs to be connected with. When
connected, no new label is created but the
145
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
Delphi class is connected with the existing
HTML element in the form HTML file
Enabled Sets the button as enabled or disabled
Flat When true, the button is displayed in flat
style
Glyph Sets the image for the speed button
GroupIndex To group buttons, set the GroupIndex
indentical for multiple speed buttons
MaterialGlyph Allows to pick an icon from the Google
material icon set
Events for TWebSpeedButton
OnClick Event triggered when the speed button is
clicked
OnDblClick Event triggered when the speed button is
double-clicked
TWebPayPal
146
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
Description
Below is a list of the most important properties methods and events for TWebPayPal.
TWebPayPal allows using the PayPal checkout process.
Note that TWebPayPal uses the PayPal Checkout JavaScript library. Make sure to include this
library in your project. (Select the Manage JavaScript Library from the project context menu)
Designtime
Runtime
147
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
HTML template tag
The HTML tag the component can be associated with in an HTML template. Assign the ID
attribute with a unique value and set the identical value to the ElementID property. Detailed
information can be found in the Use of HTML templates topic.
HTML tag <DIV ID=”UniqueID”></DIV>
ElementID UniqueID
Properties for TWebPayPal
APIKey Sets the API key retrieved from the PayPal
developers console Dashboard at:
https://developer.paypal.com/
Note: The PayPal button will only be
displayed if an API key is provided.
Environment Sets if the Sandbox or Production
environment is used.
Note: The correct API key must be used
based on this setting.
Payment
Configure the PayPal payment details before the user can initiate the payment process.
Address1 Sets line 1 of the payer address
Address2 Sets line 2 of the payer address (optional)
City Sets the city of the payer address
CountryCode Sets the country code of the payer address
Note: If the country code is set to US
(United States) or CA (Canada) a valid
value is required in the City, PostalCode
and State property
Currency Sets the currency of the PayPal payment
CustomText Sets a custom text to include with the
PayPal payment (optional)
Description Sets the description text associated with
the PayPal payment (optional)
HandlingFee Sets the handling fee cost associated with
the PayPal payment (optional)
148
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
Insurance Sets the insurance cost associated with this
PayPal payment (optional)
InvoiceNumber Sets the invoice number associated with
the PayPal payment (optional, must be
unique)
Items
Collection of items associated with the PayPal payment
Description Sets the description of the item
Name Sets the name of the item
Price Sets the price of the item
Quantity Sets the number of items
SKU Sets the SKU associated with the item
Tag Sets the tag associated with the item
(optional)
TagObject Sets the object associated with the item
(optional)
Tax Sets the tax cost associated with the item
(optional)
Locale Sets the language used in the PayPal
checkout interface
Phone Sets the phone number of the payer
(optional)
PostalCode Sets the postal code of the payer address
RecipientName Sets the name of the payer (optional)
Shipping Sets the shipping cost assocated with the
PayPal payment (optional)
ShippingDiscount Sets the shipping cost discount associated
with the PayPal payment (optional)
State Sets the state of the payer address
(optional, except if CountryCode is set to
US or CA)
Tax Sets the tax cost associated with the
PayPal payment (optional)
149
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
Events for TWebPayPal
OnPaymentDone
Event triggered when a PayPal payment was executed successfully.
Arguments:
Address1 Line 1 of the payer address
Address2 Line 2 of the payer address
City The city of the payer address
CountryCode The country code of the payer address
CustomText The custom text associated with the PayPal
payment
Email The email address of the payer
FirstName The first name of the payer
InvoiceNumber The invoice number associated with the
PayPal payment
LastName The last name of the payer
OrderID The order ID associated with the PayPal
payment
PayerID The payer ID associated with the PayPal
payment
PaymentID The payment ID associated with the PayPal
payment
PaymentState The state of the PayPal payment
Phone The phone number of the payer
PostalCode The postal code of the payer address
RecipientName The name associated with the shipping
address
SaleID The sale ID associated with the PayPal
payment
State The state of the payer address
Total The total cost of the PayPal payment
OnPaymentCancelled Event triggered when a PayPal payment was
cancelled by the user
OnPaymentError
Event triggered when an error occurred during the PayPal checkout process.
Arguments:
150
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
ErrorName The name of the error that occurred
ErrorDetails A list of details about the error
TWebToolbar
Description
Below is a list of the most important properties methods and events for TWebToolBar. A
TWebToolBar is a container control that can host several controls to form a toolbar.
Designtime
Runtime
Properties for TWebToolbar
ElementClassName Optionally sets the CSS classname for the
label when styling via CSS is used
ElementID Optionally sets the HTML element ID for a
HTML element in the form HTML file the
label needs to be connected with. When
connected, no new label is created but the
Delphi class is connected with the existing
151
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
HTML element in the form HTML file
Events for TWebToolbar
OnClick Event triggered when the toolbar is clicked
OnDblClick Event triggered when the toolbar is double-
clicked
Example: line wrapping (responsive behaviour)
To make the content of the TWebToolbar automatically adapt to the available width, set the
WidthStyle and HeightStyle of the TWebToolBar to ssAuto. Also set the ElementPosition of
each component conainted in the TWebToolBar to epRelative.
The order in wich the components are displayed can be controlled with the ChildOrder property.
WebSpeedButton1.ElementPosition := epRelative;
WebSpeedButton1.ChildOrder := 0;
WebSpeedButton2.ElementPosition := epRelative;
WebSpeedButton2.ChildOrder := 1;
WebToolBar1.WidthStyle := ssAuto;
WebToolBar1.HeightStyle := ssAuto;
152
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
TWebRichEditToolbar
Description
Below is a list of the most important properties methods and events for TWebRichEditToolbar.
Designtime
Runtime
Properties for TWebRichEditToolbar
ElementClassName Optionally sets the CSS classname for the
label when styling via CSS is used
ElementID Optionally sets the HTML element ID for a
HTML element in the form HTML file the
label needs to be connected with. When
connected, no new label is created but the
Delphi class is connected with the existing
HTML element in the form HTML file
Hints Contains the list of hint property vaues for
the buttons in the ribbon
RichEdit Sets the TWebRichEdit component with
which the toolbar interacts
VisibleButtons Sets what button on the toolbar are visible.
This is a set property with following possible
values:
reFont, reFontSize, reBold, reItalic,
reUnderline, reStrikeThrough, reAlignLeft,
reAlignCenter, reAlignRight,
153
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
reUnorderedList, reOrderedList,
reForegroundColor, reBackgroundColor
Events for TWebRichEditToolbar
OnClick Event triggered when the toolbar is clicked
OnDblClick Event triggered when the toolbar is double-
clicked
TWebGridPanel
Description
Below is a list of the most important properties methods and events for TWebGridPanel.
Designtime
Runtime
HTML template tag
154
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
The HTML tag the component can be associated with in an HTML template. Assign the ID
attribute with a unique value and set the identical value to the ElementID property. Detailed
information can be found in the Use of HTML templates topic.
HTML tag <SPAN ID=”UniqueID”></SPAN>
ElementID UniqueID
Properties for TWebGridPanel
ColumnCollection Access to the collection of columns in the
grid panel. The width, alignment, CSS, width
style of each column can be specified
Alignment: sets the vertical alignment in the
row to taLeftJustify, taCenter, taRightJustify
ElementClassName: sets an optional CSS
class name for the column
MarginLeft: sets a left margin in pixels
MarginRight: sets a right margin in pixels
SizeStyle: sets the style of the width
specification as percent, absolute, auto
Value: sets the width value
ElementClassName Optionally sets the CSS classname for the
label when styling via CSS is used
ElementID Optionally sets the HTML element ID for a
HTML element in the form HTML file the
label needs to be connected with. When
connected, no new label is created but the
Delphi class is connected with the existing
HTML element in the form HTML file
ExpandStyle Can be set to
esAddRows: new rows are added when new
controls are inserted an no more grid cells
are available
esAddColumns: new columns are added
when new controls are inserted an no more
grid cells are available
GridLineColor Sets the color of the grid lines
GridLineWidth Sets the width of the grid lines
RowCollection Access to the collection of rows in the grid
155
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
panel. The height, alignment, CSS, height
style of each row can be specified
Alignment: sets the vertical alignment in the
row to vaTop, vaCenter, vaBottom
ElementClassName: sets an optional CSS
class name for the row
MarginBottom: sets a bottom margin in
pixels
MarginTop: sets a top margin in pixels
SizeStyle: sets the style of the height
specification as percent, absolute, auto
Value: sets the height value
Events for TWebGridPanel
OnClick Event triggered when the panel is clicked
OnDblClick Event triggered when the panel is double-
clicked
TWebTreeview
Description
Below is a list of the most important properties methods and events for TWebTreeview.
TWebTreeview is similar to a VCL TTreeview.
Designtime Runtime
156
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
HTML template tag
The HTML tag the component can be associated with in an HTML template. Assign the ID
attribute with a unique value and set the identical value to the ElementID property. Detailed
information can be found in the Use of HTML templates topic.
HTML tag <DIV ID=”UniqueID”></DIV>
ElementID UniqueID
Properties for TWebTreeview
Property Description
AutoExpand When true, a click on a node will select the node but also
expand the child nodes.
ElementClassName Optionally sets the CSS classname for the out DIV element
of the treeview when styling via CSS is used
ElementNodeClassName Optionally sets the CSS classname for the node SPAN
element that is used for each node
ElementNodeSelectedClassName Optionally sets the CSS classname for the node SPAN
element that is used for each node when it is in selected
state
ElementID Optionally sets the HTML element ID for a HTML element in
the form HTML file the label needs to be connected with.
When connected, no new label is created but the Delphi
class is connected with the existing HTML element in the
form HTML file
Items Hierarchical collection of nodes in the treeview. The interface
to access nodes is similar to a the VCL nodes collection.
Selected Gets or sets the selected TTreeNode in the treeview.
Methods for TWebTreeview
Property Description
GetNodeElement Gets the HTML element that is the container for the TTreeNode.
GetNodeFromID Gets the TTreeNode from the ID of the HTML element.
Events for TWebTreeview
Property Description
OnChange Event triggered when the selected node in the treeview changed
157
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
Property Description
OnChanging Event triggered when the selected node in the treeview is about to change.
The Allow parameter can be used to control if the selected node can
change
OnClick Event triggered when the control is clicked.
OnClickNode Event triggered when a TTreeNode is clicked.
OnCollapsed Event triggered when a node was collapsed.
OnCollapsing Event triggered when a node is about to be collapsed. The Allow parameter
can be used to control whether the node can be collapsed.
OnDblClick Event triggered when the control is double-clicked.
OnDblClickNode Event triggered when a TTreeNode is double-clicked.
OnExpanded Event triggered when a node was expanded.
OnExpanding Event triggered when a node is about to be expanded. The Allow
parameter can be used to control whether the node can be expanded.
OnRenderNode Event triggered when a node is about to be rendered. This returns a
reference the HTML element that is the container for the node and allows
further customization of the node.
Sample code
This code snippet shows how to programmatically add items to the treeview (very similar as with
a VCL TTreeView)
var
tn: TTreeNode;
begin
WebTreeView1.BeginUpdate;
tn := WebTreeView1.Items.Add('Root node 1');
WebTreeView1.Items.AddChild(tn,'Child node 1');
WebTreeView1.Items.AddChild(tn,'Child node 2');
tn := WebTreeView1.Items.Add('Root node 2');
WebTreeView1.Items.AddChild(tn,'Child node 1');
WebTreeView1.Items.AddChild(tn,'Child node 2');
WebTreeView1.EndUpdate;
end;
158
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
TWebAccordion
Description
Below is a list of the most important properties methods and events for TWebAccordion. An
accordion is a collection of expandable sections. The sections are expanded by clicking a
caption. The content of the section can be HTML or any other web controls.
Designtime Runtime
HTML template tag
The HTML tag the component can be associated with in an HTML template. Assign the ID
attribute with a unique value and set the identical value to the ElementID property. Detailed
information can be found in the Use of HTML templates topic.
HTML tag <DIV ID=”UniqueID”></DIV>
ElementID UniqueID
Properties for TWebAccordion
Property Description
ElementClassName Optionally sets the CSS classname for the label when styling via CSS is
used
ElementID Optionally sets the HTML element ID for a HTML element in the form HTML
file the label needs to be connected with. When connected, no new label is
created but the Delphi class is connected with the existing HTML element in
the form HTML file
159
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
Property Description
Sections Collection of sections in the TWebAccordion
Events for TWebAccordion
Property Description
OnCollapsed Event triggered when a section was collapsed.
OnCollapsing Event triggered when a section is about to be collapsed. The Allow
parameter can be used to control whether the section can be collapsed.
OnExpanded Event triggered when a section was expanded.
OnExpanding Event triggered when a section is about to be expanded. The Allow
parameter can be used to control whether the section can be expanded.
OnRenderSection Event triggered when a section is about to be rendered. This returns a
reference the HTML element that is the container for the section and allows
further customization of the section.
Properties for TAccordionSection
Property Description
Caption Gets or sets the text or HTML of the section caption.
CaptionElement Gets the HTML container element of the section caption.
Content Gets or sets the text or HTML content of the section.
ContentElement Gets the HTML container element of the section content.
Expanded Gets or sets the expanded state of the section.
Tag Integer property.
160
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
TWebResponsiveGridPanel
Description
Below is a list of the most important properties methods and events for
TWebResponsiveGridPanel. TWebResponsiveGridPanel is grid panel with responsive behavior.
This means that the layout of the grid panel can adapt to the form factor of the web page where
it is used. This layout is controlled by the Layout collection. Like a regular grid panel, controls
can be dropped on the TWebResponsiveGridPanel and these controls are organized in a grid
like structure and represented and accessible via the
TWebResponsiveGridPanel.ControlCollection.
Designtime Runtime
HTML template tag
The HTML tag the component can be associated with in an HTML template. Assign the ID
attribute with a unique value and set the identical value to the ElementID property. Detailed
information can be found in the Use of HTML templates topic.
HTML tag <DIV ID=”UniqueID”></DIV>
ElementID UniqueID
Properties for TWebResponsiveGridPanel
Property Description
ControlCollection Collection of child controls of the TWebResponsiveGridPanel
ElementClassName Optionally sets the CSS classname for the label when styling via CSS is
used
ElementID Optionally sets the HTML element ID for a HTML element in the form HTML
file the label needs to be connected with. When connected, no new label is
created but the Delphi class is connected with the existing HTML element in
161
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
Property Description
the form HTML file
Layout Collection of layout settings for various form factors. When a
TWebResponsiveGridPanel is dropped on the form 4 layouts are
automatically added for 4 different form factors: Smartphone with one
column (screen width <= 575pixels), Tablet with two columns (screen width
<= 768pixels), Desktop with three columns (screen width <= 991pixels),
Large Desktop with four columns (screen width <= 1199pixels).
Methods for TWebResponsiveGridPanel
Property Description
AddControl Adds a new control to the TWebResponsiveGridPanel.
RemoveControl Removes a new control from the TWebResponsiveGridPanel.
Events for TWebResponsiveGridPanel
Property Description
OnLayoutChange Event triggered when the form size changes and causes a new layout to be
selected
Properties for TResponsiveLayoutItem
Property Description
ColumnGap Gets or sets the column gap in pixels (px) or percentage (%) for the layout.
The column gap is the gap between two successive columns.
Description Text property that can be used to describe the layout. The Description
property is not used at runtime in the control.
Margins Sets the margins of the responsive grid cells in the selected layout.
RowGap Gets or sets the column gap in pixels (px) or percentage (%) for the layout.
The row gap is the gap between two successive rows.
Style Sets the grid cell style. This is a space delimited string that sets for each
row (or column) the specifier for each column in the row. The specifier per
column (or row) can be based on fractions (fr), pixels (px) or percentage
(%). For example, for a grid with 3 equally divided column widths, the style
could be set to ‘1fr 1fr 1fr’. For a combination of a fixed column width in
pixels of 200 pixels and two columns where the 2nd column has the double
width of the third, the style could be set to ‘200px 2fr 1fr’.
StyleType Sets the grid cells responsive style to be based on columns
(gTemplateColumns) or rows (gTemplateRows).
Tag Integer property.
162
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
Property Description
Width Sets the control width in pixels under which the layout is chosen.
TWebMessageDlg
Description
Below is a list of the most important properties methods and events for TWebMessageDlg. This
component allows to display modal dialogs (simulated by disabling all controls on the page as
the concept of modal dialogs does not exist in web applications).
Result for the following code:
WebMessageDlg1.ShowDialog('Do you like TMS WEB
Core?',WEBLib.Dialogs.mtConfirmation, [mbYes]);
Designtime
Runtime
Properties for TWebMessageDlg
DialogResult: TModalResult Holds the result of calling the dialog
163
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
DialogText: TStringList List of text used in dialog and dialog buttons.
Allows for language customization of the
dialog text
ElementClassName Optionally sets the CSS classname for the
label when styling via CSS is used
ElementID Optionally sets the HTML element ID for a
HTML element in the form HTML file the
label needs to be connected with. When
connected, no new label is created but the
Delphi class is connected with the existing
HTML element in the form HTML file
Methods for TWebMessageDlg
ShowDialog(Msg: string; DlgType:
TMsgDlgType; Buttons: TMsgDlgButtons;
AProc: TDialogResultProc = nil);
Method to show the message. The last
parameter is a method pointer for a method
that is optionally called when assigned when
the dialog is closed
Events for TWebMessageDlg
OnButtonClick Event triggered when a button on the
message dialog is clicked
OnClose Event triggered when the messagebox is
closed
164
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
TWebFileUpload
Description
The file upload component allows the user to drag a local file on the web form or select it via a
file open dialog. Either a single file can be uploaded or multiple files.
Properties for TWebFileUpload
Property Description
Caption Sets the text to be displayed in the upload component for the button to open
the file dialog.
DragCaption Sets the text to be displayed under the file drag area.
Files This is a list of files picked. The list consists of objects of the TFile type.
Multifile When true, it is allowed to pick or drag multiple files.
ShowFiles When true, the filenames for the dragged or picked files are shown in the
control.
HTML template tag
The HTML tag the component can be associated with in an HTML template. Assign the ID
attribute with a unique value and set the identical value to the ElementID property. Detailed
information can be found in the Use of HTML templates topic.
HTML tag <FORM ID=”UniqueID”></FORM>
ElementID UniqueID
Events for TWebFileUpload
Property Description
OnDroppedFiles Event triggered when one or multiple files were dropped or picked. The
filenames are returned via the AFileList stringlist.
OnGetFileAsArrayBuffer Event triggered when the the retrieval or a file as an array buffer is
completed. Retrieval of the file is done programmatically by calling
WebFileUpload.Files[index].GetFileAsArrayBuffer
OnGetFileAsText Event triggered when the the retrieval or a file as text is completed.
Retrieval of the file is done programmatically by calling
WebFileUpload.Files[index].GetFileAsText
165
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
Property Description
OnGetFileAsBase64 Event triggered when the the retrieval or a file as base64 encoded text
is completed. Retrieval of the file is done programmatically by calling
WebFileUpload.Files[index].GetFileAsBase64
OnGetFileAsDataURL Event triggered when the the retrieval or a file as Data URL is
completed. Retrieval of the file is done programmatically by calling
WebFileUpload.Files[index].GetFileAsDataURL
OnUploadFileComplete Event triggered when an upload of the file is completed. The upload is
started with WebFileUpload.Files[index].Upload(AAction);
OnUploadFileAbort Event triggered when an upload of the file is aborted
OnUploadFileError Event triggered when an error has occurred during a file upload
OnUploadFileProgress Event triggered to indicate the progress of an upload transfer. The
event returns the number of bytes transferred from the total number of
bytes to transfer
Properties for TFile
TFile is the item in the TWebFileUpload or TWebFilePicker Files collection. After a local file was
picked, the Files collection contains the list of files picked and allows access to the file
information and file data.
Property Description
FileObject:
TJSHTMLFile
Reference to the HTML TJSHTMLFile object giving accesss to the
local file.
Name: string Returns the name of the local file.
MimeType: string Returns the MIME type of the local file.
Modified: TDateTime Returns the file last modified date of the local file.
Size: integer Returns the size of the local file.
OnGetFileAsText Event triggered when the retrieval of the local file as text is ready
OnGetFileAsBase64 Event triggered when the retrieval of the local file as base64 encoded
data is ready
OnGetFileAsDataURL Event triggered when the retrieval of the local file as Data URL is ready
OnGetFileAsArrayBuffer Event triggered when the retrieval of the local file as array buffer is
ready
Methods for TFile
Property Description
GetFileAsText Starts to retrieve the content of the file as text. When
ready the OnGetFileAsText event is triggered at
TWebFileUpload or TWebFilePicker level.
166
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
Property Description
GetFileAsText(GetAsString:
TGetAsStringProc);
Overload of GetFileAsText that allows the use of an
anonymous method to handle the download result.
GetFileAsArrayBuffer Starts to retrieve the content of the file as binary data
(JavaScript array buffer). When ready the
OnGetFileAsArrayBuffer event is triggered at
TWebFileUpload or TWebFilePicker level.
GetFileAsArrayBuffer
(GetAsArrayBuffer:
TGetAsArrayBufferProc);
Overload of GetFileAsArrayBuffer that allows the use of
an anonymous method to handle the download result.
GetFileAsBase64 Starts to retrieve the content of the file as base64
encode text. When ready the OnGetFileAsBase64
event is triggered at TWebFileUpload or
TWebFilePicker level.
GetFileAsBase64(GetAsString:
TGetAsStringProc);
Overload of GetFileAsBase64 that allows the use of an
anonymous method to handle the download result.
GetFileAsDataURL Starts to retrieve the content of the file as string that can
be used for a data URL for a HTML IMG element
GetFileAsDataURL(GetAsString:
TGetAsStringProc);
Overload of GetFileAsDataURL that allows the use of
an anonymous method to handle the download result.
Upload(AAction: string); Perform an upload of a file to a specific upload handler
URL AAction
Example: uploading a file
To upload a file to a server, from the WebFileUpload.OnChange event or from another event,
call
WebFileUpload1.Files[0].Upload('http://localhost:8088/upload');
to upload the first file picked by the TWebFileUpload to the server (assuming there is server
code listening on port 8088 to handle via the upload action.
TWebFilePicker
Description
167
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
The file picker component allows to pick files from the local file system.
HTML template tag
The HTML tag the component can be associated with in an HTML template. Assign the ID
attribute with a unique value and set the identical value to the ElementID property. Detailed
information can be found in the Use of HTML templates topic.
HTML tag <INPUT TYPE=”FILE” ID=”UniqueID”>
ElementID UniqueID
Properties for TWebFilePicker
Property Description
Accept Sets an optional file filter. This is a string containing the extensions of files
that can be selected. Note that setting the file filter will not prevent that the
user can pick other filenames.
To select only text files (*.txt), set Accept to ‘.txt’.
To select JPEG, GIF, PNG image files , set Accept to ‘.jpg,.jpeg,.png,.gif’ or
it could also be set to: ‘image/*’.
Files This is a list of files picked. The list consists of objects of the TFile type.
Multifile When true, it is allowed to pick or drag multiple files.
Events for TWebFilePicker
Property Description
OnChange Event triggered when the file(s) picked changed by the user.
OnGetFileAsArrayBuffer Event triggered when the the retrieval or a file as an array buffer is
completed. Retrieval of the file is done programmatically by calling
WebFilePicker.Files[index].GetFileAsArrayBuffer
OnGetFileAsText Event triggered when the the retrieval or a file as text is completed.
Retrieval of the file is done programmatically by calling
WebFilePicker.Files[index].GetFileAsText
OnGetFileAsBase64 Event triggered when the the retrieval or a file as base64 encode
text is completed. Retrieval of the file is done programmatically by
calling WebFilePicker.Files[index].GetFileAsBase64
OnGetFileAsDataURL Event triggered when the the retrieval or a file as Data URL is
168
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
Property Description
completed. Retrieval of the file is done programmatically by calling
WebFileUpload.Files[index].GetFileAsDataURL
OnUploadFileComplete Event triggered when an upload of the file is completed. The upload
is started with WebFileUpload.Files[index].Upload(AAction);
OnUploadFileAbort Event triggered when an upload of the file is aborted
OnUploadFileError Event triggered when an error has occurred during a file upload
OnUploadFileProgress Event triggered to indicate the progress of an upload transfer. The
event returns the number of bytes transferred from the total number
of bytes to transfer
Example code
This code snippet shows how a local file can be loaded in TWebMemo after having been picked
by the TWebFilePicker. From the TWebFilePicker.OnChange event, the first picked file is
accessed as text with GetFileAsText and from the event TWebFilePicker.OnGetFileAsText this
text is added to a TWebMemo.
1. procedure TForm2.WebFilePicker1Change(Sender: TObject); 2. begin 3. if WebFilePicker1.Files.Count > 0 then 4. WebFilePicker1.Files[0].GetFileAsText; 5. end; 6. 7. procedure TForm2.WebFilePicker1GetFileAsText(Sender: TObject; 8. AFileIndex: Integer; AText: string); 9. begin 10. WebMemo1.Lines.Text := AText; 11. end;
TWebOpenDialog
Description
The TWebOpenDialog non-visual component allows to start a dialog to pick files from the local
file system.
Properties for TWebOpenDialog
Property Description
169
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
Property Description
Accept Sets an optional file filter. This is a string containing the extensions of files
that can be selected. Note that setting the file filter will not prevent that the
user can pick other filenames.
To select only text files (*.txt), set Accept to ‘.txt’.
To select JPEG, GIF, PNG image files , set Accept to ‘.jpg,.jpeg,.png,.gif’ or
it could also be set to: ‘image/*’.
FileName This returns the name of the local file picked
Files This is a list of files picked. The list consists of objects of the TFile type.
Multifile When true, it is allowed to pick or drag multiple files.
Methods for TWebOpenDialog
Property Description
Execute Starts the dialog for picking a local file
Execute(AProc:
TOpenDialogProc);
Starts the dialog for picking a local file with anonymous handler
called when a file is selected
Events for TWebOpenDialog
Property Description
OnChange Event triggered when the file(s) picked changed by the user.
170
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
TWebToggleButton
Description
Below is a list of the most important properties methods and events for TWebToggleButton.
Designtime
Runtime
Properties for TWebToggleButton
Checked Sets or gets the state of the toggle button
Style Style of the toggle button can be
tsRectangular or tsRounded
Events for TWebToggleButton
OnClick Event triggered the toggle button is clicked
TWebBitBtn
171
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
Description
Below is a list of the most important properties methods and events for TWebBitBtn.
Note that TWebBitBtn uses the Google Material Icons. Make sure to include this library in your
project. (Select the Manage JavaScript Library from the project context menu)
Designtime
Runtime
HTML template tag
The HTML tag the component can be associated with in an HTML template. Assign the ID
attribute with a unique value and set the identical value to the ElementID property. Detailed
information can be found in the Use of HTML templates topic.
172
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
HTML tag <BUTTON ID=”UniqueID”></BUTTON>
ElementID UniqueID
Properties for TWebBitBtn
Caption Sets the caption for the button
Flat When true, the button is displayed in flat
style
Glyph Sets the optional image for the button
Layout Sets the position of the button image versus
the button caption
blGlyphLeft: glyph left from caption
blGlyphRight: glyph right from caption
blGlyphTop: glyph on top of caption
blGlyphBottom: glyph under caption
MaterialGlyph Allows to pick an icon from the Google
material icon set
Events for TWebBitBtn
OnClick Event triggered when the button is clicked
173
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
TWebGroupBox
Description
Below is a list of the most important properties methods and events for TWebGroupBox. The
TWebGroupBox is a container control with a caption
Designtime
Runtime
HTML template tag
The HTML tag the component can be associated with in an HTML template. Assign the ID
attribute with a unique value and set the identical value to the ElementID property. Detailed
information can be found in the Use of HTML templates topic.
HTML tag <SPAN ID=”UniqueID”></SPAN>
ElementID UniqueID
Properties for TWebGroupBox
ElementClassName Optionally sets the CSS classname for the
label when styling via CSS is used
ElementID Optionally sets the HTML element ID for a
HTML element in the form HTML file the
label needs to be connected with. When
connected, no new label is created but the
Delphi class is connected with the existing
174
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
HTML element in the form HTML file
Events for TWebGroupBox
OnClick Event triggered when the groupbox is clicked
OnDblClick Event triggered when the groupbox is
double-clicked
175
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
TWebStretchPanel
Description
Below is a list of the most important properties methods and events for TWebStretchPanel. The
TWebStretchPanel is a container control with a top and bottom area. The height of the bottom
area has a fixed height while the top area height can adapt itself to the height of controls (when
controls are relatively positioned in the top area).
When a control is put in the upper area at design-time, it will belong at runtime in the upper
stretching area of the TWebStretchPanel. When a control is put in the lower area, it will belong
to the lower fixed height area and will as such automatically appear lower when the upper panel
area is stretched to fit the controls in the upper area.
Designtime
Runtime
Example:
A TWebListBox and TWebButton is placed on the TWebStretchPanel. The button is on the
lower part, the listbox on the upper part. From the button, items are added to the listbox and the
height of the listbox is increased. This causes the upper part to stretch to the height of the
listbox and the button remains below the stretched upper area in the fixed height area of the
lower part:
176
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
procedure TSampleForm.WebButton1Click(Sender: TObject);
var
i: integer;
begin
for i := 0 to 20 do
begin
WebListbox1.Items.Add('item '+inttostr(i));
end;
WebListbox1.Height := 300;
end;
HTML template tag
The HTML tag the component can be associated with in an HTML template. Assign the ID
attribute with a unique value and set the identical value to the ElementID property. Detailed
information can be found in the Use of HTML templates topic.
HTML tag <DIV ID=”UniqueID”></DIV>
ElementID UniqueID
177
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
Properties for TWebStretchPanel
ElementClassName Optionally sets the CSS classname for the
label when styling via CSS is used
ElementID Optionally sets the HTML element ID for a
HTML element in the form HTML file the
label needs to be connected with. When
connected, no new label is created but the
Delphi class is connected with the existing
HTML element in the form HTML file
FixedHeight Sets the fixed height of the bottom area in
the panel.
Events for TWebStretchPanel
OnClick Event triggered when the groupbox is clicked
OnDblClick Event triggered when the groupbox is
double-clicked
OnMouseDown Event triggered when the mouse is down on
the panel
OnMouseMove Event triggered when the mouse moves over
the panel
OnMouseUp Event triggered when the mouse goes up on
the panel
178
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
TWebStringGrid
Description
Below is a list of the most important properties methods and events for TWebStringGrid.
TWebStringGrid is similar to a VCL TStringGrid.
Designtime
Runtime
Set or get the content of grid cells via:
Grid.Cells[col,row]: string;
Set or get the column width in the grid via
Grid.ColWidths[col]: integer;
Set or get the row height in the grid via
Grid.RowHeights[row]: integer;
HTML template tag
The HTML tag the component can be associated with in an HTML template. Assign the ID
attribute with a unique value and set the identical value to the ElementID property. Detailed
information can be found in the Use of HTML templates topic.
179
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
HTML tag <SPAN
ID=”UniqueID”><TABLE></TABLE></SPAN>
ElementID UniqueID
Properties for TWebStringGrid
BorderStyle Selects the border style of the grid
ColCount Sets the number of columns in the grid
DefaultColWidth Sets the default column width
DefaultRowHeight Sets the default row height
FixedColor Sets the color of fixed cells
FixedCols Sets the number of fixed columns in the grid
FixedRows Sets the number of fixed rows in the grid
LeftCol Gets or sets the index of the first normal grid
column displaying. Use this property to get
or set the horizontal scroll position
Options The settings that are supported are:
goEditing: enables editing in the grid
goHorzLine: enables horizontal grid lines
goVertLine: enables vertical grid lines
goRowSelect: enables row selection
RowCount Sets the number of rows in the grid
Selection Gets or selects the range of selected cells in
the grid. Selection is of the type TGridRect
TopRow Gets or sets the index of the first normal grid
row displaying. Use this property to get or
set the vertical scroll position
Methods for TWebStringGrid
LoadFromJSON(const AURL: string;
ADataNode: string);
Load JSON formatted data found a AURL
via a HTTP GET in the string grid. The
expected data is a JSON array. When the
ADataNode parameter is different from
empty, it tries to fetch the JSON array from
the ADataNode JSON node.
LoadFromJSON(AJSON: TJSObject; Load data from a JSON object. The
180
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
ADataNode: string); expected data is a JSON array. When the
ADataNode parameter is different from
empty, it tries to fetch the JSON array from
the ADataNode JSON node.
LoadFromCSV(const AURL: string;
Delimiter: char = ‘;’; LoadFixed: Boolean =
false)
Load CSV formatted data found a AURL via
a HTTP GET in the string grid. Optional
parameters are the delimiter to use to parse
the CSV file and when the LoadFixed
parameter is true, the CSV data is also
loaded in the fixed cells of the grid.
MouseToCell(X,Y: integer; var ACol,ARow:
integer);
Returns the column/row index of the cell
found at client coordinates X,Y of the grid
Events for TWebStringGrid
OnClick Event triggered when grid is clicked
OnDblClick Event triggered when grid is double-clicked
OnGetCellChildren Event triggered when a new cell is rendered
during loading date from CSV or JSON in
the grid. Passes the HTML element for the
grid cell allowing to insert dynamically HTML
child elements in the cell
OnGetCellClass Event triggered when a new cell is rendered
during loading date from CSV or JSON in
the grid. Allows to set the CSS class name
for an individual cell allowing customization
this way.
OnGetCellData Event triggered when a new cell is rendered
during loading date from CSV or JSON in
the grid. Allows to dynamically override or
customize the values retrieved from the CSV
or JSON (or dataset in case of a
TWebDBGrid)
OnGetEditText Event triggered when a cell goes to edit
mode requesting the value to be edited
OnHttpRequestError Event triggered when an error occurred with
the HTTP GET request used to get data via
181
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
methods LoadFromJSON()/LoadFromCSV()
OnHttpRequestSuccess Event triggered when the HTTP GET request
used to get data via methods
LoadFromJSON()/LoadFromCSV()
successfully returned
OnSetEditText Event triggered when a cell goes out of edit
mode returned the edited value
182
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
TWebListControl
Description
Below is a list of the most important properties methods and events for TWebListControl.
TWebListControl represents a HTML <UL> list structure. The TWebListControl is also especially
designed to be able to use Bootstrap CSS styles for effects like banding, hovering,… and much
more. Find more information about Bootstrap list styles at:
https://getbootstrap.com/docs/4.0/components/list-group
In this example, the ElementListClassName was set to: "list-group” and the item’s property
ItemClassName was set to: “list-group-item d-flex justify-content-between align-items-center list-
group-item-action”
Designtime
Runtime
Items are added to the list via the Items collection. The Item class is defined as:
183
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
Properties for TListItem
Active When true, the item is shown as active item
in the list (when the CSS defines the Active
style)
AutoCollaps When true, the item click will collapse /
uncollapse the sub items (when the CSS
defines the Collapse style)
Enabled When true, the item is enabled and can be
clicked and will trigger the OnItemClick event
ItemClassName Optionally sets the CSS classname for the
item when styling via CSS is used
Items Collection of sub items for an item. The sub
items collection is exactly the same as the
main items collection. Note that items in sub
items can also have sub items etc..
Link Sets the optional URL for the item text when
it needs to be clickable with an URL
reference
LinkClassName Optionally sets the CSS classname for the
item link when styling via CSS is used
Tag Integer tag property associated with the item
Text Text of the item
Properties for TWebListControl
DefaultItemClassName Sets the CSS class that is automatically
applied to an item ItemClassName when a
new item is created. The
DefaultItemClassName is only used upon
creation of new TLinkItem instances
DefaultItemLinkClassName Sets the CSS class that is automatically
applied to an item LinkClassName when a
new item is created. The
DefaultLinkClassName is only used upon
184
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
creation of new TLinkItem instances
ElementClassName Optionally sets the CSS classname for the
label when styling via CSS is used
ElementID Optionally sets the HTML element ID for a
HTML element in the form HTML file the
label needs to be connected with. When
connected, no new label is created but the
Delphi class is connected with the existing
HTML element in the form HTML file
ElementListClassName Optionally sets the CSS classname for the
list when styling via CSS is used
Items Collection of TListItem instances and
possibly sub items making up the list
Style When Style is set, this presets the CSS
DefaultItemClassName,
DefaultItemLinkClassName,
ElementListClassName to match popular
Bootstrap list styles.
Sets the style of the list to:
lsBreadCrumb: list of items makes up a
breadcrumb
lsListGroup: vertical list of items
lsPagination: list makes up items of a paging
control, like a control to select a page of
rows to show in a grid
lsTabs: list makes up items of tab group
Events for TWebListControl
OnGetItemChildren Event triggered when the list item is
rendered allowing to insert child HTML
elements in the list element
OnGetItemClass Event triggered when the list item is
rendered allowing to customize the CSS
class of the list element
OnItemClick Event triggered when a list item is clicked
OnItemDblClick Event triggered when a list item is double-
clicked
185
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
TWebTableControl
Description
Below is a list of the most important properties methods and events for TWebTableControl.
TWebTableControl represents a HTML table. The HTML table can have a header row and/or
header column. The TWebTableControl is also especially designed to be able to use Bootstrap
CSS styles for effects like banding, hovering,… Find more information about Bootstrap table
styles at: https://getbootstrap.com/docs/4.0/content/tables/
In this example, the ElementHeaderClassName was set to: "table thead-dark” and the
ElementTableClassName was set to: “table table-hover table-bordered table-striped table-sm”
Designtime
Runtime
Set or get the content of table cells via:
TableControl.Cells[col,row]: string;
Set or get the HTML table cell elements in the grid via:
TableControl.CellElements[col,row]: TJSElement
Set or get the CSS class name for a row in the table via:
186
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
TableControl.RowClassName[row]: string;
HTML template tag
The HTML tag the component can be associated with in an HTML template. Assign the ID
attribute with a unique value and set the identical value to the ElementID property. Detailed
information can be found in the Use of HTML templates topic.
HTML tag <SPAN ID=”UniqueID”></SPAN>
ElementID UniqueID
Properties for TWebTableControl
ColCount Sets the number of columns in the table
ColHeader When true, a row header column is shown
ElementClassName Optionally sets the CSS classname for the
label when styling via CSS is used
ElementHeaderClassName Optionally sets the CSS classname for the
label when styling via CSS is used
ElementID Optionally sets the HTML element ID for a
HTML element in the form HTML file the
label needs to be connected with. When
connected, no new label is created but the
Delphi class is connected with the existing
HTML element in the form HTML file
ElementTableClassName Optionally sets the CSS classname for the
label when styling via CSS is used
RowCount Sets the number of rows in the table
RowHeader When true, a column header row is shown
Methods for TWebTableControl
LoadFromJSON(const AURL: string;
ADataNode: string);
Load JSON formatted data found a AURL
via a HTTP GET in the string grid. The
187
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
expected data is a JSON array. When the
ADataNode parameter is different from
empty, it tries to fetch the JSON array from
the ADataNode JSON node.
LoadFromCSV(const AURL: string;
Delimiter: char = ‘;’; LoadFixed: Boolean =
false)
Load CSV formatted data found a AURL via
a HTTP GET in the table contro. Optional
parameters are the delimiter to use to parse
the CSV file and when the LoadFixed
parameter is true, the CSV data is also
loaded in the fixed cells of the table control.
Events for TWebTableControl
OnClick Event triggered when the table is clicked
OnClickCell Event triggered when a table cell is clicked
OnDblClick Event triggered when the table is double-
clicked
OnDblClickCell Event triggered when a table cell is double-
clicked
OnGetCellChildren Event triggered when a new cell is rendered
during loading date from CSV or JSON in
the grid. Passes the HTML element for the
grid cell allowing to insert dynamically HTML
child elements in the cell
OnGetCellClass Event triggered when a new cell is rendered
during loading date from CSV or JSON in
the grid. Allows to set the CSS class name
for an individual cell allowing customization
this way.
OnGetCellData Event triggered when a new cell is rendered
during loading date from CSV or JSON in
the grid. Allows to dynamically override or
customize the values retrieved from the CSV
or JSON (or dataset in case of a
TWebDBGrid)
OnHttpRequestError Event triggered when an error occurred with
the HTTP GET request used to get data via
188
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
methods LoadFromJSON()/LoadFromCSV()
OnHttpRequestSuccess Event triggered when the HTTP GET request
used to get data via methods
LoadFromJSON()/LoadFromCSV()
successfully returned
189
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
TWebResponsiveGrid
Description
Below is a list of the most important properties methods and events for TWebResponsiveGrid.
TWebResponsiveGrid represents a HTML table structure with a responsive behavior of
configuration of columns and rows in relationship to the screen size the control is rendered on.
Designtime
Runtime
The TWebResponsiveGrid renders items from its Items collection in columns and rows. The
number of columns and rows can dynamically adapt to the size of the screen on which the
control is rendered.
To add items to TWebResponsiveGrid, use the Items collection and set the HTML content for
each item via WebResponsiveGrid.Items[index].HTML: string;
For each item, there is also a Tag: integer property and ItemObject: TObject property for setting
information associated with the item.
The HTML element in the grid via which the item is rendered is also accessible via public
property WebResponsiveGrid.Items[index].ElementHandle: TJSHTMLElement.
HTML template tag
190
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
The HTML tag the component can be associated with in an HTML template. Assign the ID
attribute with a unique value and set the identical value to the ElementID property. Detailed
information can be found in the Use of HTML templates topic.
HTML tag <DIV ID=”UniqueID”></DIV>
ElementID UniqueID
Properties for TWebResponsiveGrid
Configuration of the responsive behavior of the control is set via the Options property.
ItemBorderColor Sets the border color of an item in normal
state
ItemClassName Sets the CSS class name for an item
ItemColor Sets the background color of an item in
normal state
ItemGap Sets the gap (horizontally and vertically) in
pixels between items in the grid
ItemHeight Sets the height of an item in pixels
ItemHoverBorderColor Sets the border color of an item in hovered
state
ItemHoverColor Sets the background color of an item in
hovered state
ItemPadding Sets the padding internally in an item in
pixels
ItemSelectedBorderColor Sets the border color of an item in selected
state
ItemSelectedColor Sets the background color of an item in
selected state
ItemSelectedTextColor Sets the text color of an item in selected
state
ItemTemplate Sets an optional HTML template to be used
when data for the responsive grid is
dynamically loaded from CSV or JSON. Use
(%FIELDNAME%) place-holders in the
HTML template to define which data should
be used in what parts of the HTML for the
item.
ItemMinWidth Sets the minimum width of an item in pixels.
This will determine the number of columns
191
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
that can be rendered in the grid.
ScrollVertical When true, a vertical scrollbar will be used
when the number of items exceeds the
height of the control. Otherwise, the height
will automatically increase to enable to
display of all items in the list.
Methods for TWebResponsiveGrid
LoadFromJSON(const AURL: string;
ADataNode: string);
Load JSON formatted data found a AURL
via a HTTP GET in the string grid. The
expected data is a JSON array. When the
ADataNode parameter is different from
empty, it tries to fetch the JSON array from
the ADataNode JSON node.
LoadFromCSV(const AURL: string;
Delimiter: char = ‘;’; LoadFixed: Boolean =
false)
Load CSV formatted data found a AURL via
a HTTP GET in the table contro. Optional
parameters are the delimiter to use to parse
the CSV file and when the LoadFixed
parameter is true, the CSV data is also
loaded in the fixed cells of the table control.
Events for TWebResponsiveGrid
OnClick Event triggered when the grid is clicked
OnDblClick Event triggered when the grid is double-clicked
OnHttpRequestError Event triggered when there is a HTTP error
related to loading data from CSV or JSON.
OnHttpRequestSuccess Event triggered when the HTTP get request to get
data from CSV or JSON was successful.
OnGetCellChildren Event triggered when a new cell is rendered
during loading date from CSV or JSON in the grid.
Passes the HTML element for the grid cell
allowing to insert dynamically HTML child
192
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
elements in the cell
OnGetCellClass Event triggered when a new cell is rendered
during loading date from CSV or JSON in the grid.
Allows to set the CSS class name for an individual
cell allowing customization this way.
OnGetCellData Event triggered when a new cell is rendered
during loading date from CSV or JSON in the grid.
Allows to dynamically override or customize the
values retrieved from the CSV or JSON (or
dataset in case of a TWebDBGrid)
OnHttpRequestError Event triggered when an error occurred with the
HTTP GET request used to get data via methods
LoadFromJSON()/LoadFromCSV()
OnHttpRequestSuccess Event triggered when the HTTP GET request
used to get data via methods
LoadFromJSON()/LoadFromCSV() successfully
returned
OnItemClick Event triggered when an item in the grid is clicked
OnItemCreated Event triggered when an item in the grid is
created as a result of loading data from a CSV file
or JSON file. The Item can be accessed via
WebResponsiveGrid.Items[index] and the HTML
element in which the item is rendered via
WebResponsiveGrid.Items[index].ElementHandle:
TJSHTMLElement
OnItemDblClick Event triggered when an item in the grid is
double-clicked
OnItemGetFieldValue Event triggered when a value from a CSV column
or JSON field is going to be replaced in the HTML
template and via this event, the data can be
dynamically customized.
193
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
TWebLoginPanel
Description
Below is a list of the most important properties methods and events for TWebLoginPanel.
Designtime
Runtime
Properties for TWebLoginPanel
ElementButtonClassName Optionally sets the CSS classname for the
label when styling via CSS is used
ElementCaptionClassName Optionally sets the CSS classname for the
label when styling via CSS is used
ElementClassName Optionally sets the CSS classname for the
label when styling via CSS is used
ElementInputClassName Optionally sets the CSS classname for the
label when styling via CSS is used
ElementLabelClassName Optionally sets the CSS classname for the
label when styling via CSS is used
Padding Sets the padding inside the login panel
Password Gets or sets the value of the password
194
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
INPUT control
PasswordLabel Sets the caption text for the label in front of
the password INPUT control
User Gets or sets the value of the username
INPUT control
Userlabel Sets the caption text for the label in front of
the username INPUT control
Events for TWebLoginPanel
OnLogin Event triggered when the login button is
clicked
TWebGoogleReCaptcha
Description
The TWebGoogleReCaptcha implements v3 of the Google ReCaptcha API.
Below is a list of the most important properties methods and events for
TWebGoogleReCaptcha.
Designtime
Runtime
Properties for TWebGoogleReCaptcha
195
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
APIKey A valid Google API Key is required
APIUrl Sets the URLfor the backend API
Methods for TWebGoogleReCaptcha
Verify(Action) Start the ReCaptcha verification process. An
optional Action string value can be provided
which is returned with the OnVerified event.
Events for TWebGoogleReCaptcha
OnVerified Event triggered when the ReCaptcha
verification process has finished.
Returns the verification results in the Args
parameter values: Action, Score,
TimeStamp, HostName
TWebGoogleDrive
Description
Below is a list of the most important properties methods and events for TWebGoogleDrive.
196
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
Designtime
Runtime
HTML template tag
The HTML tag the component can be associated with in an HTML template. Assign the ID
attribute with a unique value and set the identical value to the ElementID property. Detailed
information can be found in the Use of HTML templates topic.
HTML tag <IFRAME ID=”UniqueID”></IFRAME>
ElementID UniqueID
Properties for TWebGoogleDrive
ElementClassName Optionally sets the CSS classname for the
map when styling via CSS is used
ElementID Optionally sets the HTML element ID for a
HTML element in the form HTML file the
component needs to be connected with.
When connected, no new object is created
but the Delphi class is connected with the
existing HTML element in the form HTML file
FolderID Sets the ID of the Google Drive Folder to
display
197
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
View Sets if the files are displayed in a list (dvList)
or in a grid (dvGrid)
TWebGoogleMaps
Description
Below is a list of the most important properties, methods and events for TWebGoogleMaps.
Designtime
Runtime
HTML template tag
The HTML tag the component can be associated with in an HTML template. Assign the ID
attribute with a unique value and set the identical value to the ElementID property. Detailed
information can be found in the Use of HTML templates topic.
HTML tag <DIV ID=”UniqueID”></DIV>
ElementID UniqueID
Properties for TWebGoogleMaps
198
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
APIkey Sets the Google Maps JavaScript API key
ElementClassName Optionally sets the CSS classname for the
map when styling via CSS is used
ElementID Optionally sets the HTML element ID for a
HTML element in the form HTML file the
label needs to be connected with. When
connected, no new map is created but the
Delphi class is connected with the existing
HTML element in the form HTML file
Options
MapStyle Sets the style used to display the map.
Options are mstDefault, mstNightMode,
mstCustom. If set to mstCustom the style
specified in CusomStyle is used.
Custom styles can be generated at:
https://mapstyle.withgoogle.com/
CustomStyle Sets the custom style that is used when
MapStyle is set to mstCustom
DefaultLatitude Sets the default latitude position of the map
DefaultLongitude Sets the default longitude position of the
map
DefaultZoomLevel Sets the default zoom level of the map
Markers[AIndex: Integer] : TJSObject Array of markers currently displayed on the
map
Polygons[AIndex: Integer] : TJSObject Array of polygons currently displayed on the
map
Polylines[AIndex: Integer] : TJSObject Array of polylines currently displayed on the
map
Circles[AIndex: Integer] : TJSObject Array of circles currently displayed on the
map
Rectangles[AIndex: Integer] : TJSObject Array of rectangles currently displayed on
the map
Methods for TWebGoogleMaps
199
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
SetCenter(Lat, Lon: Double); Centers the map around geocoordinate
Lat/Lon
SetZoom(Zoom: Integer); Controls the map zoom level (between 1 and
21 for US & Europe, other areas the
maximum zoom level might be lower)
AddMarker(Lat, Lon: Double; Title: string =
'');
Adds a marker with optional title at
geocoordiate Lat/Lon
AddMarker(Lat, Lon: Double; PinIcon:
string;Title: string = '');
Adds a marker with image URL PinIcon and
with optional title at geocoordiate Lat/Lon
AddMarker(Lat, Lon: Double; Color: TColor:
PinLetter: string;Title: string = '');
Adds a marker with specified color and letter
in the pin and with optional title at
geocoordinate Lat/Lon
AddMarker(Lat, Lon: Double; Color:
TGoogleMarkerColor;Title: string = '');
Adds a default Google marker with specified
color and with optional title at geocoordinate
Lat/Lon
The default Google colors can be:
mcDefault, mcRed, mcBlue, mcGreen,
mcPurple, mcYellow
AddMarker(Lat, Lon: Double; Shape:
TGoogleMarkerShape; Color: TColor;
BorderColor: TColor; Scale: Double;
CustomShape = string = ‘’;Title: string = '');
Adds a marker with specified shape, color,
bordercolor, scale and with optional title at
geocoordinate Lat/Lon
The shape can be:
msPin, msPinDot, msFlag, msBookmark,
msFlagSmall, msHome, msFavorite, msStar,
msCustom
If msCustom is selected a CustomShape
value can be provided.
AddPolyline(Points: TJSArray; AColor:
TColor = clRed; AWidth: Integer = 2;
AOpacity: Double = 1)
Adds a polyline with the specified coordinate
Points and with optional color, width and
opacity
AddPolygon(Points: TJSArray; AFillColor:
TColor = clRed; AStrokeColor: TColor =
clBlack; AWidth: Integer = 2; AOpacity:
Double = 1)
Adds a polygon with specified coordinate
Points and with optional fill color, stroke
color, width and opacity
AddCircle(Lat, Lon: Double; Radius: Integer;
AFillColor: TColor = clRed; AStrokeColor:
TColor = clBlack; AWidth: Integer = 2;
AOpacity: double = 1)
Adds a circle with specified center
coordinates, radius and optional fill color,
stroke color, width and opacity
AddRectangle(NorthEastLat, NorthEastLon,
SouthWestLat, SouthWestLon: Double;
AFillColor: TColor = clRed; AStrokeColor:
Adds a rectangle with specified coordinates,
radius and optional fill color, stroke color,
width and opacity
200
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
TColor = clBlack; AWidth: Integer = 2;
AOpacity: Double = 1)
AddGPX(AGPX: string; AColor; TColor;
AWidth: Integer; AOpacity: Double);
Adds a GPX layer with optional Color, Width
and Opacity to the map
AddKML(Url: string; ZoomToBounds:
Boolean = true)
Adds a KML layer with specified Url to the
map and optionally zoom to the KML layer
bounds
ClearMarkers Removes all markers from the map
ClearPolylines Removes all polylines from the map
ClearPolygons Removes all polygons from the map
ClearCircles Removes all circle from the map
ClearRectangles Removes all rectangles from the map
ClearKMLs Removes all KMLs from the map
ShowDirections(Source, Destination: string;
ATravelMode: TGoogleTravelMode =
tmDriving; WayPoints: TStringList = nil;
OptimizeWayPoints: Boolean = False;
AvoidHighways: Boolean = False;
AvoidTolls: Boolean = False);
Show the calculated route between Source
and Destination expressed as addresses.
Optionally set TravelMode, add WayPoints,
OptimizeWayPoints, AvoidHighways,
AvoidTolls
ShowDirections(SourceLon, SourceLat,
DestLon, DestLat: Double; ATravelMode:
TGoogleTravelMode = tmDriving;
WayPoints: TStringList = nil;
OptimizeWayPoints: Boolean = False;
AvoidHighways: Boolean = False;
AvoidTolls: Boolean = False);
Show the calculated route between Source
and Destination expressed as coordinates.
Optionally set TravelMode, add WayPoints,
OptimizeWayPoints, AvoidHighways,
AvoidTolls
RemoveDirections Removes the display of a route on the map
GeoCode(const Address: string); Converts the address to the geocoordinate
Lat/Lon. The result of the conversion is
retrieved via the event OnGeoCoded
PanTo(Lat, Lon: Double) Pan the center of the map to the provided
coordinates
SetZoom(Zoom: Integer) Zoom the map to the provided zoom level
FitBounds(LatMin, LonMin, LatMax, LonMax:
Double)
Pan and zoom the map to the bounds of the
provided coordinates
GetCenter(var Lat, Lon: Double): Boolean Returns the current center coordinate of the
map
GetBounds(var NorthEastLat, NorthEastLon,
SouthWestLat, SouthWestLon: Double):
Boolean;
Returns the current bounds of the map
SetDoubleClickZoom(AValue: Boolean) Sets if the map is zoomed when a double
201
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
click occurs
SetScrollWheel(AValue: Boolean) Sets if the map is zoomed when the mouse
wheel is used
SetDraggable(AValue: Boolean) Sets if the map can be dragged to a new
position
SetMapType(AMapType: TGoogleMapType
= mtDefault)
Sets the map type to display. Options are
mtDefault, mtSatellite, mtHybrid, mtTerrain
SetMarkerTitle(AIndex: Integer; ATitle:
string)
Sets the title of the marker with index AIndex
SetMarkerLocation(AIndex: Integer; Lat,
Lon: Double);
Sets the location of the marker with index
AIndex
SetMarkerIcon(AIndex: Integer; Url: string); Sets the icon of the marker with index
AIndex
SetCircleCenter(AIndex: Integer; Lat, Lon:
Double);
Sets the center of the circle with index
AIndex
SetCircleRadius(AIndex, Radius: Integer); Sets the radius of the circle with index
AIndex
SetCircleColors(AIndex: Integer; AFillColor,
AStrokeColor: TColor);
Sets the colors of the circle with index
AIndex
SetRectangleLocation(AIndex: Integer;
NorthEastLat, NorthEastLon, SouthWestLat,
SouthWestLon: Double);
Sets the location of the rectangle with index
AIndex
SetRectangleColors(AIndex: Integer;
AFillColor, AStrokeColor: TColor);
Sets the colors of the rectangle with index
AIndex
SetPolylineColor(AIndex: Integer; AColor:
TColor);
Sets the color of the polyline with index
AIndex
SetPolylinePoints(AIndex: Integer; Points:
TJSArray);
Sets the points of the polyline with index
AIndex
SetPolygonColors(AIndex: Integer;
AFillColor, AStrokeColor: TColor);
Sets the colors of the polygon with index
AIndex
SetPolygonPoints(AIndex: Integer; Points:
TJSArray);
Sets the points of the polygon with index
AIndex
ShowStreetView(Lat, Lon: Double; Heading:
Integer = 0; Zoom: Integer = 0; Pitch: Integer
= 0)
Display streetview mode for the provided
coordinates. Optionally set the heading
direction, zoom level and pitch value
HideStreetView Hide streetview mode
RemoveMarker(AIndex: Integer); Remove the marker with index AIndex from
the map
RemovePolygon(AIndex: Integer) Remove the polygon with index AIndex from
the map
RemovePolyline(AIndex: Integer); Remove the polyline with index AIndex from
202
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
the map
RemoveCircle(AIndex: Integer); Remove the circle with index AIndex from
the map
RemoveRectangle(AIndex: Integer); Remove the rectangle with index AIndex
from the map
Events for TWebGoogleMaps
OnCircleClick Event triggered when a Circle is clicked
OnGeoCoded Event triggered when the geocoding started
with WebGoogleMaps.GeoCode() was
successful
OnKMLClick Event triggered when a KML is clicked
OnMarkerClick Event triggered when a marker is clicked
OnMapClick Event triggered when the map is clicked
OnMapDblClick Event triggered when the map is double-
clicked
OnMapIdle Event triggered when map interaction has
ended
OnMapLoaded Event triggered when the map has finished
loading.
Note that Properties/Methods that interact
with the map should only be used after this
event was triggered.
OnMapPan Event triggered when the map is panned
OnMapZoom Event triggered when the map is zoomed
OnPolylineClick Event triggered when a Polyline is clicked
OnPolygonClick Event triggered when a Polygon is clicked
OnRectangleClick Event triggered when a Rectangle is clicked
TWebGoogleChart
203
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
Description
Below is a list of the most important properties methods and events for TWebGoogleChart.
Note: To use Google Charts, it is important to activate the needed Google Charts JavaScript
library for this. Do this from the “Manage JavaScript Libraries” item from the project context
menu in the IDE project manager.
204
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
Designtime
Runtime
Properties for TWebGoogleChart
Appearance
Animation.Duration Duration of the chart animation
Animation.Easing Sets the type of animation easing.
Animation.Startup Sets if the chart is animated on startup
Background.BorderColor Sets the border color
Background.BorderWidth Sets the border width
Background.Color Sets the background color
HAxis.AutoMaxMinValue Automatically set the Max and Min values
of the HAxis based on the point values. If
true the MaxValue and MinValue properties
are ignored
HAxis.MaxValue Sets a custom Max value for the HAxis
HAxis.MinValue Sets a custom Min value for the HAxis
Legend.Alignment Sets the alignment of the legend
205
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
Legend.Position Sets the position of the legend
LineChart.CurveType Sets the curve of the line. Set to None to
disable line curve or Function to enable
PieChart.Enable3D Sets if a chart of type Pie is displayed in 3D
PieChart.PieHole Displays the Pie chart as a Donut chart.
The value configures the size of the donut
hole. Ignored if Enable3D is true
PieChart.PieSliceText Sets which data is displayed on each pie
slice. Options are Label, None, Percentage
or Value
ReverseCategories Sets the order in which the categories are
added to the chart. 1 for default order, 0 for
reversed order
Stacked Sets if data in a Bar, Column or Area chart
is displayed stacked or not
Tooltip Configures when the tooltip is displayed
VAxis.AutoMaxMinValue Automatically set the Max and Min values
of the VAxis based on the point values. If
true the MaxValue and MinValue properties
are ignored
VAxis.MaxValue Sets a custom Max value for the VAxis
VAxis.MinValue Sets a custom Min value for the VAxis
Chart Returns the chart as a TJSObject. Allows
customizing the chart via JavaScript calls
after the initial rendering. (See Example 3)
Data Returns the chart data as TJSObject. Allows
customizing the chart data via JavaScript
calls after the initial rendering. (See Example
3)
Series
ChartType Sets the type of chart to display. Only
series with ChartType Bar, Column, Area or
Line can be combined on a single Chart.
Color Sets the color of the datapoints
Line.LineWidth Sets line width for Series of ChartType
Area, Line or Scatter. Set to 0 to hide the
line and only display points.
206
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
Line.PointShape Sets the shape of the datapoints for Series
of ChartType Area, Line or Scatter.
Line.PointSize Sets the size of the datapoints for Series of
ChartType Area, Line or Scatter. Set to 0 to
hide the points and only display lines.
Title Sets the title of the Series
Title Sets the title of the chart
Methods for TWebGoogleChart
SetOption(AOption: string; AValue:
Boolean);
SetOption(AOption: string; AValue:
TJSObject);
SetOption(AOption: string; AValue: string);
Changes a chart option after the chart is
rendered. (See Example 4)
Series[].Values.AddSinglePoint(AValue:
Double; ALabel: string = ‘’);
Adds a point to a chart of type Area, Bar,
Column, Line.
Series[].Values.AddPiePoint(AValue:
Double; ALabel: string = ‘’; Offset: Double =
0; Color: TColor = clNone);
Adds a point to a chart of type Pie. The
Offset parameter sets the distance of the pie
slice from the main pie. The Color sets the
backgroundcolor of the slice, set to clNone
to use default colors.
Series[].Values.AddXYPoint(X, Y: Double); Adds a point to a chart of type Scatter.
Series[].Values.AddCandlestickPoint(X, Y,
Minimum, Maximum: Double; ALabel: string
= ‘’);
Adds a point to a chart of type Candlestick.
Series[].Values.AddTimelinePoint(StartTime,
EndTime: TDateTime: ALabel: string = ‘’);
Adds a point to a chart of type Timeline.
Series[].Values.AddBubblePoint(X, Y:
Double; Series: string; Size: Double; ALabel:
string = ‘’);
Adds a point to a chart of type Bubble.
Series[].Values.AddBubbleColorPoint(X, Y:
Double; Value: Double; ALabel: string = ‘’);
Adds a point to a chart of type BubbleColor.
The Value parameter determines the color of
the bubble.
207
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
Events for TWebGoogleChart
OnLoaded(Sender: TObject); Event triggered when the has finished
loading
OnSelect(Sender: TObject; Event:
TGoogleChartSelectEventArgs);
Event triggered when a datapoint on the
chart is selected. The Event parameter
contains the SeriesIndex and the PointIndex
OnCustomizeChart(Sender: TObject; var
Options: TGoogleChartOptions);
Event triggered before the chart rendering
starts. Allows configuration of selected
extended chart properties via the Options
parameter values. (See Example 2)
OnCustomizeChartJSON(Sender: TObject;
var Options: string);
Event triggered when the chart configuration
JSON data is ready. Allows to fully
customize the configuration of the chart via
the Options parameter.
Examples
Example 1: Configuring a BarChart
Demonstrates how to display a chart with just a few lines of code.
var
it: TGoogleChartSeriesItem;
begin
it := WebGoogleChart1.Series.Add;
it.ChartType := gctPie;
it.Values.AddPiePoint(80, 'Label A');
it.Values.AddPiePoint(20, 'Label B');
end;
Example 2: Customization options
Demonstrates how to customize a chart with extended options.
procedure TForm1.WebGoogleChart1CustomizeChart(Sender: TObject;
var Options: TGoogleChartOptions);
begin
Options.HAxis.ViewWindow.Min := '0';
Options.HAxis.ViewWindow.Max := '100';
208
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
end;
Note: Options data must contain valid JSON data.
Full documentation of available configuration options can be found at:
https://developers.google.com/chart/interactive/docs/
(Select Chart Type from the list on the left, then select “Configuration Options” from the
“Content” items on the right)
Example 3: Adding and updating datapoints on the fly
Demonstrates how to dynamically add and update datapoints in an existing chart.
procedure TForm1.WebButton1Click(Sender: TObject);
var
data: TJSObject;
chart: TJSObject;
begin
data := WebGoogleChart1.Data;
chart := WebGoogleChart1.Chart;
asm
data.setValue(0, 1, 20); //rowIndex, columnIndex, value
data.addColumn('number', 'Label'); //datatype, label
data.addRow(['Row', 10, 20, 30, 40]); //rowTitle, Column values
chart.draw(); //update chart
end;
end;
Note: The Google Charts API reference can be found here:
https://developers.google.com/chart/interactive/docs/reference#methods
Example 4: Setting options on the fly
Demonstrates how to dynamically update options in an existing chart.
procedure TForm1.WebButton1Click(Sender: TObject);
begin
WebGoogleChart1.SetOption('vAxis.title', 'Y axis title');
end;
Note: Options data must contain valid JSON data.
Full documentation of available configuration options can be found at:
https://developers.google.com/chart/interactive/docs/
209
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
(Select Chart Type from the list on the left, then select “Configuration Options” from the
“Content” items on the right)
TWebBrowserControl
Description
Below is a list of the most important properties methods and events for TWebBrowserControl.
Designtime
Runtime
HTML template tag
The HTML tag the component can be associated with in an HTML template. Assign the ID
attribute with a unique value and set the identical value to the ElementID property. Detailed
information can be found in the Use of HTML templates topic.
210
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
HTML tag <IFRAME ID=”UniqueID”></IFRAME>
ElementID UniqueID
Properties for TWebBrowserControl
ElementClassName Optionally sets the CSS classname for the
map when styling via CSS is used
ElementID Optionally sets the HTML element ID for a
HTML element in the form HTML file the
component needs to be connected with.
When connected, no new object is created
but the Delphi class is connected with the
existing HTML element in the form HTML file
ReferrerPolicy Sets the preferred referrer policy. Available
options are: rfNone, rfNoReferrer,
rfNoReferrerWhenDowngrade, rfOrigin,
rfOriginWhenCrossOrigin, rfUnsafeUrl
Sandbox Sets which browse features are allowed.
Available options are: stAllowForms,
stAllowModals, stAllowOrientationLock,
stAllowPointerLock, stAllowPopups,
stAllowPopupsToEscapeSandbox,
stAllowPresentation, stAllowSameOrigin,
stAllowScripts, stAllowTopNavigation,
stAllowTopNavigationByUserActivation
URL Sets the URL to display
TWebMultimediaPlayer
Description
Below is a list of the most important properties methods and events for TWebMultimediaPlayer.
211
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
Designtime
Runtime
HTML template tag
The HTML tag the component can be associated with in an HTML template. Assign the ID
attribute with a unique value and set the identical value to the ElementID property. Detailed
information can be found in the Use of HTML templates topic.
HTML tag <VIDEO ID=”UniqueID”></VIDEO>
ElementID UniqueID
Properties for TWebMultimediaPlayer
AutoPlay Sets if the content will starts playing as soon
as it is ready
Controls Sets if the playback controls are displayed
ElementClassName Optionally sets the CSS classname for the
map when styling via CSS is used
ElementID Optionally sets the HTML element ID for a
HTML element in the form HTML file the
component needs to be connected with.
When connected, no new object is created
but the Delphi class is connected with the
existing HTML element in the form HTML file
Loop Sets if the content is played in a continuous
loop
MultimediaType Sets if the content is Audio (mtAudio) or
212
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
Video (mtVideo)
Muted Sets if the audio output should be muted
PlaybackRate Sets the content playback speed
URL Sets the location of the media file
Volume Sets the volume of the audio output
TWebYoutube
Description
Below is a list of the most important properties methods and events for TWebYoutube.
Designtime
Runtime
HTML template tag
The HTML tag the component can be associated with in an HTML template. Assign the ID
attribute with a unique value and set the identical value to the ElementID property. Detailed
information can be found in the Use of HTML templates topic.
213
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
HTML tag <IFRAME ID=”UniqueID”></IFRAME>
ElementID UniqueID
Properties for TWebYoutube
AllowFullScreen When true, the button to show the video in
full screen is displayed
AutoPlay When true, the video starts playing as soon
as the page opens
ElementClassName Optionally sets the CSS classname for the
label when styling via CSS is used
ElementID Optionally sets the HTML element ID for a
HTML element in the form HTML file the
label needs to be connected with. When
connected, no new label is created but the
Delphi class is connected with the existing
HTML element in the form HTML file
VideoID Sets the Youtube ID of the video
214
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
TWebTwitterFeed
Description
Below is a list of the most important properties methods and events for TWebTwitterFeed.
TWebTwitterFeed is an easy way to display a Twitter feed in a page. The Twitter feed displays
as soon as the Feed (Twitter ID) is set.
Designtime
Runtime
215
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
HTML template tag
The HTML tag the component can be associated with in an HTML template. Assign the ID
attribute with a unique value and set the identical value to the ElementID property. Detailed
information can be found in the Use of HTML templates topic.
HTML tag <DIV ID=”UniqueID”></DIV>
ElementID UniqueID
Properties for TWebTwitterFeed
ElementClassName Optionally sets the CSS classname for the
label when styling via CSS is used
ElementID Optionally sets the HTML element ID for a
HTML element in the form HTML file the
label needs to be connected with. When
connected, no new label is created but the
Delphi class is connected with the existing
HTML element in the form HTML file
Feed Sets the id of the Twitter feed to display
FeedLinkText Sets additional text displayed together with
the feed items
TWebCamera Description
Below is a list of the most important properties methods and events for the
TWebCamera. TWebCamera is using the MediaDevices.getUserMedia() API. Because of
this, two mayor limitations are:
The TWebCamera won’t work in any browser that does not support the getUserMedia
API.
It is not yet supported in iOS PWA.
216
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
Designtime Runtime
Selecting a device
The initialization of the available camera devices is an async process. The setup requires a few
steps but with the provided properties and events you can create a list for the user to pick their
preferred camera to use.
Suppose a TWebCamera is already available on the form. Set the CameraType property to
ctSelected. In this example we will use a TWebComboBox to create a list of devices.
In the OnCameraDevicesInitialized event we can fill the TWebComboBox:
view plain text
1. procedure TForm1.WebCamera1CameraDevicesInitialized(Sender: TObject); 2. var 3. I: Integer; 4. d: TCameraDevice; 5. begin 6. for I := 0 to WebCamera1.CameraDevices.Count - 1 do 7. WebComboBox1.Items.Add(WebCamera1.CameraDevices.Items[I].Name); 8. 9. //If you want to select the first available device in the TWebComboBox, then: 10. if WebComboBox1.Items.Count <> 0 then 11. begin 12. WebComboBox1.ItemIndex := 0; 13. 14. //If you want to start the camera stream immediately 15. //with the first selected device, then: 16. d := WebCamera1.CameraDevices.GetDeviceByName(WebComboBox1.Items[0]); 17. WebCamera1.SetSelectedCameraDevice(d); 18. WebCamera1.Start; 19. end; 20. end;
And to handle the selection of the device from the user, we can use the OnChange event of the
TWebComboBox:
217
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
view plain text
1. procedure TForm1.WebComboBox1Change(Sender: TObject); 2. var 3. d: TCameraDevice; 4. begin 5. d := WebCamera1.CameraDevices.GetDeviceByName(WebComboBox1.Items[WebComboBox1.ItemInd
ex]); 6. WebCamera1.SetSelectedCameraDevice(d); 7. end;
Now you can call WebCamera1.Start when the camera stream needs to be started.
Starting the camera stream automatically
If the component would start the camera streaming itself if the selected devices has changed,
then it might lead to undesirable behavior in some applications. Therefore, this is something the
developer have to take care of themself. If you want to start the camera as soon as the selected
device has changed, then you can do so by using the OnSwitchCamera event:
view plain text
1. procedure TForm1.WebCamera1SwitchCamera(Sender: TObject; 2. ACamera: TCameraDevice); 3. begin 4. WebCamera1.Start; 5. end;
HTML template tag
The HTML tag the component can be associated with in an HTML template. Assign the ID
attribute with a unique value and set the identical value to the ElementID property. Detailed
information can be found in the Use of HTML templates topic.
HTML tag <VIDEO ID=”UniqueID”></VIDEO>
ElementID UniqueID
Properties for TwebCamera
Property Description
BrowserSupportedConstraints:
TStringList
Public property for settings for camera constraints
See:
https://developer.mozilla.org/en-
US/docs/Web/API/Media_Streams_API/Constraints
218
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
Property Description
CameraDevices:
TCameraDevices
A read-only property to retrieve a collection of camera devices
that are available.
CameraType: TCameraType Set or retrieve the camera type. Available values are: ctFront,
ctRear, ctSelected. In case of ctFront and ctRear the component
will try to use the preferred camera. ctSelected is used in
combintation with the CameraType property, where a selected
camera must be set based on the available devices.
Paused: Boolean A read-only property to retrieve if the camera is in a paused
state.
SnapShotAsBase64: string A read-only property to retrieve a snapshot from the camera as
a Base64 encoded string.
SnapShotAsImageData:
TJSImageData
A read-only property to retrieve a snapshot from the camera as
a TJSImageData.
Methods for TWebCamera
Property Description
Pause Method to pause the camera stream.
Resume Method to return to the paused camera
stream.
SetSelectedCameraDevice(aDevice:
TCameraDevice)
Method to set the selected camera device.
Start Method to start the camera stream.
Stop Method to stop the camera stream
completely.
Events for TwebCamera
Property Description
OnBeforeStart Event triggered before the camera starts recording
OnCameraDevicesInitialized Event triggered when the camera devices are initialized and
available.
OnCameraPause Event triggered when the camera gets paused.
OnCameraResume Event triggered when the camera resumes.
OnCameraStreamPlay Event triggered when the camera stream starts playing.
OnCameraStop Event triggered when the camera stream stops.
OnClick Event triggered when the control is clicked.
219
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
Property Description
OnBeforeStart Event triggered before the camera starts recording
OnDblClick Event triggered when the control is double clicked.
OnMouseDown Event triggered when the mouse is down on the control.
OnMouseEnter Event triggered when the mouse enters the control.
OnMouseLeave Event triggered when the mouse leaves the control.
OnMouseUp Event triggered when the mouse goes up on the control.
OnMouseMove Event triggered when the mouse moves on the control.
OnSwitchCamera Event triggered when the selected camera device changes.
220
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
DB-aware components
TMS WEB Core offers the concept of a dataset and datasource. Via a dataset and a
datasource, UI controls can be directly connected to a dataset, avoiding to write any code to
show data and update data.
Databinding works similar as in VCL application. A DB-aware control has a DataSource property
that is connected to a non-visual datasource component (TWebDataSource). The
TWebDataSource is in turn connected to a dataset, for example the TWebClientDataSet. Other
than the DataSource property, the DB-aware control uses the FieldName property to select the
DB field with which to connect the DB-aware control.
The non-visual datasource and dataset components can be placed directly on the form, or even
better, on a TWebDataModule.
TWebDBLabel
Description
This is a DB-aware label. The label connects typically to a DB string field and shows the content
of the DB string field as label on the form.
The TWebDBLabel is connected via DataSource and FieldName properties to a dataset.
221
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
TWebDBEdit
Description
This is a DB-aware edit control. The edit control connects typically to a DB string field and
allows to edit the content of the DB string field via an edit control on the form.
The TWebDBEdit is connected via DataSource and FieldName properties to a dataset.
TWebDBCheckBox
Description
This is a DB-aware checkbox control. The checkbox control connects typically to a DB boolean
field and allows to edit the content of the DB Boolean field via a checkbox control on the form.
The TWebDBCheckBox is connected via DataSource and FieldName properties to a dataset.
TWebDBSpinEdit
Description
This is a DB-aware spin edit control. The spin edit control connects typically to a DB numeric
field and allows to edit the content of the DB numeric field via a spin edit control on the form.
The TWebDBSpinEdit is connected via DataSource and FieldName properties to a dataset.
222
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
TWebDBMaskEdit
Description
This is a DB-aware mask edit control. The mask edit control connects typically to a DB field
(numeric / date / text) and allows to edit the content of the DB field via a mask edit control on
the form.
The TWebDBMaskEdit is connected via DataSource and FieldName properties to a dataset.
TWebDBComboBox
Description
This is a DB-aware combobox control. The combobox control connects typically to a DB string
field and allows to edit the content of the DB string field via an edit control on the form.
The TWebDBComboBox is connected via DataSource and FieldName properties to a dataset.
TWebDBLookupComboBox
Description
This is a DB-aware lookup combobox control. The combobox control connects typically to a DB
string field and allows to edit the content of the DB string field via an edit control on the form.
The value stored in the DB is the Value part of the Value/DisplayText pair while the text
displayed in the combobox maps to the DisplayText value.
The TWebDBLookupComboBox is connected via DataSource and FieldName properties to a
dataset.
223
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
TWebDBMemo
Description
This is a DB-aware memo control. The memo control connects typically to a DB text blob field
and allows to edit the content of the DB text blob field via a memo control on the form.
The TWebDBMemo is connected via DataSource and FieldName properties to a dataset.
TWebDBDateTimePicker
Description
This is a DB-aware date or time picker control. The date or time picker control connects typically
to a DB date or time field and allows to edit the content of the DB date or time field via a date or
time picker control on the form.
The TWebDBDatePicker is connected via DataSource and FieldName properties to a dataset.
TWebDBRadioGroup
Description
This is a DB-aware radiogroup control. The radiogroup control connects typically to a DB integer
field and allows to edit the content of the DB integer field via a group box control on the form.
The TWebDBRadioGroup is connected via DataSource and FieldName properties to a dataset.
224
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
TWebDBLinkLabel
Description
This is a DB-aware link label control. The link label control connects typically to a DB string field
and allows to show the content of the DB string field via a label with link on the form.
The TWebDBLinkLabel is connected via DataSource and FieldName properties to a dataset.
TWebDBImageControl
Description
This is a DB-aware image control. The image control connects typically to a DB string field and
allows to show the content of the DB string field as an image referring to the URL in the DB
string field value.
The TWebDBImageControl is connected via DataSource and FieldName properties to a
dataset.
For setting generating the proper image URL from the DB field value, two additional capabilities
are offered.
BaseURL Sets the optional URL prefix. In case the DB
field only contains the image filename,
BaseURL can be set to the full HTTP(S) URL
specifier
OnSetURL This event is triggered with a var parameter
AURL that can be used to transform the DB
field value to the required full HTTP(S) URL
225
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
TWebDBTableControl
Description
This is a DB-aware table control. A table control column connects typically to a DB field and
allows to show the content of the DB field in a column of the table.
The column in the TWebDBTableControl.Columns collection has following properties:
DataField Sets the DB field that should be displayed in
the column
DataType Defines whether the DB field connected to the
column should be displayed as text, an image
or a hyperlink
Title Sets the column header text
TWebDBResponsiveGrid
Description
This is a DB-aware responsive list control. A responsive list control column connects typically to
a DB field and allows to show the content of the DB fields in a list item via a template.
The template configures the HTML to be displayed in a responsive list item. The template is set
via TWebDBResponsiveGrid.Options.ItemTemplate.
To include a DB field value in the item, specify in the template the DB field as:
(%FIELDNAME%)
Example:
When connecting the FishFact JSON dataset to the responsive list and setting the template in
the following way:
226
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
TWebDBResponsiveGrid.Options.ItemTemplate :=
‘<strong>(%_Common_Name%)</strong><br>(%_Species_Name%)<br><IMG
width="96px" src="(%_Graphic%)">’;
The result is that from the dataset, the _Common_Name, _Species_Name field are shown and
the _Graphic field image URL is used to show the image with a width of 96 pixels:
TWebDBGrid
Description
This is a DB-aware grid. A grid column connects typically to a DB field and allows to show the
content of the DB field in a column of the grid.
The column in the TWebDBGrid.Columns collection has following properties:
227
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
DataField Sets the DB field that should be displayed in
the column
DataType Defines whether the DB field connected to the
column should be displayed as text, an image
or a hyperlink
ElementClassName Sets an optional CSS class name for the cells
of the column
Title Sets the column header text
TitleElementClassName Sets an optional CSS class name for the
header cell of the column
Width Sets the width of the column (in pixels)
TWebDBNavigator
Description
This is a DB-aware navigator, allowing to scroll in the connected dataset and perform operations
as Edit, Post, Cancel on the dataset.
To use the TWebDBNavigator, drop it on the form and connect the datasource.
With the property VisibleButtons, set what buttons in the navigator need to be visible. The
VisibleButtons property is a set property consisting of the following possible values:
nbFirst, nbPrior, nbNext, nbLast, nbInsert, nbDelete, nbEdit, nbPost, nbCancel
To customize the hint setting for each of the controls in the navigator, the
TWebDBNavigator.Hints prorprty can be used.
228
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
Non visual components
TWebTimer
TWebTimer is the direct equivalent of a VCL TTimer. It features an interval property with which
the interval between two subsequent OnTimer events can be set in milliseconds. With the
Enabled property the timer can be stopped or started. When the timer is enabled, it triggers the
OnItem event every ‘interval’ milliseconds
TWebLocalStorage
TWebLocalStorage is a class that can be used to access local browser storage. The storage is
handled by the browser and coupled to the specific URL of the web application. From another
URL, this local storage is not accessible. The TWebLocalStorage can be considered as a
key/string value pair storage. With the class TWebLocalStorage it is easy to use.
Example:
var
LLocalStorage: TWebLocalStorage
LLocalStorage := TWebLocalStorage.Create;
LLocalStorage.Values[‘mykeyname’] := ‘myvalue’;
LLocalStorage.Free;
Or alternatively, you can also use the static method that reduces this code to:
TWebLocalStorage.Values[‘mykeyname’] := ‘myvalue’;
When the same URL is visited by the browser, the values stored from the last session can be
retrieved.
TWebSessionStorage
229
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
TWebSessionStorage is similar to TWebLocalStorage except that values are only persisted in
the browser for the lifetime of the session. Just like for TWebLocalStorage, it consists of a
key/value pair storage.
Example:
var
LSessionStorage: TWebSessionStorage
LSessionStorage:= TWebSessionStorage.Create;
LSessionStorage.Keys[‘mykeyname’] := ‘myvalue’;
LSessionStorage.Free;
TWebURLValidator
TWebURLValidator is a non-visual component that allows to perform a check whether an URL
exists and works or not. Set the URL to test via TWebURLValidator.URL and call the Validate
method. This will trigger the OnValidated event where the IsValid parameter will return whether
the URL is valid or not.
Example:
procedure TForm1.WebFormCreate(Sender: TObject);
begin
WebURLValidator1.URL := 'http://myurltotest.com';
WebURLValidator1.Validate;
end;
procedure TForm1.WebURLValidator1Validated(Sender: TObject; IsValid:
Boolean);
begin
if IsValid then
ShowMessage('The URL ' + WebURLValidator1.URL + ' works!');
end;
TWebGeoLocation
230
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
TWebGeoLocation wraps the browser capability to determine the geolocation of the device on
which the browser runs. For privacy reasons, when an attempt to retrieve the geo location is
performed, it will trigger a popup dialog requesting the authorization from the user to do so.
With the method TWebGeoLocation.GetGeoLocation the request to get the geo location is
started. When the geo location is retrieved, the OnGeoLocation event is triggered returning the
longitude, latitude and altitude of the location.
procedure TForm1.WebGeoLocation1Geolocation(Sender: TObject; Lat, Lon,
Alt: Double);
begin
WebLabel1.Caption := Format('Device is at [%.4f:%.4f]', [Lon,Lat]);
end;
Note: use of TWebGeoLocation requires for privacy & security SSL.
TWebSocketClient
The TWebSocketClient is a non-visual component enabling to perform web socket
communication with a websocket server.
Set the hostname and port of the websocket server via WebSocketClient.HostName and Port.
Start connecting to the websocket server via calling the method WebSocketClient1.Connect.
When a successful connection is made, the WebSocketClient.OnConnect is triggered. Call
WebSocketClient.Disconnect to disconnect form the server. When a disconnect is called
programmatically or for another reason the connection to the websocket server is lost, the
OnDisconnect event is triggered.
Sending & retrieving data
Data is sent as a string and retrieved as JavaScript object.
To send a command call:
WebSocketClient.Send(AMessage: string); overload;
WebSocketClient.Send(ABuffer: TJSArrayBuffer); overload;
231
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
When data is received from the websocket server, the event OnDataReceived is triggered. This
returns the data as JavaScript. When the data is a string, the JavaScript obejct can be
converted easily to a string by calling TJSObject.toString;
procedure TForm1.WebSocketClient1DataReceived(Sender: TObject; Origin:
string;
Data: TJSObject);
begin
WebListBox1.Items.Add(Data.toString);
end;
TWebHttpRequest
The TWebHttpRequest is a component to perform HTTP(s) requests to a server. The HTTP
requests command can be:
httpCUSTOM : a custom HTTP command set with WebHttpRequest.CustomCommand
httpDELETE : a HTTP DELETE command
httpGET : a HTTP GET command (default)
httpHEAD : a HTTP HEAD command
httpPOST : a HTTP POST command
httpPUT : a HTTP PUT command
Optionally, HTTP request headers can be set. The HTTP request headers are set via
WebHttpRequest.Headers. This is a value/pair list of HTTP options. Default, the option Cache-
Control is set to no-cache.
232
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
When a HTTP POST command is execute, the POST data can be set via the
WebHttpRequest.PostData property.
By default WebHttpRequest.TimeOut is zero, which means there is no time-out value. When
wanting to set a time-out value, WebHttpRequest.TimeOut sets the time-out in milliseconds.
Finally, the URL for performing the HTTP request is set via WebHttpRequest.URL: string;
When the HTTP request is successful, the OnResponse event is triggered. When it fails, the
event OnAbort is triggered.
When the request is successful, the request response is returned as event parameter of the
OnResponse event.
procedure TForm1.WebHttpRequest1Response(Sender: TObject; AResponse:
string);
begin
ShowMessage('server response:' + AResponse);
end;
When the response comes as JSON, the JSON parser with a similar interface as the standard
Delphi JSON parser can be used:
The following example shows how the response can be parsed as a JSON array:
233
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
procedure TForm1.WebHttpRequest1Response(Sender: TObject; AResponse:
string);
var
JS: TJSON;
JA: TJSONArray;
JO: TJSONObject;
i: integer;
begin
JS := TJSON.Create;
JA := TJSONArray(JS.Parse(AResponse));
for i := 0 to JA.Count - 1 do
begin
JO := TJSONObject(JA.Items[i]);
WebListBox1.Items.Add(JO.Get('prop'));
end;
end;
234
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
TWebCookies
TWebCookies is a collection class for managing cookies in your web application. It is defined in
the unit WEBLib.Cookies. This is a collection of TWebCookie items. The TWebCookie item has
following properties:
property Name:string; gets or sets the cookie name/identifier
property Value:string; gets or sets the cookie value
property Expiry:TDateTime; gets or sets the cookie expiry date
property Path: string; gets or sets the cookie path
The path parameter specifies a document location for the cookie, so it’s assigned to a specific
path, and sent to the server only if the path matches the current document location, or a parent:
To get the browser cookies for the application URL in the TWebCookies collection call
TWebCookies.GetCookies.
For updating the cookies in the browser after making changes to the collection TWebCookie
items, call TWebCookies.SetCookies.
Other TWebCookies collection methods:
procedure Delete(ACookie: TCookie);
Delete a cookie by instance
procedure Delete(const AName: string);
Delete a cookie by name
function Add(const AName, AValue: string; Expiry: TDateTime): TCookie;
function Add(const AName, AValue: string): TCookie;
function Add(const AName, AValue, APath: string): TCookie;
function Add(const AName, AValue, APath: string; Expiry: TDateTime): TCookie;
Four different overload functions that allow to a add a new cookie to the TWebCookies
collection.
property Items[Index: integer]: TCookie;
235
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
Property providing access to each cookie in the collection by an array indexer
function Find(const AName: string): TCookie;
Find a cookie instance by name in the collection
TWebClientConnector
The TWebClientConnector is a component to establish a connection between a TMS Web Core
application running in the browser and a client application written in FMX or VCL running in a
desktop or mobile environment. In combination with the TTMSFNCWebCoreClientBrowser
(available in TMS FNC Core) the TMS Web Core application can be viewed in your favorite
environment. TWebClientConnector is defined in the unit WEBLib.ClientConnector.
Setting up the TWebClientConnector
In your TMS Web Core application, drop an instance of TWebClientConnector on the form.
There are no additional steps necessary to start receiving and sending messages at browser
side.
To receive messages, you can implement the OnReceivedMessage event. The
OnReceivedMessage returns JSON, below is a sample of parsing JSON in the
OnReceivedMessage event:
procedure TForm1.DoReceivedMessage(Sender: TObject; AJSON:
TJSONObject);
var
s: string;
begin
s := TJSJSON.stringify(AJSON.JSObject);
WebMemo1.Text := s;
end;
Sending messages with the TWebClientConnector
To send messages, you need to encapsulate your data in JSON, then send it to the client,
which the TWebClientConnector is connected to.
procedure TForm1.SendButtonClick(Sender: TObject);
236
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
var
o: TJSONObject;
js: TJSON;
s: string;
I: Integer;
begin
js := TJSON.Create;
s := '{"Message From Browser":"'+
TTMSFNCUtils.EscapeString(WebMemo1.Text) +'"}';
o := js.parse(s);
w.Send(o);
o.Free;
end;
Ofcourse, sending and receiving will only work when a client, writing in VCL or FMX, is
connected. Below are the steps necessary to have a working connection between browser and
client.
Setting up the TTMSFNCWebCoreClientBrowser
Drop an instance of the TTMSFNCWebCoreClientBrowser on the form and enter the URL of
your TMS Web Core application. When starting the application, the client will automatically try to
establish a connection with the TMS Web Core application running the TWebClientConnector
component instance. When the connection is established, the OnConnected event is triggered,
allowing you to start sending and receiving messages. For receiving messages at client side,
the OnReceivedMessage event (similar to the TMS Web Core application implementation for
TWebClientConnector) can be used.
procedure TForm1.DoReceiveMessage(Sender: TObject; AJSON: TJSONValue);
var
s: String;
begin
if AJSON.TryGetValue<String>('Message From Browser', s) then
begin
ShowMessage(TTMSFNCUtils.UnescapeString(s));
end;
end;
To send messages to the TMS Web Core application you can use the following code:
procedure TForm1.SendButtonClick(Sender: TObject);
var
237
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
c: TJSONObject;
begin
c := TJSONObject.Create;
c.AddPair('Message From Client', 'Hello World !');
TMSFNCWebCoreClientBrowser1.Send(c);
c.Free;
end;
238
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
TWebAESEncryption Below is a list of the most important properties, methods and events for the
TWebAESEncryption. The supported algorithms are: AES-CBC and AES-GCM.
Properties for TWebAESEncryption
Property Description
AESType: TAESEncryptionType The AES encryption algorithm type. If modified, it’s not
applied to the current key.
CryptoKey: TJSCryptoKey The CryptoKey object.
ExtractableKey: Boolean Determines if the key is extractable. If modified, it’s not
applied to the current key.
KeyLength: TAESEncryptionKeyLength The key length. If modified, it’s not applied to the
current key.
Usages Set of key usages. If modified, it’s not applied to the
current key.
Methods for TWebAESEncryption
Property Description
Decrypt(AEncryptedData: TJSArrayBuffer;
AResultType:
TCryptoDecryptResultType)
Method to decrypt an encoded data with the class’s
key. The result type can be string or binary, based on
what kind of data was encoded.
Encrypt(APlainText: string) Method to encrypt a plain text with the class’s key.
Encrypt(ABinary: TJSUint8Array) Method to encrypt binary data with the class’s key.
ExportKey(AFormat:
TCryptoExportImportFormat)
Method to export the class’s key. Supported formats
are: raw (ArrayBuffer) and jwk (JSON string).
GenerateKey Generates a new key based on the current property
settings.
ImportKey(AJSON: string) Method to import an AES key that is stored as a JSON
string.
ImportKey(ABinary: TJSUint8Array) Method to import an AES key that is stored as binary
data.
ImportKey(ARaw: TJSArrayBuffer) Method to import an AES key that is stored as an array
buffer.
239
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
Property Description
UnwrapKey(AImportFormat:
TCryptoExportImportFormat; AKey:
TJSArrayBuffer; AKeyAlgorithm: JSValue;
AExtractable: Boolean; AKeyUsages:
TCryptoKeyUsages)
Method to unwrap AKey with the class’s key and
algorithm. AKeyAlgorithm is the algorithm of AKey.
AImportFormat must be the same as what was used for
wrapping.
WrapKey(AKey: TJSCryptoKey;
AExportFormat:
TCryptoExportImportFormat)
Method to wrap a key with the class’s key and
algorithm.
Events for TWebAESEncryption
Property Description
OnDecryptedBinary Event triggered when an encrypted data is decrypted
and the format is binary.
OnDecryptedString Event triggered when an encrypted is decrypted and
the format is string.
OnEncrypted Event triggered when a data is encrypted.
OnError Event triggered when there’s a Promise rejection.
OnKeyCreated Event triggered when a key is created.
OnKeyExportedJSON Event triggered when a key is exported as a JSON
string.
OnKeyExportedRaw Event triggered when a key is exported as an array
buffer.
OnKeyImported Event triggered when a key is imported.
OnKeyUnwrapped Event triggered when a key is unwrapped.
OnKeyWrapped Event triggered when a key is wrapped.
TWebRSAEncryption
Below is a list of the most important properties, methods and events for the
TWebRSAEncryption. The supported algorithm is: RSA-OAEP.
Properties for TWebRSAEncryption
Property Description
ExtractableKey: Boolean Determines if the key is extractable. If modified, it’s not
240
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
Property Description
applied to the current key.
Hash: TCryptoHash The hash function to be used with the algorithm. If
modified, it’s not applied to the current key.
ModulusLength: TRSAModulusLength The length in bits of the RSA modulus. If modified, it’s
not applied to the current key.
PrivateKey: TJSCryptoKey The private CryptoKey object.
PublicKey: TJSCryptoKey The public CryptoKey object.
Usages Set of key usages. If modified, it’s not applied to the
current key.
Methods for TWebRSAEncryption
Property Description
Decrypt(AEncryptedData: TJSArrayBuffer;
AResultType:
TCryptoDecryptResultType)
Method to decrypt an encoded data with the class’s
private key. The result type can be string or binary,
based on what kind of data was encoded.
Encrypt(APlainText: string) Method to encrypt a plain text, with the class’s public
key.
Encrypt(ABinary: TJSUint8Array) Method to encrypt binary data, with the class’s public
key.
ExportKey(AKeyType:
TCryptoAsymKeyType; AFormat:
TCryptoExportImportFormat)
Method to export the class’s keys. AKeyType
represents which key to export. The supported formats
are PKCS#8 (PEM encoded string) for private keys, SPKI
(PEM encoded string) for public keys, and jwk (JSON
string) for private/public keys.
ImportKey(AKey: string; AKeyType:
TCryptoAsymKeyType; AFormat:
TCryptoExportImportFormat)
Method to import a string formatted key. AKeyType
determines which key to import (private/public).
AFormat should be PKCS#8/jwk in case of a private key
and SPKI/jwk in case of a public key.
ImportKey(ABinary: TJSUint8Array;
AKeyType: TCryptoAsymKeyType)
Method to import a key stored in binary format. Will
automatically use PKCS#8 for a private key and SPKI
for a public key.
GenerateKey Generates a new key pair based on the current
property settings.
241
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
Property Description
UnwrapKey(AImportFormat:
TCryptoExportImportFormat; AKey:
TJSArrayBuffer; AKeyAlgorithm: JSValue;
AExtractable: Boolean; AKeyUsages:
TCryptoKeyUsages)
Method to unwrap AKey with the class’s private key
and algorithm. AKeyAlgorithm is the algorithm of
AKey. AImportFormat must be the same as what was
used for wrapping.
WrapKey(AKey: TJSCryptoKey;
AExportFormat:
TCryptoExportImportFormat)
Method to wrap AKey with the class’s public key and
algorithm.
Events for TWebRSAEncryption
Property Description
OnDecryptedBinary Event triggered when an encrypted data is decrypted
and the format is binary.
OnDecryptedString Event triggered when an encrypted is decrypted and
the format is string.
OnEncrypted Event triggered when a data is encrypted.
OnError Event triggered when there’s a Promise rejection.
OnKeyCreated Event triggered when a key is created.
OnKeyExportedJSON Event triggered when a key is exported as a JSON
string.
OnKeyExportedPKCS8 Event triggered when a key is exported in PKCS#8
format as a PEM encoded string.
OnKeyExportedSPKI Event triggered when a key is exported in SPKI format
as a PEM encoded string.
OnKeyUnwrapped Event triggered when a key is unwrapped.
OnKeyWrapped Event triggered when a key is wrapped.
OnPrivateKeyImported Event triggered when a private key is imported.
OnPublicKeyImported Event triggered when a public key is imported.
TWebRSASignature
Below is a list of the most important properties, methods and events for the
TWebRSASignature. The supported algorithm is: RSASSA-PKCS1-v1_5.
242
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
Properties for TWebRSASignature
Property Description
ExtractableKey: Boolean Determines if the key is extractable. If modified, it’s not
applied to the current key.
Hash: TCryptoHash The hash function to be used with the algorithm. If
modified, it’s not applied to the current key.
ModulusLength: TRSAModulusLength The length in bits of the RSA modulus. If modified, it’s
not applied to the current key.
PrivateKey: TJSCryptoKey The private CryptoKey object.
PublicKey: TJSCryptoKey The public CryptoKey object.
Usages Set of key usages. If modified, it’s not applied to the
current key.
Methods for TWebRSASignature
Property Description
ExportKey(AKeyType:
TCryptoAsymKeyType; AFormat:
TCryptoExportImportFormat)
Method to export the class’s keys. AKeyType
represents which key to export. The supported formats
are PKCS#8 (PEM encoded string) for private keys, SPKI
(PEM encoded string) for public keys, and jwk (JSON
string) for private/public keys.
GenerateKey Generates a new key pair based on the current
property settings.
ImportKey(AKey: string; AKeyType:
TCryptoAsymKeyType; AFormat:
TCryptoExportImportFormat)
Method to import a string formatted key. AKeyType
determines which key to import (private/public).
AFormat should be PKCS#8/jwk in case of a private key
and SPKI/jwk in case of a public key.
ImportKey(ABinary: TJSUint8Array;
AKeyType: TCryptoAsymKeyType)
Method to import a key stored in binary format. Will
automatically use PKCS#8 for a private key and SPKI
for a public key.
Sign(AText: string) Sign AText with the class’s public key and algorithm.
Sign(ABinary: TJSUint8Array) Sign ABinary with the class’s public key and algorithm.
Verify(ASignature: TJSArrayBuffer; AData:
TJSArrayBuffer)
Verify AData with ASignature, using the class’s private
key and algorithm.
243
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
Events for TWebRSASignature
Property Description
OnError Event triggered when there’s a Promise rejection.
OnKeyCreated Event triggered when a key is created.
OnKeyExportedJSON Event triggered when a key is exported as a JSON
string.
OnKeyExportedPKCS8 Event triggered when a key is exported in PKCS#8
format as a PEM encoded string.
OnKeyExportedSPKI Event triggered when a key is exported in SPKI format
as a PEM encoded string.
OnPrivateKeyImported Event triggered when a private key is imported.
OnPublicKeyImported Event triggered when a public key is imported.
OnSigned Event triggered when data is signed.
OnVerify Event triggered when data is verified
TWebHMACSignature
Below is a list of the most important properties, methods and events for the
TWebHMACSignature.
Properties for TWebHMACSignature
Property Description
CryptoKey: TJSCryptoKey The CryptoKey object.
ExtractableKey: Boolean Determines if the key is extractable. If modified, it’s not
applied to the current key.
Hash: TCryptoHash The hash function to be used with the algorithm. If
modified, it’s not applied to the current key.
Usages Set of key usages. If modified, it’s not applied to the
current key.
Methods for TWebHMACSignature
Property Description
ExportKey(AFormat:
TCryptoExportImportFormat)
Method to export the class’s key. Supported formats
are: raw (ArrayBuffer) and jwk (JSON string).
244
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
Property Description
GenerateKey Generates a new key based on the current property
settings.
ImportKey(AJSON: string) Method to import a HMAC key that is stored as a JSON
string.
ImportKey(ABinary: TJSUint8Array) Method to import a HMAC key that is stored as binary
data.
ImportKey(ARaw: TJSArrayBuffer) Method to import a HMAC key that is stored as an
array buffer.
Sign(AText: string) Sign AText with the class’s public key and algorithm.
Sign(ABinary: TJSUint8Array) Sign ABinary with the class’s public key and algorithm.
Verify(ASignature: TJSArrayBuffer; AData:
TJSArrayBuffer)
Verify AData with ASignature, using the class’s private
key and algorithm.
Events for TWebHMACSignature
Property Description
OnError Event triggered when there’s a Promise rejection.
OnKeyCreated Event triggered when a key is created.
OnKeyExportedJSON Event triggered when a key is exported as a JSON
string.
OnKeyExportedRaw Event triggered when a key is exported as an array
buffer.
OnKeyImported Event triggered when a key is imported.
OnSigned Event triggered when data is signed.
OnVerify Event triggered when data is verified
TWebPushNotifications
Below is a list of the most important properties methods and events for the
TWebPushNotifications. Push notifications are tested and supported in: Chrome, Firefox,
Firefox Developer Edition, Edge, Opera, and on Android: Chrome, Firefox, Opera,
Samsung Browser.
245
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
Registration for push notifications
The RegisterServiceWorker procedure first registers the service worker, then
automatically retrieves a subscription that is tied to that service worker. If the
AutoRegisterSubscription property is set to True, then it automatically registered the
subscriptios on the server via the given RegisterSubscriptionURL. The UserID is used as
an identificiation, which means it should be unique to the user. At the same time a
single UserID can be registered from different devices.
view plain text
1. procedure TForm1.WebButton1Click(Sender: TObject); 2. begin 3. WebPushNotifications1.RegistrationUserID := 'UserID'; 4. WebPushNotifications1.RegisterServiceWorker; 5. end;
Multiple users on the same device It’s possible that there are multiple users who share the same device. They might be
interested in different topics or the notifications are personalized and we want to avoid
sending a notification to a user who is not entiteled to see it (for example: email
services). This can be resolved by introducing a login-logout mechanism. We can send
the notifications as long as the user is logged in (= “Active”). For this purpose the data
store has a UserActive boolean field which identicates if the user is active or not. By
default this value is always set to True. If you’d like to modify this value, you can do so
by using the Logout or Login methods.
view plain text
1. procedure TForm1.WebButton1Click(Sender: TObject); 2. begin 3. //Request the server to set UserActive to False 4. //for the given RegistrationUserID: 5. WebPushNotifications1.RegistrationUserID := 'UserID'; 6. WebPushNotifications1.Logout; 7. end; 8. 9. procedure TForm1.WebButton2Click(Sender: TObject); 10. begin 11. //Request the server to set UserActive to True 12. //for the given RegistrationUserID: 13. WebPushNotifications1.RegistrationUserID := 'UserID'; 14. WebPushNotifications1.Login; 15. end;
Properties for TWebPushNotifications Property Description
AutoGetSubscription: Boolean Get the subscription automatically when the VAPID
246
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
Property Description
key is received.
AutoRegisterSubscription: Boolean Automatically register subscription.
LoginURL: string URL for setting the user’s active state to True.
LogoutURL: string URL for setting the user’s active state to False.
Registration:
TJSServiceWorkerRegistration
Provides access to the service worker registration
object.
RegistrationUserID: string A unique ID for the user (such as email).
RegistrationUserData: string Used for setting topics. Use ',' as a separator between
the topics.
RegisterSubscriptionURL: string URL for registering the subscription.
ServiceWorkerURL: string URL for the service worker.
Subscription: TJSPushSubscription Provides access to the PushSubscription object.
UnregisterSubscriptionURL: string URL for unsubscribing a subscription.
VapidPublicKey: string VAPID public key. Can be fetched from the server
using VapidPublicKeyURL.
VapidPublickeyURL: string URL to fetch the VAPID public key if it’s not set yet.
Methods for TWebPushNotifications
Property Description
CreateNewSubscription Method to create a new subscription.
GetVapidPublicKey Method to get the VAPID key from the server.
Login Method to set the user’s active state to True in the
data store.
Logout Method to set the user’s active state to False in the
data store.
RegisterServiceWorker Method to register the service worker with the
browser’s push service. It creates a subscription if
needed.
RegisterSubscription Method to register a subscription on the server.
Unsubscribe(aAll: Boolean = True) Method to unregister a subsription on the server. By
default all the subscriptions will be unsubscribed that
are connected to the UserID.
247
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
Events for TWebPushNotifications
Property Description
OnGetRegistration Event triggered when service worker registration is
available.
OnGetSubscription Event triggered when a subscription is available.s
OnGetVapidPublicKey Event triggered when the VAPID public key is fetched
from the server.
OnSubscriptionRegistered Event triggered when a subscription is sucessfully
registered.
OnUnsubscribed Event triggered when the user has unsubscribed.
248
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
TMS WEB Core 3D
TMS WEB Core 3D component library can be used to create impressive 3D WebGL
applications in Delphi. It consists of several components to display interactive 3D Charts and
Models in a Web Application.
These components internally use WebGL through Three.js, an open source, cross-browser
JavaScript library. The best thing is that one need not know WebGL or Three.js in order to make
basic 3D applications with these components. At the same time, if the need arises, direct
Three.Js API calls can be made in Delphi code through a JS interface library provided for the
purpose.
Your first 3D Chart application
Create a standard TMS Web Application in the Delphi IDE by choosing File, New, Other, TMS
Web Application.
A new web form is created. Go to the Tool Palette and select the TWebThreeJsChart
component from the “TMS Web 3D” section and drop it on the web form.
249
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
Now the only thing remaining is to include the proper Three.js library file. Right-click on the
Project and select “Manage JavaScript Libraries.”
Choose the “Three JS (3D)” library and click OK.
Save and Run the project. You will see a Default Chart come up in the browser. Try to rotate the
chart with the mouse and zoom with the mouse wheel. You get that interactive functionality out
of the box, without writing any code!
250
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
You can now customize the data series for this chart in the code of the form as per your
requirement. For some sample code, please see the demo project under the TMS folder Demo,
3D, Chart. The demo code is discussed in the next section.
3D Business Chart Applications As shown above, the TWebThreeJsChart component can be used to create 3D Business Chart
applications that draw bar, line or area charts.
The 3D Bar Chart Demo After creating a quick 3D chart application as shown in the previous section, the next step is to
try and understand the customization code in the Chart Demo so that you can code your own
custom data series for a similar 3D bar chart.
First of all, open the Chart Demo under the TMS folder Demo, 3D, Chart and run it. Move the
mouse over the chart items and you will see them glow with a Text Popup showing the value.
Try out various features given in the Demo before we discuss the code.
251
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
The Terminology for Axes
Before coding the data series, you will need to understand how each axis is named. The above
picture shows the name of each Axis.
Creating the Data Series object
Please look at the Web Form code of the procedure LoadSampleSeries1.
var
aSeries: TThreeJsChartSeries;
begin
aSeries := TThreeJsChartSeries.Create(
TJSArray.New('East', 'West',
'North', 'South'),
TJSArray.New('Q1', 'Q2', 'Q3',
'Q4')
);
The constructor of the Series object expects 2 parameters as the Axis Labels to be passed in
two JS Arrays: 1. Legend Axis Labels 2. Category Axis Labels
Then the data is added in the form of each Legend Row as an array in the following code. The
Demo uses hard coded data but you can have your own logic to obtain the data for each
Legend row.
aSeries.addLegendRow('East',
TJSArray.New(41834, 52835, 46563,
60184));
aSeries.addLegendRow('West',
TJSArray.New(48842, 62964, 54243,
73796));
...
The rest of the Series set up code is easy to understand:
252
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
aSeries.valueAxisMarkMaximum := 100000;
aSeries.valueAxisMarkStep := 20000;
aSeries.valueFormatFloat := '$#,##0';
aSeries.valueAxisFormatFloat := ''; //use the above
aSeries.Title := 'Sales by Region';
aSeries.ValueAxisTitle := 'Quaterly Sales';
aSeries.LegendAxisTitle := 'Regions';
aSeries.CategoryAxisTitle := 'Quarters';
threeJsChart.Series := aSeries;
Notable points:
The Format to show values on the chart items can be different from the format to show
values on the Value Axis marks. But the above code uses the same format for both.
The series object is finally assigned to the Series property of the Chart component. The
above Load procedure is called from the WebFormCreate event and then the chart is
displayed by the following code.
threeJsChart.clearChart;
threeJsChart.createChart;
The chart component is smart enough to decide on proper axes length and marks based on the
data. But you can set the dimensions of items too, resulting in a bigger or smaller chart area.
Other features shown in the Demo
You can run and explore the Chart Demo to see many other features demonstrated:
Built in objects: Many built in objects like the Camera, Spotlight, etc are automatically added by the component. You don’t have to write any code.
Interactive Rotation and Zoom with the mouse and mouse wheel: You get this functionality out of the box, without writing any code.
Choice of Chart Type: Chart items can be shown as Bars, Cylinders, Cones, Lines or Areas.
Auto colors: Colors are assigned automatically to Legend rows. You can specify custom colors too.
Dimension Properties for items: Item Width, Space and Plot Width (for Line and Area charts) can be changed. The dimensions are in WebGL units. The component is smart enough to determine the length of bottom 2 axes automatically based on the item dimensions. But you can override the default length of Value Axis by a separate property.
Transparency of Chart Items: can be set with additional Opacity property. Optional Legend display: can be specified to associate colors with Legend items. Auto Marking of Value Axis: The demo code does not use this feature by default. But
you can switch on this checkbox to see its effect. This is a smart feature that determines the marks on the Value scale based on the data.
253
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
Other Niceties available: o Auto rotate axis labels to always face the Camera o Show value popups on all items o Transparency and opacity control
Events
The following events are available:
Interaction with Items: OnItemClick, OnItemExit, OnItemDblClick, OnItemMouseEnter, OnItemMouseLeave, OnItemMouseMove
Interaction with other areas of the chart: OnClick, OnDblClick
For example, the Demo uses the above events to show features like displaying value popups on
items and glowing of items when the mouse is moved over the items or when the items are
clicked.
3D Math Chart Applications The component TWebThreeJsMathChart is available to create 3D Math Chart applications that
draw Scatter or Surface charts.
The 3D Scatter Chart Demo Open this Demo under the TMS folder Demo, 3D, Scatter and run it.
The Terminology for Axes
254
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
Before coding the data series, you will need to understand how each axis is named in a Math
chart. This is different from the bar chart seen earlier that uses business terminology. The above
picture shows the name of each Axis.
Creating the Data Series object
Please look at the Web Form code of the procedure LoadSampleSeries1. The Series class
is TThreeJsMathChartSeries. The code that passes X, Y, Z data to the series is:
aSeries.addData(x, y, z, psSphere, name,
aPointSize, aPointColor)
In addition, the shape of the scatter point, its name, its size and color can be passed. The rest of
the code to set the Series and to create the chart is similar to the earlier Chart Demo.
Other features shown in the Demo
Other features demonstrated are similar to those described for the earlier Chart Demo except
for the following differences:
Auto Marking feature now determines the length and scale marks for all 3 axes based on the Series data. The Demo uses this feature. This feature saves considerable effort for a typical Math Chart application to pre determine and set the length and scale marks for each axis.
Improved Legend: The Legend in the scatter chart shows the shape of the point in addition to the color.
The Events used in the Demo are also similar to those described for the earlier Chart Demo.
The 3D Surface Chart Demo This demo demonstrates the features of TWebThreeJsMathChart component used to draw a
surface chart based on an Equation. Hence, it is called a Parametric Surface Chart.
Open this Demo under the TMS folder Demo, 3D, Surface and run it.
255
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
How it works
In the Demo, you can select a Surface Equation from a dropdown list to draw the surface chart
accordingly. For example, here is another Surface Chart produced by the Demo:
Creating the Data Series object
Please look at the Web Form code of the procedure LoadEquation. The Series class is same as
that for earlier Scatter Demo– TThreeJsMathChartSeries. But the procedure to add the data
256
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
for surface chart is different:
aSeries.addParametricSurface(xMin, xMax,
yMin, yMax, resolution, @surfaceCallBack);
The ranges of values for X and Y are passed along with a Delphi Parametric callback function.
The Chart component does the following:
Generates X and Y values based on the parameters passed
For each pair of values, calls back the Parametric function of the application to get the
value of Z.
The callback function used in the Demo is:
function TForm2.surfaceCallBack(x, y: double): double;
begin
case cbSeries.ItemIndex of
1: Result := abs(x-y);
2: Result := -x*x - y*y + 6;
3: Result := sin(x)*x+cos(y)*y;
4: Result := 2 * sqrt(x*x/3 + y*y/8);
5: Result := sqrt(abs(1.5 * (x*x/3 -
y*y/4) - 6));
6: Result := 8 * (sin(x) + cos(y));
else
Result := x*x + y*y;
end;
end;
The function uses the index of the drop down list to select an equation and return a Z value
accordingly.
Other features shown in the Demo
You can run and explore the 3D Surface Chart Demo to see some more features provided for
the Surface chart:
Show Wire Frame: The cells of the wire frame depend on the Resolution value. Show Wire Frame Texture: This draws a wire frame texture directly on the colored
surface of the chart. With the default high resolution, you may not be able to see this. Try a lower resolution value to see how this works.
Use Custom Colors and Texture.
3D PaintBox Applications
257
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
The TWebThreeJsPaintBox component lets you create arbitrary 3D Scenes containing often
used objects like Cubes, Spheres, Text and more. In fact, these primitives come from the base
class and the already created Chart components are great examples of the kind of applications
that are possible.
The 3D PaintBox Demo You can open the PaintBox Demo under the TMS folder Demo, 3D, Paintbox and run it.
The Terminology for Axes
This component uses standard WebGL axes. These are shown in the picture above. You need
to provide the positions of objects accordingly. All dimensions and positions are in WebGL units.
The code for adding objects
The objects are added to the scene in the OnCreate event of the Web Form with a code that
looks like the following. The initial parameters for each object are dimensions, followed by the a
TColor, followed by X, Y, Z position.
// Add a Bar with color $ff7777
anObject := threeJsPaintBox.AddBar(
2, 3, 2, $ff7777, 8, 7, 10);
anObject.name := 'bar1';
// Add a cube
anObject := threeJsPaintBox.AddCube(3,
$00FF00, 16, 5, 8);
anObject.name := 'cube2';
// Add a Sphere
anObject := threeJsPaintBox.AddSphere(2,
$0000ff, 10, 8, 4);
anObject.name := 'sphere1';
// Add a Cylinder
anObject := threeJsPaintBox.AddCylinder(1,
258
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
1, 7, $00ffff, 4, 3.5, 13);
anObject.name := 'cylinder1';
// repaint the box to show new objects
threeJsPaintBox.Invalidate;
There are many more parameters for above functions with defaults, for example, to specify
transparency. But the Demo code does not use them and default values are used for those.
You can make quite impressive 3D applications by creating objects as shown above. The 3D
Chart components discussed earlier are examples of such applications.
Direct Use of the Three.Js API
Object creation methods like “AddCube” return a 3D Object of the type TThreeJsObject3D.
Such types are Three.Js objects made available to you in Delphi syntax via the specially coded
JS Interface unit “Libthreejs.”
The end result is that you can directly use the methods and properties of these objects as
documented in Three.Js documentation. For example, to change the position of an object, you
will change its “position” property directly, in Delphi code.
All the methods that expect a color as a parameter have been modified to use TColor of Delphi
for the convenience of Delphi developers even though Three.Js internally uses the Web color
codes.
Sample code for Other features
Please run this Demo and inspect the source to see how you can perform these actions on
objects in your own code.
Built in objects: Many built in objects like the Camera, Spotlight, etc are automatically added by the component. You don’t have to write any code.
Interactive Rotation and Zoom with the mouse and mouse wheel: You get this functionality out of the box, without writing any code.
Rotation by code: Rotate the whole scene around the origin by RotateLeft and RotateRight methods of the component. The demo uses Rotate trackbars to show this feature.
Change Center of Viewing: To make another object’s position as the center of viewing/rotation, use the method SetTargetViewVector and pass the position of another object. This is demonstrated by the button “Set Cube2 as Center of Viewing.”
Panning by code: Similarly, you can pan the camera by Pan* methods of the component. The demo shows this feature by the 4 Pan buttons.
Zooming by code: Use the ZoomIn method. This is shown by the Zoom trackbar. Save orientation: Suppose you want to save the exact orientation of the scene with
respect to the camera and then restore it later. A SaveState method is provided for this purpose. Similarly, a ResetState restores the orientation to a saved state. The Demo shows this feature by “Save Orientation” and “Restore Orientation” buttons.
Debugging arrow: Sometimes, you may want to know the exact position of certain invisible objects like the SpotLight and its target. A method ShowDebugArrow is
259
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
provided for this purpose. The demo shows this feature via the button “Show Arrow from Spotlight to Its Target.”
Moving an object: If you have the handle of an object, you can change its position property directly. This is shown by the buttons “Move Spotlight Up/Down” where the object used is the Built In SpotLight object. You can use such code on any object that you have saved as a variable. The bottom trackbars are used in the Demo to move the object selected in the List “Operations on Object.”
Events
The following events are available:
Interaction with Objects: OnItemClick, OnItemExit, OnItemDblClick,
OnItemMouseEnter, OnItemMouseLeave, OnItemMouseMove
Interaction with other areas of the Scene: OnClick, OnDblClick
3D Model Applications
The TWebThreeJsModelBox component lets you create or load arbitrary 3D Models from
model files. In addition to the earlier described PaintBox methods, it contains methods to add
Obj/Mtl or GLTF models from model files and can Export the scene to GLTF model files.
“ThreeJS Models (3d)” JS Library is required If you use the TWebThreeJsModelBox component in an application, you should include the JS
Library “ThreeJS Models (3d)” by using the same Project right-click menu “Manage JavaScript
Libraries” that is described in an earlier section “Your first 3D Chart application.”
The 3D Model Demo Since this Demo needs to load models from data files, an extra second step is required to copy
those files as described below.
Open the Model Demo under the TMS folder Demo, 3D, Model. Copy the 2 subfolders from the Data folder of the project to the web output folder. Now build and run the Demo. Select the Model “R2 D2 Robot” at the top and click on “Load Obj/Mtl Object” to get a
result similar to the following picture.
260
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
The Code to Load OBJ/MTL Models
You will see a code like the following to add objects from OBJ/MTL files:
threeJsModelBox.AddObjectMtl('model-R2D2',
'r2-d2.obj', 'assets/',
'r2-d2.mtl', 'assets/',
'assets/');
The first parameter is the name given to the model followed by the OBJ and MTL model file
names and various folders accompanying them.
The code to Load GLTF Model
You will find this in the action code of Load GLTF Model button. The call is AddObjectGltf that is
much simpler because only one GLTF file needs to be specified with an optional path for the
accompanying folder, often not needed.
Getting the Object in OnObjectLoad event
Note that the loading of the Model is asynchronous and requires internal loading of many other
files such as textures. So the above Add methods do not return an Object immediately.
Instead, you have to use the event OnObjectLoad that hands over the object to you. There, you
can take other actions on the object like rotating it if needed. For example, if you see the code
261
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
for this event,you will see a particular “Gothic Fence” object being rotated after loading because
its default loaded view is horizontal, flat.
Additional features for Models
Auto Position Object after Loading by the method BringObjectInFullView
A third party 3d model object can be of any size. The Three.Js code to properly position the
camera so as to bring the object of any size in full view is complicated. Hence, the component
implements a method BringObjectInFullViewthat does this job well.
This method is used in the Demo’s OnObjectLoad event to bring the object properly in view.
You can see the difference made by this auto positioning method by unchecking the option
when loading the R2 D2 model. The model is large and if you do not use the above method, you
can only see the feet of the Robot after a load. You need to zoom out to see the full Robot
which is big.
Additional Lights and Gamma Correction
To demonstrate loading of GLTF models, the Demo uses an already exported GLTF file from
the Demo itself for the same R2 D2 Robot. Just click on the button “Load GLTF File” to load it.
You will notice that the loaded model appears darker as compared to OBJ/MTL loaded result.
This is so because GLTF models process the model as per their own algorithms needed to
store everything in one file. Hence, GLTF models often need more light and something called a
“Gamma Correction.” Hence,please switch on those options in the Demo, and then reload to
see how it works better.
The above options use the component method AddLights and the property
UseGammaCorrection.
Changing colors of lights
The Model Demo also shows sample code for changing color of various lights, including the
built-in SpotLight and AmbientLight.
262
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
TWebMyCloudDbClientDataset Component
Introduction
The myCloudData.net service is an instantly available, secure and worry-free cloud data storage
service.
The component TWebmyCloudDbClientDataset makes it easy for a Delphi TMS Web
Application to use database tables on myCloudData.net service by a familiar syntax of using
ClientDataSet. It also allows a seamless integration of the myCloudData.net data tables with
data-aware components like TWebDBGrid. All the database operations can be done in the
standard Delphi way through the TWebmyCloudDbClientDataset component.
All you need to do is specify the myCloudData properties and add the field definitions either in
design more or in code in a standard Delphi syntax. Then connect a DataSource and Data
components to it and make the dataset active.
Your first web application using TWebmyCloudDbClientDataset
Set up your myCloudData project in the myCloudData console
Follow these steps:
1. Navigate to https://www.myclouddata.net/ and sign up for myCloudData if not already done
2. Go to My Account → Control Panel
3. Create a new Table and add the required Fields
4. Note the Table name. This will be used for the TableName property later. Go to My Account
→ API Key
5. Enter your myCloudData password and click “Get your App Key”
6. Note the App Key and App Callback URI values. These will be our
properties AppKey and AppCallbackURL to be used later later. Note the App Secret value. This
will be our property AppSecret to be used later. Note that the AppCallbackURL should be set to
the URL of your web application. This can be different in debugging (typically something like
http://localhost:8000/Project1/Project1.html) as from a deployed application. You might as such
need to adapt the callback URL for deployment!
Create a TMS Web Application
Create a standard TMS Web Application in the Delphi IDE by choosing File, New, Other, TMS
Web Application. A new web form is created.
Set up the TWebmyCloudDbClientDataset component
263
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
Go to the Tool Palette and select the TWebmyCloudDbClientDataset component from the “TMS
Data Access” section and drop it on the web form.
Specify the Component Properties
Set up the properties either in code or in the Object Inspector by right-clicking on the “Fields
Editor”:
AppKey: from the “My Account → API Key” section of myCloudData.net
AppCallbackURL: from the “My Account → API Key” section of myCloudData.net
TableName: from the “My Account → Control Panel” section of myCloudData.net
Create the Fields or Properties of each object in the Object Store
The DataSet field definitions need to be set up either in Object Inspector by right-
clicking on the “Fields Editor” or in the WebFormCreate event code.
Select the fields in the Object Inspector
Follow these steps:
1. Right-click the TWebmyCloudDBClientDataset and select “Fetch Fields”
2. Enter the Client ID (AppKey), Client Secret (AppSecret) and CallbackURL (A local URL
is required here, for example: http://127.0.0.1:8888 ) values. Note that the TableName is
retrieved automatically from the TableName property.
3. Click the “Fetch” button and follow the authentication instructions. If the process is
successfull, a dialog with the list of available fields is displayed.
4. Right-click the TWebmyCloudDBClientDataset and select “Fields Editor”
5. Select the required fields
Create the Fields in code
Here is an example of adding the field definitions in code in the OnCreate event. In the
Object Inspector, double-click on OnCreate event of the Web Form. This creates an
event handler procedure WebFormCreate. The following code in it sets up the field
definitions. What fields you add are based on how you defined them for the Table in
myCloudData.net. Note that _ID field must be defined as data type ftString.
1. myCloudClientDataSet.FieldDefs.Clear; 2. myCloudClientDataSet.FieldDefs.Add('_ID', ftString); 3. myCloudClientDataSet.FieldDefs.Add('note',ftString); 4. myCloudClientDataSet.FieldDefs.Add('date',ftDate); 5. myCloudClientDataSet.Active := True
Add Data Components that connect to the DataSet
264
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
Now select and drop a TWebDataSource, TWebDBGrid and TWebDBNavigator component on
the Web Form.
Set up the DataSource and Data components
Set the DataSource’s DataSet property to WebMyCloudDbClientDataset1. Then set the
DataSource property of the grid and navigator to point to TWebDataSource1.
Set up the Columns of the DBGrid
Do that by clicking on the Columns property of the DBGrid.
Set up a New Record event
Since we will be adding New Records with the DB Navigator, we need to set up the default
values of the record. For this, we set up an OnNewRecord event procedure for the myCloudDb
Client Data Set in the Object Inspector and type the following code in it.
procedure TForm1...NewRecord(DataSet: TDataSet);
begin
DataSet.FieldByName('note').AsString := 'New Note';
DataSet.FieldByName('date').AsDateTime := Date; // set to today
end;
Run the Web Application
Now you can build and run the application. When you run it for the first time, the component
automatically asks you to login by using your credentials for myCloudData.net. The DB Grid will
appear empty as there are no records. Try adding new records with the Navigator and see how
it works.
Todo List Demo
Please find this demo in the folder Demos. This Demo connects the component to a Tasks table
to show you the Tasks with their status, description and dates.
Additional features in this Demo
Add, Update, Delete through separate data aware controls and buttons
The Demo allows you to perform add, update, delete operations through datbase field editor
controls and buttons instead of through the Navigator.
Sorting on columns
265
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
We want to be able to sort on any column of the DB Grid by clicking on the header of the
column. So we need to be able to read all the records in the order of that field. For this, we need
to add a Sort Field Definition specifying the field to be sorted on. This is done in the event
procedure GridTasksFixedCellClick.
1. myCloudClientDataSet.ClearSortFieldDefs; 2. myCloudClientDataSet.AddSortFieldDef(LIndex, gridTasks.Columns[ACol].SortIndicator = si
Ascending); 3. 4. myCloudClientDataSet.Refresh;
The first parameter to AddSortFieldDef call is the field name and the second parameter is a
boolean flag that is true for ascending order and false for descending order. The Demo uses its
own logic to pass this information and then Refreshes (reloads) the data in the desired order.
Updating, inserting and deleting data
This Demo also shows an example of connecting Data components like CheckBox or a Memo
to the database so that those fields can be edited in the current record. After editing, a call to
Update from the update button takes care of committing the changes to the cloud database.
Similary, the Demo has examples of Inserting a new record and Deleting the current record by
respective calls.
Troubleshooting
Exceptions are displayed in a red alert message at the bottom of the web page. You can also
look at the Browser Console for error messages.
If you start getting authentication errors when the application was working earlier, it’s most
probably a changed IP address. In any case, the first thing you can try is clear the Local Storage
which is under Applications in Chrome Developer tools.
Reference Section
TWebMyCloudDbClientDataset
Below is a list of the most important properties and methods of TWebIndexedDbClientDataSet
component.
Properties of TWebIndexedDbClientDataSet
Property Description
Active Set this to True to activate the DataSet. Field definitions must be
present along with other properties described below.
AppKey Get from the “API Key” section of myCloudData.net.
266
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
Property Description
AppCallbackURL Get from the “API Key” section of myCloudData.net.
TableName Specify a table name to connect to from the “Control Panel” section
of myCloudData.net.
OnError This is an event property that notifies the application of any errors
from myCloudData.net. The event can be set up at design time in
Object Inspector by double-clicking on it. If the Application does not
subscribe to this event, an Exception is raised on such errors. If
subscribed, the application can then decide what to do. For example,
show error, raise exception or take some corrective action. Note that
hard errors (Delphi Exceptions) are not passed in this event. Rather,
they cause an Exception that appears in a red alert. But in any case, all
errors are always logged to the browser console.
Methods of TWebmyCloudDbClientDataset
Only the methods specific to myCloudData are listed below. Other methods from the base
DataSet classes are used in the standard way.
Refresh
procedure Refresh(Force: Boolean=False);
Refresh reloads all the objects from the database. If AddSortFieldDef has been used to set up
sorting definitions, the objects are loaded in the order specified. In addition, the current record
pointer is restored after the Reload which is convenient for the user interface of the web
application. Refresh is internally postponed till all the pending updates started asynchronously
are finished. The Force parameter ignores the pending updates and forces a reload.
AddSortFieldDef and ClearSortFieldDefs
Use AddSortFieldDef to add one or more sort definitions for loading the data. Before using a
series of these calls, you must clear all sort definitions by calling ClearSortFieldDefs.
procedure AddSortFieldDef(aField: String; isAscending: Boolean));
Where
aField - the field name for the sorting order
isAscending - Set True for ascending order.
267
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
ClearTokens
After a successful authentication & authorization, the TWebmyCloudDbClientDataset will store
the obtained access tokens in the local storage so that a next time, this does not need to be
obtained again. If for some reason this needs to be removed, call
procedure ClearTokens;
268
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
TWebFirestoreClientDataset Component
Introduction
The component TWebFirestoreClientDataset makes it easy for a Delphi TMS Web Application
to create and use database tables (called collections) on Google Cloud Firestore noSQL
database by a familiar syntax of using ClientDataSet. It also allows a seamless integration of the
Firestore data collections with data-aware components like TWebDBGrid. All the database
operations can be done in the standard Delphi way through the TWebFirestoreClientDataset
component.
All you need to do is specify the Firestore properties and add the field definitions either in design
time or in code in a standard Delphi syntax. Then connect a DataSource and Data components
to it and make the dataset active.
Your first web application using TWebFirestoreClientDataset
Set up your Firestore project in the Firebase console
Follow these steps:
1. Navigate to https://console.firebase.google.com/ and sign up for Firebase if not already done
2. Create a new project in Firebase or select an existing project
3. In the left menu, select Database
4. Create a Firestore database. Choose the options “Start in test mode” and let the region be
default
5. Don’t create a collection as our ClientDataSet component will create it if it doesn’t exist
6. Click on the tab “Rules” above and change the rules to allow only authenticated users to
access the database:
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read, write: if request.auth != null;
}
}
}
269
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
7. Click on Authentication in left menu and select Sign-in method as Google. Enable it.
Note the authorized domain with firebaseapp.com. For example, test-15a3d.firebaseapp.com.
This will be our AuthDomain property to be used later.
If your TMS web application will run on localhost, make sure localhost is added to the list.
If your TMS web application will run on a remote webserver, make sure the domain name is
added to the list.
8. Click on the Settings Gear Icon next to Project Overview on the left. Note the Project ID and
Web API Key values. These will be our properties ProjectId and ApiKey to be used later.
Create a TMS web application
Create a standard TMS Web Application in the Delphi IDE by choosing File, New, Other, TMS
Web Application. A new web form is created.
Enable the Firestore JavaScript libraries for your project. From the project context menu in the
IDE, select “Manage JavaScript libraries” and select Google Firestore
Set up the TWebFirestoreClientDataset component
270
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
Go to the Tool Palette and select the TWebFirestoreClientDataset component from the “TMS
Data Access” section and drop it on the web form.
Specify the Component Properties
Set up the properties either in code or in the Object Inspector as given below:
ApiKey: as obtained above in step 8 above.
AuthDomain: as obtained above in step 7 above.
ProjectId: as obtained above in step 8 above.
CollectionName: select a name of the collection that you want to use
KeyFieldName: specify the name of the key field
AutoGenerateKeys: set to True
SignInRequired: set to True as we set up this requirement in authentication rules above
Create the Fields or Properties of each object in the Object Store
The DataSet field definitions need to be set up either in code or in the Object Inspector by right-
clicking on the “Fields Editor”.
Select the fields in the Object Inspector
Follow these steps:
1. Set up your Google App in the Google Developers Console
(https://console.developers.google.com/)
1a. Go to “Credentials” → “Create Credentials” “Create OAuth client ID”
1b. Select “Web Application”, enter the Authorized URL: http://127.0.0.1:8888 and click “Create”
1c. The Client ID and Client Secret values are displayed
1d. Go to “Dashboard” and enable the required API(s)
2. Right-click the TWebFirestoreClientDataset and select “Fetch Fields”
3. Enter the Client ID, Client Secret and CallbackURL values from step 1. Note that the
CollectionName and ProjectID are retrieved automatically from the CollectionName and
ProjectID properties.
4. Click the “Fetch” button and follow the authentication instructions. If the process is
successfull, a dialog with the list of available fields is displayed.
5. Right-click the TWebFirestoreClientDataset and select “Fields Editor”
6. Select the required fields
271
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
Create the Fields in code
Here is an example of adding the field definitions in code in the OnCreate event. In the Object
Inspector, double-click on OnCreate event of the Web Form. This creates an event handler
procedure WebFormCreate. Type the following code in it that sets up the fields and then makes
the DataSet active.
fireStoreClientDataSet.FieldDefs.Clear;
fireStoreClientDataSet.FieldDefs.Add(id', ftString);
fireStoreClientDataSet.FieldDefs.Add('note',ftString);
fireStoreClientDataSet.FieldDefs.Add(('date',ftDate);
fireStoreClientDataSet.Active := True
Add Data Components that connect to the DataSet Now select and drop a TWebDataSource, TWebDBGrid and TWebDBNavigator component on
the Web Form.
Set up the DataSource and Data components
Set the DataSource’s DataSet property to WebFirestoreClientDataset1. Then set the
DataSource property of the grid and navigator to point to TWebDataSource1.
Set up the Columns of the DBGrid
Do that by clicking on the Columns property of the DBGrid.
Set up a New Record event
Since we will be adding New Records with the DB Navigator, we need to set up the default
values of the record. For this, we set up an OnNewRecord event procedure for the Client Data
Set in the Object Inspector and type the following code in it.
procedure TForm1...NewRecord(DataSet: TDataSet);
begin
DataSet.FieldByName('note').AsString := 'New Note';
DataSet.FieldByName('date').AsDateTime := Today;
end;
Run the Web Application Now you can build and run the application. When you run it in a browser that is not
logged in to Google already, the component automatically asks you to login by using
your Google credentials. The DB Grid will appear empty as there are no records. Try
adding new records with the Navigator and see how it works.
272
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
Todo List Demo
Please find this demo in the folder Demos. This Demo connects the component to a Tasks table
to show you the Tasks with their status, description and dates.
Additional features in this Demo
Add, Update, Delete through separate data aware controls and buttons
The Demo allows you to perform add, update,delete operations through datbase field editor
controls and buttons instead of through the Navigator.
Sorting on columns
We want to be able to sort on any column of the DB Grid by clicking on the header of the
column. So we need to be able to read all the records in the order of that field. For this, we need
to add a Sort Field Definition specifying the field to be sorted on. This is done in the event
procedure GridTasksFixedCellClick.
fireStoreClientDataSet.ClearSortFieldDefs;
fireStoreClientDataSet.AddSortFieldDef(LIndex, gridTasks.Columns[ACol].SortIndicator = siAscen
ding);
fireStoreClientDataSet.Refresh;
The first parameter to AddSortFieldDef call is the field name and the second parameter is a
boolean flag that is true for ascending order and false for descending order. The Demo uses its
own logic to pass this information and then Refreshes (reloads) the data in the desired order.
Updating, inserting and deleting data
This Demo also shows an example of connecting Data components like CheckBox or a Memo
to the database so that those fields can be edited in the current record. After editing, a call to
Update from the update button takes care of committing the changes to the cloud database.
Similary, the Demo has examples of Inserting a new record and Deleting the current record by
respective calls.
Troubleshooting
Normally, you will see any exceptions raised in a red alert message at the bottom of the web
page. You can also look at the Browser Console for error messages.
For any debugging, if you need to browse or edit the actual collection on the Cloud, you can do
that in Firestore console. Note that individual records or objects under a Collection are called
Documents in Firestore terminology.
TWebFirestoreClientDataset reference
273
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
Below is a list of the most important properties and methods of TWebFirestoreClientDataset
component.
Properties of TWebFirestoreClientDataset
Property Description
Active Set this to True to activate the DataSet. Field definitions must be
present along with other properties described below.
ApiKey Get from the “Project settings” section of Firebase console as
described earlier
AuthDomain Get from the Authentication section of Firebase console as
described earlier
CollectionName Specify a collection name to connect to in Firestore
KeyFieldName Set the name of the primary key field
AutoGenerateKeys Recommended to set to True to let Firestore generate keys for
new records
ProjectId Get from the “Project settings” section of Firebase console as
described earlier
SignInRequired Set to True if only authenticated users are allowed access as per
the Rules set up for the database. In this case, the component
automatically tries to login on the first access.
OnError This is an event property that notifies the application of any errors
from Firestore. The event can be set up at design time in Object
Inspector by double-clicking on it. If the Application does not
subscribe to this event, an Exception is raised on such errors. If
subscribed, the application can then decide what to do. For
example, show error, raise exception or take some corrective
action. Note that hard errors (Delphi Exceptions) are not passed in
this event. Rather, they cause an Exception that appears in a red
alert. But in any case, all errors are always logged to the browser
console.
Methods of TWebFirestoreClientDataset
Only the methods specific to Firestore are listed below. Other methods from the base DataSet
classes are used in the standard way.
Refresh
274
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
procedure Refresh(Force: Boolean=False);
Refresh reloads all the objects from the database. If AddSortFieldDef has been used to set up
sorting definitions, the objects are loaded in the order specified. In addition, the current record
pointer is restored after the Reload which is convenient for the user interface of the web
application. Refresh is internally postponed till all the pending updates started asynchronously
are finished. The Force parameter ignores the pending updates and forces a reload.
AddSortFieldDef and ClearSortFieldDefs
Use AddSortFieldDef to add one or more sort definitions for loading the data. Before using a
series of these calls, you must clear all sort definitions by calling ClearSortFieldDefs.
procedure AddSortFieldDef(aField: String; isAscending: Boolean));
Where * aField - the field name for the sorting order * isAscending - Set True for ascending
order.
275
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
jQuery components
TMS WEB Core includes wrapper for the jQWidgets jQuery controls. This UI control can be
obtained from: www.jqwidgets.com
To get started with the jQWidgets controls, it is important that the JavaScript and CSS libraries
for these controls are added to the project. This is done by including the JavaScript libraries and
CSS files to the main project HTML file. To get started, either open the main project HTML file
from the Delphi IDE and add in the HTML file the script and CSS file references.
In the jQWidgets demo application, this is for example:
To make it easier for development and debugging, TMS WEB Core made a development
version ready. To add jQWidgets UI control script references to your project, open the “Manage
JavaScript libraries” menu item from the context menu in the Delphi IDE project manager and
make sure to add first the jQuery 3.1.1 library reference followed by the jQWidgets development
276
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
library. There is a reference for the jQWidgets core UI controls and an additional separate
reference for the jQWidgets grid:
This adds the needed core jQWidgets library references to the project main HTML files. When
you then add jQWidgets UI controls to the form, these controls will dynamically add their
required additional jQuery files to the project HTML file.
Note that the jQWidgets library references added this way are for development purposes only!
For a final release, it is required that you put the jQWidgets library files on your server and link
to script files on your server!
TWebJQXButton
Description
Below is a list of the most important properties methods and events for TWebJQXButton.
Represents a button with optional image.
277
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
Designtime
Runtime
HTML template tag
The HTML tag the component can be associated with in an HTML template. Assign the ID
attribute with a unique value and set the identical value to the ElementID property. Detailed
information can be found in the Use of HTML templates topic.
HTML tag <DIV ID=”UniqueID”></DIV>
ElementID UniqueID
Properties for TWebJQXButton
Caption Sets the caption text of the button
CaptionPosition Sets the position of the caption text
CaptionImageRelation Sets the position of the image relative to
the caption text
ElementClassName Optionally sets the CSS classname when
styling via CSS is used
ElementID Optionally sets the HTML element ID for a
HTML element in the form HTML file the
label needs to be connected with. When
connected, no new control is created but
the Delphi class is connected with the
existing HTML element in the form HTML
file
ImageURL Sets the URL of the image to be displayed
in the button
ImagePosition Sets the position of the image
ImageHeight Sets the height of the image in pixels
278
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
ImageWidth Sets the width of the image in pixels
RoundedBorders Sets if the button is displayed with rounded
borders
Template Sets the template used to display the
control. Options are Default, Primary,
Success, Warning, Danger, Info
Theme Sets the name of the theme that is used to
display the control
Events for TWebJQXButton
OnClick Event triggered when the button is clicked
TWebJQXButtonGroup
Description
Below is a list of the most important properties methods and events for TWebJQXButtonGroup.
Represents a group of buttons. The buttons can optionally behave like a radio group or
checkbox group.
Designtime
Runtime
279
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
HTML template tag
The HTML tag the component can be associated with in an HTML template. Assign the ID
attribute with a unique value and set the identical value to the ElementID property. Detailed
information can be found in the Use of HTML templates topic.
HTML tag <DIV ID=”UniqueID”></DIV>
ElementID UniqueID
Properties for TWebJQXButtonGroup
ButtonSelect[Button: Integer] Select or unselect a button based on the
index in the Items list
EnableHover Enables the visual effect when a button is
hovered
Items A list of button caption texts
Mode Sets how the button group behaves.
Options are: Default, CheckBox,
RadioButton
Template Sets the template used to display the
control. Options are Default, Primary,
Success, Warning, Danger, Info
Theme Sets the name of the theme that is used to
display the control
Events for TWebJQXButtonGroup
OnClick Event triggered when a button is clicked
TWebJQXCalendar
280
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
Description
Below is a list of the most important properties methods and events for TWebJQXCalendar.
Represents a calendar that enables the user to select a date using a visual monthly calendar
display.
Designtime
Runtime
HTML template tag
The HTML tag the component can be associated with in an HTML template. Assign the ID
attribute with a unique value and set the identical value to the ElementID property. Detailed
information can be found in the Use of HTML templates topic.
HTML tag <DIV ID=”UniqueID”></DIV>
ElementID UniqueID
Properties for TWebJQXCalendar
Date Sets the Calendar’s Date. If multiselect is
True this is the first day of range of dates
281
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
ElementClassName Optionally sets the CSS classname when
styling via CSS is used
ElementID Optionally sets the HTML element ID for a
HTML element in the form HTML file the
label needs to be connected with. When
connected, no new control is created but
the Delphi class is connected with the
existing HTML element in the form HTML
file
EndDate Sets the last day of a range of dates. Only if
MultiSelect is True
FirstDayOfWeek Sets which day to display in the first day
column
MaxDate Sets the maximum selectable date
MinDate Sets the minimum selectable date
MultiSelect If set to True a range of dates can be
selected
OtherMonthDays If set to True the days of days of the
previous and next month are displayed
ShowToday Sets if today’s day is highlighted
Theme Sets the name of the theme that is used to
display the control
WeekNumbers Sets if the week numbers are displayed
Events for TWebJQXCalendar
OnDateClick Event triggered when a date is selected
OnNavigateClick Event triggered when the calendar is
navigated to a different month
TWebJQXColorPicker
282
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
Description
Below is a list of the most important properties methods and events for TWebJQXColorPicker.
A control that allows the user to easily pick a color.
Designtime
Runtime
HTML template tag
The HTML tag the component can be associated with in an HTML template. Assign the ID
attribute with a unique value and set the identical value to the ElementID property. Detailed
information can be found in the Use of HTML templates topic.
HTML tag <DIV ID=”UniqueID”></DIV>
ElementID UniqueID
Properties for TWebJQXColorPicker
Color Sets the selected color
ColorMode Sets the color mode to hue or saturation
ElementClassName Optionally sets the CSS classname when
styling via CSS is used
283
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
ElementID Optionally sets the HTML element ID for a
HTML element in the form HTML file the
label needs to be connected with. When
connected, no new control is created but
the Delphi class is connected with the
existing HTML element in the form HTML
file
Events for TWebJQXColorPicker
OnChange Event triggered when a color is selected
TWebJQXComboBox
Description
Below is a list of the most important properties methods and events for TWebJQXComboBox.
A combobox control that contains an input field with auto-complete functionality and a list of
selectable items displayed in a drop-down.
Designtime
Runtime
284
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
HTML template tag
The HTML tag the component can be associated with in an HTML template. Assign the ID
attribute with a unique value and set the identical value to the ElementID property. Detailed
information can be found in the Use of HTML templates topic.
HTML tag <DIV ID=”UniqueID”></DIV>
ElementID UniqueID
Properties for TWebJQXComboBox
AutoComplete If set to True only the items that match the
searched text are displayed in the list
ElementClassName Optionally sets the CSS classname when
styling via CSS is used
ElementID Optionally sets the HTML element ID for a
HTML element in the form HTML file the
label needs to be connected with. When
connected, no new control is created but
the Delphi class is connected with the
existing HTML element in the form HTML
file
ItemIndex Sets the selected item index
Items The collection of items
MultiSelect Sets if multiple items can be selected
Theme Sets the name of the theme that is used to
display the control
TextHint Sets the text displayed before an item is
selected
Methods for TWebJQXComboBox
GetDisabled Returns if the provided item index is disabled
SetDisabled Sets the provided item index as disabled
GetSelected Returns if the provided item index is selected
285
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
SetSelected Sets the provided item index as selected
Events for TWebJQXComboBox
OnChange Event triggered when an item is selected
TWebJQXDateTimeInput
Description
Below is a list of the most important properties methods and events for
TWebJQXDateTimeInput.
Represents a datetimeinput that enables the use to select a date or time using a popup
calendar display or by keyboard input into the text field.
Designtime
Runtime
HTML template tag
The HTML tag the component can be associated with in an HTML template. Assign the ID
attribute with a unique value and set the identical value to the ElementID property. Detailed
information can be found in the Use of HTML templates topic.
286
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
HTML tag <DIV ID=”UniqueID”></DIV>
ElementID UniqueID
Properties for TWebJQXDateTimeInput
Date Sets the Calendar’s Date. If multiselect is
True this is the first day of range of dates
ElementClassName Optionally sets the CSS classname when
styling via CSS is used
ElementID Optionally sets the HTML element ID for a
HTML element in the form HTML file the
label needs to be connected with. When
connected, no new control is created but
the Delphi class is connected with the
existing HTML element in the form HTML
file
EndDate Sets the last day of a range of dates. Only if
MultiSelect is True
FirstDayOfWeek Sets which day to display in the first day
column
MaxDate Sets the maximum selectable date
MinDate Sets the minimum selectable date
MultiSelect If set to True a range of dates can be
selected
ShowToday Sets if today’s day is highlighted
Theme Sets the name of the theme that is used to
display the control
WeekNumbers Sets if the week numbers are displayed
Events for TWebJQXDateTimeInput
OnDateClick Event triggered when a date is selected
287
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
TWebJQXDropDownList
Description
Below is a list of the most important properties methods and events for
TWebJQXDropDownList.
Represents a control that contains a list of selectable items displayed in a drop-down.
Designtime
Runtime
HTML template tag
The HTML tag the component can be associated with in an HTML template. Assign the ID
attribute with a unique value and set the identical value to the ElementID property. Detailed
information can be found in the Use of HTML templates topic.
HTML tag <DIV ID=”UniqueID”></DIV>
ElementID UniqueID
Properties for TWebJQXDropDownList
ElementClassName Optionally sets the CSS classname when
styling via CSS is used
ElementID Optionally sets the HTML element ID for a
HTML element in the form HTML file the
label needs to be connected with. When
connected, no new control is created but
the Delphi class is connected with the
existing HTML element in the form HTML
file
ItemIndex Sets the selected item index
Items The collection of items
288
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
MultiSelect Sets if multiple items can be selected
Theme Sets the name of the theme that is used to
display the control
TextHint Sets the text displayed before an item is
selected
Methods for TWebJQXDropDownList
GetDisabled Returns if the provided item index is disabled
SetDisabled Sets the provided item index as disabled
GetSelected Returns if the provided item index is selected
SetSelected Sets the provided item index as selected
Events for TWebJQXDropDownList
OnChange Event triggered when an item is selected
TWebJQXGrid
Description
Below is a list of the most important properties methods and events for TWebJQXGrid.
The Grid is a powerful control that displays tabular data. It offers rich support for interacting with
data, including paging, grouping, sorting filtering and editing.
289
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
Designtime
Runtime
HTML template tag
290
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
The HTML tag the component can be associated with in an HTML template. Assign the ID
attribute with a unique value and set the identical value to the ElementID property. Detailed
information can be found in the Use of HTML templates topic.
HTML tag <DIV ID=”UniqueID”></DIV>
ElementID UniqueID
Properties for TWebJQXGrid
Columns
Alignment Sets the text alignment in the column
ColumnType Sets the type of the column. Default,
Image (image URL displayed as an
image), Email (email address displayed as
hyperlink) or Link (URL displayed as
hyperlink)
DataField
DataType Sets the datatype of the column. Available
types are: Date, Double, Integer, String
Editor Sets the editor for the column. Available
editors are: CheckBox, DateTimeInput,
DropDownList, Edit, None, NumberInput
Format
Freeze Sets if the column is fixed
Title Sets the title of the column
Width Sets the width in pixels of the column
Cells[Col, Row: Integer] Gets or sets the value of a grid cell based
on the column and row index
Data
DataArray If DataType is set to Array, assign a
TJSArray with the data to load in the grid
DataType Sets the type of data to load in the grid.
Available types are: Array, CSV, JSON,
None
Delimiter Sets the delimiter character if DataType is
set to CSV
291
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
Id Sets the column name to be used as ID
column if DataType is set to JSON
JSON If DataType is set to JSON, assign the
JSON data to load in the grid
Url Assign the location of a CSV or JSON file
to load the data in the grid if DataType is
set to CSV or JSON respectively
RowSelect[Row: Integer] Select a grid row based on the row index
FocusedCell Gets or sets the currently focused cell
ElementClassName Optionally sets the CSS classname when
styling via CSS is used
ElementID Optionally sets the HTML element ID for a
HTML element in the form HTML file the
label needs to be connected with. When
connected, no new control is created but
the Delphi class is connected with the
existing HTML element in the form HTML
file
Options
Bands
Enabled Sets if row banding is enabled in the grid
RowCount Sets the number of rows between
banding rows
Editing Sets if editing is enabled in the grid
Filtering Sets if filtering is enabled in the grid
Grouping Sets if grouping is enabled in the grid
Hovering Sets if hovering is enabled in the grid
Paging
Enabled Sets if paging is enabled in the grid
PageSize Sets the number of rows per page
SelectionMode Sets the selection mode. Options are
single row, single cell, multiple rows,
292
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
multiple cells
Sorting
ColumnIndex Sets the column index the grid should be
sorted by
Direction Sets the sortdirection. Options are
Ascending, Descending or Unsorted
Enabled Sets if sorting is enabled
RowCount Sets the number of displayed rows
RowHeight Sets the height of a grid row
Theme Sets the name of the theme that is used to
display the control
Methods for TWebJQXGrid
SelectCell Selects a single cell based on the provided
row and column index
SelectRow Selects a single row based on the provided
row index
Events for TWebJQXGrid
OnCellClick Event triggered when a cell is clicked
OnCellEditClick Event triggered when a cell is edited
OnCellEditDone Event triggered after a cell is edited
OnCellEditStart Event triggered when a cell is edited
OnCellEditValidate Event triggered after a cell is edited
OnCellSelect Event triggered when a cell is selected (via
keyboard arrow keys)
OnFilter Event triggered when the grid is filtered
OnGetCellData Event triggered when a cell is rendered
OnPageChange Event triggered when changing to a different
page
293
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
OnRowClick Event triggered when a row is clicked
OnRowSelect Event triggered when a row is selected (via
keyboard arrow keys)
OnSort Event triggered when the grid is sorted
TWebJQXKnob
Description
Below is a list of the most important properties methods and events for TWebJQXKnob.
Represents a control with a round shape which displays a draggable indicator within a range of
values.
Runtime
294
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
Designtime
HTML template tag
The HTML tag the component can be associated with in an HTML template. Assign the ID
attribute with a unique value and set the identical value to the ElementID property. Detailed
information can be found in the Use of HTML templates topic.
HTML tag <DIV ID=”UniqueID”></DIV>
ElementID UniqueID
Properties for TWebJQXKnob
Appearance
BorderColor Sets the border color of the control
BorderWidth Sets the border width of the control
Color Sets the background color of the control
Labels
Offset Sets the labels position offset in
percentage
Step Sets the step between labels
Visible Sets if the labels are displayed
Marks
BorderColorProgress Sets the border color of the marks in the
progress part
BorderColorRemaining Sets the border color of the marks in the
remaining part
ColorProgress Sets the color of the marks in the
progress part
ColorRemaining Sets the color of the marks in the
remaining part
MajorInterval Sets the interval between major marks
MajorSize Sets the size of the major marks
295
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
MarkType Sets the type of marks displayed. Options
are Line or Circle
MinorInterval Sets the interval between minor marks
Offset Sets marks position offset in percentage
Size Sets the size of the marks
Width Sets the width of the marks
Pointer
BorderColor Sets the border color of the pointer
Color Sets the color of the pointer
Offset Sets the pointer position offset in
percentage
PointerType Sets the type of pointer displayed.
Options are Arrow, Circle, Line
Size Sets the size of the pointer
Visible Sets if the pointer is displayed
Width Sets the width of the pointer
ProgressBar
BackgroundColor Sets the background color of the
progressbar
BorderColor Sets the border color of the progressbar
Color Sets the color of the progressbar
Offset Sets the progressbar offset position in
percentage
Size Sets the size of the progressbar
EndAngle Sets the ending angle of the progressbar
for the maximum value
Maximum Sets the maximum value
Minimum Sets the minimum value
StartAngle Sets the starting angle of the progressbar
for the minimum value
296
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
Step Sets the step between values in the range
Value Sets the default value
Events for TWebJQXKnob
OnChange Event triggered when the value is changed
TWebJQXMaskedInput
Description
Below is a list of the most important properties methods and events for TWebJQXMaskedInput.
Represents an input control which uses a mask to distinguish between proper and improper
user input.
Designtime
Runtime
HTML template tag
The HTML tag the component can be associated with in an HTML template. Assign the ID
attribute with a unique value and set the identical value to the ElementID property. Detailed
information can be found in the Use of HTML templates topic.
HTML tag <DIV ID=”UniqueID”></DIV>
ElementID UniqueID
297
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
Properties for TWebJQXMaskedInput
ElementClassName Optionally sets the CSS classname when
styling via CSS is used
ElementID Optionally sets the HTML element ID for a
HTML element in the form HTML file the
label needs to be connected with. When
connected, no new control is created but
the Delphi class is connected with the
existing HTML element in the form HTML
file
Mask Sets the mask configuration.
# For an integer character from 0 to 9
A For an alpha numeric character from 0 to
9 and from A to Z
L For an alpha character from A to Z
Text Set the default text that is displayed
Theme Sets the name of the theme that is used to
display the control
Events for TWebJQXMaskedInput
OnChange Event triggered when the value is changed
TWebJQXMenu
Description
Below is a list of the most important properties methods and events for TWebJQXMenu.
Represents a menu control with support for sub-menus, it can be displayed vertical, horizontal
or as a popup.
298
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
Designtime
Runtime
HTML template tag
The HTML tag the component can be associated with in an HTML template. Assign the ID
attribute with a unique value and set the identical value to the ElementID property. Detailed
information can be found in the Use of HTML templates topic.
HTML tag <DIV ID=”UniqueID”></DIV>
ElementID UniqueID
Properties for TWebJQXMenu
ElementClassName Optionally sets the CSS classname when
styling via CSS is used
ElementID Optionally sets the HTML element ID for a
HTML element in the form HTML file the
label needs to be connected with. When
connected, no new control is created but
the Delphi class is connected with the
existing HTML element in the form HTML
file
299
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
Menu Set the TWebMainMenu control associated
with the TWebJQXMenu
Mode Set the display mode. Horizonal, Popup or
Vertical
Theme Sets the name of the theme that is used to
display the control
Events for TWebJQXMenu
OnItemClick Event triggered when a menu item is clicked
TWebJQXNumberInput
Description
Below is a list of the most important properties methods and events for TWebJQXNumberInput.
Represents a control that allows the user to input currency, percentages and any type of
numeric data.
Designtime
Runtime
300
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
HTML template tag
The HTML tag the component can be associated with in an HTML template. Assign the ID
attribute with a unique value and set the identical value to the ElementID property. Detailed
information can be found in the Use of HTML templates topic.
HTML tag <DIV ID=”UniqueID”></DIV>
ElementID UniqueID
Properties for TWebJQXNumberInput
DecimalDigits Sets the number of available decimal digits
Digits Sets the number of available digits
ElementClassName Optionally sets the CSS classname when
styling via CSS is used
ElementID Optionally sets the HTML element ID for a
HTML element in the form HTML file the
label needs to be connected with. When
connected, no new control is created but
the Delphi class is connected with the
existing HTML element in the form HTML
file
InputMode Sets the input mode to Advanced (input
with numeric mask) or Simple (restricted
user input)
MaxValue Sets the maximum allowed input value
MinValue Sets the minimum allowed input value
ShowSpinButtons Sets if the spin buttons are displayed
SpinButtonsStep Sets the increase/decrease step
Symbol Sets the character to use as currency or
percentage symbol
SymbolPosition Sets the position of the symbol. Left or
Right
Theme Sets the name of the theme that is used to
display the control
Events for TWebJQXNumberInput
301
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
OnChange Event triggered when the input value is
changed
TWebJQXProgressBar
Description
Below is a list of the most important properties methods and events for TWebJQXProgressBar.
Represents a control that visually indicates the progress of an operation.
Designtime
Runtime
HTML template tag
The HTML tag the component can be associated with in an HTML template. Assign the ID
attribute with a unique value and set the identical value to the ElementID property. Detailed
information can be found in the Use of HTML templates topic.
HTML tag <DIV ID=”UniqueID”></DIV>
ElementID UniqueID
Properties for TWebJQXProgressBar
AnimationDuration Sets the duration of the animation to fill the
302
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
progressbar to the value. Set to 0 to disable
animation
ColorRanges
Color Sets the color of the progressbar up to the
value set in the Stop property
Stop Sets the end position for this color
ElementClassName Optionally sets the CSS classname when
styling via CSS is used
ElementID Optionally sets the HTML element ID for a
HTML element in the form HTML file the
label needs to be connected with. When
connected, no new control is created but
the Delphi class is connected with the
existing HTML element in the form HTML
file
Maximum Sets the maximum value
Minimum Sets the minimum value
Orientation Sets the progressbar orientation to
Horizontal or Vertical
ShowValue Sets if the value is displayed in the
progressbar
Theme Sets the name of the theme that is used to
display the control
Value Sets the value of the progress position
TWebJQXRangeSelector
Description
303
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
Below is a list of the most important properties methods and events for
TWebJQXRangeSelector.
Represents a control that can be used to select a numeric range.
Designtime
Runtime
HTML template tag
The HTML tag the component can be associated with in an HTML template. Assign the ID
attribute with a unique value and set the identical value to the ElementID property. Detailed
information can be found in the Use of HTML templates topic.
HTML tag <DIV ID=”UniqueID”></DIV>
ElementID UniqueID
Properties for TWebJQXRangeSelector
Maximum Sets the maximum value of the range
MaximumValue Sets the end value of the selected range
Minimum Sets the minimum value of the range
MinimumValue Sets the start value of the selected range
MajorTicksInterval Sets the interval between major ticks
MinorTicksInterval Sets the interval between minor ticks
MoveOnClick Sets if the range is moved left or right when
the range selector is clicked
Resizable Sets the if the initial range can be resized
by dragging the thumbs
ShowMajorTicks Sets if the major ticks are displayed
ShowMinorTicks Sets if the minor ticks are displayed
ShowMarkers Sets if the markers (thumbs) are displayed
Theme Sets the name of the theme that is used to
display the control
304
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
Events for TWebJQXRangeSelector
OnChange Event triggered when the range is changed
TWebJQXRating
Description
Below is a list of the most important properties methods and events for TWebJQXRating.
Represents a control that allows to select a rating.
Designtime
Runtime
HTML template tag
The HTML tag the component can be associated with in an HTML template. Assign the ID
attribute with a unique value and set the identical value to the ElementID property. Detailed
information can be found in the Use of HTML templates topic.
HTML tag <DIV ID=”UniqueID”></DIV>
ElementID UniqueID
Properties for TWebJQXRating
ElementClassName Optionally sets the CSS classname when
styling via CSS is used
305
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
ElementID Optionally sets the HTML element ID for a
HTML element in the form HTML file the
label needs to be connected with. When
connected, no new control is created but
the Delphi class is connected with the
existing HTML element in the form HTML
file
ItemCount Sets the number or rating items displayed
Value Sets the default value
Events for TWebJQXRating
OnChange Event triggered when the value is changed
TWebJQXResponsivePanel
Description
Below is a list of the most important properties methods and events for
TWebJQXResponsivePanel.
Represents a panel control with a responsive behaviour. The responsive panel collapses when
the browser window (or parent element) width becomes less than a set value and the panel is
then accessible by clicking a button.
306
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
Designtime
Runtime
Properties for TWebJQXResponsivePanel
AnimationType Sets the type of animation used when the
panel is opened or closed. Options are
Fade, Slide or None
AutoClose Sets if the panel is automatically closed
when a mouse click occurs outside the
panel (only while the ToggleButton is
visible)
CollapseBreakPoint If the width of the browser window (or
parent element) in pixels is lower than this
value the ToggleButton is displayed,
otherwise the ToggleButton is hidden
Theme Sets the name of the theme that is used to
display the control
ToggleButtonSize Sets the size of the ToggleButton
307
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
Methods for TWebJQXResponsivePanel
Refresh Performs a refresh of the control. If the width
of the parent element has changed the
ToggleButton is hidden or displayed based
on the width of the parent element
Events for TWebJQXResponisvePanel
OnClose Event triggered when the panel is closed by
clicking the ToggleButton
OnCollapse Event triggered when the window (or parent
element) width is higher than
CollapseBreakPoint and the ToggleButton is
hidden
OnExpand Event triggered when the window (or parent
element) width is lower than
CollapseBreakPoint and the ToggleButton is
displayed
OnOpen Event triggered when the panel is opened
by clicking the ToggleButton
TWebJQXSlider
Description
Below is a list of the most important properties methods and events for TWebJQXSlider.
Represents a control that lets the user select from a range of values by moving a thumb along a
track.
308
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
Designtime
Runtime
HTML template tag
The HTML tag the component can be associated with in an HTML template. Assign the ID
attribute with a unique value and set the identical value to the ElementID property. Detailed
information can be found in the Use of HTML templates topic.
HTML tag <DIV ID=”UniqueID”></DIV>
ElementID UniqueID
Properties for TWebJQXSlider
ButtonsPosition Sets the position of the buttons. Options
are Both (Left and Right), Left, Right. Only
available when ShowRangeSlider is False
Maximum Sets the maximum value of the slider
MaximumValue Sets the maximum selected value when
ShowRangeSlider is True
Minimum Sets the minimum value of the slider
MinimumValue Sets the minimum selected value when
ShowRangeSlider is True
MinorTicksFrequency Sets the frequency of the minor ticks
MinorTicksSize Sets the size of the minor ticks
Mode Sets the mode of the slider. Options are
Default or Fixed. If fixed the
ShowButtons Sets if the buttons are displayed. Only
available when ShowRangeSlider is False
ShowMinorTicks Sets if the minor ticks are displayed along
the slider
ShowRange Sets if the slider range background is
displayed
309
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
ShowRangeSlider Sets if the slider is displayed as a range
slider and has 2 thumbs. This allows to
select a minimum and maximum value
ShowTicks Sets if the ticks are displayed along the
slider
Step Set the slider’s increment and decrement
step when the thumb is moved
Template Sets the template used to display the
control. Options are Default, Primary,
Success, Warning, Danger, Info
Theme Sets the name of the theme that is used to
display the control
TickSize Sets the size of the ticks
TicksPosition Sets the position of the ticks. Options are
Both (above and below the slider), Bottom
or Top
Value Sets the default value
Events for TWebJQXSlider
OnChange Event triggered when the value is changed
TWebJQXTabs
Description
Below is a list of the most important properties methods and events for TWebJQXTabs.
TWebJQXTabs is similar to a VCL TPageControl.
310
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
Designtime
Runtime
HTML template tag
The HTML tag the component can be associated with in an HTML template. Assign the ID
attribute with a unique value and set the identical value to the ElementID property. Detailed
information can be found in the Use of HTML templates topic.
HTML tag <DIV ID=”UniqueID”></DIV>
ElementID UniqueID
Properties for TWebJQXTabs
Collapsible Sets if the tab is collapsible by clicking the
selected tab
EnableHover Sets if a hover effect is displayed when
hovering a tab with the mouse cursor
EnableScrollAnimation Sets if animation is used when scrolling
through the tabs
Position Sets the position of the tabs row. Options
are Top and Bottom
Reorder Sets if the tabs can be reordered with drag
and drop
ScrollPosition Sets the position of the scrollbar arrows.
Options are Left, Right and Both
ScrollStep Sets the distance in pixels that is scrolled
with the scroll arrows
SelectionTracker Sets if an animated effect is displayed
311
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
when switching between tabs
TabIndex Sets the index of the active tab
ToggleMode Sets the method used to select a tab.
Options are Click, DoubleClick and
MouseEnter
Theme Sets the name of the theme that is used to
display the control
Events for TWebJQXTabs
OnSelected Event triggered when a new tab is selected
OnTabClick Event triggered when a tab is clicked
TWebJQXTagCloud
Description
Below is a list of the most important properties methods and events for TWebJQXTagCloud.
Represents a control that displays a collection of pre-defined tags. Each tag has a weight value
which corresponds with the size of the displayed tag. Tags can also be sorted based on weight
or name.
Designtime
Runtime
312
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
HTML template tag
The HTML tag the component can be associated with in an HTML template. Assign the ID
attribute with a unique value and set the identical value to the ElementID property. Detailed
information can be found in the Use of HTML templates topic.
HTML tag <DIV ID=”UniqueID”></DIV>
ElementID UniqueID
Properties for TWebJQXTagCloud
DisplayLimit Sets the maximum number of items
displayed
DisplayTopWeighted Sets
DisplayMaxValue Hides items with a value higher than the
maximum value
DisplayMinValue Hides items with a value lower than the
minimum value
Items
Tag Sets the ID of the Tag
TagLabel Sets the label text of the Tag
TagName Sets the name of the Tag
TagValue Sets the value of the Tag
MaxColor Sets the text color of the items with the
highest value. Together with the MinColor
value, tags with will be colored with
gradient colors between MinColor and
MaxColor
MinColor Sets the text color of the items with the
lowest value. Together with the MaxColor
value, tags with will be colored with
gradient colors between MinColor and
MaxColor
MaxFontSize Sets the maximum font size of the items
with the highest value
MinFontSize Sets the minimum font size of the items
313
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
with the lowest value
SortBy Sets how the items are sorted. Options are:
None (original order), Label or Value
SortOrder Sets if the items are ordered ascending or
descending if SortBy is different from None
TextCase Sets the text case of the items. Options are:
Original, UpperCase, LowerCase,
FirstUpper, CamelCase
Theme Sets the name of the theme that is used to
display the control
Events for TWebJQXTagCloud
OnClick Event triggered when a tag is clicked
314
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
Connecting to data
As Delphi developers we are used to frameworks and components to take the chore out of
using databases. Ever since Delphi 1, database handling was abstracted by the TDataSet &
TDataSource. Wouldn't it be nice (and mainly productive as this is what is important after all) if
this exact abstraction model allowed us to create web applications consuming data? Exactly
that goal is what we wanted to achieve with TMS WEB Core, only technically under the hood
things are RADically different from the implementation of Delphi 1 like datasets and
datasources. So, with TMS WEB Core, you have your DB-aware edit, label, combobox,
datepicker etc... and these can be hooked up to a datasource and a datafield can be specified.
The dataset though is in this case a wrapper component that will under the hood do its work
getting data or updating data via the use of REST HTTP calls to microservices exposed on a
data server. As our TMS XData product already provided exactly that: exposing your databases
via REST HTTP calls, we extended it to have a web XData client component so you can from
Delphi, create a web application against an XData client and hook up your DB-aware
components to an XData dataset, pretty much the same way as you can for VCL or FMX native
client applications.
For the sake of demo purposes, we have created a first sample app with a web client dataset.
This web client dataset gets its data in JSON format from a server via a HTTP REST call. This
allows to view and edit the data in the web client dataset but won't do updates server side so
that it isn't possible to 'fiddle' with the data and break the sample this way.
Here you can see a form editing contact info with several DB-aware controls, including a DB-
navigator.
315
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
When the dataset is connected to the server, the DB-aware controls display and can edit the
data.
316
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
For viewing data, TMS WEB Core comes with following built-in components:
TWebClientConnection, TWebClientDataSet, TWebDataSource.
Drop the components on the form and assign the WebClientConnection instance to
WebClientDataSet.Connection and assign the WebClientDataSet to WebDataSource.
The data will be retrieved via a HTTP GET request in JSON format. To fill the client dataset, it is
expected that the JSON consists of a JSON array or a JSON array under a specific node in the
317
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
JSON HTTP response.
Specify the URL where the HTTP GET retrieves the JSON data via WebClientConnection.URI.
When the JSON array is under a specific node, specify this with
WebClientConnection.DataNode: string;
As JSON as such does not come with meta-data, it will be needed to setup the DB fields
expected in the JSON array. Add these as new fields to the dataset via the “Fields Editor” or
select “Fetch fields” from the design-time editor of the WebClientDataSet:
When a WebClientConnection is assigned to the WebClientDataSet and an URL is specified,
the IDE will perform a HTTP request and interpret the retrieved JSON and add the DB fields
found.
For example, for this sample JSON data at URL: https://jsonplaceholder.typicode.com/posts
the result is:
318
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
After this, we can simply choose from the dataset fields editor “Add all fields” and all fields
available in the JSON data will be available for our DB-aware controls:
After setting WebClientConnection.Active = true, the WebClientConnection performs a HTTP
GET request on the URL to fetch the JSON data. This is an asynchronous process. When this is
ready, the OnAfterConnect event is triggered. When this event is triggered, all data was loaded
into the connected WebClientDataSet and the data is ready for use. When
WebClientConnection.AutoOpenDataSet = true, the WebClientConnection will automatically
open the dataset after this, making it ready to put data in connected DB-aware controls. A
typical flow to connect to data, fetch it and then using the dataset directly from code is:
procedure TForm1.WebButton1Click(Sender: TObject);
begin
// start the asynchronous process to perform a HTTP GET request to retrieve the data
WebClientConnection1.Active := true;
end;
procedure TForm1.WebClientConnection1AfterConnect(Sender: TObject);
begin
// Data was retrieved in OnAfterConnect, dataset was automatically opened by the
// WebClientConnection and ready for use
WebClientDataSet1.First;
while not WebClientDataSet1.Eof do
begin
WebListbox1.Items.Add(WebClientDataSet1.FieldByName('email').AsString);
WebClientDataSet1.Next;
end;
end;
Connecting to a TMS XData based server is one possible way to hook up to databases. Please
refer to the TMS XData documentation for information how you can connect to TMS XData
exposed databases from a TMS WEB Core application.
You can implement your own interfaces to a database server via REST HTTP calls and over-
time we plan to create and offer connectors to such server as Embarcadero RAD server,
Google Cloud datastore and several others...
319
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
Using WebSockets
TMS WEB Core promises easy, fast and RAD component based web application development.
For fast, real-time updates on a web page with light-weight server-communications,
WebSockets are an ideal mechanism.
That is why TMS WEB Core also comes with a WebSocket client:
This is a non-visual component that makes it very easy to start using WebSocket based
communication. Drop this component on the form, configure the WebSocket hostname & port
and call WebSocketClient.Connect. When a connection is established, the OnConnect event is
triggered. From the moment of connection, data sent by the WebSocket server is received via
the event OnDataReceived. The signature of this event is:
procedure OnDataReceived(Sender: TObject; Origin: string; Data:
TJSObject);
Origin is the WebSocket server sending the data and the data itself is sent as a JavaScript
Object. This means it can be different types. Sending data is equally easy. Simply call
WebSocketClient1.Send(AMessage: String);
To create an online chat application using this WebSocket technology takes only a few
configurations in the component to configure the WebSocket server and a couple of lines of
code. There is the logic that performs the Connect & Disconnect:
procedure TWebForm1.Connect;
begin
if FConnected then
begin
WebSocketClient1.Disconnect;
end
else
begin
if WebEdit1.Text = '' then
ShowMessage('Please enter a name first')
else
WebSocketClient1.Connect;
320
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
end;
end;
To send a message when connected, we simply send the message as color/sender/message
pair via the WebSocketClient.Send() function. Each chat user can choose a color and
messages from the user are displayed in his selected color:
procedure TWebForm1.SendMessage;
var
s: string;
begin
if FConnected and (WebEdit2.Text <> '') then
begin
s := TTMSFNCGraphics.ColorToHTML(TMSFNCColorPicker1.SelectedColor)
+ '~' + WebEdit1.Text + '~' + WebEdit2.Text;
// limit message length
s := Copy(s,1,256);
WebSocketClient1.Send(s);
WebEdit2.Text := '';
end;
end;
To display the message, we use the web-enabled TTMSFNCListBox component from the TMS
FNC UI Pack. With this control we can show the received messages in listbox items with
banding and some HTML formatting per item to indicate the sender and the message. The
message is received via WebSocketClient.OnDataReceived as text and therefore we can use
Data.toString to get the JavaScript object as text:
procedure TWebForm1.WebSocketClient1DataReceived(Sender: TObject;
Origin: string;
Data: TJSObject);
var
it: TTMSFNCListBoxItem;
sl: TStringList;
s: String;
n: string;
c: TTMSFNCGraphicsColor;
v: string;
begin
it := lst.Items.Add;
s := Data.toString;
321
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
sl := TStringList.Create;
try
TTMSFNCUtils.Split('~', s, sl);
if sl.Count > 2 then
begin
c := TTMSFNCGraphics.HTMLToColor(sl[0]);
n := '<font size="14">'+sl[1]+'</font>';
v := sl[2];
it.Text := n + ' says:<br> ' + v;
it.TextColor := c;
end;
finally
sl.Free;
end;
end;
There isn't much more to creating a chat application for your TMS WEB Core applications
except of course to put a WebSocket server application on your server that can equally be
written with Delphi. See the TMS WEB Core demos for a sample WebSocket server service
application.
322
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
TMS WEB Core chat client application running in the Chrome browser
323
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
TMS WEB Core chat client application running in the Safari browser on iPhone
324
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
IndexedDB
IndexedDB is a NoSQL database that allows a web application to store anything persistently in
the user’s browser. Significant amount of structured data can be stored on the client-side
including files and blobs. In addition, it provides indexes for fast searching of this data.
Each IndexedDB database is unique to a domain or subdomain. It can not be accessed by any
other domain.IndexedDB is available in the latest releases of all browsers supported by TMS
WEB Core.
TMS WEB Core IndexedDB Library TMS WEB Core IndexedDB Library provides two ways to create and use IndexedDB databases.
TIndexedDbClientDataset Component
The component TIndexedDbClientDataset makes it easy for a Delphi web application to create
and use IndexedDB databases by a familiar syntax of using ClientDataSet. It also allows a
seamless integration of an IndexedDB database with data-aware components like
TWebDBGrid. All the database operations, including the creation of fields can be done in the
standard Delphi way through the TIndexedDbClientDataset component.
Internally, the TIndexedDbClientDataset component uses TIndexedDb class described below to
provide this seamless integration thus hiding all the complexity of dealing with asynchronous
IndexedDB operations and their responses.
TIndexedDb class
A Delphi web application can also use the class TIndexedDb to directly create and use
IndexedDB databases. The original IndexedDB API is low-level and asynchronous. The class
TIndexedDb provdies easier methods to perform IndexedDB operations where the results are
communicated to the specified Delphi event procedures of the application. However, the use of
this class needs a basic knowledge of using JavaScript objects, arrays (Pas2Js syntax) and
coding Delphi events without using design time aids.
Your first IndexedDB application
Create a TMS web application
Create a standard TMS Web Application in the Delphi IDE by choosing File, New, Other, TMS
Web Application. A new web form is created.
325
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
Set up the IndexedDB Client Data Set component Go to the Tool Palette and select the TWebIndexedDbClientDataset component from the “TMS
Web Data Access” section and drop it on the web form.
Specify the IndexedDB Database Properties
Set up the properties of the IndexedDB database in the Object Insector as given below: 1.
IDBDatabaseName: NotesDB 2. IDBObjectStoreName: “Notes” 3. IDBKeyFieldName: “id” 4.
IDBAutoIncrement: true (default)
This tells the component to use the object store “Notes” in the database “NotesDB.” The primary
key field for the object store is specified as “id” which is set up as an auto increment key. The
component is smart enough to create the database if it doesn’t exist.
Create the Fields or Properties of each object in the Object Store
The fields of the object store need to be set up in the WebFormCreate event code. In the Object
Inspector, double-click on OnCreate event of the Web Form. This creates an event handler
procedure WebFormCreate. Type the following code in it that sets up the fields and then makes
326
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
the DataSet active.
WebIndexedDbClientDataset1.FieldDefs.Clear;
WebIndexedDbClientDataset1.FieldDefs.Add('id',ftInteger);
WebIndexedDbClientDataset1.FieldDefs.Add('note',ftString);
WebIndexedDbClientDataset1.FieldDefs.Add('date',ftDate);
WebIndexedDbClientDataset1.Active := True;
Add DB-aware components that connect to the DataSet
Now select and drop a TWebDataSource, TWebDBGrid and TWebDBNavigator components on
the Web Form.
Set up the DataSource and Data components
Set the DataSource’s DataSet property to WebIndexedDbClientDataset1. Then set the
DataSource property of the grid and navigator to point to TWebDataSource1.
Set up the Columns of the DBGrid
Do that by clicking on the Columns properties of the DBGrid as shown in the picture.
Set up a New Record event
There is one last thing to do. Since we will be adding New Records or Objects with the DB
Navigator, we need to set up the default values of the record. For this, we set up an
OnNewRecord event procedure for the IndexedDB Client Data Set in the Object Inspector and
type the following code in it.
procedure TForm1.NewRecord(DataSet: TDataSet);
begin
DataSet.FieldByName('note').AsString := 'New Note';
DataSet.FieldByName('date').AsDateTime := Today;
end;
Run the Web Application
Now you can build and run the application. First time, the IndexedDB Client DataSet component
will automatically create the database as it doesn’t exist. The DB Grid will appear empty as
there are no records. Try adding new records with the Navigator and see how it goes.
Managing the IndexedDB Database
In Chrome, start Developer Tools and then select Application. Then see IndexedDB under
Storage section. You will see the NotesDB database in it. Here, you can browse through the
records and do other operations. For instance, if you change the fields of the database, you can
delete the database itself so that it is recreated with the new fields when you run the application
again.
327
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
Todo List Demo Please find this demo in the folder Demos. It shows more advanced usage of using the
IndexedDB through the IndexedDbClientDataSet.
Additional features in this Demo
Creating a Permanent Index on a Field
We want to be able to sort on any column of the DB Grid by clicking on the header of the
column. So we need to be able to read all the records in the order of that field. For this, we need
to create permanent indexes on those fields in IndexedDB. The following code in
WebFormCreate event takes care of it.
IndexedDBClientDataSet.AddIDBIndex('ByDate', 'due_date');
IndexedDBClientDataSet.AddIDBIndex('ByStatus', 'status');
IndexedDBClientDataSet.AddIDBIndex('ByDescr', 'descr');
IndexedDBClientDataSet.IDBActiveIndex := 'ByDate';
The first parameter to AddIDBIndex call is the name that we want to give to an index. The
second parameter is the field name. Third parameter is a Boolean specifying isUnique which is
OFF by default. Since the fields can contain repeated values, we leave isUnique at default.
328
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
In order to read the objects in the order of an index, we need to use a code like this:
IndexedDBClientDataSet.IDBActiveIndex := 'ByDate';
IndexedDBClientDataSet.IDBIndexDescending := False;
....
IndexedDBClientDataSet.Refresh;
The property IDBActiveIndex specifies the objects to be read in the order of ‘ByDate’ index.
Further, the IDBIndexDescending specifies whether the order is Descending or not. The Demo
uses this kind of code on the Column Click event of the DB Grid to rekiad it in the desired order.
The actual reload is done by the Refresh call.
This Demo also shows an example of connecting Data components like CheckBox or a Memo
to the database so that those fields can be edited in the current record. After editing, a call to
Update from the update button takes care of committing the changes to the IndexedDB.
Similarly the Demo has examples of Inserting a new record and Deleting the current record by
respective calls.
TWebIndexedDbClientDataSet
Description
The component TIndexedDbClientDataset makes it easy for a Delphi web application to create
and use IndexedDB databases by a familiar syntax of using ClientDataSet. It allows a seamless
integration of an IndexedDB database with data-aware components like TWebDBGrid. All the
database operations, including the creation of fields can be done in the standard Delphi way
through the TIndexedDbClientDataset component.
All you need to do is specify the IndexedDB database properties and add the fielddefs by code
in a standard Delphi syntax. Then connect a DataSource and Data components to it and it starts
working. It even creates the database if it doesn’t exist.
Below is a list of the most important properties and methods of TWebIndexedDbClientDataSet
component.
Properties of TWebIndexedDbClientDataSet
Property Description
Active Set this to True to activate the ClientDataSet.
The IndexedDB database specified by IDB*
properties is automatically created if it doesn’t
exist.
IDBActiveIndex Set the name of the index to be made active.
Once this is done, on next Refresh or Active,
the ClientDataSet loads the objects in the
order of the active index.
329
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
IDBAutoIncrement Set a True or False value to indicate that the
primary key field is auto incremented (default
True)
IDBDatabaseName Set the name of the database
IDBIndexDescending Set a True value to indicate descending order
of the active index
IDBKeyFieldName Set the name of the primary key field
IDBObjectStoreName Set the name of the ObjectStore in the
database
OnIDBError This is an event property to get notified of any
errors. The event can be set up at design time
in Object Inspector by double-clicking on it.
Methods of TWebIndexedDbClientDataSet Only methods specific to IndexedDB are listed. Other methods from the base ClientDataSet
class continue to work as before.
Refresh
procedure Refresh;
Refresh reloads all the objects from the IndexedDB database. If an IDBActiveIndex has been
specified, the objects are loaded in the order of that index. In addition, the current record pointer
is restored after the Reload.
AddIDBIndex
Use AddIDBIndex to add one or more permanent indexes to the IndexedDB database. Make
these calls before you make the component active. The index will be added only if the database
does not exist and the component creates it. The call is ignored for an existing database.
procedure AddIDBIndex(
anIndexName: String;
fields: String;
isUnique: Boolean=False);
Where
anIndexName - the name to be given to the index
fields - the field name on which index is to be built. To specify more than one field
names, separate the names with semicolons
isUnique - Specify whether the field value is unique in each object (row)
Notes:
330
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
The call is ignored for an existing database.
Use the properties IDBActiveIndex and IDBIndexDescending to activate an index for
data loading.
TIndexedDb (Advanced Use) A Delphi web application can use the class TIndexedDb to directly create and use IndexedDB
databases.
Using this class needs a knowledge of Pas2Js classes TJSArray, TJSObject and their basic
syntax in Delphi Pascal. We will try to describe them briefly in “Understanding how the data is
stored and retrieved.” But you may skip the rest of this document if you are not interested in a
low-level direct access to IndexedDB API.
Description The original IndexedDB API is low-level and asynchronous. The class TIndexedDb provdies a
simpler interface with methods to perform IndexedDB operations where the results are
communicated to the specified Delphi event procedures of the application.
When several operations are issued simultaneously where the same event procedure of the
application gets the response, the application may want to identify the exact operation that was
completed. For this purpose, the library provides a way for the application to pass custom data
that comes back with the response and helps the application associate a response with an
operation.
Below is a list of the most important properties methods and events of TIndexedDb class.
Properties
Property Description
ActiveIndex Set the name of the index to be made active. Once this is done,the
method GetAllObjsByIndex returns all objects in the order of the
active index.
AutoIncrement Set a True or False value to indicate that the primary key field is
auto incremented (default True)
DatabaseName Read Only property, get the Database Name
IndexDescending Set a True value to indicate descending order of the active index
KeyFieldName Read Only property, get the Primary Key Field Name
ObjectStoreName Read Only property, get the Object Store Name
Methods and Events of TIndexedDb The methods and events are listed in their logical order so that they are easier to understand.
This is so because IndexedDB only supports asynchronous operation. For each call, there is an
331
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
event in which the resposne comes. Hence, describing the events along with the methods
makes more sense.
Create and Destroy
These are the standard Delphi methods.
constructor Create(AOwner: TComponent);
destructor Destroy;
Open or Create an IndexedDB database
Open an IndexedDB database. The database is created if it doesn’t exist.
procedure Open(
aDbName: String;
objectStoreNameToCreate: String;
KeyFieldName: String = '';
autoIncrement: Boolean = False;
sequenceID: Integer = 0);
Where
aDbName - the database name
objectStoreName - the object store name
KeyFieldName - the primary key field name. If non-empty, it means an in-line key
otherwise an out-of-line key. These terms are described in the section “Understanding
how the data is stored and retrieved” below.
autoIncrement - Specify whether the primary key field is AutoIncrement. This works for
a new database only. For an existing database, it is ignored and if different a warning is
shown
sequenceID - This is an optional ID to be passed to identify the response of this open in
case multiple opens are issued simultaneously.
OnResult: Response Event of all methods like Open that perform operations on
IndexedDB
Before calling open, you need to setup the OnResult event property to point to an event
procedure. The same event gets responses of other operations too.
Format of the event procedure for OnResult:
procedure DoOnResult
(success: Boolean;
opCode: TIndexedDbOpCode;
data: JSValue;
sequenceId: JSValue;
332
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
errorName: String;
errorMsg: String);
where
success - indicates a True or False opCode - helps identify the operation. Can be one of the following opcodes: opOpen,
opAdd, opPut, opDelete, opGet, opGetAllKeys, opGetAllObjs, opGetAllIndexKeys, opGetAllObjsByIndex.
data - The data is sent back in the event for all the operations except for Open, Put or Delete. The data type of the parameter is JSValue. Depending on the operation, you need to cast it to proper data that you are expecting. This is further explained in the description of each operations later.
sequenceId - Id from the original call in order to identify the response in case of multiple operations of the same type issued simultaneously. Note that this is also of the type JSValue. So it is upto the application to send any kind of information to identify an operation. For example, it can even send a JS Object in place of sequence id having more information than just an Id number.
errorName - If you see the documentation of any operation in the original IndexedDB docs, you will the errors mentioned under an error name. That name is passed here in case you want to code some logic based on a particular error.
errorMsg - error messa ge if success is False
After the success of an open, the application may decide to issue other operations like add, get,
etc.
Understanding how the data is stored and retrieved
Before discussing the Add, Get and other procedures that add or get data, we need to
understand how the Data is stored and retrieved in IndexedDB.
IndexedDB is a NoSQL, object database. In a relational database, a table stores a collection of
rows. In IndexedDB, an ObjectStore stores a collection of JavaScript objects.
A brief introduction to a JavaScript Object
A JavaScript or JS object is a collection of named values. We will call these “properties” in
further discussion. If you know OOP terms, a JS object is equivalent to a dictionary or map. You
can have any number of properties representing “fields” of data. Further, there can be nested
objects. So the value of a property can be a JS object and so on to any level deep.
In TMS Web Core, you can create a JS object with a syntax similar to the following:
var
aDataObj: TJSObject;
begin
aDataObj := TJSObject.New;
333
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
aDataObj['name'] := 'John';
aDataObj['age'] := 44;
The above code creates a JS object with 2 properties.
Objects are stored by unique Primary Key
In IndexedDB, a JS object is stored and accessed by a primary key that is unique.
You need to specify a primary key at the time of creating an ObjectStore in IndexedDB. This
was the parameter KeyFieldName described above for the Open procedure.
There are 2 types of primary keys in IndexedDb.
In-line key specification
When you pass a non-empty KeyFieldName to Open, it is an in-line key specification. The term
“in-line” means the JS Object itself contains the primary key property by that name.
EXAMPLE: Suppose you pass KeyFieldName as ‘id’ to the Open procedure that creates the
ObjectStore. Then it means that when calling an Add procedure, you should pass the data as a
JS Object that contains a property by the name ‘id’ having a unique key value. You are
responsible for putting that property value in the JS Object before passing it to the Add
procedure.
Exception: The only exception is if you also specified AutoIncrement primary key for the
ObjectStore when creating it with Open. In that case, you need not add the key property.
IndexedDB fills it after adding the object by using its internal key generator.
Note that the TIndexedDbClientDataset component described earlier internally uses an in-line
key.
Out-of-line key specification
If you pass an empty string as KeyFieldName property to the Open procedure, it means the
ObjectStore is created with an out-of-line key. This means that the JS Object does not have an
implicit (in-line) key property. Rather, you are supposed to pass a unique primary key value as a
separate parameter (out-of-line) to Add procedure when adding data.
What is the use of out-of-line keys? You can have the data as any JS data type. In in-line keys,
the data must be a JS Object. In out-of-line keys, the data can be anything, for instance, an
integer or a string. For example, a simple picture application might use an out-of-line primary
key as the name of a picture file and the data as the “binary” stream of the picture.
Methods to Add Data
AddData method
procedure AddData(
334
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
data: JSValue;
sequenceID: JSValue = 0);
Data parameter
Database created with in-line key and AutoIncrement - Pass a JS Data Object. After the
Add completes a key property will be created with the key value generated internally.
Database created with in-line key and non-AutoIncrement - Pass a JS Data Object that
must contain the key as a property having a unique value.
Database created with out-of-line key and AutoIncrement - Pass any kind of data, even
primitive data types are possible.
Database created with out-of-line key and non-AutoIncrement - You can not use this
method in this case. Use PutData method described below.
sequenceID parameter - Optional. Pass any value or object that will help you identify a
particular add operation out of many in the OnResult event. Or, you can also pass any data as
sequenceID that will help in processing the outcome in OnResult event.
What comes back in OnResult data
The key value that was generated in case of AutoIncrement comes back as data parameter of
the event procedure.
PutData method
procedure PutData(
akey: JSValue;
data: JSValue;
sequenceID: JSValue = 0);
Use this method only if the database was created with out-of-line key specification.
Parameters
aKey - For Add operation, you must pass a unique key value. For Modify, pass the value of an existing key.
data - Pass any kind of data, even primitive data types can be passed.
sequenceID - Optional. Pass any value or object that will help you identify a particular PutData operation out of many in the OnResult event. Or, you can also pass any data as sequenceID that will help in processing the outcome in OnResult event.
Methods to Modify or Update Data
335
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
PutData method
There are 2 variations of this method. One is already described above for out-of-line key
specification. When you pass an existing key value to that PutData, it acts as a Modify
operation.
The second variation is without a key.
procedure PutData(
data: JSValue;
sequenceID: JSValue = 0);
Use this method only if the database was created with in-line key specification. In this case, the
data must be a JS Data Object and an existing key value must be passed as a key property to
modify that object or record.
DeleteData method
procedure DeleteData(
akey: JSValue;
sequenceID: JSValue = 0);
Pass the key of the object to be deleted. The sequenceID has same meaning as in earlier
methods.
Methods to Get Data
GetData method
procedure GetData(
akey: JSValue;
sequenceID: JSValue = 0);
Pass the key of the object to fetch. The object comes back as data in OnResult response event.
The sequenceID has same meaning as in earlier methods.
GetKeys method
procedure GetKeys(
sequenceID: JSValue = 0);
The data that comes back in the OnResult response event is a JS Array containing all the keys
in natural order. The sequenceID has same meaning as in earlier methods.
GetAllObjs method
336
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
procedure GetAllObjs(
sequenceID: JSValue = 0);
The data that comes back in the OnResult response event is a JS Array containing all the data
objects or items in natural order. The sequenceID has same meaning as in earlier methods.
Methods to Get Data by an Index
How permanent indexes are created in IndexedDB is described in the next section. Here, you
will find a description of the methods that get data in the order of a particular index.
GetIndexData method
procedure GetIndexData(
indexPropertyName: String;
akey: JSValue;
sequenceID: JSValue = 0);
This is similar to the GetData method described earlier except that you also pass the name of
an index to use and pass the key as the field value used in that index to fetch the data.
GetIndexKeys method
procedure GetIndexKeys(
indexPropertyName: String;
sequenceID: JSValue = 0);
This is similar to the GetIndexKeys method described earlier except that you also pass the
name of an index for which you want to get a list of keys.
GetAllObjsByIndex method
procedure GetAllObjsByIndex(
sequenceID: JSValue = 0);
This method is the most useful that is used by ClientDataSet to load the data. It is similar to
GetAllObjs described earlier. But it uses the value of 2 properties of the class to determine the
index and the order of the objects returned:
ActiveIndex - Set this to the index name to use for the order of objects. If this is set to empty string (default), the objects are returned in the order of the primary key index.
IndexDescending - Set this to False (default) to get the objects in ascending order. Set to True to get them in Descending order.
Setting up the Indexes
337
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
AddIndex
Use AddIndex to add one or more permanent indexes to the IndexedDB database. Make these
calls before you open the database. The index will be added only if the database does not exist
and hence is created on open. The AddIndex call is ignored for an existing database.
procedure AddIndex(
anIndexName: String;
fields: String;
isUnique: Boolean=False);
Where
anIndexName - the name to be given to the index
fields - the field name on which index is to be built. To specify more than one field
names, separate the names with semicolons
isUnique - Specify whether the field value is unique in each object (row)
Notes:
The call is ignored for an existing database.
Using indexes
This is described earlier under “Methods to Get Data by an Index”. There are two types of
methods.
Methods that require Index Name as a parameter. These are GetIndexData and
GetIndexKeys.
Methods that use the properties ActiveIndex and IndexDescending to work accodring to
an index. Currently there is only one such method, GetAllObjsByIndex. However, these
properties are also mapped to the TIndexedDbClientDataset component for easy use of
indexes when loading data internally by using GetAllObjsByIndex.
338
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
TMS WEB Electron
Electron is an open source library for creating cross-platform desktop applications with HTML,
CSS, and JavaScript. Combined with TMS WEB Core, Delphi developers can also create
applications for Windows, macOS and Linux by writing the code only once. More information on
Electron can be found on the offical website: https://electronjs.org/
The minimum required Electron version is: 3.1.3. If you already have Electron installed but the
version is lower than 3.1.3, then the minimum required version will be installed globally. If a
project needs a specific lower version, please install it locally.
Your first TMS Web Electron Application
To create a new Electron application from TMS WEB Core, select the “TMS Web Electron
Application” from the wizard:
339
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
It generates a project similar to a TMS Web PWA Application, but instead of the manifest and
serviceworker files, it has generated a main javascript file, a package file and 3 icons for the
different platforms:
To every Electron application the package.json is the starting point. This is where the engine will
search for the main javascript file that it can run. Both the default generated package.json and
main.js are capable of creating, running and packaging an application, but they can be further
customized by editing them.
The icon files can be changed through the project options:
340
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
When Electron: Version is not specified, the default Electron packager version installed on the
machine is used. If you have multiple different Electron packager versions installed on the
machine, you can specify here at project level what Electron packager version to use. As there
have been quite a few breaking changes between versions before Electron 6 and from Electron
6, a compiler define that you can use in your application code was introduced:
{$IFDEF ELECTRON6UP}
You can now develop your application like you would normally do with a TMS Web Application.
341
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
Building the application
In Debug mode, pressing F9 will compile the source code, then start up the Electron engine and
launch the application.
There are however small differences between the available 6 Build modes.
Build-Win32/Build-Win64 will create a packaged 32/64-bit Windows application. If F9
was pressed for building, then it will launch the application after packaging it.
Build-Linux32/Build-Linux64 will create a packaged 32/64-bit Linux application. After
copying the application to a Linux machine, it can be run.
Build-Mac32/Build-Mac64 currently only copies the source files to the Build folder,
because it’s not possible to create a packaged macOS application on a Windows
342
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
machine. The application can be created by copying the source code and
running electron-packager on the Mac.
Building on a Mac
If you are unfamiliar with macOS in general and you have no idea how to start with building, you
can follow these steps:
Prepare the system by installing NodeJS.
Use npm in the terminal to install electron-packager.
//for global installation:
npm install electron-packager -g
//for local installation:
npm install electron-packager
Navigate to the folder where the source code is, then from the terminal, run the following
command:
npm run build-mac64
This have produced a packaged application that can run on your Mac. It’s recommended to sign
the application if it’s for distribution. More information about that can be found
here: https://electronjs.org/docs/tutorial/code-signing
Accessing the Developer Tools
When the application is deployed in Debug mode Electron adds a default menubar to the
application if a TElectronMainMenu has not been added to the main form. The Developer Tools
can be accessed with View > Toggle Developer Tools or via the Ctrl+Shift+I shortcut. This might
be enough if something occasionally needs to be checked.
To force any window to have the Developer Tools opened after the given window is shown, use
the following code in the form’s OnCreate event:
ElectronWindow.OpenDevTools;
Drag and drop
Electron provides support for drag and drop functionality. There’s a difference between dragging
into and dragging out of an application.
In both cases the dragging needs be detected by an event, but at this moment these events for
TMS Web components are not yet completed. Until then with some simple javascript, the
dragging event detection can be handled.
From desktop to Electron
Dragging something into the application is actually a feature that is supported by HTML5.
Normally the full file path would not be accessable due to a security feature. Electron removes
343
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
this limitation as Electron applications are meant to run on a desktop using native features of the
operating system.
procedure TForm1.WebFormCreate(Sender: TObject);
var
el: TJSHTMLElement;
efl: TJSElectronFileList;
begin
el := WebMemo1.ElementHandle;
asm
el.ondragover = (e) => {
e.preventDefault();
};
el.ondrop = (e) => {
e.preventDefault();
efl = e.dataTransfer.files;
this.HandleFileDragDrop(efl);
};
end;
end;
procedure TForm1.HandleFileDragDrop(ElectronFL: TJSElectronFileList);
var
esl: TElectronStringList;
ef: TJSElectronFile;
begin
esl := TElectronStringList.Create;
ef := ElectronFL[0]; //use the first file in case of multiple files
esl.LoadFromFile(ef.path);
WebMemo1.Lines.Assign(esl);
esl.Free;
end;
From Electron to desktop Dragging something out of an Electron application is supported, but the file must already exist
on the local file system. If the file does not exist, it’s up to the developer to create it on the fly
based on the contents from the application. If the file is present, then it takes two steps to drag
something:
Send a message in the drag start handler via TElectronDragAndDrop with the path to the file
that should be dragged out.
procedure TForm1.WebFormCreate(Sender: TObject);
var
el: TJSHTMLElement;
begin
el := WebMemo1.ElementHandle;
asm
344
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
el.ondragstart = (e) => {
this.HandleDragStart();
};
end;
end;
procedure TForm1.HandleDragStart;
begin
ElectronDragAndDrop.StartDrag('/path_to_item');
end;
Set a dragging icon through TElectronDragAndDrop (for example in the OnCreate event of the
form). Setting an empty icon path might work on Windows but not on other platforms.
ElectronDragAndDrop.ListenToDrag('/path_to_icon');
Or if some code needs to be executed when the dragging is happening, ElectronDragAndDrop
has a ListenToDrag overload method, where the parameter is a method pointer.
procedure TForm1.WebFormCreate(Sender: TObject);
procedure DoDragEvent(AEvent: TIPCEvent; Args: JSValue);
begin
AEvent.sender.startDrag(new(['file', Args, 'icon', '/path_to_icon']));
//Code
end;
begin
ElectronDragAndDrop.ListenToDrag(@DoDragEvent);
end;
Fonts
Sometimes a nice looking application that has been created, does not look the same on another
platform, because the font differs. But why is the font not being shown as set? This is due to the
fact that different platforms can have different sets of fonts installed. If the used font is not
installed, then of course it cannot be used by the application. If this behavior is not desired, it
can be fixed by adding a font manually:
The first step is to add the font file to the project
345
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
Add the following code to the project html file
<style>
@font-face {
font-family: 'RobotoRegular';
src: url(Roboto-Regular.ttf) format('truetype');
}
</style>
Set the font at any control’s Font.Name property.
Electron Components
TElectronOpenDialog
Description
346
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
Below is a list of the most important properties and methods for TElectronOpenDialog. This
component allows to display a native open dialog.
Designtime Runtime
Properties for TElectronOpenDialog
Property Description
ButtonLabel:
string
Sets the text that will be shown inside the default “Open” button.
DefaultPath:
string
Sets the default path where the dialog is opened.
FileName:
string
Returns the filename with full path that has been opened.
Filters: string Sets the file type filters.
Options A set of options. On Windows and Linux an open dialog can’t be a file selector
and a directory selector at the same time. Choosing both will result in a directory
selector.
Title: string Sets the title of the open window.
Methods for TElectronOpenDialog
Property Description
Execute(AProc:
TSelectOpenFileCallBack = nil)
Function to show the open dialog. The last parameter is a
method pointer for a method that is optionally called when
347
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
Property Description
assigned when the dialog is closed.
See example usage at TElectronStringList: Example 1.
TElectronSaveDialog
Description
Below is a list of the most important properties and methods for TElectronSaveDialog. This
component allows to display a native save dialog.
Designtime Runtime
Properties for TElectronSaveDialog
Property Description
ButtonLabel: string Sets the text that will be shown inside the default
“Save” button.
DefaultPath: string Sets the default path where the dialog is opened.
FileName: string Returns the filename with full path that has been
saved.
Filters: string Sets the file type filters.
Title: string Sets the title of the save window.
Methods for TElectronSaveDialog
348
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
Property Description
Execute(AProc:
TSelectSaveFileCallBack = nil)
Function to show the save dialog. The last parameter is a
method pointer for a method that is optionally called when
assigned when the dialog is closed.
See example usage at TElectronStringList: Example 2.
TElectronMessageBox
Description
Below is a list of the most important properties and methods for TElectronMessageBox. This
component allows to display a native message dialog.
Designtime Runtime
Properties for TElectronMessageBox
Property Description
Buttons: TStringList Sets the buttons
CancelId: Integer Sets the index of the button to be used to cancel the dialog via the Esc
key. By default it’s assigned to the first button that has the “Cancel” or
“No” label.
CheckboxChecked:
Boolean
Sets and returns the checked status of the checkbox.
CheckboxLabel: string Sets the checkbox text.
DefaultId: Integer Index of the button from the Buttons list which will be selected by
default.
Detail: string Adds extra information to the Message of the dialog.
DialogType Sets the type of the dialog. The default value is embNone. On Windows
embQuestion has the same icon as embInfo. On macOS embWarning
and embError has the same warning icon.
IconPath: string Sets the path to the icon.
349
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
Property Description
IconURL: string Base64 encoded string that represents the icon.
Message: string Sets the content of the dialog.
NoLink: Boolean On Windows Electron tries to figure out the common buttons from the
Buttons list (for example: “Yes”, “Cancel”). The rest will be turned into
command links.
NormalizeAccessKeys:
Boolean
Normalize the keyboard access keys across platforms. Use & in the
button label, which then will be converted for each platform
accordingly. For example, a button label of Vie&w will be converted to
Vie_w on Linux and View on macOS and can be selected via Alt-W on
Windows and Linux.
Response: Integer Returns the index of the button that was clicked.
Title: string Sets the title of the dialog.
Methods for TElectronMessageBox
Property Description
Execute(AProc:
TSelectMessageBoxCallBack = nil)
Function to show the message dialog. The last parameter is a
method pointer for a method that is optionally called when
assigned when the dialog is closed.
TElectronErrorBox
Description
Below is a list of the most important properties and methods for TElectronErrorBox. This
component allows to display a native error dialog.
Designtime Runtime
Properties for TElectronErrorBox
350
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
Property Description
Content: string Sets the content of the dialog.
Title: string Sets the title of the dialog.
Methods for TElectronErrorBox
Property Description
Execute Function to show the error dialog.
TElectronMainMenu
Description
This component allows to display a native menubar when the application is launched. Creating a
TElectronMainMenu and adding TElectronMenuItems to it is similar to VCL’s TMainMenu.
Designtime Runtime
Updating a TElectronMainMenu
Due to an Electron limitation, it’s not possible to update a menu dynamically. This means the
menu needs to be recreated and reassigned to the window after each modification. To make this
procedure simple, just call the following line after modifying a menu:
ElectronMainMenu1.EndUpdate;
TElectronPopupMenu
Description
This component allows to display a popup menu. Creating a TElectronPopupMenu and adding
TElectronMenuItems to it is similar to VCL’s TPopupMenu.
351
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
Designtime Runtime
Methods for TElectronPopupMenu
Property Description
Popup(X, Y: Integer) Show the popup menu at X and Y coordinates.
Updating a TElectronPopupMenu
Due to an Electron limitation, it’s not possible to update a menu dynamically. This means the
menu needs to be recreated and reassigned to the window after each modification. To make this
procedure simple, just call the following line after modifying a menu:
ElectronPopupMenu1.EndUpdate;
TElectronBrowserWindow
Description
Below is a list of the most important properties and methods for TElectronBrowserWindow. This
component allows the creation of multiple application windows, which can be linked to forms or
other sources.
352
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
Designtime Runtime
Properties for TElectronBrowserWindow
Property Description
FormClass: TFormClass Sets the form class of the TElectronBrowserWindow.
FullScreen: Boolean Setting it to true will open the window in fullscreen.
FullScreenable: Boolean Determines if the window can be set to fullscreen by the user or not.
IconPath: string Sets the path to the icon.
IconURL: string Base64 encoded string that represents the icon.
Kiosk: Boolean Setting it to true will open the window in kiosk mode.
MaxHeight: Integer Sets the maximum height of the window.
MaxWidth: Integer Sets the maximum width of the window.
MinHeight: Integer Sets the minimum height of the window.
MinWidth: Integer Sets the minimum width of the window.
Resizable: Boolean Sets the resizability of the window.
Methods for TElectronBrowserWindow
Property Description
Close Method to close the window.
ForceClose Method to force the closing of the window.
Hide Method to hide the window.
353
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
Property Description
LoadFromURL(URL: string) Method to load from the given URL. It can be a URL or
a path to a local file too.
SendMessage(AMessage: string) Method to send message to window.
SendMessage(AMessage: JSValue) Method to send message to the window.
SendMessage(Channel: string;
AMessage: string)
Method to send message to a channel.
SendMessage(Channel: string;
AMessage: JSValue)
Method to send message to a channel.
Show Method to show the window.
ShowModal Method to show the window as a modal It blocks the
parent window.
Events for TElectronBrowserWindow
Property Description
OnActivate Triggers when the window gains focus.
OnClose Triggers when the window closes.
OnDeactivate Triggers when the window loses focus.
OnExitFullScreen Triggers when the window exits fullscreen mode.
OnFullScreen Triggers when the window enters fullscreen mode.
OnHide Triggered when the window gets hidden.
OnMaximize Triggers when the window is maximized.
OnMessage Triggers when a message has been sent from the window to the parent
window (= the form that contains the TElectronBrowserWindow instance).
OnMinimize Triggers when the window is minimized.
OnResize Triggers when the window is resized.
OnShow Triggers when the window is shown.
Multiple windows using forms
Forms that are added to the project can be used as a source for the page to be shown in the
window. In order to achieve this, a few steps have to be made:
First of all the project.dpr file needs to be prepared to handle the routing of the forms. Add the
WEBLib.Tools unit to the uses list. After that, the code that is responsible for starting the
354
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
application needs to be modified to the code below.
var
s: string;
begin
Application.Initialize;
Application.AutoFormRoute := True;
Application.MainFormOnTaskbar := True;
if HasQueryParam('form', s) then
Application.RouteForm(s)
else
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
Whenever a new form is added to the project, it needs to be registered in the initialization
section.
initialization
RegisterClass(TForm2);
And for the last step, the form class needs to be assigned to the correct
TElectronBrowserWindow instance. To do this, first the unit that contains the form has to be
added to the uses list.
For example: We would like to use the TForm2 from Unit2 in Unit1. Then in the uses list of Unit1
add Unit2.
After this, in the form’s OnCreate event we can assign the form class to the
TElectronBrowserWindow with the code below.
ElectronBrowserWindow1.FormClass := TForm2;
From now on, whenever ElectronBrowserWindow1.Show is called, it creates the window for us
automatically.
Multiple windows using other sources
An HTML file or a link to a website can also be used inside a TElectronBrowserWindow. In this
case the only necessary step is to call the URL load method in the OnCreate event of the form.
ElectronBrowserWindow1.LoadFromURL('https://www.tmssoftware.com/');
or
355
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
ElectronBrowserWindow1.LoadFromURL('/path_to_html/myFile.html');
If the application is targeted for multiple platforms, it’s best to use relative paths.
Showing a window
To show the window after its content had been set, simply call Show or ShowModal. The
expected behaviour is that showing a modal window will block the parent window until the
modal itself gets closed. On macOS this modal window is a sheet that is attached to the parent
window, and since it’s blocking the parent from closing, it also blocks the whole application
from closing. Keep in mind to always provide a way to the user to close the modal window.
TElectronTrayIcon
Description
Below is a list of the most important properties and events for TElectronTrayIcon. This
component allows to add a tray icon with an optional popup menu to the application.
Designtime Runtime
Properties for TElectronTrayIcon
Property Description
IconPath: string Sets the path to the icon.
IconURL: string Base64 encoded string that represents the icon.
Menu: TElectronPopupMenu Sets the menu to be shown when the tray icon is clicked.
ToolTip: string Sets the tooltip text.
Events for TElectronTrayIcon
Property Description
OnClick Triggered when the mouse is clicked on the tray icon.
TElectronIPCCommunication
Description
Below is a list of the most important properties, methods and events for TElectronTrayIcon. This
component allows the communication between windows. It uses TElectronIPCMain and
TElectronIPCRenderer internally.
356
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
Properties for TElectronIPCCommunication
Property Description
Channel:
string
Sets the channel the IPCRenderer is going to listen to. If left blank, it listens to a
default channel that is also used by
TElectronBrowserWindow.SendMessage(AMessage: string).
Methods for TElectronIPCCommunication
Property Description
Send(Channel: string; AMessage: JSValue) Sends a message to the specified channel.
Send(Channel: string; AMessage: string) Sends a message to the specified channel.
SendToParent(AMessage: JSValue) Send a message to the parent window.
Events for TElectronIPCCommunication
Property Description
OnReceive Triggers when a message has been received on the default channel. If the
Channel property is set, then it triggers when a message arrives on that channel.
Send message to parent
Sending a message to the parent window is as easy as dropping a TElectronIPCCommunication
onto the form and calling
ElectronIPCCommunication1.SendToParent('message');
Meanwhile on the parent side the sender form’s TElectronBrowserWindow.OnMessage event will
trigger when messages sent via the SendToParent method are arriving.
Send message to a channel
It’s possible to send a message to a defined channel. This way the communication is enabled
between every window and not just parent-child windows.
A specific channel can be defined, but it’s not required since every TElectronIPCCommunication
is listening to a default channel if no Channel is given.
Sending a message to another form is as simple as calling:
ElectronIPCCommunication1.Send('Form2', 'message');
When the Channel property is defined, then the TElectronIPCCommunication component is
listening for messages that are arriving on that channel. This allows further possibilites:
357
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
Multiple messages can be distinguished: Multiple TElectronIPCCommunication
instances are dropped onto the form, and each of them are listening to a different
channel.
Multicast: On multiple forms the TElectronIPCCommunication instances are listening for
the same channel.
Receiving messages
Whenever a message has arrived to the channel that’s being listened by the
TElectronIPCCommunication, the OnReceive event triggers.
The message it receives is defined as TReceivedValue. A message type check can be made
before proceeding with the processing of the message:
if AMessage.ValueType = jvtString then
begin
WebMemo1.Lines.Add(AMessage.AsString);
end;
The following types are supported: String, Boolean, Integer, Object (TJSObject), Array (TJSArray)
and Float.
Replying to a sender
It’s reasonable to ask what happens if a reply needs to be sent, but the sender is not the parent.
In this case the OnReceive event’s Sender: TBrowserWindow parameter can be used. A
TBrowserWindow object maps directly onto Electron’s BrowserWindow. Therefore the code will
differ a little bit, but the channel naming is the same as explained in the Send message to a
channel section.
Sender.webContents.send('Form3', 'reply');
or
Sender.webContents.send('custom-channel', 'reply');
TElectronFileWatcher
Description
Below is a list of the most important properties for TElectronFileWatcher. This component allows
to monitor a list of files for changes.
Properties for TElectronFileWatcher
358
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
Property Description
Files A container of TElectronFileWatch items
TElectronFileWatch
It has a FileName: string property for the filename and an OnChange event which triggers when
the watched file has been modified. The filenames can be relative paths, but please keep in mind
that relative paths might differ on each platform, especially after application packaging. If more
than one platform is targeted, then it’s recommended to set up the TElectronFileWatcher
programmatically and use the TElectronPath class to retreive common paths.
TElectronGlobalShortcut
Description
Below is a list of the most important properties and events for TElectronGlobalShortcut. This
component allows adding listeners for keyboard shortcuts that are recognized even when the
application is not in focus.
Properties for TElectronGlobalShortcut
Property Description
ShortCut Sets the keyboard shortcut.
It’s enough to use Ctrl or Cmd only as under the hood it’s getting translated to Electron’s
CommandOrControl. On Linux Ctrl key shortcuts sometimes are not working as expected.
Events for TElectronGlobalShortcut
Property Description
OnShortcut Triggers when the defined shortcut is pressed on the keyboard.
TElectronStringList
Below is a list of the methods for TElectronStringList. This class allows reading from files and
writing to files.
Methods for TElectronStringList
Property Description
LoadFromFile(const FileName: Loads the contents of the file from the local file system into a
359
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
Property Description
string) stringlist.
SaveToFile(const FileName: string) Writes the contents of the stringlist into a file on the local file
system.
Example 1: Open file contents using TElectronStringList and TElectronOpenDialog
procedure TForm1.WebButton1Click(Sender: TObject);
var
sl: TElectronStringList;
begin
if ElectronOpenDialog1.Execute then
begin
sl := TElectronStringList.Create;
sl.LoadFromFile(ElectronOpenDialog1.FileName);
Meditor.Lines.Assign(sl);
sl.Free;
end;
end;
Example 2: Save to file using TElectronStringList and TElectronSaveDialog
procedure TForm1.WebButton2Click(Sender: TObject);
var
sl: TElectronStringList;
fn: string;
begin
if ElectronSaveDialog1.Execute then
begin
sl := TElectronStringList.Create;
fn := ElectronSaveDialog1.FileName;
sl.Assign(WebMemo1.Lines);
sl.SaveToFile(fn);
sl.Free;
end;
end;
TElectronBinaryDataStream
Below is a list of the properties and methods for TElectronBinaryDataStream. This class allows
reading and writing files using binary data.
Properties for TElectronBinaryDataStream
360
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
Property Description
Base64: string Set or retrieve the stored data as a Base64 encoded string.
Text: string Set or retrieve the stored data as a string.
Methods for TElectronBinaryDataStream
Property Description
LoadFromFile(const FileName: string) Method to read data from a file from the local file system.
SaveToFile(const: FileName: string) Method to save data to a file on the local file system.
AsArrayBuffer: TJSArrayBuffer Function to return the stored data as a TJSArrayBuffer.
TElectronClipboard
Below is a list of the properties and methods for TElectronClipboard. This class allows reading
and writing clipboard data. Instead of creating a TElectronClipboard instance, ElectronClipboard
can be used.
Properties of TElectronClipboard
Property Description
AsHTML: string Sets or returns the data from the clipboard in HTML format.
AsImageURL: string Sets or returns the data from the clipboard in image data format.
AsRTF: string Sets or returns the data from the clipboard in RTF format.
AsText: string Sets or returns the data from the clipboard in plain text (string) format.
FormatCount:
Integer
Returns the number of formats that are available in the clipboard at that
moment.
Formats A list of the available formats.
Methods of TElectronClipboard
Property Description
Clear Method to clear the data from the clipboard.
HasFormat(Format: string):
Boolean
Returns true if the clipboard has data available in the given
format.
361
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
TElectronShell
Below is a list of available methods for TElectronShell. This class allows invoking native
functionalities of the operating system. Instead of creating a TElectronShell instance,
ElectronShell can be used.
Methods for TElectronShell
Property Description
Beep Method to play the beep sound.
OpenExternal(URL: string):
Boolean
Function that tries to open an external link. Returns true if it was
successful. Max 2081 characters on Windows, or the function
returns false.
OpenItem(FullPath: string) Function that tries to open an item on the operating system,
using the default application. Returns true if it was successful.
MoveItemToTrash(FullPath:
string)
Function that tries to move an item to the trash. Returns true if it
was successful.
ShowItemInFolder(FullPath:
string)
Function that tries to show an item in the folder it is located in.
Returns true if it was successful.
TElectronIPCMain
Below is a list of the available methods for TElectronIPCMain. This class allows listening to
channels. It’s used in the TElectronIPCCommunication component. Instead of creating a
TElectronIPCMain instance, ElectronIPCMain can be used.
Methods for TElectronIPCMain
Property Description
Listen(Channel: string; Listener:
TIPCEventHandler)
Method to set a listener for a defined channel. The Listener
will be invoked everytime a message arrives on the given
channel. Multiple listeners can be assigned to the same
channel.
ListenOnce(Channel: string; Listener: Method to set a listener for a defined channel that will be
362
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
Property Description
TIPCEventHandler) executed only once - when the first message arrives onto
the channel.
RemoveAllListeners(Channel: string) Method to remove all listeners on the defined channel.
The listeners (= callbacks) passed to the main process will persist until the main process
garbage-collects them. Therefore it’s important to uninstall the listeners using the
‘RemoveAllListeners’ method. More information on this can be found in the Electron
documentation: https://electronjs.org/docs/api/remote
TElectronIPCRenderer
Below is a list of the available methods for TElectronIPCRenderer. This class allows listening to
channels and sending messages to channels. It’s used in the TElectronIPCCommunication
component. Instead of creating a TElectronIPCRenderer instance, ElectronIPCRenderer can be
used.
Methods for TElectronIPCRenderer
Property Description
Listen(Channel: string; Listener:
TIPCEventHandler)
Method to set a listener for a defined channel. The Listener
will be invoked everytime a message arrives onto the given
channel. Multiple listeners can be assigned to the same
channel.
ListenOnce(Channel: string; Listener:
TIPCEventHandler)
Method to set a listener for a defined channel that will be
executed only once - when the first message arrives onto
the channel.
RemoveAllListeners(Channel: string) Method to remove all listeners on the defined channel.
Send(Channel: string; JSObject:
JSValue)
Method to send a message to the given channel.
Send(Channel: string; AMessage:
string)
Method to send a message to the given channel.
The listeners (= callbacks) passed to the main process will persist until the main process
garbage-collects them. Therefore it’s important to uninstall the listeners using the
‘RemoveAllListeners’ method. More information on this can be found in the Electron
documentation: https://electronjs.org/docs/api/remote
363
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
TElectronDragAndDrop
Below is a list of available methods for TElectronDragAndDrop. This class allows dragging items
out of an Electron application. For detailed information please take a look at the Drag and drop
part of the documentation. Instead of creating a TElectronDragAndDrop instance,
ElectronDragAndDrop can be used.
Property Description
ListenToDrag(IconPath:
string)
Method to listen for dragging events and set the icon path for the
dragging. On Windows an empty path might be accepted, on
other platforms it’s required to have a valid icon path.
ListenToDrag(Listener:
TIPCEventHandler)
Method to listen for dragging events. The icon and additional code
needs to be added in the Listener.
StartDrag(PathToItem:
string)
Method to set the file path to be dragged out of the applicaiton.
TElectronPath
Below is a list of the available methods for TElectronPath. This class allows to retrieve common
paths accross all supported platforms. Instead of creating a TElectronPath instance, ElectronPath
can be used.
Methods for TElectronPath
Property Description
GetAppData:
string
Funcion to retrieve the path to the per-user application data directory.
GetDesktop: string Function to retrieve the path to the desktop directory.
GetDocuments:
string
Function to retrieve the path to the Documents directory.
GetDownloads:
string
Function to retrieve the path to the Download directory.
GetExe: string Function to retrieve the path to the current executable file.
364
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
Property Description
GetHome: string Function to retrieve the path to the user’s home directory.
GetUserData:
string
Function to retrieve the path to the application’s configuration files. By
default this means appData + the application name.
GetPictures: string Function to retrieve the path to the Pictures directory.
GetTemp: string Function to retrieve the path to the temporary directory.
GetVideos: string Function to retrieve the path to the Videos directory.
TElectronWindow
Below is a list of available methods for TElectronWindow. This class allows to control the page
that has been loaded into the window (for example: edit commands). Instead of creating a
TElectronWindow instance, ElectronWindow can be used.
Methods for TElectronWindow
Property Description
CloseApp Method to invoke an application closing call.
CloseWindow Method to invoke a window closing call.
CloseDevTools Method to close the developer tools.
Copy Method that executes the copy editing command.
CopyImageAt(X, Y: NativeInt) Method that copies the image at the given position to the
clipboard.
Cut Method that executes the cut editing command.
Delete Method that executes the delete editing command.
DownloadURL(URL: string) Method that initiates the download of the resource at the URL
without navigating. It will prompt a save dialog.
GetURL: string Function that retrieves the current URL.
OpenDevTools Method to open the developer tools.
Paste Method that executes the paste editing command.
Redo Method that executes the redo editing command.
Reload Method for reloading the current window.
Replace(AText: string) Method that executes the replace editing command.
365
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
Property Description
ReplaceMisspelling(AText:
string)
Method that executes the replaceMisspelling editing command.
SelectAll Method that executes the selectAll editing command.
ToggleDevTools Method to toggle the developer tools.
Undo Method that executes the undo editing command.
Unselect Method that executes the unselect editing command.
Other available methods
Property Description
CreateBlobFromFile(FileName: string):
TJSBlob
Function that creates a TJSBlob from a file using the
given file name.
CreateUint8ArrayFromFile(FileName:
string): TJSUint8Array
Function that creates a TJSUint8Array from a file using
the given file name.
DownloadToFolder(URL, Path: string) Method to download the resource from the given URL
to the given Path, without prompting a saving dialog.
GetElectronFileList(Source: TJSEvent):
TJSElectronFileList
Function to be used with the WEB components’ drag
and drop functionality. From the source it will create
an array of TJSElectronFile which equals to
TJSHTMLFile with an additional path property.
ShortCutToText(ShortCut: TShortCut):
string
Function that creates an Electron accepted shortcut
string from a TShortCut.
Custom control development
Under the TMS RADical Web umbrella, TMS WEB Core is the foundation framework. As one of
the goals of TMS RADical Web is to bring RAD to web development for Delphi developers, it is
only logical that using components to develop web applications is an essential part. While TMS
WEB Core already comes with a wide range of components out of the box, having an extensible
component framework is a key feature. In this article, we will have a look at building custom
components for TMS WEB Core.
TMS WEB Core components can be categorized in roughly 4 types:
366
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
- Non-visual components
- Visual controls wrapping a HTML element or hierarchy of HTML elements
- Visual controls using the FNC abstraction layer (that cross-framework, cross-platform and
web-enabled)
- Visual controls wrapping jQuery controls
Non-visual components
The good news here is that non-visual components for TMS WEB Core are identical to non-
visual components for VCL or FMX applications. In TMS WEB Core, the base classes
TComponent & TPersistent are available and new non-visual components can be inherited from
these base classes and properties, events, methods can be added. The non-visual component
can be added to web forms just like VCL non-visual components can be added to VCL forms.
Note though that the standard VCL non-visual components included in Delphi can't be used as-
is on web forms. After all, all this code needs to run directly in the browser. But already out of
the box, TMS WEB Core offers many equivalents to standard VCL non-visual components like
the TWebTimer for example being equivalent for TTimer or a TWebDataSource as equivalent
for TDataSource.
There is one key requirement to make your custom non-visual component available on the
Delphi component palette when a web project is opened and that is to decorate the component
with an attribute TMSWebPlatform (defined in WebLib.Controls.pas):
[ComponentPlatforms(TMSWebPlatform)]
TMyWebComponent = class(TComponent)
private
// your private variables & methods here
protected
// your protected methods here
public
// your public methods here
published
// your published properties and events here
end;
Visual controls wrapping HTML elements
The architecture for this type of controls is based on writing a Pascal class that wraps the HTML
element or element hierarchy. The Pascal wrapper class will do the following:
- create the HTML element(s) in the DOM or bind to existing HTML elements in the HTML file
associated with the web form
- bind the HTML element JavaScript events to Pascal class methods
367
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
- reflect Pascal class properties on HTML element(s) attributes
To create such component, it can inherit from TCustomControl that already includes much of
the required logic. Key virtual methods and essential properties defined in TCustomControl are:
TCustomControl = class(TComponent)
protected
function CreateElement: TJSElement; virtual;
function ContainerElement: TJSElement; virtual;
procedure BindElement; virtual;
procedure UpdateElementSize; virtual;
procedure UpdateElementVisual; virtual;
procedure UpdateElementData; virtual;
procedure CreateInitialize; virtual;
published
property ElementID;
property ElementClassName;
end;
Override the CreateElement function to create the HTML element or HTML element hierarchy
needed for the control. This function returns a reference to the parent or container HTML
element for the control. If only a single HTML element will be needed in the custom control, this
is as simple as:
function TMyCustomControl.CreateElement: TJSElement;
begin
Result := document.createElement('DIV');
end;
The parent or container element returned by the CreateElement function can be retrieved from
other places in the control code via the function ContainerElement.
The CreateElement function will be called automatically from the base class when the control
ElementID is empty at the time the control parent is set. When ElementID is not empty, the
container element is retrieved from the DOM based on ElementID value, i.e. the control class
will use the HTML element returned by document.getElementById(ElementID).
By default, JavaScript event binding is done on the container element. The base class already
binds the JavaScript onwheel, onclick, onmousedown, onmouseup, onmousemove,
onmouseleave, onmouseenter, onkeydown, onkeyup, onkeypress, onfocus and onblur events.
The base class already maps these JavaScript events on virtual class methods with a signature
compatible with VCL, that are easy to override. These are for example the available virtual key
and mouse event related methods:
368
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
TCustomControl = class(TComponent)
protected
procedure MouseUp(Button: TMouseButton; Shift: TShiftState; X,Y:
Integer); virtual;
procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X,Y:
Integer); virtual;
procedure MouseMove(Shift: TShiftState; X,Y: Integer); virtual;
procedure DoMouseEnter; virtual;
procedure DoMouseLeave; virtual;
procedure MouseWheel(Shift: TShiftState; WheelDelta: Integer; var
Handled: Boolean); virtual;
procedure DblClick; virtual;
procedure KeyDown(var Key: Word; Shift: TShiftState); virtual;
procedure KeyPress(var Key: Char); virtual;
procedure KeyUp(var Key: Word; Shift: TShiftState); virtual;
end;
So, from our custom control, all we need to do is override these virtual methods, so it is very
similar to writing VCL custom controls.
Three more important virtual methods that will typically be overridden are:
procedure UpdateElementSize; virtual;
procedure UpdateElementVisual; virtual;
procedure UpdateElementData; virtual;
The UpdateElementSize procedure is supposed to do the necessary HTML element attribute
changes when the position and/or size of the control changes. The base class TCustomControl
will already handle this for the container element Top,Left,Width & Height. (when the control is
absolute positioned that is).
The UpdateElementVisual method is the place where typically Pascal class properties that
affect the visual appearance of controls, are mapped onto HTML element(s) attributes.
The UpdateElementData method is the place where properties that affect data connected to
controls is updated in the HTML element. To illustrate this, let's assume our custom control
mapping on a HTML DIV element has a color property to set background color of the DIV and a
text property for the text in the HTML DIV element. The corresponding code for this is:
uses
Classes, WEBLib.Controls, Web;
TMyCustomControl = class(TCustomControl)
private
FColor: TColor;
369
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
FText: string;
procedure SetColor(const AValue: TColor);
procedure SetText(const AValue: string);
protected
function CreateElement: TJSElement; override;
procedure UpdateElementVisual; override;
procedure UpdateElementData; override;
published
property Color: TColor read FColor write SetColor;
property Text: string read FText write SetText;
end;
function TMyCustomControl.CreateElement: TJSElement;
begin
Result := document.createElement('DIV');
end;
procedure TMyCustomControl.SetColor(const AValue: TColor);
begin
if (AValue <> FColor) then
begin
FColor := AValue;
UpdateElementVisual;
end;
end;
procedure TMyCustomControl.SetText(const AValue: string);
begin
if (AValue <> FText) then
begin
FText := AValue;
UpdateElementData;
end;
end;
procedure TMyCustomControl.UpdateElementVisual;
var
el: TJSHTMLElement;
begin
inherited;
el := TJSHTMLElement(ContainerElement);
el.style.setProperty('background-color', ColorToHTML(Color));
end;
370
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
procedure TMyCustomControl.UpdateElementData;
var
el: TJSHTMLElement;
begin
inherited;
el := TJSHTMLElement(ContainerElement);
el.innerHTML := Text;
end;
Finally, to finish this first basic custom control example, let's add a click handler. As the base
class already binds the container element 'onclick', this is as simple as:
TMyCustomControl = class(TCustomControl)
published
property OnClick;
end;
For the sake of completeness, let's discuss also how to map control methods on HTML element
JavaScript events. This is done with the HTML element addEventListener() method.
Example:
TMyCustomControl = class(TCustomControl)
protected
function HandleDoXXXX(Event: TEventListenerEvent): Boolean; virtual;
procedure BindEvents; override;
end;
procedure TMyCustomControl.BindEvents;
begin
inherited;
Container.addEventListener('xxxx',@HandleDoXXXX);
end;
function TMyCustomControl.HandleDoXXXX(Event: TEventListenerEvent):
Boolean;
begin
// code to be executed when Javascript event XXXX is executed
Result := true;
end;
Assume the HTML event has a JavaScript event named XXXX, the control class method
HandleDoXXXX will be called when this JavaScript event is triggered.
371
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
Visual controls using the FNC abstraction layer
A second approach to create custom controls for TMS WEB Core is by inheriting from the base
class TTMSFNCCustomControl defined in the TMS FNC Core. The good news is that by doing
so, the control code will work for VCL applications, FMX applications, LCL applications and of
course also web applications. Technically, for a web application, an FNC web control will
internally create a HTML CANVAS element. It maps all needed JavaScript events on this
CANVAS to the control virtual methods and it offers an FNC TTMSFNCGraphics Pascal
wrapper class to perform the painting of these controls.
To get started, the FNC units we will use are:
WEBLib.TMSFNCCustomControl : defines the base class TTMSFNCCustomControl
WEBLib.TMSFNCGraphics : defines the class TTMSFNCGraphics for painting
WEBLib.TMSFNCTypes : defines various types used with custom controls
WEBLib.TMSFNCGraphicsTypes : defines various types for handling painting
The class interface can be defined as:
TMyFNCCustomControl = class(TTMSFNCCustomControl)
private
FColor: TColor;
FText: string;
FDown: boolean;
procedure SetColor(const AValue: TColor);
procedure SetText(const AValue: string);
protected
procedure HandleMouseDown(Button: TTMSFNCMouseButton; Shift:
TShiftState; X, Y: Single); override;
procedure HandleMouseUp(Button: TTMSFNCMouseButton; Shift:
TShiftState; X, Y: Single); override;
procedure HandleKeyPress(var Key: Char; Shift: TShiftState);
override;
procedure Draw(AGraphics: TTMSFNCGraphics; ARect: TRectF);
override;
published
property Color: TColor read FColor write SetColor;
property Text: string read FText write SetText;
end;
The implementation for the property setters is:
372
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
procedure TMyFNCCustomControl.SetColor(const AValue: TColor);
begin
if (AValue <> FColor) then
begin
FColor := AValue;
Invalidate;
end;
end;
procedure TMyFNCCustomControl.SetText(const AValue: string);
begin
if (AValue <> FText) then
begin
FText := AValue;
Invalidate;
end;
end;
To have the control draw itself, all we need to do is override the FNC control Draw() virtual
method.
procedure TMyFNCCustomControl.Draw(AGraphics: TTMSFNCGraphics; ARect:
TRectF);
begin
inherited;
if FDown then
AGraphics.Fill.Color := gcGray
else
AGraphics.Fill.Color := Color;
AGraphics.DrawRectangle(ARect);
AGraphics.DrawText(10,10,FText);
end;
Let's implement for this basic sample a key event handler that will add the character pressed to
the control text and the mouse down that will show the control in a different color.
procedure TMyFNCCustomControl.HandleKeyPress(var Key: Char; Shift:
TShiftState);
begin
Text := Text + Key;
end;
procedure TMyFNCCustomControl.HandleMouseDown(Button:
TTMSFNCMouseButton; Shift: TShiftState; X, Y: Single);
begin
373
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
FDown := true;
Invalidate;
end;
procedure TMyFNCCustomControl.HandleMouseUp(Button:
TTMSFNCMouseButton; Shift: TShiftState; X, Y: Single);
begin
FDown := false;
Invalidate;
end;
Visual controls wrapping jQuery controls
Creating a Pascal wrapping class for a jQuery UI control has in fact several similarities with
creating a wrapping class for HTML elements as jQuery UI controls are exactly that, a hierarchy
of HTML elements. What is a bit different is that typically the jQuery control is created by calling
a JavaScript function that creates it. The jQuery object then typically exposes its own events
and our control needs to bind to these events. To facilitate this, the TMS WEB Core framework
offers a base class TjQueryCustomControl. This class adds the virtual method InitjQuery() that
is called when the jQuery control needs to be created and the function GetJQID function that
returns the unique jQuery ID for our control. The jQuery control will by default be hosted in a
HTML DIV element. What we learned from wrapping HTML elements, is that the virtual methods
UpdateElementVisual() / UpdateElementData() are what is called when property changes need
to be reflected in the control jQuery settings or data.
To create a Pascal wrapper class for a jQuery control, the minimal approach is as such:
TmyJQueryControl = class(TjQueryCustomControl)
protected
procedure InitJQuery; override;
end;
procedure TmyJQueryControl.InitJQuery;
begin
// create the jQuery control here
end;
To show the basic concepts, we demonstrate this with a minimal wrapper for the a nice jQuery
progress bar offered here: https://kimmobrunfeldt.github.io/progressbar.js/
374
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
Following the docs of this library, to create the jQuery progressbar, we need the following
JavaScript code for a half circle progressbar:
var bar = new ProgressBar.SemiCircle(div, {options});
To update the position of the progressbar, we can use bar.animate(position); // with position a
value between 0 and 1.
So, our full control code becomes:
TjQueryProgressBar = class(TjQueryCustomControl)
private
FPosition: double;
FBar: TJSElement;
procedure SetPosition(const Value: double);
protected
procedure InitJQuery; override;
procedure UpdateElementVisual; override;
published
property Position: double read FPosition write SetPosition;
end;
{ TjQueryProgressBar }
procedure TjQueryProgressBar.InitJQuery;
var
eh: TJSElement;
begin
eh := ElementHandle;
asm
this.FBar = new ProgressBar.SemiCircle(eh, {
strokeWidth: 6,
easing: 'easeInOut',
duration: 1400,
375
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
color: '#FFEA82',
trailColor: '#eee',
trailWidth: 1,
svgStyle: null
});
end;
end;
procedure TjQueryProgressBar.SetPosition(const Value: double);
begin
if (FPosition <> Value) then
begin
FPosition := Value;
UpdateElementVisual;
end;
end;
procedure TjQueryProgressBar.UpdateElementVisual;
begin
inherited;
if IsUpdating then
Exit;
if not Assigned(FBar) then
Exit;
asm
this.FBar.animate(this.FPosition);
end;
end;
Note here the asm/end blocks in the code. As for reasons of simplicity, we have not taken the
effort to create a Pascal wrapper class for the ProgressBar jQuery object, we need to directly
access this jQuery object with JavaScript. It is in the asm/end block in our Pascal code that we
can directly write this JavaScript code. This code does not get compiled but is just directly
generated inline as-is. As you can see, we map a private variable FBar to the created jQuery
object created in the InitJQuery call and from the UpdateElementVisual override, this FBar
object is accessed to call its animate() function to update the value. Also noteworthy is that from
the asm/end block, we access the instance as "this".
After creating an instance of this control, we can simply add the following code to the button
click handler:
WebjQueryProgressBar1.Position := 0.5;
And the result becomes:
376
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
377
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
Appendix
Browser locale values
Code Language Code Language Code Language Code Language Code Language
af Afrikaans hr Croatian el Greek pl Polish sx Sutu
sq Albanian cs Czech gu Gujurati pt Portuguese sw Swahili
ar Arabic
(Standard)
da Danish ht Haitian pt-br Portuguese
(Brazil)
sv Swedish
ar-dz Arabic
(Algeria)
nl Dutch
(Standard)
he Hebrew pa Punjabi sv-fi Swedish
(Finland)
ar-bh Arabic
(Bahrain)
nl-be Dutch
(Belgian)
hi Hindi pa-in Punjabi
(India)
sv-sv Swedish
(Sweden)
ar-eg Arabic
(Egypt)
en English hu Hungarian pa-
pk
Punjabi
(Pakistan)
ta Tamil
ar-iq Arabic
(Iraq)
en-
au
English
(Australia)
is Icelandic qu Quechua tt Tatar
ar-jo Arabic
(Jordan)
en-bz English
(Belize)
id Indonesian rm Rhaeto-
Romanic
te Teluga
ar-
kw
Arabic
(Kuwait)
en-ca English
(Canada)
iu Inuktitut ro Romanian th Thai
ar-lb Arabic
(Lebanon)
en-ie English
(Ireland)
ga Irish ro-
mo
Romanian
(Moldavia)
tig Tigre
ar-ly Arabic
(Libya)
en-
jm
English
(Jamaica)
it Italian
(Standard)
ru Russian ts Tsonga
ar-
ma
Arabic
(Morocco)
en-nz English (New
Zealand)
it-ch Italian
(Switzerland)
ru-
mo
Russian
(Moldavia)
tn Tswana
ar-
om
Arabic
(Oman)
en-
ph
English
(Philippines)
ja Japanese sz Sami
(Lappish)
tr Turkish
ar-qa Arabic
(Qatar)
en-za English (South
Africa)
kn Kannada sg Sango tk Turkmen
ar-sa Arabic
(Saudi
Arabia)
en-tt English
(Trinidad &
Tobago)
ks Kashmiri sa Sanskrit uk Ukrainian
ar-sy Arabic
(Syria)
en-
gb
English
(United
Kingdom)
kk Kazakh sc Sardinian hsb Upper
Sorbian
ar-tn Arabic
(Tunisia)
en-us English
(United
States)
km Khmer gd Scots Gaelic ur Urdu
ar-ae Arabic
(U.A.E.)
en-
zw
English
(Zimbabwe)
ky Kirghiz sd Sindhi ve Venda
378
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
Code Language Code Language Code Language Code Language Code Language
ar-ye Arabic
(Yemen)
eo Esperanto tlh Klingon si Singhalese vi Vietnamese
ar Aragonese et Estonian ko Korean sr Serbian vo Volapuk
hy Armenian fo Faeroese ko-
kp
Korean (North
Korea)
sk Slovak wa Walloon
as Assamese fa Farsi ko-kr Korean (South
Korea)
sl Slovenian cy Welsh
ast Asturian fj Fijian la Latin so Somani xh Xhosa
az Azerbaijani fi Finnish lv Latvian sb Sorbian ji Yiddish
eu Basque fr French
(Standard)
lt Lithuanian es Spanish zu Zulu
bg Bulgarian fr-be French
(Belgium)
lb Luxembourgish es-ar Spanish
(Argentina)
be Belarusian fr-ca French
(Canada)
mk FYRO
Macedonian
es-bo Spanish
(Bolivia)
bn Bengali fr-fr French
(France)
ms Malay es-cl Spanish
(Chile)
bs Bosnian fr-lu French
(Luxembourg)
ml Malayalam es-co Spanish
(Colombia)
br Breton fr-mc French
(Monaco)
mt Maltese es-cr Spanish
(Costa Rica)
bg Bulgarian fr-ch French
(Switzerland)
mi Maori es-do Spanish
(Dominican
Republic)
my Burmese fy Frisian mr Marathi es-ec Spanish
(Ecuador)
ca Catalan fur Friulian mo Moldavian es-sv Spanish (El
Salvador)
ch Chamorro gd Gaelic (Scots) nv Navajo es-gt Spanish
(Guatemala)
ce Chechen gd-ie Gaelic (Irish) ng Ndonga es-hn Spanish
(Honduras)
zh Chinese gl Galacian ne Nepali es-
mx
Spanish
(Mexico)
zh-hk Chinese
(Hong
Kong)
ka Georgian no Norwegian es-ni Spanish
(Nicaragua)
zh-cn Chinese
(PRC)
de German
(Standard)
nb Norwegian
(Bokmal)
es-pa Spanish
(Panama)
zh-sg Chinese
(Singapore)
de-at German
(Austria)
nn Norwegian
(Nynorsk)
es-py Spanish
(Paraguay)
zh-tw Chinese
(Taiwan)
de-
de
German
(Germany)
oc Occitan es-pe Spanish
(Peru)
379
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
Code Language Code Language Code Language Code Language Code Language
cv Chuvash de-li German
(Liechtenstein)
or Oriya es-pr Spanish
(Puerto
Rico)
co Corsican de-lu German
(Luxembourg)
om Oromo es-es Spanish
(Spain)
cr Cree de-ch German
(Switzerland)
fa Persian es-uy Spanish
(Uruguay)
fa-ir Persian/Iran es-ve Spanish
(Venezuela)
TUILanguage
This is the list of possible languages and the suffix used for the HTML filename used when the
language is set:
lAfar = 'aa'
lAbkhazian = 'ab'
lAvestan = 'ae'
lAfrikaans = 'af'
lAkan = 'ak'
lAmharic = 'am'
lAragonese = 'an'
lArabic = 'ar'
lAssamese = 'as'
lAvaric = 'av'
lAymara = 'ay'
lAzerbaijani = 'az'
lBashkir = 'ba'
lBelarusian = 'be'
lBulgarian = 'bg'
lBihari = 'bh'
lBislama = 'bi'
lBambara = 'bm'
lBengali = 'bn'
lTibetan = 'bo'
lBreton = 'br'
lBosnian = 'bd'
lCatalan = 'ca'
lChechen = 'ce'
380
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
lChamorro = 'ch'
lCorsican = 'co'
lCree = 'cr'
lCzech = 'cs'
lOldSlavic = 'cu'
lChuvash = 'cv'
lWelsh = 'cy'
lDanish = 'da'
lGerman = 'de'
lDivehi = 'dv'
lDzongkha = 'dz'
lEwe = 'ee'
lEnglish = 'en'
lEsperanto = 'eo'
lSpanish = 'es'
lEstonian = 'et'
lBasque = 'eu'
lPersian = 'fa'
lFulah = 'ff'
lFinnish = 'fi'
lFijian = 'fj'
lFaroese = 'fo'
lFrench = 'fr'
lWesternFrisian = 'fy'
lIrish = 'ga'
lGaelic = 'gd'
lGalician = 'gl'
lGuarani = 'gn'
lGujarati = 'gu'
lManx = 'gv'
lHausa = 'ha'
lHebrew = 'he'
lHindi = 'hi'
lHiriMotu = 'ho'
lCroatian = 'hr'
lHaitian = 'ht'
lHungarian = 'hu'
lArmenian = 'hy'
lHerero = 'hz'
lInterlingua = 'ia'
lIndonesian = 'id'
lInterlingue = 'ie'
381
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
lIgbo = 'ig'
lSichuanYi = 'ii'
lInupiaq = 'ik'
lIdo = 'id'
lIcelandic = 'is'
lItalian = 'it'
lInuktitut = 'iu'
lJapanese = 'ja'
lJavanese = 'jv'
lGeorgian = 'ka'
lKongo = 'kg'
lKikuyu = 'ki'
lKuanyama = 'kj'
lKazakh = 'kk'
lKalaallisut = 'kl'
lCentralKhmer = 'km'
lKannada = 'kn'
lKorean = 'ko'
lKanuri = 'kr'
lKashmiri = 'ks'
lKurdish = 'ku'
lKomi = 'kv'
lCornish = 'kw'
lKirghiz = 'ky'
lLatin = 'la'
lLuxembourgish = 'lb'
lGanda = 'lg'
lLimburgan = 'li'
lLingala = 'ln'
lLao = 'lo'
lLithuanian = 'lt'
lLubaKatanga = 'lu'
lLatvian = 'lv'
lMalagasy = 'mg'
lMarshallese = 'mh'
lMaori = 'mi'
lMacedonian = 'mk'
lMalayalam = 'ml'
lMongolian = 'mn'
lMarathi = 'mr'
lMalay = 'ms'
lMaltese = 'mt'
382
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
lBurmese = 'my'
lNauru = 'na'
lNdebele = 'nb'
lNepali = 'nd'
lNdonga = 'ng'
lDutch = 'nl'
lNorwegian = 'no'
lNavajo = 'nv'
lChichewa = 'ny'
lOccitan = 'oc'
lOjibwa = 'oj'
lOromo = 'om'
lOriya = 'or'
lOssetian = 'os'
lPanjabi = 'pa'
lPali = 'pi'
lPolish = 'pl'
lPushto = 'ps'
lPortuguese = 'pt'
lQuechua = 'qu'
lRomansh = 'rm'
lRundi = 'rn'
lRomanian = 'ro'
lRussian = 'ru'
lKinyarwanda = 'rw'
lSanskrit = 'sa'
lSardinian = 'sc'
lSindhi = 'sd'
lNorthernSami = 'se'
lSango = 'sg'
lSinhala = 'si'
lSlovak = 'sk'
lSlovenian = 'sl'
lSamoan = 'sm'
lShona = 'sn'
lSomali = 'so'
lAlbanian = 'sq'
lSerbian = 'sr'
lSwati = 'ss'
lSotho = 'st'
lSundanese = 'su'
lSwedish = 'sv'
383
TMS SOFTWARE
TMS WEB Core
DEVELOPERS GUIDE
lSwahili = 'sw'
lTamil = 'ta'
lTelugu = 'te'
lTajik = 'tg'
lThai = 'th'
lTigrinya = 'ti'
lTurkmen = 'tk'
lTagalog = 'tl'
lTswana = 'tn'
lTonga = 'to'
lTurkish = 'tr'
lTsonga = 'ts'
lTatar = 'tt'
lTwi = 'tw'
lTahitian = 'ty'
lUighur = 'ug'
lUkrainian = 'uk'
lUrdu = 'ur'
lUzbek = 'uz'
lVenda = 've'
lVietnamese = 'vi'
lWalloon = 'wa'
lWolof = 'wo'
lXhosa = 'xh'
lYiddish = 'yi'
lYoruba = 'yo'
lZhuang = 'za'
lChinese = 'zh'
lZulu = 'zu'