Release Notes for WebHub v2.040 to v2.045
This file was last updated 9-Nov-2005

Skip to: WebHub Object Pascal Components    The Hub    WebHubAdmin    WebHubView    Runners    Demos    Docs

WebHub Object Pascal Components

Delphi 9 support v2.043
WebHub v2.043 compiles under Delphi 9, that is, Delphi 2005 for win32 features.
In case you need pricing on Borland Delphi 2005 Professional upgrade license: $464.70 at Applied Computer (ships same-day), $489.99 at Amazon.
TwhBrowserInfo component deprecated v2.040
None of WebHub's units require the TwhBrowserInfo class any longer.
You will still find a copy of lib\whbroinfo.pas shipping, but we will not be using it any longer.
TWebDataScan/TWebDataSource fix v2.041
There were some problems in v2.039-2.040 where the first and last records of the grid would not always display. Those should now be fixed.
TWebDataScan OnFinish called on empty result set v2.044
Previously, if the DataSet were empty, the OnFinish event would never be called. This made it difficult to end html tables. The OnFinish event is now always called, even if the result set was empty.
TWebDataScan OnRowStart "ok" flag supported v2.044
As of v2.044, if you set ok to False in the OnRowStart event, the scan component will continue looking for additional records until the desired PageHeight is met.
TWebDataScan Find feature fixed on TADOQuery v2.044
The "find" feature now works. Its syntax is, in the URL, ?appid:pageid::webdatascan.Find###, where ### is the primary key to find. Note that TWebDataSource.KeyFields must be defined and must contain a single field name.
App "Handle" deprecated; use AppInstID v2.042
pWebApp.AppHandle is still available; however pWebApp.AppInstID is the preferred property going forward.
pWebApp.cgiUseHandle should be changed to pWebApp.cgiUseAppInstID
pWebApp.cgiHideHandle should be changed to pWebApp.cgiHideAppInstID
In application-level INI files, if an entry using the new name is found, it is used, else the old names still work.
SENDFILE command v2.043
Fixed problem (in v2.039 to v2.042 only) where, in htWebApp.pas, the ProcessSendFileCommand routine called SendFile and should have called SendFileIIS.
To fix this in your copy of htWebApp.pas, use this version of ProcessSendFileCommand:
  function ProcessSendFileCommand(const Value: String): Boolean;
    aFilename, aMimeType, aDelete, S: String;
    SplitThree(Value,',',aFilename, aMimeType, aDelete);
    aFilename := MoreIfParentild(aFilename);
    aMimeType := MoreIfParentild(aMimeType);
    S := aFilename + ',' + aMimeType + ',' + aDelete;
    Result := False;
OnBadIP, OnBadBrowser refined v2.044
When using StreamCatcher for web robot detection, the "Bad IP#" and "Bad Browser" situations are no longer triggered for web robot sessions. Previously, these events would be triggered whenever a new robot came in, which meant that your custom events needed to have different rules for web robots.
In addition, the logic in dmWebHub.pas for OnBadBrowser has been fixed so that the PageID is only changed when RejectSession is actually called. Thus the originally requested PageID remains valid.
Prior to these fixes, web robots probably would have received the error "No Page!"
ExportFilename may include spaces v2.043
The exportfilename is an attribute of the whpage tag.
In prior versions, spaces in export filenames were changed to a plus symbol ('+') when used in JUMPs.
Now, spaces are changes to percent-20 (hex20), which means that the you can put a space into an export filename, and the filename will be generated with a space when written to disk, and any links to that page will use syntax supported by all browsers.
Fixed: only initial DOCTYPE is now stripped v2.043
In v2.039 to v2.042, if you had a DOCTYPE in use anywhere in a WHTEKO file, it was stripped, thus you could not get one to be used on a dynamic web page nor exported web page.
Now, only the DOCTYPE at the beginning of the WHTEKO file (prior to the whteko tag) is stripped. This leads to the desired combination of being able to use the WHTEKO DOCTYPE in Dreamweaver for XML validation, while using others ones on your WebHub pages.
Fixed: DO Page v2.043
In v2.042 (maybe v2.041?), the DO page gave an error. It works again.
In v2.043 until 3-Apr-2005, the DO page had to be uppercase. Now it works upper "DO" or lowercase "do".
TWebHTTP component: Added stringlist for posting unencoded XML data v2.043
Data put into the Literals list is always encoded prior to posting. This is undesirable for XML content going to a SOAP server. Use the new stringlist for posting XML data.
DTD is available for WHTEKO files for "strict" and "transitional" standards 02-Mar-2005
We recommend that you use one of these DTDs but you do not have to.
Strict: (see dtd)
Transitional: <!DOCTYPE whteko PUBLIC "-//HREF//DTD whteko stage 2.14//Transitional//EN//" " "> (see dtd)
WebHub-Dreamweaver units renamed v2.042
old namenew unit name
OnDesignPage syntax changed v2.042
The OnDesignPage syntax, which is used with the WebHub Designer for Dreamweaver, now allows for setting an error message when access is denied to the design page.
See whsample_DWSecurity.pas for sample usage.
Security for WebHub-Dreamweaver made more automatic v2.042
See whsample_RemotePages.pas
Use it with app INI entries like this:
TWebMail sends Date field v2.045
Microsoft Outlook requires a Date field in emails. TWebMail now automatically generates a Date: field as part of the header.
Session Cookie Name now customizable v2.045
You may set the name of the session cookie via AppDefault['SessionCookieName']
If not customized, the session cookie name will be 'SESSION'.
utSpltFm is free v2.045
WebHub no longer uses the custom splitter panel introduced in utSpltFm.pas. All panels now descend from TtpFitForm, not from the splitter form.
The utSpltFm.pas and .dfm files will ship for a few more months in case you are using it in your own projects. A copy has also been archived online: utSpltFm.pas
To remove the custom splitter panel from your own forms: identify your splitter panel, remove its MouseDown event handler. Create a TSplitter component, using the same width, etc. properties as the panel. If present, copy OnEndDrag event handler contents to TSplitter.OnMoved. Delete the custom splitter panel. Remove utSpltFm from any uses clauses. This removal technique may be applied to forms in any version of WebHub, even prior to v2.045.
TtpStatusBar based on TtpThread source is free v2.042
Download: tpStatus.pas
The tpStatus.pas unit will stay part of WebHub, but the TtpStatusBar class will use TThread instead of TtpThread.
TtpStatusBar2 renamed to TtpStatusBarDateTime, and it now includes 3 properties that allow setting date, time and status panel index.
TtpLabel is free v2.042
Download: tpLabel.pas
TtpLabel no longer ships as part of WebHub.
whDemo packages no longer required v2.042
The tfish.pas file ships as part of the WebHub demos (, and the whDemo*.dpk files which registered its custom webapp object are no longer required for the demo, nor shipping with WebHub.
Sample units renamed v2.042
old namenew unit name
TPack unit cleanup v2.042
No action required on your part... FYI...
The tpack files have all been edited so that all USES clauses refer to unit names consistently in terms of upper and lower case.
The tpack files have IFDEFs to allow for compilation in Delphi 5, Delphi 6, Delphi 7, Delphi 2005, and Kylix 3. Full Kylix 3 support for tpack will most likely first occur in v2.043 (April or May 2005).
This same process will be applied to the WebHub units, "soon."
Demo units separated from "WebHub Object Pascal Components" v2.042
The following units are available from the server only now: whdemo_Initialize.pas, whdemo__Extensions.pas, whdemo_Refresh.pas, whdemo_About.pas, whdemo_ViewSource.pas, whdemo_DWSecurity.pas
tpRaise moved from uCode to utIpcObj.pas v2.044
WaitASec procedure is free v2.044
The uCode.pas unit no longer includes WaitASec. If you need this procedure, see
TimeSince, TimeDifference functions removed from ucInteg.pas v2.044
Please see time/date utility functions in Delphi 6+.
SearchBuf function removed from ucSearch.pas v2.044
See ucString.pas for a version for use in Delphi 5; see Delphi StrUtils.pas for a version for use in Delphi 6+.
New Project Wizard is back v2.044
In v2.043 the New Project Wizard was shipping but was building DPR files using logic from two years ago - due to a key file being out of sync on the installation builder server. That has been resolved.
ucFile.pas improvements v2.044
IncrementFileName had not allowed for more than one dot in a filename. Now it does, and considers the file extension to be after the last dot, not the first dot.
TWebDataScan and TWebDataGrid buttons: no line breaks v2.045
In the past, when the grid-buttons were generated by the component, a hard-return (#13#10) was sent after each part of the syntax. This caused trouble for some HTML effects. For example, it was not possible to make the buttons appear exactly adjacent to one another. As of v2.045, the hard-returns are only sent before and after the entire group of buttons.
MatchFilename function removed from ucFile.pas v2.044
Here is the code in case you need it:
function MatchFileName(const Filename, FilenameMask:
//kindly contributed by Peter Hyde
//match filename and extension to maskname and extentension
  lpf,rpf,lpm,rpm: string;
  if not splitright(AnsiLowerCase(FilenameMask),'.',lpm,rpm) then
    rpm :='*'; //if they have no '.', we'll accept ANY extension
  if rpf='' then rpf:='.'; // so ABC matches *.*
  Result := WildMatch(lpf,lpm) and WildMatch(rpf,rpm);
Note MatchFileName logic matches: ('abc.' ~ '*.?') ('123.' ~ '123.?') but does not match: ('abc.' ~ '*.') ('123.' ~ '???.') ('.123' ~ '.???')
MatchFileName compares filenames case-insensitive
Fixed issue with # in WebHub command v2.043
On systems not using StreamCatcher nor Coolness Layer, there was a problem with # used within a WebHub command. That has been resolved (tested in IE and Firefox).
MATCH macro: backwards compatible v2.043
If you would like to use the pre-v2.039 meaning of MATCH, set the global variable isMatchTechniqueNew (in htWebApp.pas) to FALSE.
Added 4-Apr-2005
Added SendBounceToPageR method v2.044
Bounces to a specific PageID, using the current session number, randomized.
MatchFilename method removed from ucFile.pas v2.043
Please use MatchesMask function in Delphi Masks unit.

WebHub Demos

Showcase demo navigation updated 2-Dec-2004
The showcase demo has been reorganized and improved in terms of how the navigation is presented.
WebHub Control Panel ("WHCP") updated 3-Dec-2004
You can download the latest WHCP files from CVS by following the "source" links within any demo on
Requires Hub v2.040+
CgiUseHandle changed to CgiUseAppInstID 13-Feb-2005
For compatibility with WebHub v2.042+, cgiUseHandle has been changed to cgiUseAppInstID throughout the demos.

The Hub, WebHubAdmin, WebHubView

HubApp now supports "parentils" v2.040
If you want to run a HubApp using the new macro affixes, set this in its INI file:
WebHub Control Panel ("WHCP") now uses parentils and requires Hub v2.040+.
Hub supports absolute filenames for error message files v2.045
In the past, entries for HubNoSuchApp looked like this: HubNoSuchApp=..\config\sysmsgs\hubnone.txt. Now you may specify any absolute path on a local drive, like this: HubNoSuchApp=c:\webhub\mymessages\hubnone.txt
File extensions for error message files can be: .txt, .htm, .html (upper or lower case).
Note! When using macros inside the error message files, use the type of macro affixes used in your hub app. If you have switched to using parentils in your hub app, change %=WHERE=% to (~WHERE~), etc. in your error message files.
Hub sends status code 403 on errors v2.045
In the past, the Hub always returned status code 200, even when a WebHub application was not running, etc. Now the Hub sends status code 403, which means "Service Unavailable".
Hub supports random distribution of requests v2.042
There is a new option which tells the Hub to distribute requests randomly to multiple instances of a WebHub app (with the same AppID). To activate this mode, manually edit your hub.ini file, [webhub] section, and set RandomNextInstance=Yes.
This mode is off by default, and we recommend leaving it off unless you specifically want to change the way traffic is distributed.
WebHubAdmin includes Session panel v2.042
Back by popular demand -- the Session panel is again included, look in WebHubAdmin and you will be able to load and view session VAR files.
System messages use parentils v2.042
The default system messages (e.g. hubnone.txt) now use (~ ~) not %= =% syntax.
If you have customized your files, you should search and replace so that the macros will be expanded when the files are used.
HubApp, error when expansion leads to empty string v2.043
As of v2.043, the HubApp no longer gives an error when an expansion of a droplet, macro, etc. leads to an empty string.
WebHub Control Panel ("WHCP") shipping v2.043
In 2003 and Jan/Feb 2004, the WHCP files were only available on Now they ship with the Hub.
Files are located in WebHub\config\whcp
Graphic images are no longer involved or required, so there are no special virtual directory paths required.


ISAPI runner accepts large data posts v2.042
A problem was fixed in runisa.dll that had been corrupting incoming large data posts, from forms with multiple fields.
The problem occured on IIS 5 and IIS 6 but not Sambar, using IE as the browser, regardless of whether the post was over HTTP or HTTPS.
Reference: Support #00239
ISAPI runner has ConfigFilename property visible v2.042
If you look at the Version properties for runisa.dll, you will now see the ConfigFilename ("WebHubRunner.cfg").
ISAPI runner sends status code 403 on errors v2.045
In the past, the runners always returned status code 200, even when the Hub was not running, etc. Now they send status code 403, which means "Service Unavailable".

FYI: Valid DTDs on
FYI: IB Utils, a free tool for showing the links between the tables in your Firebird database visually.
FYI: The Firebird Book: A Reference for Database Developers, by Helen Borrie.
Copyright © 2004-2005 HREF Tools Corp. All Rights Reserved. TPACK and STREAMCATCHER are registered trademarks of HREF Tools Corp.