powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Access violation at address 004037D6 in module ....
10 сообщений из 10, страница 1 из 1
Access violation at address 004037D6 in module ....
    #39784612
FIL23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ситуация такова,

Я создаю динамически компоненты и потом их удаляю.

Но вот беда, во время создания компонент начала появляться ошибка вида.

Project alladmin.exe raised exception class EAccessViolation with message 'Access violation at address 004037D6 in module 'alladmin.exe'. Read of address F685D88B'. Process stopped. Use Step or Run to continue.

Нашел в чем ошибка, теперь надо понять почему она возникает.

Короче, я переопределяю некоторые компоненты.

Код: pascal
1.
2.
3.
4.
5.
type
  TGroupBox = class(StdCtrls.TGroupBox)
  protected
    procedure WndProc( var Message: TMessage ); override;
end;



и пишу для них вот такую процедуру.

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
procedure TGroupBox.WndProc(var Message: TMessage );
begin
   if Message.Msg = WM_SIZE then
    begin

    SetSizeObject();
    inherited;
    end
   else inherited;
end;



Данное сообщение возникает когда я меняю размер компонента или его местоположения.

Если просто создавать компоненты , то все хорошо, но стоит только один из них подвинуть, то при создании компонентов начинаются сыпаться ошибки ..

почему так?
...
Рейтинг: 0 / 0
Access violation at address 004037D6 in module ....
    #39784615
Vlad F
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FIL23,

Имхо, патамучта inherited два раза (не по феншую)).
А и к тому же, не до конца понятно, что там у тя в SetSizeObject().
...
Рейтинг: 0 / 0
Access violation at address 004037D6 in module ....
    #39784621
FIL23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vlad F,

ни чего особенного просто выставление значений в Эдиты

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
procedure SetSizeObject();   
begin

if (perSender is TWinControl) then
  begin
  fmTemplateOfInventory.JvSpinEditWidth.Value     :=(perSender as TWinControl).Width;
  fmTemplateOfInventory.JvSpinEditHeight.Value    :=(perSender as TWinControl).Height;
  fmTemplateOfInventory.JvSpinEditBottomDown.Value:=(perSender as TWinControl).Top;
  fmTemplateOfInventory.JvSpinEditLeftRight.Value :=(perSender as TWinControl).Left
  end else
    if (perSender is TControl) then
      begin
      fmTemplateOfInventory.JvSpinEditWidth.Value     :=(perSender as TControl).Width;
      fmTemplateOfInventory.JvSpinEditHeight.Value    :=(perSender as TControl).Height;
      fmTemplateOfInventory.JvSpinEditBottomDown.Value:=(perSender as TControl).Top;
      fmTemplateOfInventory.JvSpinEditLeftRight.Value :=(perSender as TControl).Left
      end;
end;
...
Рейтинг: 0 / 0
Access violation at address 004037D6 in module ....
    #39784630
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FIL23,

включи Use Debug DCU и включи трассировку стека исключений ( например Jcl Debug или Eureka или madExcept или mORMot или много кто ещё )

потом смотри где конкретно твое исключение произошло
...
Рейтинг: 0 / 0
Access violation at address 004037D6 in module ....
    #39784631
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ariochвключи Use Debug DCU и включи трассировку стека исключений

ну и Debug Info, понятное дело, в EXE надо включать
...
Рейтинг: 0 / 0
Access violation at address 004037D6 in module ....
    #39784633
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FIL23ни чего особенногоТеперь мы должны угадать что такое perSender и fmTemplateOfInventory и когда, кем и чем они инициализируются
...
Рейтинг: 0 / 0
Access violation at address 004037D6 in module ....
    #39784641
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
код вообще на отъе^W скорую руку сбацан

> fmTemplateOfInventory.JvSpinEditBottomDown.Value := (integer value)

у TRxSpinEdit .Value - это Double, а для целочисленных лучше использовать .AsInteger

> (perSender as TControl)

довольно затратная функция, но кэшировать в локальной переменной - это ж вместо копипаста надо 2 строки написать
...
Рейтинг: 0 / 0
Access violation at address 004037D6 in module ....
    #39784642
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не говоря о коане, чем вообще различаются эти две строки ???

FIL23
Код: pascal
1.
    fmTemplateOfInventory.JvSpinEditWidth.Value     :=(perSender as TControl).Width;


FIL23
Код: pascal
1.
 fmTemplateOfInventory.JvSpinEditWidth.Value     :=(perSender as TWinControl).Width;
...
Рейтинг: 0 / 0
Access violation at address 004037D6 in module ....
    #39784644
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и наконце ещё вопрос, а какие события этот TRx[Jv]SpinEdit вызовет в процессе этого присваивания?
...
Рейтинг: 0 / 0
Access violation at address 004037D6 in module ....
    #39784646
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ariochдовольно затратная функция, но кэшировать в локальной переменной

но ещё лучше кэшировать не результат функции as, а результат функции .BoundsRect
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Access violation at address 004037D6 in module ....
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]