MacOS Form.Width(Heigth) Access violation

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

MacOS Form.Width(Heigth) Access violation

Сообщение SeventhSon » 10.01.2019 16:20:25

Коллеги,
а кто-нибудь сталкивался с такой фичей?
Под Win/Lin код работает, а под MacOS попытка изменения размера формы приводит к исключению,т.е.
Код: Выделить всё
Form1.Width:=Form1.Width+1; //Access violation

В пустом дефолтном проекте разумеется всё нормально.
Видимо дело в каких-то особых свойствах формы, но пока зависимости не нашёл.
Кто знаёт в чём дело?
SeventhSon
новенький
 
Сообщения: 50
Зарегистрирован: 17.02.2009 01:57:17

Re: MacOS Form.Width(Heigth) Access violation

Сообщение Vadim » 10.01.2019 18:23:52

Версия Lazarus?
Vadim
долгожитель
 
Сообщения: 3145
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: MacOS Form.Width(Heigth) Access violation

Сообщение Ichthyander » 10.01.2019 19:00:49

Если используете графический виджет cocoa, то рекомендую транковую версию Lazarus, в стабильной версии (1.8.4) он толком не работает [как минимум, у меня], в частности при клике на главное меню - крашилось
Аватара пользователя
Ichthyander
постоялец
 
Сообщения: 464
Зарегистрирован: 04.04.2007 08:32:43
Откуда: Астрахань

Re: MacOS Form.Width(Heigth) Access violation

Сообщение SeventhSon » 11.01.2019 16:38:33

Версия последняя с SF. К тому же ещё так и не удалось прикрутить gdb.
Мне кажется ошибка связана с тем что размер формы я меняю в процедуре, которая вызывается событием OnPaint.
Изменение размера формы видимо вызывает OnPaint и получается рекурсивный вызов.
Поделитесь опытом. Нужно после чтения параметров из ini-файла поменять размер формы и нарисовать что-то на Form.Canvas.
Я всегда вызывал процедуру отрисовки формы из OnPaint. Может это неправильно?
Пытался вызывать из OnResize, OnShow, OnActivate-работает только из OnPaint.
SeventhSon
новенький
 
Сообщения: 50
Зарегистрирован: 17.02.2009 01:57:17

Re: MacOS Form.Width(Heigth) Access violation

Сообщение Лекс Айрин » 11.01.2019 17:00:58

SeventhSon, она и будет работать только из onPaint. Только ты, похоже, начинаешь не с того конца. В onActivate (да и вообще в любом месте) тебе достаточно указать новый размер, а потом обновить форму. Ну и рисовать на форме при переиисовке. Ах да, а ты точно не перепутал? Активация окна происходит каждый раз при получении фокуса, а настройки пересчитывать с файла при этом как бы бред полный. Они,обычно, считываются при создании окна или при сбросе настроек на дефолтные.
Ну а с отладчиком это глюк общеизвестный. Он просто не прикручивается. По крайней мере я об этом не слышал.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 4731
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: MacOS Form.Width(Heigth) Access violation

Сообщение SeventhSon » 12.01.2019 05:11:59

Да, настройки считываются один раз по событию Form.OnCreate. Тогда вопрос такой. Можно-ли менять размер формы внутри процедуры по событию OnPaint, не получается ли тут своеобразной рекурсии? Как вариант-вынести операторы Form.Width:=XX в OnClick, а перерисовывать уже в OnPaint с учётом нового значения Form.Width.
Про отладчик конечно печальные новости. В некоторых регионах мира MacOS очень распространена, просто и речи быть не может о том чтобы влезть на рынок с некой прогой если её нет под MacOS.
SeventhSon
новенький
 
Сообщения: 50
Зарегистрирован: 17.02.2009 01:57:17

Re: MacOS Form.Width(Heigth) Access violation

Сообщение Лекс Айрин » 12.01.2019 06:22:39

SeventhSon, конечно будет. Процедура перерисовки работает с уже измененным размером окна.
Если настройки считываются один раз, то тебе надо заюзать onCreate. Конечно, если у тебя нет чего-то меняющегося между активациями окна.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 4731
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot] и гости: 8

Рейтинг@Mail.ru