delphi - Create FMX window with MessageBox style -
i have question: how can create fmx window make looks showmessage window?
showmessage (contain move , close items):
fmx window:
bordericons := [tbordericon.bisystemmenu]; borderstyle := tfmxformborderstyle.single;
what need: remove icon , delete disabled menu items
on windows, showmessage()
displays system dialog using win32 api messageboxindirect()
function.
to customize default system menu of standard fmx form, have drop down win32 api layer , manipulate system menu directly. means getting hwnd
of form (you can use formtohwnd()
function in fmx.platform.win
unit) , use win32 api getmenu()
, deletemenu()
functions.
to remove form's icon, use win32 api sendmessage()
function send hwnd
wm_seticon
message lparam
set 0. or use setwindowlongptr()
enable ws_ex_dlgmodalframe
window style.
override form's virtual createhandle()
method perform these operations, eg:
interface ... type tform1 = class(tform) ... {$ifdef mswindows} protected procedure createhandle; override; {$endif} ... end; implementation {$ifdef mswindows} uses windows; {$endif} ... {$ifdef mswindows} procedure tform1.createhandle; var wnd: hwnd; menu: hmenu; exstyle: long_ptr; begin inherited; wnd := formtohwnd(self); menu := getmenu(wnd); deletemenu(menu, sc_tasklist, mf_bycommand); deletemenu(menu, 7, mf_byposition); deletemenu(menu, 5, mf_byposition); deletemenu(menu, sc_maximize, mf_bycommand); deletemenu(menu, sc_minimize, mf_bycommand); deletemenu(menu, sc_size, mf_bycommand); deletemenu(menu, sc_restore, mf_bycommand); sendmessage(wnd, wm_seticon, icon_small, 0); sendmessage(wnd, wm_seticon, icon_big, 0); exstyle := getwindowlongptr(wnd, gwl_exstyle); setwindowlong(wnd, gwl_exstyle, exstyle or ws_ex_dlgmodalframe); setwindowpos(wnd, 0, 0, 0, 0, 0, swp_nomove or swp_nosize or swp_nozorder or swp_framechanged); end; {$endif} ... end.
Comments
Post a Comment