On Saturday 19 January 2008 19.39:32 Damien Gerard wrote:
>
> Sorry for my ignorance, but I really don't see the interest of fpGui.
> Under Windows, I prefer Win32 due to it is the native gui. Under Linux
> GTK2 make all the work I need. QT may be too I don't really know I
> have not enough tested it. Under OS X I would prefer Cocoa but Carbon
> is fine too(additionally this widgetset begins to be really usable).
>
> Projects work on these 3 platform without any defines, and they are
> quite complex. And the current LCL solves those issues too.
> So what fpGUI brings to me ?
>
With the Lazarus approach to use OS-native or external widgets it is difficult 
to achieve consistent behaviour over all platforms. To write your own widget 
base library in pascal is more work at the beginning but much easier to 
achieve high quality and productive cross platform development once the 
kernel is written.
A big plus is the ability to add needed base functionality for the higher
levels into the kernel, it allows a maximum of flexibility and platform 
independence.

The architecture of MSEgui:

There is a twindow object which represents the top level window of the
operating system. twindow holds the handle to the OS window object.
The top level widget (for example a tmseform) is responsible for creating
and destroying the twindow object. Every widget holds a reference to the
assigned twindow of the top level widget. That is twidget.window of a child
widget maps to twindow of the top level twidget.
twindow has a canvas which is used for painting all widgets of the form. The
canvas is a parameter of the paint method:
"
 twidget = class(tactcomponent,iscrollframe,iface)
[...]
   procedure paint(const canvas: tcanvas); virtual;
"
The paint canvas works on a server side pixmap with the size of the update
area in order to implement platform independent double buffering. The
pixmap is copied to the screen after the widgets of the window are painted. If 
the update area is small, the pixmap is small too which results in good 
performace.
twidget.font is normally a nil pointer which means that the widget uses the
font of the parent widget or a default font if there is no parent. In
object inspector of MSEide or in code you can create a local tfont instance
if needed.
The same principle applies for twidget.frame, twidget.face and other not 
always used class properties, they are a nil pointer only if the widget 
doesn't need them.
Because of this and the fact that there is only one window handle per form,
there is no need for a stripped-down "TGraphicControl". Every MSEgui
twidget has all possibilities, every twidget can serve as top level
window-widget.
MSEgui is completely Unicode based, all text strings are widestrings.  MSEgui 
has a Unicode capable tpostscriptprinter and an own report generator and 
designer, the MSEgui database components convert from/to utf8 or the system 
encoding while reading/writing from/to the database, text fields are stored 
as widestrings in the dataset .
Worth to mention is tmsebufdataset with "TClientDataset"-like functionality. 
Another innovative component is twidgetgrid. Every inserted edit widget 
builds a data colum in the grid. All properties and events of the column 
widgets are working, the result is a very flexible and powerful compound 
widget. tdbwidgetgrid is the DB-aware version of the twidgetgrid.

MSEide+MSEgui is at version 1.6 and used in production. Invested development 
time about 14'000 hours up to now. MSEide is GPL, MSEgui modified LGPL like 
the FPC-RTL. For questions and bug reports please use NNTP:
news://news.grid-sky.com/public.mseide-msegui.talk

Martin

_________________________________________________________________
     To unsubscribe: mail [EMAIL PROTECTED] with
                "unsubscribe" as the Subject
   archives at http://www.lazarus.freepascal.org/mailarchives

Reply via email to