Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.12.2016, 12:03   #1
Ericnex
Форумчанин
 
Регистрация: 07.04.2010
Сообщений: 218
По умолчанию Ошибка при сворачивании в трей

Есть следующая часть кода:

Код:
procedure TForm1.FormActivate(Sender: TObject);
begin
  DM.TrayIcon1.Visible := true;
  DM.TrayIcon1.Hint := 'Журнал заявок';
  // Убираем с панели задач
  ShowWindow(Handle, SW_HIDE); // Скрываем программу
  ShowWindow(Application.Handle, SW_HIDE); // Скрываем кнопку с TaskBar'а
  SetWindowLong(Application.Handle, GWL_EXSTYLE,
    GetWindowLong(Application.Handle, GWL_EXSTYLE) or (not WS_EX_APPWINDOW));
end;
При компиляции возникает ошибка access violation(см. на рис.).

Возможно ли переполнение памяти в данной процедуре?
Изображения
Тип файла: jpg Ошибка.jpg (9.7 Кб, 123 просмотров)
Ericnex вне форума Ответить с цитированием
Старый 07.12.2016, 13:01   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Цитата:
Возможно ли переполнение памяти в данной процедуре?
нет. память не выделяется.
Цитата:
При компиляции возникает ошибка access violation(см. на рис.).
такая ошибка бывает при запуске (выполнении) программы.

У вас есть обращение к несуществующему объекту.
или, если быть более точным, использование неинициализированной( =nil) переменной объектного типа (наследника TObject).
вопрос-подсказка: В каком порядке создаются формы и дата модули?
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 07.12.2016 в 13:04.
evg_m вне форума Ответить с цитированием
Старый 07.12.2016, 13:24   #3
Ericnex
Форумчанин
 
Регистрация: 07.04.2010
Сообщений: 218
По умолчанию

Примерно вот так это выглядит:

Код:
begin
  Application.Initialize;
  Application.MainFormOnTaskbar := True;
  Application.Title := 'Журнал заявок';
  Application.CreateForm(TForm1, Form1);
  Application.CreateForm(TDM, DM);
  Application.Run;

end.
Здесь что-то нужно поменять?

Последний раз редактировалось Ericnex; 07.12.2016 в 13:27.
Ericnex вне форума Ответить с цитированием
Старый 07.12.2016, 13:32   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

А Вы как думаете?!
Цитата:
Код:
procedure TForm1.FormActivate(Sender: TObject);
begin
  DM.TrayIcon1.Visible := true;
...
Вы в методе Form1 обращаетесь к форме DM

p.s. если не ошибаюсь, то автосоздание форм (auto create) меняется в настройках проекта.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 07.12.2016, 13:33   #5
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Код:
  Application.CreateForm(TForm1, Form1);
  Application.CreateForm(TDM, DM);
надо поменять местами.

Form1.Activate выполняется еще ДО создания объекта TDM и инициализации переменной DM, отсюда и AV.
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 07.12.2016 в 13:36.
evg_m вне форума Ответить с цитированием
Старый 08.12.2016, 01:49   #6
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,869
По умолчанию

Цитата:
Сообщение от evg_m Посмотреть сообщение
Form1.Activate выполняется еще ДО создания объекта TDM и инициализации переменной DM, отсюда и AV.
Не согласен с этим утверждением.
northener вне форума Ответить с цитированием
Старый 08.12.2016, 05:10   #7
Ericnex
Форумчанин
 
Регистрация: 07.04.2010
Сообщений: 218
По умолчанию

Местами поменял. К сожалению, ошибка не исчезла.
Ericnex вне форума Ответить с цитированием
Старый 08.12.2016, 08:03   #8
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,897
По умолчанию

Задействуйте BreakPoint и пошагово смотрите где вылетает ошибка.
Shouldercannon вне форума Ответить с цитированием
Старый 08.12.2016, 08:46   #9
Ericnex
Форумчанин
 
Регистрация: 07.04.2010
Сообщений: 218
По умолчанию

Точка остановки выявило проблемное место здесь

Код:
DM.TrayIcon1.Visible := true;
Ericnex вне форума Ответить с цитированием
Старый 08.12.2016, 09:02   #10
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

А зачем TrayIcon в датамодуле? На главную форму его
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
При сворачивании в трей, теряется текст из ListView Winexcel Общие вопросы Delphi 1 14.03.2014 17:21
команды посылаемые окном при сворачивании lestor Win Api 8 02.04.2011 23:21
как при сворачивании формы скрыть ее из панели betirsolt Общие вопросы Delphi 3 17.04.2010 17:57
События происходящие, при сворачивании, разворачивании Casper-SC Общие вопросы .NET 4 17.12.2009 18:20
проблема при сворачивании форм Ko$tello Общие вопросы Delphi 8 16.11.2006 18:15