Hello everybody.

Lagprogramming sent me PMs and agreed to share it with you.

I've read the mailing list discussion regarding saving rendered form bitmaps 
and framebuffers. Maybe the following information is useful to you.
If you need a system function free backend in MSEgui you need to implement the 
functions:
Code: Pascal  [Select][+][-]window.onload = function(){var x1 = 
document.getElementById("main_content_section"); if (x1) { var x = 
document.getElementsByClassName("geshi");for (var i = 0; i < x.length; i++) { 
x[i].style.maxHeight='none'; x[i].style.height = 
Math.min(x[i].clientHeight+15,306)+'px'; x[i].style.resize = "vertical";}};}
     gdifuncty = &#40;gdf_creategc,gdf_destroygc,gdf_changegc,gdf_createpixmap,

                  gdf_pixmaptoimage,gdf_imagetopixmap,

                  gdf_getcanvasclass,gdf_endpaint,gdf_flush,gdf_movewindowrect,

                  
gdf_drawlines,gdf_drawlinesegments,gdf_drawellipse,gdf_drawarc,

                  gdf_fillrect,

                  gdf_fillellipse,gdf_fillarc,gdf_fillpolygon,{gdf_drawstring,}

                  gdf_drawstring16,

                  gdf_setcliporigin,

                  
gdf_createemptyregion,gdf_createrectregion,gdf_createrectsregion,

                  gdf_destroyregion,gdf_copyregion,gdf_moveregion,

                  gdf_regionisempty,gdf_regionclipbox,

                  gdf_regsubrect,gdf_regsubregion,

                  gdf_regaddrect,gdf_regaddregion,gdf_regintersectrect,

                  gdf_regintersectregion,

                  gdf_copyarea,gdf_getimage,

                  gdf_fonthasglyph,

                  gdf_getfont,gdf_getfonthighres,gdf_freefontdata,

                  gdf_gettext16width,gdf_getchar16widths,gdf_getfontmetrics

                  &#41;;



LCL's customdrawn initially tried to use the fcl-image package, which is 
distributed with FPC. At the time customdrawn developers started working, the 
fcl-image package was far from being complete and it didn't had implemented 
many routines. Even today it misses features and has bugs, but it's better than 
it was at that time. In order to get over these limitations of the fcl-image 
package, customdrawn developers added functionality to LCL units like 
lcl/lazregions.pas. MSEgui might have it's own fcl-image modified 
implementation, too. Anyway, in the future, customdrawn developers will have to 
improve the fcl-image package, not the LCL units. In the mentioned example the 
developers added a new unit for regions, instead of improving the fcl-image 
package to support regions. For sure they had their reasons.
Instead of fcl-image you may try to use bgrabitmap. I've never used it but 
maybe it has offscreen 2D rendering. For sure circular must know if bgrabitmap 
has better functionality than fcl-image and maybe has an idea on how much work 
is needed to implement in bgrabitmap the missing routines needed by msegui.

-----------------------------------

This is the other PM:

New Personal Message: Re: Saving form bitmaps

Traduire le message en : Français
| Ne jamais traduire à partir de : Anglais
Lazarus
Vous
You have just been sent a personal message by lagprogramming on Lazarus.
This is what has to be implemented for the GUI-interface
Code: Pascal  [Select][+][-]window.onload = function(){var x1 = 
document.getElementById("main_content_section"); if (x1) { var x = 
document.getElementsByClassName("geshi");for (var i = 0; i < x.length; i++) { 
x[i].style.maxHeight='none'; x[i].style.height = 
Math.min(x[i].clientHeight+15,306)+'px'; x[i].style.resize = "vertical";}};}
function gui_init: guierrorty;

function gui_deinit: guierrorty;

procedure gui_cancelshutdown;

procedure GUI_DEBUGBEGIN; export;

procedure GUI_DEBUGEND; export;

function gui_registergdi: guierrorty;

function gui_setmainthread: guierrorty;

function gui_sethighrestimer&#40;const avalue: boolean&#41;: guierrorty;

function gui_grouphideminimizedwindows: boolean;

function gui_postevent&#40;event: tmseevent&#41;: guierrorty;

function gui_settimer&#40;us: longword&#41;: guierrorty;

procedure gui_disconnectmaineventqueue&#40;&#41;;

procedure gui_connectmaineventqueue&#40;&#41;;

function gui_hasevent: boolean;

function gui_getevent: tmseevent;

function gui_escapepressed: boolean;

procedure gui_resetescapepressed;

function gui_createwindow&#40;const rect: rectty; var options: 
internalwindowoptionsty; var awindow: windowty&#41;: guierrorty;

function gui_destroywindow&#40;var awindow: windowty&#41;: guierrorty;

function gui_getrootwindow&#40;id: winidty = 0&#41;: winidty;

function gui_getparentwindow&#40;const awindow: winidty&#41;: winidty;

function gui_reparentwindow&#40;const child: winidty; const parent: winidty; 
const pos: pointty&#41;: guierrorty;

function gui_getchildren&#40;const id: winidty; out children: winidarty&#41;: 
guierrorty;

function gui_showsysdock&#40;var awindow: windowty&#41;: guierrorty;

function gui_hidesysdock&#40;var awindow: windowty&#41;: guierrorty;

function gui_docktosyswindow&#40;var child: windowty; const akind: 
syswindowty&#41;: guierrorty;

function gui_traymessage&#40;var awindow: windowty; const message: msestring; 
out messageid: longword; const timeoutms: longword = 0&#41;: guierrorty;

function gui_canceltraymessage&#40;var awindow: windowty; const messageid: 
longword&#41;: guierrorty;

function gui_settrayicon&#40;var awindow: windowty; const icon,mask: 
pixmapty&#41;: guierrorty;

function gui_settrayhint&#40;var awindow: windowty; const hint: msestring&#41;: 
guierrorty;

function gui_flushgdi&#40;const synchronize: boolean = false&#41;: guierrorty;

function gui_showwindow&#40;id: winidty&#41;: guierrorty;

function gui_hidewindow&#40;id: winidty&#41;: guierrorty;

function gui_raisewindow&#40;id: winidty&#41;: guierrorty;

function gui_lowerwindow&#40;id: winidty&#41;: guierrorty;

function gui_stackunderwindow&#40;id: winidty; predecessor: winidty&#41;: 
guierrorty;

function gui_stackoverwindow&#40;id: winidty; predecessor: winidty&#41;: 
guierrorty;

function gui_canstackunder: boolean;

function gui_getzorder&#40;const ids: winidarty; out zorders: integerarty&#41;: 
guierrorty;

function gui_getwindowrect&#40;id: winidty; out rect: rectty&#41;: guierrorty;

function gui_getwindowpos&#40;id: winidty; out pos: pointty&#41;: guierrorty;

function gui_getwindowsize&#40;id: winidty&#41;: windowsizety;

function gui_getwindowdesktop&#40;const id: winidty&#41;: integer;

function gui_windowvisible&#40;id: winidty&#41;: boolean;

function gui_setwindowstate&#40;id: winidty; size: windowsizety; visible: 
boolean&#41;: guierrorty;

function gui_setwindowcaption&#40;id: winidty; const caption: msestring&#41;: 
guierrorty;

function gui_setwindowicon&#40;id: winidty; const icon,mask: pixmapty&#41;: 
guierrorty;

function gui_setsizeconstraints&#40;id: winidty; const min,max: sizety&#41;: 
guierrorty;

function gui_reposwindow&#40;id: winidty; const rect: rectty&#41;: guierrorty;

function gui_getdecoratedwindowrect&#40;id: winidty; out arect: rectty&#41;: 
guierrorty;

function gui_setdecoratedwindowrect&#40;id: winidty; const rect: rectty; out 
clientrect: rectty&#41;: guierrorty;

function gui_setembeddedwindowrect&#40;id: winidty; const rect: rectty&#41;: 
guierrorty;

function gui_setwindowfocus&#40;id: winidty&#41;: guierrorty;

function gui_setimefocus&#40;var awindow: windowty&#41;: guierrorty;

function gui_unsetimefocus&#40;var awindow: windowty&#41;: guierrorty;

function gui_setappfocus&#40;id: winidty&#41;: guierrorty;

function gui_minimizeapplication: guierrorty;

function gui_setwindowgroup&#40;id: winidty; group: winidty&#41;: guierrorty;

function gui_settransientfor&#40;var awindow: windowty; const transientfor: 
winidty&#41;: guierrorty;

function gui_movewindowrect&#40;id: winidty; const dist: pointty; const rect: 
rectty&#41;: guierrorty;

function gui_windowatpos&#40;const pos: pointty&#41;: winidty;

function gui_getscreenrect&#40;const id: winidty&#41;: rectty;

function gui_getworkarea&#40;id: winidty&#41;: rectty;

function gui_setapplicationicon&#40;const icon,mask: pixmapty&#41;: guierrorty;

function gui_pidtowinid&#40;const pids: procidarty&#41;: winidty;

function gui_setcursorshape&#40;winid: winidty; shape: cursorshapety&#41;: 
guierrorty;

function gui_getpointerpos: pointty;

function gui_setpointerpos&#40;const pos: pointty&#41;: guierrorty;

function gui_movepointer&#40;const dist: pointty&#41;: guierrorty;

function gui_grabpointer&#40;id: winidty&#41;: guierrorty;

function gui_ungrabpointer: guierrorty;

function gui_getpixel&#40;const id: winidty; const pos: pointty; out pixel: 
pixelty&#41;: guierrorty;

function gui_rgbtopixel&#40;rgb: longword&#41;: pixelty;

function gui_pixeltorgb&#40;pixel: pixelty&#41;: longword;

function gui_graytopixel&#40;gray: byte&#41;: pixelty;

function gui_pixeltogray&#40;pixel: pixelty&#41;: byte;

function gui_initcolormap: guierrorty;

function gui_regiontorects&#40;const aregion: regionty&#41;: rectarty;

function gui_getdefaultfontnames: defaultfontnamesty;

function gui_createpixmap&#40;const size: sizety; winid: winidty = 0; kind:  
bitmapkindty = bmk_rgb; copyfrom: pixmapty = 0&#41;: pixmapty; overload;

function gui_freepixmap&#40;pixmap: pixmapty&#41;: gdierrorty;

function gui_getpixmapinfo&#40;var info: pixmapinfoty&#41;: gdierrorty;

function gui_createbitmapfromdata&#40;const size: sizety; datapo: pbyte; 
msbitfirst: boolean = false; dwordaligned: boolean = false; bottomup: boolean = 
false&#41;: pixmapty;

function gui_pixmaptoimage&#40;pixmap: pixmapty; out image: imagety; gchandle: 
longword&#41;: gdierrorty;

function gui_imagetopixmap&#40;const image: imagety; out pixmap: pixmapty; 
gchandle: longword&#41;: gdierrorty;

function gui_allocimagemem&#40;length: integer&#41;: plongwordaty;

procedure gui_freeimagemem&#40;data: plongwordaty&#41;;

procedure gui_beep;

function gui_copytoclipboard&#40;const value: msestring; const buffer: 
clipboardbufferty&#41;: guierrorty;

function gui_pastefromclipboard&#40;out value: msestring; const buffer: 
clipboardbufferty&#41;: guierrorty;

function gui_canpastefromclipboard&#40;const buffer: clipboardbufferty&#41;: 
boolean;

function gui_sysdnd&#40;const action: sysdndactionty; const aintf: isysdnd; 
const arect: rectty; out aresult: boolean&#41;: guierrorty;

function gui_sysdndreaddata&#40;var adata: string; const typeindex: 
integer&#41;: guierrorty;

function gui_sysdndreadtext&#40;var atext: msestring; const typeindex: 
integer&#41;: guierrorty;

function gui_getgdifuncs: pgdifunctionaty; function gui_init: guierrorty;

function gui_deinit: guierrorty;

procedure gui_cancelshutdown;

procedure GUI_DEBUGBEGIN; export;

procedure GUI_DEBUGEND; export;

function gui_registergdi: guierrorty;

function gui_setmainthread: guierrorty;

function gui_sethighrestimer&#40;const avalue: boolean&#41;: guierrorty;

function gui_grouphideminimizedwindows: boolean;

function gui_postevent&#40;event: tmseevent&#41;: guierrorty;

function gui_settimer&#40;us: longword&#41;: guierrorty;

procedure gui_disconnectmaineventqueue&#40;&#41;;

procedure gui_connectmaineventqueue&#40;&#41;;

function gui_hasevent: boolean;

function gui_getevent: tmseevent;

function gui_escapepressed: boolean;

procedure gui_resetescapepressed;

function gui_createwindow&#40;const rect: rectty; var options: 
internalwindowoptionsty; var awindow: windowty&#41;: guierrorty;

function gui_destroywindow&#40;var awindow: windowty&#41;: guierrorty;

function gui_getrootwindow&#40;id: winidty = 0&#41;: winidty;

function gui_getparentwindow&#40;const awindow: winidty&#41;: winidty;

function gui_reparentwindow&#40;const child: winidty; const parent: winidty; 
const pos: pointty&#41;: guierrorty;

function gui_getchildren&#40;const id: winidty; out children: winidarty&#41;: 
guierrorty;

function gui_showsysdock&#40;var awindow: windowty&#41;: guierrorty;

function gui_hidesysdock&#40;var awindow: windowty&#41;: guierrorty;

function gui_docktosyswindow&#40;var child: windowty; const akind: 
syswindowty&#41;: guierrorty;

function gui_traymessage&#40;var awindow: windowty; const message: msestring; 
out messageid: longword; const timeoutms: longword = 0&#41;: guierrorty;

function gui_canceltraymessage&#40;var awindow: windowty; const messageid: 
longword&#41;: guierrorty;

function gui_settrayicon&#40;var awindow: windowty; const icon,mask: 
pixmapty&#41;: guierrorty;

function gui_settrayhint&#40;var awindow: windowty; const hint: msestring&#41;: 
guierrorty;

function gui_flushgdi&#40;const synchronize: boolean = false&#41;: guierrorty;

function gui_showwindow&#40;id: winidty&#41;: guierrorty;

function gui_hidewindow&#40;id: winidty&#41;: guierrorty;

function gui_raisewindow&#40;id: winidty&#41;: guierrorty;

function gui_lowerwindow&#40;id: winidty&#41;: guierrorty;

function gui_stackunderwindow&#40;id: winidty; predecessor: winidty&#41;: 
guierrorty;

function gui_stackoverwindow&#40;id: winidty; predecessor: winidty&#41;: 
guierrorty;

function gui_canstackunder: boolean; //no way found to change stacking order in 
KDE

function gui_getzorder&#40;const ids: winidarty; out zorders: integerarty&#41;: 
guierrorty;

function gui_getwindowrect&#40;id: winidty; out rect: rectty&#41;: guierrorty;

function gui_getwindowpos&#40;id: winidty; out pos: pointty&#41;: guierrorty;

function gui_getwindowsize&#40;id: winidty&#41;: windowsizety;

function gui_getwindowdesktop&#40;const id: winidty&#41;: integer;

function gui_windowvisible&#40;id: winidty&#41;: boolean;

function gui_setwindowstate&#40;id: winidty; size: windowsizety; visible: 
boolean&#41;: guierrorty;

function gui_setwindowcaption&#40;id: winidty; const caption: msestring&#41;: 
guierrorty;

function gui_setwindowicon&#40;id: winidty; const icon,mask: pixmapty&#41;: 
guierrorty;

function gui_setsizeconstraints&#40;id: winidty; const min,max: sizety&#41;: 
guierrorty;

function gui_reposwindow&#40;id: winidty; const rect: rectty&#41;: guierrorty;

function gui_getdecoratedwindowrect&#40;id: winidty; out arect: rectty&#41;: 
guierrorty;

function gui_setdecoratedwindowrect&#40;id: winidty; const rect: rectty; out 
clientrect: rectty&#41;: guierrorty;

function gui_setembeddedwindowrect&#40;id: winidty; const rect: rectty&#41;: 
guierrorty;

function gui_setwindowfocus&#40;id: winidty&#41;: guierrorty;

function gui_setimefocus&#40;var awindow: windowty&#41;: guierrorty;

function gui_unsetimefocus&#40;var awindow: windowty&#41;: guierrorty;

function gui_setappfocus&#40;id: winidty&#41;: guierrorty;

function gui_minimizeapplication: guierrorty;

function gui_setwindowgroup&#40;id: winidty; group: winidty&#41;: guierrorty;

function gui_settransientfor&#40;var awindow: windowty; const transientfor: 
winidty&#41;: guierrorty;

function gui_movewindowrect&#40;id: winidty; const dist: pointty; const rect: 
rectty&#41;: guierrorty;

function gui_windowatpos&#40;const pos: pointty&#41;: winidty;

function gui_getscreenrect&#40;const id: winidty&#41;: rectty;

function gui_getworkarea&#40;id: winidty&#41;: rectty;

function gui_setapplicationicon&#40;const icon,mask: pixmapty&#41;: guierrorty;

function gui_pidtowinid&#40;const pids: procidarty&#41;: winidty;

function gui_setcursorshape&#40;winid: winidty; shape: cursorshapety&#41;: 
guierrorty;

function gui_getpointerpos: pointty;

function gui_setpointerpos&#40;const pos: pointty&#41;: guierrorty;

function gui_movepointer&#40;const dist: pointty&#41;: guierrorty;

function gui_grabpointer&#40;id: winidty&#41;: guierrorty;

function gui_ungrabpointer: guierrorty;

function gui_getpixel&#40;const id: winidty; const pos: pointty; out pixel: 
pixelty&#41;: guierrorty;

function gui_rgbtopixel&#40;rgb: longword&#41;: pixelty;

function gui_pixeltorgb&#40;pixel: pixelty&#41;: longword;

function gui_graytopixel&#40;gray: byte&#41;: pixelty;

function gui_pixeltogray&#40;pixel: pixelty&#41;: byte;

function gui_initcolormap: guierrorty;

function gui_regiontorects&#40;const aregion: regionty&#41;: rectarty;

function gui_getdefaultfontnames: defaultfontnamesty;

function gui_createpixmap&#40;const size: sizety; winid: winidty = 0; kind:  
bitmapkindty = bmk_rgb; copyfrom: pixmapty = 0&#41;: pixmapty; overload;

function gui_freepixmap&#40;pixmap: pixmapty&#41;: gdierrorty;

function gui_getpixmapinfo&#40;var info: pixmapinfoty&#41;: gdierrorty;

function gui_createbitmapfromdata&#40;const size: sizety; datapo: pbyte; 
msbitfirst: boolean = false; dwordaligned: boolean = false; bottomup: boolean = 
false&#41;: pixmapty;

function gui_pixmaptoimage&#40;pixmap: pixmapty; out image: imagety; gchandle: 
longword&#41;: gdierrorty;

function gui_imagetopixmap&#40;const image: imagety; out pixmap: pixmapty; 
gchandle: longword&#41;: gdierrorty;

function gui_allocimagemem&#40;length: integer&#41;: plongwordaty;

procedure gui_freeimagemem&#40;data: plongwordaty&#41;;

procedure gui_beep;

function gui_copytoclipboard&#40;const value: msestring; const buffer: 
clipboardbufferty&#41;: guierrorty;

function gui_pastefromclipboard&#40;out value: msestring; const buffer: 
clipboardbufferty&#41;: guierrorty;

function gui_canpastefromclipboard&#40;const buffer: clipboardbufferty&#41;: 
boolean;

function gui_sysdnd&#40;const action: sysdndactionty; const aintf: isysdnd; 
const arect: rectty; out aresult: boolean&#41;: guierrorty;

function gui_sysdndreaddata&#40;var adata: string; const typeindex: 
integer&#41;: guierrorty;

function gui_sysdndreadtext&#40;var atext: msestring; const typeindex: 
integer&#41;: guierrorty;

function gui_getgdifuncs: pgdifunctionaty;

function gui_init: guierrorty;

function gui_deinit: guierrorty;

procedure gui_cancelshutdown;

procedure GUI_DEBUGBEGIN; export;

procedure GUI_DEBUGEND; export;

function gui_registergdi: guierrorty;

function gui_setmainthread: guierrorty; //set mainthread to currentthread

function gui_sethighrestimer&#40;const avalue: boolean&#41;: guierrorty;

function gui_grouphideminimizedwindows: boolean;

function gui_postevent&#40;event: tmseevent&#41;: guierrorty;

function gui_settimer&#40;us: longword&#41;: guierrorty;

procedure gui_disconnectmaineventqueue&#40;&#41;;

procedure gui_connectmaineventqueue&#40;&#41;;

function gui_hasevent: boolean;

function gui_getevent: tmseevent;

function gui_escapepressed: boolean;

procedure gui_resetescapepressed;

function gui_createwindow&#40;const rect: rectty; var options: 
internalwindowoptionsty; var awindow: windowty&#41;: guierrorty;

function gui_destroywindow&#40;var awindow: windowty&#41;: guierrorty;

function gui_getrootwindow&#40;id: winidty = 0&#41;: winidty;

function gui_getparentwindow&#40;const awindow: winidty&#41;: winidty;

function gui_reparentwindow&#40;const child: winidty; const parent: winidty; 
const pos: pointty&#41;: guierrorty;

function gui_getchildren&#40;const id: winidty; out children: winidarty&#41;: 
guierrorty;

function gui_showsysdock&#40;var awindow: windowty&#41;: guierrorty;

function gui_hidesysdock&#40;var awindow: windowty&#41;: guierrorty;

function gui_docktosyswindow&#40;var child: windowty; const akind: 
syswindowty&#41;: guierrorty;

function gui_traymessage&#40;var awindow: windowty; const message: msestring; 
out messageid: longword; const timeoutms: longword = 0&#41;: guierrorty;

function gui_canceltraymessage&#40;var awindow: windowty; const messageid: 
longword&#41;: guierrorty;

function gui_settrayicon&#40;var awindow: windowty; const icon,mask: 
pixmapty&#41;: guierrorty;

function gui_settrayhint&#40;var awindow: windowty; const hint: msestring&#41;: 
guierrorty;

function gui_flushgdi&#40;const synchronize: boolean = false&#41;: guierrorty;

function gui_showwindow&#40;id: winidty&#41;: guierrorty;

function gui_hidewindow&#40;id: winidty&#41;: guierrorty;

function gui_raisewindow&#40;id: winidty&#41;: guierrorty;

function gui_lowerwindow&#40;id: winidty&#41;: guierrorty;

function gui_stackunderwindow&#40;id: winidty; predecessor: winidty&#41;: 
guierrorty;

function gui_stackoverwindow&#40;id: winidty; predecessor: winidty&#41;: 
guierrorty;

function gui_canstackunder: boolean; //no way found to change stacking order in 
KDE

function gui_getzorder&#40;const ids: winidarty; out zorders: integerarty&#41;: 
guierrorty;

function gui_getwindowrect&#40;id: winidty; out rect: rectty&#41;: guierrorty;

function gui_getwindowpos&#40;id: winidty; out pos: pointty&#41;: guierrorty;

function gui_getwindowsize&#40;id: winidty&#41;: windowsizety;

function gui_getwindowdesktop&#40;const id: winidty&#41;: integer;

function gui_windowvisible&#40;id: winidty&#41;: boolean;

function gui_setwindowstate&#40;id: winidty; size: windowsizety; visible: 
boolean&#41;: guierrorty;

function gui_setwindowcaption&#40;id: winidty; const caption: msestring&#41;: 
guierrorty;

function gui_setwindowicon&#40;id: winidty; const icon,mask: pixmapty&#41;: 
guierrorty;

function gui_setsizeconstraints&#40;id: winidty; const min,max: sizety&#41;: 
guierrorty;

function gui_reposwindow&#40;id: winidty; const rect: rectty&#41;: guierrorty;

function gui_getdecoratedwindowrect&#40;id: winidty; out arect: rectty&#41;: 
guierrorty;

function gui_setdecoratedwindowrect&#40;id: winidty; const rect: rectty; out 
clientrect: rectty&#41;: guierrorty;

function gui_setembeddedwindowrect&#40;id: winidty; const rect: rectty&#41;: 
guierrorty;

function gui_setwindowfocus&#40;id: winidty&#41;: guierrorty;

function gui_setimefocus&#40;var awindow: windowty&#41;: guierrorty;

function gui_unsetimefocus&#40;var awindow: windowty&#41;: guierrorty;

function gui_setappfocus&#40;id: winidty&#41;: guierrorty;

function gui_minimizeapplication: guierrorty;

function gui_setwindowgroup&#40;id: winidty; group: winidty&#41;: guierrorty;

function gui_settransientfor&#40;var awindow: windowty; const transientfor: 
winidty&#41;: guierrorty;

function gui_movewindowrect&#40;id: winidty; const dist: pointty; const rect: 
rectty&#41;: guierrorty;

function gui_windowatpos&#40;const pos: pointty&#41;: winidty;

function gui_getscreenrect&#40;const id: winidty&#41;: rectty;

function gui_getworkarea&#40;id: winidty&#41;: rectty;

function gui_setapplicationicon&#40;const icon,mask: pixmapty&#41;: guierrorty;

function gui_pidtowinid&#40;const pids: procidarty&#41;: winidty;

function gui_setcursorshape&#40;winid: winidty; shape: cursorshapety&#41;: 
guierrorty;

function gui_getpointerpos: pointty;

function gui_setpointerpos&#40;const pos: pointty&#41;: guierrorty;

function gui_movepointer&#40;const dist: pointty&#41;: guierrorty;

function gui_grabpointer&#40;id: winidty&#41;: guierrorty;

function gui_ungrabpointer: guierrorty;

function gui_getpixel&#40;const id: winidty; const pos: pointty; out pixel: 
pixelty&#41;: guierrorty;

function gui_rgbtopixel&#40;rgb: longword&#41;: pixelty;

function gui_pixeltorgb&#40;pixel: pixelty&#41;: longword;

function gui_graytopixel&#40;gray: byte&#41;: pixelty;

function gui_pixeltogray&#40;pixel: pixelty&#41;: byte;

function gui_initcolormap: guierrorty;

function gui_regiontorects&#40;const aregion: regionty&#41;: rectarty;

function gui_getdefaultfontnames: defaultfontnamesty;

function gui_createpixmap&#40;const size: sizety; winid: winidty = 0; kind:  
bitmapkindty = bmk_rgb; copyfrom: pixmapty = 0&#41;: pixmapty; overload;

function gui_freepixmap&#40;pixmap: pixmapty&#41;: gdierrorty;

function gui_getpixmapinfo&#40;var info: pixmapinfoty&#41;: gdierrorty;

function gui_createbitmapfromdata&#40;const size: sizety; datapo: pbyte; 
msbitfirst: boolean = false; dwordaligned: boolean = false; bottomup: boolean = 
false&#41;: pixmapty;

function gui_pixmaptoimage&#40;pixmap: pixmapty; out image: imagety; gchandle: 
longword&#41;: gdierrorty;

function gui_imagetopixmap&#40;const image: imagety; out pixmap: pixmapty; 
gchandle: longword&#41;: gdierrorty;

function gui_allocimagemem&#40;length: integer&#41;: plongwordaty;

procedure gui_freeimagemem&#40;data: plongwordaty&#41;;

procedure gui_beep;

function gui_copytoclipboard&#40;const value: msestring; const buffer: 
clipboardbufferty&#41;: guierrorty;

function gui_pastefromclipboard&#40;out value: msestring; const buffer: 
clipboardbufferty&#41;: guierrorty;

function gui_canpastefromclipboard&#40;const buffer: clipboardbufferty&#41;: 
boolean;

function gui_sysdnd&#40;const action: sysdndactionty; const aintf: isysdnd; 
const arect: rectty; out aresult: boolean&#41;: guierrorty;

function gui_sysdndreaddata&#40;var adata: string; const typeindex: 
integer&#41;: guierrorty;

function gui_sysdndreadtext&#40;var atext: msestring; const typeindex: 
integer&#41;: guierrorty;

function gui_getgdifuncs: pgdifunctionaty;


Regarding MSEgui, for now, in order to supply mouse and keyboardevents and the 
like you need to post the according event objects into the application 
eventqueue.
This message and the previous one are the blueprints that people were talking 
on the mailing lists.

-----------------

________________________________
De : Sieghard via mseide-msegui-talk <mseide-msegui-talk@lists.sourceforge.net>
Envoyé : samedi 5 août 2023 02:15
À : mseide-msegui-talk@lists.sourceforge.net 
<mseide-msegui-talk@lists.sourceforge.net>
Cc : Sieghard <s_c_...@arcor.de>
Objet : Re: [MSEide-MSEgui-talk] Save forms to bitmaps?

Hello vasi,

you wrote on Fri, 4 Aug 2023 18:11:17 +0300:

> Yeah, without a window manager... again, look at Allegro how it handles so
> called windows... in those bitmaps, the user must draw also the "window
> controls", not only the content of the window that are the widgets...

That is, there is NO window manager, and all the "window" shifting, sizing,
overlap handling and so on has to be done by the "application", or rather
the code it's based on and built with? That's quite a chore...

> And I see your last reply... yes, is a huge task beyond a single person...
> Well, for one that knows well the internals, it will be easy at least to
> "draw a blueprint" for the future work to be done (that would have been
> Martin)...

Some, if not most of the parts of a "blue print", at least for the basic
bitmap creation, seem to be in place already. "Only" the implementation is
badly lacking, and the knowledge of the intention behind sadly has vanished
some time ago.

> I see the console frame buffer stuff as a solution for old machines
> without good video drivers or for the embedded world where you can't fit
> an X server but your app would have enough memory to run... but not an

Yes, that might be a wide field of applications with a rewarding amount
of use(r)s. And this might NOT be restricted to "old machines" only -
there's the huge amount of new microcontrollers fitted with LCD and OLED
based user interfaces for machines ranging from coffee brewers to whole
production line controllers. Thes OUGHT NOT use a windowing system that
allows the user to access arbitrary system components, these are meant to
restrict their use to only the application interface. And not few of these
appearing now are based on very capable ARM controllers being able to run
a fill-fledged Linux, even with a lot of services and X11.

> emergency or a vital thing... We are not yet there... Right now it might

We are amidst of a flurry of suitable systems appearing right now and
gasping for useable software. And many companies are striving to fill the
need.

> be practical for small software tools but not for big database
> applications with huge scroll-able tables, etc... Similar to the kind of

You forget the networking aspect - these systems are often meant to work
together with a factory "cloud system", they're located at the "edge" of
the cloud (and that's how they're named, "edge systems") or even farther
out in the field or on the factory floor. And they DO work together with -
even large - databaes systems.

> graphical applications I do right now using OpenGL, which I prefer...

This, BTW, could be a sound base for an implementation of such a software
system. The real work will go into the intermediate layers.

--
(Weitergabe von Adressdaten, Telefonnummern u.ä. ohne Zustimmung
nicht gestattet, ebenso Zusendung von Werbung oder ähnlichem)
-----------------------------------------------------------
Mit freundlichen Grüßen, S. Schicktanz
-----------------------------------------------------------




_______________________________________________
mseide-msegui-talk mailing list
mseide-msegui-talk@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mseide-msegui-talk
_______________________________________________
mseide-msegui-talk mailing list
mseide-msegui-talk@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mseide-msegui-talk

Reply via email to