See related blog post for details.

Posted in General | 2 Comments

uniGUI Version 0.88.0 is available for public download.

New features:

  • Embeddable Grid Editors.
  • 64-Bit support for Delphi XE2
  • Seamless keyboard capture and filtering.
  • Advanced form navigation using customizable keys.
  • Anonymous Callbacks for D2009+.
  • 7 new demos to demonstrate new features.
  • Ext JS run time installer.
  • Support for C++ Builder

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.

Posted in General | 4 Comments

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.

Posted in General | 4 Comments

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.

Posted in Technical | 1 Comment

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:

  • Completely renewed and redesigned framework core.
  • Extended server side event handling  for Click and mouse events.
  • HTTP Compression
  • Advanced client side event scripting.
  • Interaction between client side Ext JS components and JavaScript code.
  • Advanced IDE editor to add and edit JavaScript handlers for Ext JS controls
  • Directly fire Ajax requests from JS code.
  • Ability to access Ext JS controls from JS code using their Delphi names.
  • Ability to monitor Ajax calls on client side.
  • Ability to send JavaScript code or custom strings as response to an Ajax request.
  • Server side mouse and click event handlers added for additional uniGUI controls.
  • Extended client side mouse and click event handling support for Ext JS controls.
  • New Calendar Panel  component
  • New demos
  • Many bug fixes,  other improvements and other new features.

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.

Posted in General | 1 Comment

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:

  • All controls will be descendant of a common root opposed to previous releases where each Control had a different ancestor.
  • Only implemented properties and events are published. This will avoid confusion in previous versions where lots of public and published features in VCL mode were not implemented in Web mode.
  • Class types no longer change among Web and VCL. Now TUniButton is always a TUniButton regardless of the displayed mode.
  • In event handlers Sender parameter will always contain correct class type.
  • As a result of above changes you can safely use as and is operators.
  • Advanced client side event scripting.
  • Extended Server side event handling for click and mouse events.

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.

  • Completely uninstall any previous version of uniGUI and remove uniGUI design time libraries from Delphi IDE.
  • Download and install the latest build for version 0.86.0.
  • As always build all packages and Install the design time packages.
  • Make a full backup of your existing project which you want to convert.
  • Before you open the project in Delphi IDE do the following changes.
  • Locate Forms which contain TUniPageControl component.
  • Open the associated DFM file in a Text Editor and replace all TTabSheet instances with TUniTabSheet.
  • Save the DFM file and repeat this for all Forms containing  TUniPageControl control.
  • In order to simplify next steps you can delete the DSK (Desktop) file of the related project.
  • Open the project in the IDE.
  • Open ServerModule.pas.
  • IDE will nag you for some properties that no longer exist. Ignore them and save the ServerModule.pas.
  • For all Forms and Frames in project open them one by one. Again IDE will warn you about several properties that aren’t published anymore. Press Ignore all and save the Form.
  • When you try to save modified Form, IDE may complain about some components that have incorrect class types. IDE will prompt you to correct the problem. Answer Yes to all prompts and save the Form.
  • Repeat above steps for all Forms and Frames.
  • Now try building the project.
  • Compiler will generate errors for units X,Y, Z… that do not exist anymore. (e.g. UniControls, UniExtControls, …etc.) Remove these units from Uses list and save the Form.
  • For some Forms compiler may generate error for some “Unknown class type“. Add UniGUIAbstractClasses to Uses list of Form and recompile the project.

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.

Posted in Technical | 3 Comments

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

Posted in General | 3 Comments

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.

Posted in General | Leave a comment

This is the last build of version 0.84 which is eventually available for public download.

New in this version:

  • TUniCanvas, TUniScorllBox, TUniDBDateTimePicker and TUniDBCheckBox components
  • VCL Interface for Cookie management
  • New demos:  PaintDemo, CanvasDemo, Cookies Demo

There are also lots of bug fixes and improvements in this new version.

Continue reading

Posted in General | 1 Comment

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.

Posted in General | Leave a comment