See related blog post for details.
uniGUI Version 0.88.0 is available for public download.
New features:
Ext JS run time installer can be used to deploy a minimal set of Ext JS files required to run your uniGUI apps.
!Ext JS run time files are fully bound to Sencha Ext JS license terms!
http://www.sencha.com/legal/license-overview
http://www.sencha.com/legal/sencha-commercial-software-license-agreement/
Changelog:
0.88.0.941
+—————————————————————————————-
- 0000667: C++ Builder support
- 0001266: TUniDBGrid: Display bug when Field is TFMTBCD
- 0001263: LookUp Component: Bug when field is a lookup field.
- 0001256: TUniURLFrame.OnFrameLoad event
- 0001259: Backspace key triggers brower’s “Back in history” when focus is in a ReadOnly field
- 0001260: Bug when Form’s active control is a TUniDateTimePicker
- 0001258: UniDBLookupXXX: List is not created when DataField is a Lookup Field
- 0001257: Changed behavior: Exception raised in DataSet.Edit will not cancel Edit mode.
- 0001255: Abort in OnValidate Cancels Edit Mode
- 0001252: Bug when Form is Freed in TUniButton.Click event
- 0001251: Bug in UniPageControl
- 0001204: TUniStatusBar design time bug
- 0001243: TUniNavigateKeys.KeySubmit & KeyCancel properties
- 0001241: UniMainModule.MonitoredKeys property
- 0001242: UniForm.MonitoredKeys property
- 0001239: JS method uniSelectNext(comp, dir, cycle)
- 0001240: JS method uniSelectFirst()
- 0001238: Navigate problem when Edits are on various Pages of a UniPageControl
- 0001236: TUniMenuItem.Destroy()
- 0001235: TUniMenuItem.Delete()
- 0001231: UniMainModule.DocumentKeyOptions: [dkDisableBackSpace, dkDisableTab, dkDisableESC, dkDisableAll]
- 0001218: New UniMainModule.DocumentKeyOptions property
- 0001229: UniMainModule: TNavigateKeys property
- 0001230: UniForm: TNavigateKeys property
- 0001228: UniMemo: List is not updated after Delete/Insert/Put
- 0001226: TUniForm.OnKeyDown/Up/Press events
- 0001227: OnKeyDown/Up ShiftState Parameter
- 0001225: TUniForm.KeyPreview property
- 0000586: TCloseAction=caNone when user closes window from upper right X
- 0001216: DBGrid OnGetText issue
- 0001196: UniForm should store either “Width/Height” or “ClientWidth/ClientHeight”
- 0001215: TUniDBNavigator.ConfirmDelete property
- 0001039: Localizable ShowMessage and MessageDlg buttons and captions
- 0001213: MessageDlg doesn’t show proper icons
- 0000906: MessageDlg mbYesNoCancel only show mbYesNo
- 0001212: Callback in ShowMessage
- 0001209: Support for Delphi XE2 64-bit Compiler
- 0001211: Problem with nested MessageDlg calls
- 0000770: Anonymous methods in MessageDlg
- 0001210: UniDBGrid: BCD/FMTBCD data types handling issue
- 0001207: Compression.Enabled default set to True
- 0001016: UniTreeview Background color
- 0001206: New Component TUniHiddenPanel
- 0001202: Editable float/currency type in UniDBGrid cell
- 0000434: UniDBGrid with various Editor types in grid cells
- 0001200: In TUniDrawColumnCellEvent (var Value:string) removed from parameter list
- 0000725: UniDBGrid: Column PickList property
- 0001114: UniDBGrid: Bug when details data change but row number remains the same
- 0001194: UniMainModule.Background property
- 0001175: TabOrder for UniLabels VCL mode
- 0000845: UniDBGrid: In master/detail or master/lookup focus shifts to detail when master row changes.
- 0000944: DBControls: RecNo dependency problem with DBs that doesn’t support RecNo
- 0001193: UniDBGrid.WebOptions.FetchAll property
- New Demo: GridEditors
- New Demo: Dialogs
- New Demo: Dialogs Anonymous Callback
- New Demo: ClientEvents-5
- New Demo: FormNavigate
- New Demo: SubmitCancel
- New Demo: MonitorKeys
See complete Changelog.
uniGUI Version 0.87.0 is available for public download.
Version 0.87 mainly targets bug fixes and client side stability. It address many important bugs and issues which are important for stability on both client and server side. It also provides libraries for Delphi XE2. (Currently Win32 only)
0.87.0.907
+—————————————————————————————-
- 0000729: Ajax bug handling problem when form is newly created.
- 0001186: Bug when exception is raised in Form.OnShow event
- 0001185: Bug when exception is raised before created form is shown
- 0001188: Improved exception handling when execption occurs in Form OnShow/OnCreate
- 0001187: Add CSV to supported Mime types
- 0001184: UniDBLookup: Issue with assigning KeyValue
- 0001183: UniDBLookup: Text set to Readonly
- 0001174: Issue while setting background color when Transparent is False
- 0001173: TUniLabel: VCL Click bug when label is a html link
- 0001066: UniDBLookUpxx : List doesn’t refresh when dataset rows change
- 0001101: UniSession.URL property
- 0001166: Form Top/Left not visible when Form doesn’t fit in browser
- 0001080: Double Ajax=1 param in ajax events
- 0001172: Issue when Grid cell is being edited and row changes by Tab
- 0001171: El property assignment bug when component is on invisible TabSheet
- 0001169: UniTabSheet: OnClose event (Web only)
- 0000503: Closable Tabs in UniPageControl
- 0001168: Event assignment error when Name=”
- 0001167: UniDBGrid: Issue when DataSet.RecordCount is not consistent
- 0000937: TUniForm.Visible at runtime
- 0001140: Launching ScreenMask from JavaScript
- 0000911: Setting hints at runtime.
- 0001163: FileUpload: Show proper error message when file name is blank
- 0000969: Clicking on window upper right corner [X] is not handled in OnClose event
- 0001157: TUniDBEdit: Field.Size is ignored
- 0001158: Bug when AutoEdit=False and DataSet is in edit mode
- 0001159: UniDBGrid: Attribute render bug
- 0001160: UniDBLookUpXX: Item list construct bug
- 0001161: UniDBLookUpX: Value/Item is not updated after list items are changed
- 0001162: UniDBListBox: Clicks are not captured
- 0001165: UniServerModule: OnBeforeInit event
- 0000518: UniSpinEdit: Spin works when disabled
- 0000946: TUniMainMenu: Root menu visible
- 0000855: UniMainModule.OnSessionTimeOut event
- 0001111: Implement UniApplication.Terminate(Message: string);
- 0001137: TreeNode with no image when ImageIndex=-1
- 0001149: Delphi XE2 Support (Win32 only)
- 0001150: UniDBGrid fit problem in GroupBox
- 0001151: Ext JS version upgraded to 3.4.0
- 0001152: IE9 native support
- 0001132: Set designers’ position to poScreenCenter
- 0000544: Ajax callback process bug
- 0001148: UniDBGrid: dgTitleClick is ignored in web mode
- 0001128: Bug when DataSource.AutoEdit=False
- 0001125: UniComboBox: Bug in value set
- 0001124: TUniTabControl: Object leak issue
- 0001121: Top level menu Visible=False
- 0001119: VCL: UniDBGrid TitleClick Bug
- 0001118: SetVisible bug
- 0001129: UniDBGrid: Change TitleFont @runtime
- 0001127: Display Ampersand when it is not a shortcut
- 0001110: Bug in empty form Caption
- 0001063: UniLabel AutoSize for web mode
- 0001131: Bug when TUniLabel.Color<>clBtnFace and Transparent is True
- 0001130: TUniLabel: AutoSize default set to true
- 0001138: UniPanel Alignment bug
- 0001143: Bug when Resetting Font.Color to clWindowText
- 0001144: Ajax Error when closing Form containing uniDBGrid
- 0001145: New JavaScript methods showMask() and hideMask()
- 0001146: Bug in ISAPI mode: UrlPath is converted to lowercase
- 0001147: UniDBGrid.SetFocus() Web mode bug
- New Demo: Closable Tabs
- New Demo: UIMask-Client
- New Demo: SessionTimeout
See complete Changelog.
PS: In this version Ext JS version has upgraded to 3.4.0, so you may need to re-adjust ServerModule->ExtRoot parameter. You don’t need to change anything if it is already set to ‘ext-x.y.z\’, as it will automatically point to new ext-3.4.0 folder.
Also don’t forget to deploy ext-3.4.0 folder to your servers.
One of the exciting new features in version 0.86 is ability to write client side JavaScript event handlers from within Delphi IDE. Each uniGUI control is attached to an Ext JS control. In some cases there are more than one Ext JS controls for a uniGUI control. For example a TUniForm is a combination of an ext.Window and an ext.form.FormPanel.
Below image shows uniGUI event editor. All available events are listed in right panel. You can create an empty event handler by double clicking on event.
Now you can easily write a proper handler for mousemove event. In below example mouse coordinates are shown inside a TUniEdit control.
function form.Onmousemove(sender, x, y)
{
MainForm.UniEdit1.setValue(x + ':' + y);
}
As you can see, you can easily refer to screen objects using their Delphi names. In above code, UniEdit1 is an Ext.form.TextField object. You can refer to Ext JS API docs for a list of available functions for all Ext JS objects.
On client side, Forms and Frames are global JS objects. Individual Controls are defined as sub-properties of Forms and Frames.
For controls residing inside a Form you must access them as child objects of that Form:
MainForm.UniButton1.setText('Caption');
UniForm2.UniButton3.setText('Caption');
For controls residing inside a Frame you must access them as child objects of that Frame:
UniFrame1.UniEdit1.setValue('Text');
Please note that JavaScript is a case-sensitive language so object JS names should be same as those declared in Delphi:
Delphi name: UniEdit1
Correct JS name: UniEdit1
Incorrect JS names: uniEdit1 Uniedit1
Another advanced feature is ability to call server side event handlers from JS code. It enables developers to write fully customized server side Ajax event handlers
Example:
In a TUniButton control add below code to client side OnClick event.
function OnClick(sender, e)
{
ajaxRequest(sender, 'MyEvent', [ 'param0=A', 'param1=B' ]);
}
In Object Inspector add a Delphi event handler for UniButton OnAjaxEvent event:
procedure TMainForm.UniButton1AjaxEvent(Sender: TComponent; EventName: string;
Params: TStrings);
begin
if EventName='MyEvent' then
begin
UniButton1.Caption:=Params.Values['param0'] + Params.Values['param1'];
end;
end;
All these features enable developers to handle some of the events on client side and only call server side handlers when it is needed. This will highly improve user experience and overall application performance. One good example is our Google Maps Demo which is a balanced mixture of client side scripts and server event handlers.
After a long intermission a new version of uniGUI framework is available for public download. Version 0.86 can be considered as a new milestone for uniGUI framwork.
It introduces many new features and enhancements:
In some areas version 0.86 breaks compatibility with previous versions, so if you have developed uniGUI projects with version 0.84.x or an earlier version please read carefully the Migration to version 0.86 article before you open your projects with version 0.86.
Changelog for versions 0.85 and 0.86:
0.86.0.889
+—————————————————————————————-
- 0001100: Form Icon is Visible when biSystemMenu is not set
- 0001059: Call CallBack for all dialog types
- 0001113: For touch enabled devices touch events replace mouse events.
- 0001108: VCL: TabStop problem when control parant is TUniTabSheet.
- 0001106: Critical bug when adding cutsom files
- 0001107: UniGUISession.AddCustomFile property
- 0001105: TUniDBGrid.Refresh method implemented (Workaround for issue 0000882)
- 0001097: Google Maps sample
- 0001020: Custom meta tags.
- 0001104: UniGUIServerModule.CustomCSS property
- 0001093: Proper handling of “//” in JS code
- 0001095: UniRadioButton: Change Caption at runtime
- 0001089: DateTime conversion issues when system date format is M/d/yyyy
- 0001088: UniCalendarPanel: Date change doesn’t reflect hidden views
- 0000965: Error when OS date fomat<>UniDateTimePicker.DateFormat
- 0001086: UniDBGrid: Column count is zero immediately after DataSet.Open
- 0001085: UniDBGrid: Auto column creation logic improved
- 0001084: TUniSpeedButton Click bug
- 0001082: TUniForm: Property MonitorScreenResize added
- 0001078: DblClick event for additional controls implemented
- 0000538: UniDBGrid: Resized columns are reset when grid is refreshed.
- 0001076: Option to remove UniDBGrid thin column on the left (dgIndicator)
- 0001064: UniDBGrid: Change UniColumn.Title.Caption after Columns are created
- 0001077: UniDBGrid: Change Column.Width at runtime.
- 0000591: Cursor property for web
- 0000966: TUniImage: OnMouseOver event
- 0001062: Destroying UniControl doesn not destroy child UniFrames
- 0001065: TUniDBDateTimePicker: Bug when Dataset is closed.
- 0001068: TUniChart moved to a separate package
- 0001071: Calling server side event handlers from client side ajax request
- 0001070: Integration of Ext JS events in TUniControl and TUniComponent
- 0001069: Advanced IDE support for client side event scripting
- 0001072: Delete Form/Frame JS objects after destroy
- 0001074: Extended Mouse and Click events for all Controls
- 0001073: UniCalendarPanel: OnDayClick in DayView bug
- Four new demos: ClientEvents-1, ClientEvents-2, ClientEvents-3, ClientEvents-4
- New Demo GoogleMaps
0.85.0.874
+—————————————————————————————-
- 0001055: TUniPageControl: Several TabSheet related issues
- 0001051: TUniPageControl bug: Recreation of TabSheet after it is freed
- 0001046: UniCalendarPanel: Bug when certain Data patterns are loaded
- 0001041: Bug when UniFrame reads unpublished property
- 0001040: Dynamic Form handling bug
- 0000954: UniForm Top=0 Left=0 is always centered
- 0001037: TUniForm.FindComponent broken in 0.85.0
- 0001036: UniDBGrid: A/V when DataSource.Enabled:=False
- 0001035: UniRadioButton: Selection bug in VCL mode
- 0001034: UniDBGrid: Calling DataSet.Refresh doesn’t always refresh dbgrid.
- 0000645: In Standalone mode avoid creation of MainModule and DataModules
- 0001027: Change text of invisible TreeNode
- 0001031: Change font/color/icon of invisible TreeNode
- 0001028: UniTreeNode.Enabled property
- 0001032: TUniImage Background issue in VCL mode
- 0001029: UniPageControl background transparency issue in web mode
- 0001025: UniPageControl: First dynamically created TabSheet does not focus
- 0001022: UniImage doesn’t change when asisgned from a TImageList
- 0001023: UniImage.Transparent bug
- 0001005: Some controls aren’t rendered when Control owner is not TUniForm
- 0001021: RadioButton sends two Click events
- 0000757: Enhanced Ext JS CalendarPanel
- 0000989: TUniDBGrid: Two AutoScroll events after DataSet.Open
- 0001010: TUniTreeNode: Change Font at runtime
- 0001011: TUniControl.Constraints property
- 0000848: Bitmap transparency display problem for Buttons
- 0001007: TUniControl: Show/Hide methods
- 0001013: TUniDateTimePicker web render issue
- 0001012: TUniTabControl: Tabs.Add, Tabs.Delete, Tabs.Clear methods
- 0000588: Localization for Ext JS internal Text (Page, Today, …)
- 0000979: Issues regarding Font inheritance (ParentFont=True)
- 0001015: TUniPageControl: Incorrect ActivePage when Tabs aren’t visible
- 0001019: URL Parameters in ISAPI mode
- 0000999: Unicode in URL Parameters
- 0000674: TUniTreeview.Font property
- 0000998: TUniTreeNode.Font property
- 0000990: TUniTreeNode.SelectedIndex property
- 0001000: Corrected BorderStyle for Web and VCL
- 0001002: BorderStyle property for applicable controls
- 0001001: BorderStyle: Web implementation
- 0000551: HTTP Compression
- 0000631: Multiple Series in TUniChart
- 0000871: UnixxxComboBox: OnCloseUp event
- 0000963: IE8 Compatibility mode for IE9
- 0000958: TUniForm.BringToFront
- 0000952: UniListBox: ItemIndex set bug
- 0000955: UniHTMLFrame: Change design time pattern
- 0000977: DBLookUp Controls KeyValue bug
- 0000975: TUniForm: Delete unimplemented props from TUniForm DFM
- 0000978: UniBitBtn: Change Glyph at runtime
- 0000960: Component reference late binding problem
- 0000713: Merge new framework Core
- 0000981: TUniTreeView.Selected:=Node doesn’t select Node
- 0000980: TabOrder in VCL mode
- 0000982: Bug when Font.Height is positive
- 0000984: Horizontal Bar Chart type
- 0000986: TUniHTMLFrame: StaticHTML property
- 0000987: TUniChart: Legend Property
- 0000988: Font render issue on IE
- 0000976: TUniSpeedButton: Double event on Button UP/DOWN click
- 0000992: Core resource conversion bug
- 0000994: Compression rate calculation error
- 0000993: Compression multi-threading issue
- 0000996: UniDBEdit uppercase has no effect on dataset field
- 0000997: UniStringGrid.RefreshRow method
- 0000959: Bug when TUniFrame is set as Parent
- 0000957: Dynamically created UniTabSheet doesn’t render contents properly
- 0000961: UniGroupBox: Alignment issue when inside another UniGroupBox:
- 0000964: TUniDBGrid: Loading dataset triggers multiple AfterScroll events
- 0000967: UniDBMemo: Can’t display TWideMemoField data
- 0000935: ClientInfo is not set when mode is mfPage
- 0000936: UniDBGrid: resetting dgTitles has no effect
- 0000938: TUniGUISession.Terminated property added
- 0000939: TUniPageControl: Scroll when Tabs overflow
- New Demo: CalendarPanel Demo
Complete Changelog.
For support and other questions please join our forums.
As we discussed earlier versions 0.85 and 0.86 will be new milestones for uniGUI library. They will introduce new framework core which brings lots of architectural changes and improvements.
Here is a brief list of these changes:
Other benefits of this new core will become manifest as framework continues to grow. For example, without new core integration of client side scripting would be very difficult.
Since it contains some huge changes, incompatibility with older versions is inevitable. i.e. it will not be as easy as opening your projects and simply recompiling it. In some areas it breaks compatibility and you must go through a procedure to make your existing projects compatible with 0.86.0.
Here is the receipt. Please follow these steps exactly as described in below order.
Now you have successfully converted your project to version 0.85 and you can run and test it in a web browser. Hopefully all converted projects should run as expected in both VCL and Web mode. If not try to localize the problem or look at the browser JS error logs.
Current Version: 0.84.5.836
Changes:
0.84.5.836
+—————————————————————————————-
- 0000870: TUniSpinEdit: OnChange event
- 0000927: UniDBDateTimePicker: Value change in VCL mode doesn’t set Edit mode
- 0000926: UniDBGrid: DataSet changes aren’t reflected when DisableControls is called
- 0000915: TUniTreeNode: GetFirstChild, GetLastChild methods.
- 0000913: TUniTreeNode.Count property
- 0000925: TUniImage: OnClick, OnMouseDown, OnMouseUp
- 0000924: Invalid string constant on line XXX error
- 0000923: Add JSON to default mime types.
- 0000921: UniDateTimePicker: Visible bug
Current Version: 0.84.4.835
Changes:
0.84.4.835
+—————————————————————————————-
- 0000920: Bug when ScreenMask is attached to a UniDBGrid
- 0000919: TUniStatusPanel: Alignment
- 0000909: Cookies are not populated in MainModule.Create
- 0000912: DBControls: Displayed field value is not restored after exception is raised during an Insert/Append operation
- 0000916: Cookies are not saved if application terminated/restarted.
This is the last build of version 0.84 which is eventually available for public download.
There are also lots of bug fixes and improvements in this new version.
Current version updated to 0.83.5.820
Changes:
0.83.5.820
+—————————————————————————————-
- 0000796: DBGrid: Render bug when Column color is clWindow and project is created with 0.82
- 0000795: Grid: Cell background color change poor render performance
- 0000791: UniDBGrid, UniStringGrid: Option to disable custom renderer to speed-up render time.