Решенный баг с AutoSize формы из dll

Общие вопросы программирования, алгоритмы и т.п.

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

Решенный баг с AutoSize формы из dll

Сообщение Sharfik » 09.05.2017 02:45:03

Столкнулся с своеобразным глюком свойств формы. Может пригодится кому.

У меня есть главная форма приложения и ряд форм загружаемых из dll. Главная форма хранит указатели на нужные формы и вызывает метод Show.
Формы из dll вызываются путем клипа по списку в listbox. Если клик один по иконке, то открыть/закрыть. Если двойной клик, то только открыть.
Началось все с того, что исключительно под Windows 8 при вызове формы вылетала ошибка "деление на ноль". Сейчас же, под Win10, отладчик GDB стал вылетать на 902 строку модуля LCLProc. Хотя без отладчика программа работает чисто. При разборе так и не понял, почему при двойном клике по строке ошибка вылетает, а при одинарном через иконку нет. Но проблему решил изменив настройки свойств компонента формы.

Код функции вызова окна следующий:
Код: Выделить всё
procedure TFProjectEdit.EditorShow(Sender: TObject);
var
  tmpForm:TForm;
begin
  if Assigned(ThisApplication)then
  begin
      if Assigned(tvEditors.Selected)and Assigned(tvEditors.Selected.Data) then
      begin
        tmpForm:=TForm(tvEditors.Selected.Data);
        if Assigned(tmpForm) then
        begin
           if Sender=nil then
           begin
               //IconClick
               if tmpForm.Visible then
                  tmpForm.Close
               else
                  tmpForm.Show;
           end
           else begin
               //DblClick
               tmpForm.Show;
           end;
         end;
         tvEditors.Selected.Selected:=false;
      end;
  end;
end;


В результате его выполнения программа проходит мимо этого сравнения, проверки свойства AutoSize формы и идет дальше к исключению.
Код: Выделить всё
control.inc:
738: if (AWidth>100000) or (AHeight>100000) then
    BoundsOutOfBounds;

Приходит к
Код: Выделить всё
LCLProc
902: RaiseGDBException


При включении AutoSize формы все становилось нормально, но на форме появлялся бардак. Как оказалось бардак устраивает StatusBar. И выключив у него и формы свойства AutoSize проблема ушла вообще.
Sharfik
постоялец
 
Сообщения: 463
Зарегистрирован: 20.07.2013 01:04:30

Re: Решенный баг с AutoSize формы из dll

Сообщение zub » 09.05.2017 02:56:12

Это не решеный баг, это временное везение))
zub
долгожитель
 
Сообщения: 2048
Зарегистрирован: 14.11.2005 23:51:26

Re: Решенный баг с AutoSize формы из dll

Сообщение olegy123 » 09.05.2017 23:14:01

Sharfik писал(а):При включении AutoSize формы все становилось нормально, но на форме появлялся бардак. Как оказалось бардак устраивает StatusBar. И выключив у него и формы свойства AutoSize проблема ушла вообще.

Sharfik писал(а):Главная форма хранит указатели на нужные формы и вызывает метод Show.

Компилятор не решает проблему что там у вас в указателях сидит в рантайме. Форма или мусор. GDB вам правильно сообщает - что переменные фатально изменились. Поэтому совет - проанализируйте код еще раз. Указатели это зло - их нужно применять с крайней осторожностью.
Можете упростить поиск проблемы - путем многократного теста, поиска того места где ошибка встречается и анализа действий, что вызывали до, при каких условиях это случается..
Путем анализа heap.. Инсперктор проекта->параметры компилятора -> Отладка. С этим ваше приложение будет давать больше информации о своей работе.
olegy123
постоялец
 
Сообщения: 461
Зарегистрирован: 25.02.2016 12:10:20

Re: Решенный баг с AutoSize формы из dll

Сообщение zub » 10.05.2017 00:22:23

olegy123
Ключевое тут формы из dll и пока в fpc не появятся пакеты - в этом вопросе решений быть не может, только костыли((
zub
долгожитель
 
Сообщения: 2048
Зарегистрирован: 14.11.2005 23:51:26


Вернуться в Общее

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2

Рейтинг@Mail.ru