Skip to content


Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?


Failed to load latest commit information.

MSEide+MSEgui Pascal Cross Platform GUI Development System

2022-10-24 Version 5.6.10. Copyright (c) 1999-2022 by Martin Schreiber and friends.

MSEgui is a complete independent Free Pascal widgetset. It does not use any other widgetsets like GTK2/GTK3/Qt4/Qt5. MSEgui interacts on Unix directly with X11 server (like other widgetsets do). On Windows, it deals with the low level Windows GDI interface.

MSEgui is like a GTK2/GTK3/Qt5 widgetset with same look-and-feel on each OS (Linux, Windows and FreeBSD). And because it is developed in Pascal, you have full control on the widgetset.


  • Compiles with FPC 2.6.4, 3.0.0, 3.0.2, 3.2.0, 3.2.2. and 3.3.1.
  • For FreeBSD-x86_64, Linux-i386, Linux-x86_64, Linux-arm32 and aarch64(Raspberry Pi), Windows-i386, Windows-x86_64.
  • Links to xlib and gdi32, no external widget library needed.
  • Internal character encoding is utf-16.
  • Uses anti aliased fonts on Linux (Xft).
  • All screen drawing is double buffered.
  • Has docking forms and MDI.
  • Has embedded forms (similar to TFrame).
  • Has sophisticated database access components and data edit widgets.
  • Internationalization functionality with resource modules.
  • Report generator.


  • Integrated debugging.
  • Source code highlighting.
  • Source code navigation with support for include files.
  • Code completion for classes.
  • Procedures list.
  • Integrated visual form designer with source code update for components and events.
  • Flexible and handy build system with switchable macros.
  • Visual form inheritance.
  • Integrated report designer.


IDE and tools are under GPL, library under modified LGPL like FPC-RTL. Package maintainers may delete the files "apps/ide/COPYING.GPL", "lib/common/COPYING.LGPL" and "lib/common/COPYING.MSE".


  1. Download and install FPC, you can get it from
  2. Download mseide-msegui source from
  3. Extract them to a directory of your choice. For example "/home/myself/mseide-msegui".
  4. Download and unzip mseide binary according your OS from here:
  5. Run '/direcory-of-unzipped/mseide_linxx/mseide' on Linux or FreeBSD or 'direcory-of-unzipped\mseide_winxx\mseide.exe' on Windows.
  6. In 'Settings'-'Configure MSEide'-'${MSEDIR}' select the root directory of MSEgui source. For example "/home/myself/mseide-msegui"
  7. In 'Project'-'Open' select '/home/myself/mseide-msegui/apps/demo/demo.prj'.
  8. 'Target'-'Continue'.

Video of installation + load/run demo:

If you get the error "/usr/bin/ld: cannot find -lX11" install the libX11-devel or libX11-dev package or make a symbolic link /usr/lib/ -> /usr/lib/ see

If you want to compile the IDE

  1. In 'Project'-'Open' select 'sourcedirectory/apps/ide/mseide.prj'.
  2. 'Target'-'Continue'.

Compiling MSEide from commandline on Linux and FreeBSD

On Unix: fpc -Fulib/common/* -Fulib/common/kernel/linux apps/ide/mseide.pas

On Windows: fpc -Fulib\common* -Fulib\common\kernel\windows apps\ide\mseide.pas

If FPC crashes while compiling try on Linux and FreeBSD

fpc -B -Fulib/common/* -Fulib/common/kernel/linux apps/ide/mseide.pas On Windows: fpc -B -Fulib\common* -Fulib\common\kernel\windows apps\ide\mseide.pas

Creating a new GUI project

'Project'-'New'-'From Template', select "default.prj"

Creating a new console project

'Project'-'New'-'From Template', select "console.prj"

MSEgui command line parameters

 Change the used fonts. Example for a 16 pixel height default font:

 Use 1-width lines instead of 0-width lines. X11 only. Workaround for buggy HW-accelerated
 X-servers which don't draw lineends exactly. Can degrade performance, see

 Do not touch Z-order of the windows.

 Do not use the NET_RESTACK_WINDOW protocol.

 Use the NET_RESTACK_WINDOW protocol.

 Do not use xreconfigurewmwindow() for window stacking operation.

 Use xreconfigurewmwindow() for window stacking operation.

 Necessary for windowmanagers with buggy xreconfigurewmwindow() handling.

 No workaround.

 Use the top level frame window id instead of the application client window id
 for window raise operation. Implies --NORESTACKWINDOW and

 Simulates staticgravity for buggy window managers.

MSEide command line parameters

 Do not load a project.

 Do not use a skin, no fades.

 Use <filepath> instead the default global MSEide status file.

 Use 'Project'-'Options'-'Macros'-'Active group' number <n>, <n> = 1..6.

 Macro definition, will be overridden by 'Project'-'Options'-'Macros'. Example:
 defines ${MAC1} with value 'abc' and ${MAC2} with value 'def'.
 Store --macrodef defines as global 'Settings'-'Configure MSEide' macros and
 terminate MSEide.

MSEide environment variables

Macros in 'Settings'-'Configure MSEide' can be overridden by environment variables. They will be overriden by --macrodef and 'Project'-'Options'-'Macros'. Possible names: FPCDIR, FPCLIBDIR, MSEDIR, MSELIBDIR, SYNTAXDEFDIR, TEMPLATEDIR, COMPSTOREDIR, COMPILER, DEBUGGER, EXEEXT, TARGET, TARGETOSDIR.

MSEide project macros

Predefined project macros: PROJECTNAME, PROJECTDIR, MAINFILE, TARGETFILE, TARGETENV (in format for "env" unix command), TARGETPARAMS, they can be overridden by 'Project'-'Options'-'Macros'.

MSEide macro functions

${MAC_IFDEF(macroname)} returns the macro value if defined.
${MAC_IFDEF(macroname,notdefinedvalue)} returns the macro value if defined,
 notdefinedvalue otherwise.
 returns definedvalue if macroname is defined, notdefinedvalue otherwise.

MSEide environment macros

${ENV_VAR(variablename)} returns the variable value if defined.
${ENV_VAR(variablename,notdefinedvalue)} returns the variable value if defined,
 notdefinedvalue otherwise.
 returns definedvalue if variablename is defined, notdefinedvalue otherwise.

MSEide string macros

Macro format is ${STR_*(text)}.
 Trim whitespace from the ends of text.
 Trim whitespace from the beginning of text.
 Trim whitespace from the end of text.

 Return first not empty value. Format is
 ${STR_COALESCE(text[,text...])} or

MSEide file macros

Macro format is ${FILE_*(fileparameter)} or ${FILE_*("fileparameter")}.
FILE_MSE       convert to MSE format.
FILE_SYS       convert to sys format.
FILE_PATH      absolute path.
FILE_FILE      no trailing path delimiter.
FILE_DIR       trailing path delimiter.
FILE_NAME      no directory part.
FILE_NAMEBASE  no directory and no name extension part.
FILE_EXT       file name extension.
FILE_NONAME    directory part only.
FILE_NOEXT     no file name extension.

MSEide exec macros

 Executes commandline, returns the process output. Timeout in
 milli seconds, default = 1000, -1 = infinite.

MSEide macros in 'Project'-'Options'-'Debugger'-'xterm Command'

${PTS} expands to tty pts path.
${PTSN} expands to tty pts number.
${PTSH} expands to tty pts handle.
Entering an empty string restores the default.

MSEide external tools parameters macros

Predefined macros in 'Project'-'Options'-'Tools'-'Parameters': CURSOURCEFILE current source file. CURMODULEFILE current *.mfm file. CURSSELECTION selected text in source editor. CURSWORD word at cursor in source editor CURSDEFINITION} definition of the current token at cursor (Ctrl+LClick destination), needs activated P-column (Parse source before call) to be current. CURCOMPONENTCLASS current selected component class in form editor. CURPROPERTY current selected property in object inspector.

Antialiased text with MSEgui 32 bit on 64 bit Linux

MSEgui uses Xft for antialiased fonts on Linux. Please install lib32-libxft package if necessary.

Popup widgets behind the forms

If the popup widgets are showed behind the forms, try to start the MSEgui program with the option '--TOPLEVELRAISE'. Do not use this option if is not necessary (KDE, Gnome... work well without).

Display problems with Linux radeon and other EXA drivers

If the display is distorted or slow add Option "EXAPixmaps" "off" to Section "Device" of xorg.conf, see or use the proprietary video driver for your video chip.

Flashing taskbar widgets in IceWM

Newer revisions of IceWM let the taskbar icons of MSEgui applications flash. Start the MSEgui application with the option '--TOPLEVELRAISE'.

Invalid inputmanager for Ubuntu

The utf-8 setup in Ubuntu seems to be incomplete. If you get the exception "egui : Invalid inputmanager tinternalapplication ." at program start, try to replace your language locale in /usr/share/X11/locale/locale.dir by en_US as a workaround. Example for ru_RU.UTF-8: replace ru_RU.UTF-8/XLC_LOCALE ru_RU.UTF-8 by en_US.UTF-8/XLC_LOCALE ru_RU.UTF-8

Wrong window positions for Ubuntu 14.04

Window positions in Unity are wrong because the Ubuntu windowmanager does not support static_gravity:

How to add custom components to MSEide

There is a project 'apps/myide/mymseide.prj' as a demo. Start MSEide, open project 'apps/myide/mymseide.prj', 'Project'-'Build', 'Target'-'Continue', the IDE with the new component 'tmybutton' will be compiled and started in the the debugger. Binary name is 'mymseide' (linux) or 'mymseide.exe' (win32).

If you wish to do it from scratch:

  • Create a register unit for your components (see 'apps/myide/regmycomps.pas' for an example).
  • Enter the unitname followed by a comma ('myregunit,' if your regunitfile is 'myregunit.pas') in a file named ''.
  • Build the IDE with -dmorecomponents as option.

Component units integrated by this mechanism don't need to be GPL, see apps/ide/COPYING.IDE

If you want to add custom icons to your components:

  • Convert 2424 pixel BMP or PNG files with tools/bmp2pas to an icon unit ('_bmp.pas').
  • Add the name of the icon unit to 'uses' in your register unit.

How to run i18ndemo

- Start MSEide.
- 'Project'-'Open'-'yourdirectory/msegui/apps/i18ndemo/i18ndemo.prj'.
- 'Project'-'Make' to create the rsj files.
- 'Project'-'Open'-'yourdirectory/msegui/tools/i18n/msei18n.prj'.
- 'Target'-'Continue'.

In MSEi18n:

 - Adjust 'Settings'-'Configure MSEi18n'-'${MSEDIR}' and ${COMPILER}.
 - 'Open'-'yourdirectory/msegui/apps/i18ndemo/i18ndemo.trp'
 - 'Make'.
 - Close message window.
 - Close MSEi18n.
 - 'Project'-'Open'-'yourdirectory/msegui/apps/i18ndemo/i18ndemo.prj'.
 - 'Target'-'Continue'.


tsqlite3connection field type mapping:

      Type name        SQLite storage class  Field type    Data type
| INTEGER or INT     | INTEGER 4           | ftinteger   | integer     |
| LARGEINT           | INTEGER 8           | ftlargeint  | largeint    |
| BIGINT             | INTEGER 8           | ftlargeint  | largeint    |
| WORD               | INTEGER 2           | ftword      | word        |
| SMALLINT           | INTEGER 2           | ftsmallint  | smallint    |
| BOOLEAN            | INTEGER 2           | ftboolean   | wordbool    |
| FLOAT[...] or REAL | REAL                | ftfloat     | double      |
| or DOUBLE[...]     |                     |             |             |
| CURRENCY           | REAL                | ftcurrency  | double!     |
| DATETIME or        | REAL                | ftdatetime  | tdatetime   |
|  TIMESTAMP         |                     |             |             |
| DATE               | REAL                | ftdate      | tdatetime   |
| TIME               | REAL                | fttime      | tdatetime   |
| NUMERIC[...]       | INTEGER 8 (*10'000) | ftbcd       | currency    |
| VARCHAR[(n)]       | TEXT                | ftstring    | msestring   |
| TEXT               | TEXT                | ftmemo      | utf8 string |
| TEXT               | TEXT dso_stringmemo | ftstring    | msestring   |
| BLOB               | BLOB                | ftblob      | string      |


Since msegui commit fbbaa979b, ZeosLib components are included in mseide by default. Also last stable source are included in /mseide-msegui/lib/common/mzeoslib/.

If you want to use other ZeosLib source, you need to delete directory /mseide-msegui/lib/common/mzeoslib/. Then add the path to the ZeosLib source to 'Project'-'Options'-'Make'-'Directories' and compile your applicatio with '-dMSEgui'.

If you want to recompile the IDE with new ZeosLib source, add parameter '-dmse_with_zeoslib -dMSEgui'. There is a predefined IDE project apps/ide/mseide_zeos.prj, update 'Project'- 'Options'-'Macros' according to your installation.

Crosscompiling and remote debugging i386/x84_64-linux -> arm-linux

For Raspberry Pi:

  • Establish a ssh login without password (public key authentication).

On the i386/x84_64-linux host:

Name Value


  • 'Project'-'New'-'From Template', select "crossarmdefault.prj" or "crossarmconsole.prj".
  • Create the new project.
  • 'Project'-'Options'-'Macros', set the TARGETPROJECTDIR value to the project path in remote target, ex: "/home/pi/proj/testcase".
  • Check the TARGETENV macro.
  • If your application needs additional libraries copy them from Raspberry Pi /lib/arm-linux-gnueabihf or /usr/lib/arm-linux-gnueabihf to /eabihf/lib

Press F9 and hope the best. ;-)

If there is a debugger timeout at startup enlarge the 'Project'-'Options'-'Debugger'-'Target'-'Wait before connect' value.

Have a lot of fun!



MSEide is a Rapid Application Development IDE for platform independent rich GUI applications in the Pascal language. It comes with its own GUI toolkit called MSEgui. Binaries:




GPL-2.0 and 2 other licenses found

Licenses found






No packages published