Форум » GUI » Глюки при прорисовке формы... » Ответить

Глюки при прорисовке формы...

SkyNET: Здравствуйте ! У меня возникла проблема при растягивании формы. Появляются графические баги: [more][/more] Функция, растягивающая форму (Процедура ON SIZE ): FUNCTION Form_OnSize() LOCAL nI CD7000.Tab_1.Width := CD7000.Width / 1.04 CD7000.Image_1.Width := CD7000.Width / 0.98 CD7000.TBrowse_1.Width := CD7000.Tab_1.Width / 1.09 CD7000.Image_1.Height := CD7000.Height / 2.95 CD7000.Tab_1.Row := CD7000.Height / 2.85 CD7000.Tab_1.Height := CD7000.Height / 1.88 CD7000.TBrowse_1.Height := CD7000.Tab_1.Height / 1.18 // TBrowse_1:HideColumns({1,2,3,4,5,6},.T.) RETURN( Nil ) В чём проблема ? Почему форма не перерисовывается ?

Ответов - 7

gfilatov: SkyNET пишет: В чём проблема ? Проблема в том, что окну надо подсказать о необходимости перерисовки Для этого можно использовать в конце функции Form_OnSize() InvalidateRect(GetFormHandle("CD7000"), 1 ) UpdateWindow( GetFormHandle("CD7000") )

SkyNET: Спасибо большое, все работает... А ак определить, что окно перестали растягивать (отпустили кнопку мышки) ? События отпускания мыши я к сожалению не нашел

gfilatov: SkyNET пишет: События отпускания мыши Можно проверить статус кнопок мыши, который хранится в глобальной переменной _HMG_MouseState Значение _HMG_MouseState = 0 соответствует отжатой левой кнопке.


SkyNET: IF _HMG_MouseState = 0 InvalidateRect(GetFormHandle("CD7000"), 1 ) UpdateWindow( GetFormHandle("CD7000") ) ENDIF Я вас правильно понял ? Но это событие работает почему-то всегда и другие состояния _HMG_MouseState в ON SIZE не имеют... Или как можно избавиться от белых полосок (некоторые размеров с квадрат) по всей форме ?

SkyNET: Я понял, проблема форма не успевает перерисоваться, поэтому полоска... А как отключить визуальный эффект растягивания ? Ну как в Windows с отключенными графическими эффектами, только рамка...

Петр: MiniGUI в стандартной поставке умеет обрабатывать WM_SIZE. Попросите Григория добавить обработку WM_ENTERSIZEMOVE, WM_EXITSIZEMOVE или используйте свой собственный обработчик событий и будет вам счастье

SkyNET: Спасибо. Я нашёл тему, как это сделать. Всё сделал, только с библиотекой i_window.ch какие-то проблемы. Пример из темы, выдаёт следующую ошибку: Error BASE/1066 Argument error: conditional Called from _DEFINEWINDOW(233) Called from MAIN(12) Обычные приложения нормально компилируются. Вот то, что получилось у меня: #xcommand DEFINE WINDOW <w> ; [ AT <row>,<col> ] ; [ ROW <row> ] ; [ COL <col> ] ; WIDTH <wi> ; HEIGHT <h> ; [ MINWIDTH <minWidth> ] ; [ MINHEIGHT <minHeight> ] ; [ MAXWIDTH <maxWidth> ] ; [ MAXHEIGHT <maxHeight> ] ; [ VIRTUAL WIDTH <vWidth> ] ; [ VIRTUAL HEIGHT <vHeight> ] ; [ TITLE <title> ] ; [ ICON <icon> ] ; [ <main: MAIN> ] ; [ <mdi: MDI> ] ; [ <child: CHILD> ] ; [ <main: WINDOWTYPE MAIN> ] ; [ <child: WINDOWTYPE CHILD> ] ; [ WINDOWTYPE STANDARD ] ; [ <noshow: NOSHOW> ] ; [ <topmost: TOPMOST> ] ; [ <palette: PALETTE> ] ; [ <noautorelease: NOAUTORELEASE> ] ; [ <nominimize: NOMINIMIZE> ] ; [ <nomaximize: NOMAXIMIZE> ] ; [ <nosize: NOSIZE> ] ; [ <nosysmenu: NOSYSMENU> ] ; [ <nocaption: NOCAPTION> ] ; [ CURSOR <cursor> ] ; [ ON INIT <InitProcedure> ] ; [ ON RELEASE <ReleaseProcedure> ] ; [ ON INTERACTIVECLOSE <interactivecloseprocedure> ] ; [ ON MOUSECLICK <ClickProcedure> ] ; [ ON MOUSEDRAG <MouseDragProcedure> ] ; [ ON MOUSEMOVE <MouseMoveProcedure> ] ; [ ON ENTERSIZEMOVE <EnterSizeMoveProcedure> ] ; [ ON MOVE <MoveProcedure> ] ; [ ON SIZE <SizeProcedure> ] ; [ ON EXITSIZEMOVE <ExitSizeMoveProcedure> ] ; [ ON MAXIMIZE <MaximizeProcedure> ] ; [ ON MINIMIZE <MinimizeProcedure> ] ; [ ON RESTORE <RestoreProcedure> ] ; [ ON PAINT <PaintProcedure> ] ; [ ON DROPFILES <DropProcedure> ] ; [ BACKCOLOR <backcolor> ] ; [ FONT <FontName> SIZE <FontSize> ] ; [ NOTIFYICON <NotifyIcon> ] ; [ NOTIFYTOOLTIP <NotifyIconTooltip> ] ; [ ON NOTIFYCLICK <NotifyLeftClick> ] ; [ ON NOTIFYDBLCLICK <NotifyDblClick> ] ; [ ON GOTFOCUS <GotFocusProcedure> ] ; [ ON LOSTFOCUS <LostFocusProcedure> ] ; [ ON SCROLLUP <scrollup> ] ; [ ON SCROLLDOWN <scrolldown> ] ; [ ON SCROLLLEFT <scrollleft> ] ; [ ON SCROLLRIGHT <scrollright> ] ; [ ON HSCROLLBOX <hScrollBox> ] ; [ ON VSCROLLBOX <vScrollBox> ] ; [ <helpbutton: HELPBUTTON> ] ; =>; DECLARE WINDOW <w> ;; DECLARE CUSTOM COMPONENTS <w> ;; _DefineWindow ( <"w">, <title>, <col>, <row>, <wi>, <h>, <.nominimize.>, <.nomaximize.>, <.nosize.>, <.nosysmenu.>, <.nocaption.>,.F., '',<{InitProcedure}>, <{ReleaseProcedure}> , <{MouseDragProcedure}>, <{SizeProcedure}> , <{ClickProcedure}> , <{MouseMoveProcedure}>, [<backcolor>] , <{PaintProcedure}> , <.noshow.> , <.topmost.> , <.main.> , <icon> , <.child.> , <FontName> , <FontSize>, <NotifyIcon> , <NotifyIconTooltip> , <{NotifyLeftClick}> , <{GotFocusProcedure}>, <{LostFocusProcedure}> , <vHeight> , <vWidth> , <{scrollleft}> , <{scrollright}> , <{scrollup}> , <{scrolldown}> , <{hScrollBox}> , <{vScrollBox}> , <.helpbutton.> , <{MaximizeProcedure}> , <{MinimizeProcedure}> , <cursor> , <.noautorelease.> , <{interactivecloseprocedure}> , <{RestoreProcedure}> , <{MoveProcedure}> , <.mdi.>, <{EnterSizeMoveProcedure}>, <{ExitSizeMoveProcedure}> ) Я не понимаю, библиотека поменялась, появилось новое действие и поменялись местами Declare и Define: =>; DECLARE WINDOW <w> ;; DECLARE CUSTOM COMPONENTS <w> ;; _DefineWindow ( <"w">, <title>, <col>, <row>, <wi>, <h>, <.nominimize.>, <.nomaximize.>, <.nosize.>, <.nosysmenu.>, <.nocaption.>,.F., '',<{InitProcedure}>, <{ReleaseProcedure}> , <{MouseDragProcedure}>, <{SizeProcedure}> , <{ClickProcedure}> , <{MouseMoveProcedure}>, [<backcolor>] , <{PaintProcedure}> , <.noshow.> , <.topmost.> , <.main.> , <icon> , <.child.> , <FontName> , <FontSize>, <NotifyIcon> , <NotifyIconTooltip> , <{NotifyLeftClick}> , <{GotFocusProcedure}>, <{LostFocusProcedure}> , <vHeight> , <vWidth> , <{scrollleft}> , <{scrollright}> , <{scrollup}> , <{scrolldown}> , <{hScrollBox}> , <{vScrollBox}> , <.helpbutton.> , <{MaximizeProcedure}> , <{MinimizeProcedure}> , <cursor> , <.noautorelease.> , <{interactivecloseprocedure}> , <{RestoreProcedure}> , <{MoveProcedure}> , <.mdi.>, <{EnterSizeMoveProcedure}>, <{ExitSizeMoveProcedure}> ) Петр пишет: =>; _DefineWindow ( <"w">, <title>, <col>, <row>, <wi>, <h>, <.nominimize.>, <.nomaximize.>, <.nosize.>, <.nosysmenu.>, <.nocaption.>,.F., '',<{InitProcedure}>, <{ReleaseProcedure}> , <{MouseDragProcedure}>, <{SizeProcedure}> , <{ClickProcedure}> , <{MouseMoveProcedure}>, [<backcolor>] , <{PaintProcedure}> , <.noshow.> , <.topmost.> , <.main.> , <icon> , <.child.> , <FontName> , <FontSize>, <NotifyIcon> , <NotifyIconTooltip> , <{NotifyLeftClick}> , <{GotFocusProcedure}>, <{LostFocusProcedure}> , <vHeight> , <vWidth> , <{scrollleft}> , <{scrollright}> , <{scrollup}> , <{scrolldown}> , <{hScrollBox}> , <{vScrollBox}> , <.helpbutton.> , <{MaximizeProcedure}> , <{MinimizeProcedure}> , <cursor> , <.noautorelease.> , <{interactivecloseprocedure}> , <{RestoreProcedure}> , <{MoveProcedure}> , <.mdi.>, <{EnterSizeMoveProcedure}>, <{ExitSizeMoveProcedure}> ) ;; DECLARE WINDOW <w> Пробовал переставлять, всё равно не работает... Редактированные файлы



полная версия страницы