Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Динамическое создание и использование формы  (Прочитано 4597 раз)
0 Пользователей и 1 Гость смотрят эту тему.
..::SCRIBE::..
Помогающий

ua
Offline Offline
Пол: Мужской
не путайте банальность с ленью=)


« : 16-03-2015 10:25 » 

Всем привет.

Продолжая баловаться, добавил возможность слать приватные сообщения в своем локальном чате.

Как всегда, хочу сделать красиво и железобетонно=) Чтоб без явных багов и т.д.

Суть проблемы: приходит приватное сообщение, создаем новое окошко, пишем в нем сообщение, если таковое есть не создаем, но пишем. Все как всегда просто, ну или почти=) Но есть но, вроде как все работает, но временами, бывает выскакивает ошибка о доступе к памяти, бывает работает нормально, и мне это не нравиться=) (Нюанс, выскакивает когда сделать активным основное окно, и когда в приватное окно что-то пишут, что прикольно сообщения приходят и все ок)

Как у меня: есть основная форма с общим чатом, есть форма для приватного чата (убрана из автосоздания в IDE). Приходит сообщение, проверяю есть ли создана приватная форма для этого пользователя через:
Код: (Delphi)
Screen.Forms
Screen.FormCount
если форма не нашлась, создаю ее так:
Код: (Delphi)
var
privForm: TPrivateForm;
begin
privForm := TPrivateForm.Create(Application);
privForm.Show;
ChatAdd(); // Добавляем сообщение
end;
в ее Caption записываю айди пользователя чтобы потом найти если что. В самой приватной форме, для освобождения памяти сделано так:
Код: (Delphi)
procedure TPrivateForm.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
  Action := caFree;
end;
Все они есть у друг друга в uses для использования процедур.

Вопрос: может их надо по другому создавать, этот способ работает, но глючно (или просто отловить/подавить эту ошибку?).
Заранее спасибо за помощь.
Записан
x77
Модератор

ro
Offline Offline
Пол: Мужской
меняю стакан шмали на обратный билет с Марса.


« Ответ #1 : 16-03-2015 10:53 » 

на какой строчке кода выскакивает ошибка? если не знаете, как это определить самостоятельно, подключите Jedi с их Exception Handling, вам сообщение об ошибке будет выдавать конкретную строчку кода, в которой оно приключилось.
Записан

..::SCRIBE::..
Помогающий

ua
Offline Offline
Пол: Мужской
не путайте банальность с ленью=)


« Ответ #2 : 16-03-2015 12:29 » new

Спасибо большое за совет. Странно, но тестирую уже все долго и ошибка перестала вылетать. При том что чат довольно обильно обнесен try...except(с записью ошибок в лог). Jedi скачать не могу из-за политики безопасности=) Дома уже попробую.

Добавлено через 3 минуты и 50 секунд:
надо же=) как только написал что все записывается в лог, а там
Код: (Delphi)
16.03.2015 13:45:04: Access violation at address 004830A7 in module 'Project1.exe'. Read of address 00000000
а теперь осталось добавить идентификацию каждого ексепта=).
В любом случае спасибо за совет, буду рыть дальше. Класс!
« Последнее редактирование: 16-03-2015 12:33 от SCRIBE » Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines