Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

AccessViolation - на ровном месте. Помогите, кто знает! [D4, Win95/98]


Паша ©   (2002-12-25 14:49:00) 

Программа размером 5 метров. На TBotton цепляю менюшку, через которую захожу в форму настроек: TPageControl и куча Editov и т.п. (порядка 200). По выходу форме делаю Free. После нескольких входов-выходов в эту форму, при очередном нажатии мышкой на Botton вылетает AV. В отладчике видно, что это происходит в
Controls.pas -> GetCaptureControl, вызов из

procedure TWinControl.WndProc
.............
строка 5674
WM_CANCELMODE:
if (GetCapture = Handle) and (CaptureControl <> nil) and
..........
видать, какие-то мышиные дела.
Как с этим можно бороться?


Паша   (2002-12-27 13:48:00) [1]

Вот наконец разобрался, кому интересно. Таки это мышиные дела в связке с ToolButton-ом. В некоторой ситуации в переменной CaptureControl(Controls.pas стр.1649) остается ссылка на ToolButton, который уже удалился вместе с формой. При вызове функции GetCaptureControl получаем AV! Т.е. ToolBar-ром лучше не пользоваться при перегруженных формах, или принудительно вызывать
procedure TForm1.FormDestroy(Sender: TObject);
begin
SetCaptureControl(nil);
end;
и можно спокойно мышить мышью дальше.
Спасибо за поддержку!


Паша   (2002-12-25 19:08:00) [2]

Вот чуяло мое сердце! Лежит у меня ToolBar на нем ToolButton с прицепленной Action, и если давить на ToolButton мышкой, то лезет AV на 2-3й раз, а если по горячей клавише закрывать форму- пальцы устали, и все работает. Мда... Буду дальше завтра смотреть.


Паша   (2002-12-25 18:33:00) [3]

yuri_1 © (25.12.02 18:12)
Убил все Rx-компоненты (для чистоты експеримента). Абидна, да! Вид сбоку. Но все равно спасибо, буду иметь ввиду.


yuri_1   (2002-12-25 18:12:00) [4]

Нет там просто есть ошибка (я ее не смог найти, она довольно плавающая). возникает AV,
_но_ у меня возникала 100% когда я динамически переключал эти котролы из одной формы в другую.
(у меня на одной форме набор TTabSheet и я их переключал в PageControl на другой форме)
В результате отказался от rxlib в данном случае


Паша   (2002-12-25 18:11:00) [5]

yuri_1 © (25.12.02 18:04)
АГАА! Счас порою их исходники, что-то давно я туда не заглядывал
Lady D © (25.12.02 17:49)
>FreeAndNil() - такого в D4 нет в природе, появилось позже.


Паша   (2002-12-25 18:05:00) [6]

yuri_1 © (25.12.02 17:28)
Таки есть: TRxLabel, TDateEdit, TRxCalcEdit. А что, они на ресурсы критичные? Индикатор ресурсов больших потерь не показывает.
Переяслов Григорий © (25.12.02 17:34)
Да... Тогда мне надо вообще удалить эту форму и пусть ручками в ini-файле пишут.


yuri_1   (2002-12-25 18:04:00) [7]

Я про rx не зря сказал,
там у них есть большой глюк (AV) с созданием контролов где используется rxspeedbutton (а это почти везде) динамически.


Lady D   (2002-12-25 17:49:00) [8]


> выходу форме делаю Free.

FreeAndNil();
Ресурсы GDI


Переяслов Григорий   (2002-12-25 17:48:00) [9]

А то, что у тебя глюк есть, а у клиентов нет - это подтверждает версию с памятью. Другое распределение, и ситуация меняется.


Паша   (2002-12-25 17:44:00) [10]

Top Gun (25.12.02 17:08)
Пардон, на TButton:
procedure TFormSclad.ButtonClick(Sender: TObject);
begin
Menu1.Popup(Left+5,top+Height-Button.Height-20*Menu1.Items.Count);
end;
Собственно, это не существенно (для отладки, и конечном варианте работает не так, просто здесь этот глюк хорошо проявляется, у клиентов этого нет). Ну не эдитов, а, скажем наследников TWinControl (разных 182шт.), среди которых и эдиты в т.ч., нужна эта лабуда для настройки под конкретного пользователя.


Переяслов Григорий   (2002-12-25 17:34:00) [11]

У моего напарника была проблема со сторонним компонентом, там была какая-то сумасшедшая запись, которая в одном из режимов не инициализировалось. Эффекты были прелюбопытные. В определенной ситуации возникает глюк. Меняешь положенние пункта меню (кладешь его в другое подменю), глюк исчезает. Вот такие бывают случаи.


yuri_1   (2002-12-25 17:28:00) [12]

Может ресурсы кончаются?
И кстати нет ли на форме RX.. всяких едитов


Top Gun   (2002-12-25 17:08:00) [13]

>На TBotton цепляю менюшку, через которую захожу в форму настроек

Это как ?

>Editov и т.п. ( порядка 200).

?! Это что же за форма на которой 200 эдитов ?


Polevi   (2002-12-25 17:01:00) [14]

плохо дело, такое сложно найти, если через раз глючит


Паша   (2002-12-25 16:56:00) [15]

Переяслов Григорий © (25.12.02 15:41)
Спасибо!
>Проблема ищется зачастую долго и трудно.
Однако, оптимизма не добавляет. Я с этой заразой очеень долго борюсь, правда с перерывами, но судя по затраченным усидиям, вот-вот должно что-то произойти.
Насчет памяти проверял (MemProof-ом) - потерь вроде нет, из сторонних компонент InfoPower 3000, там, конечно, сложно сказать, что происходит. Но память освобождается полностью, если выйти из программы.


Переяслов Григорий   (2002-12-25 15:41:00) [16]

Скорее всего, не мышинные, а память (потери, захват и не отдача, запись в системную область и т.д.). Причем ошибка может быть в совсем другом месте программы. У меня еще в DOSе выдавалась ошибка на процедуре SetColor (установка цвета). Возможна ошибка в сторонних компонентах. Проблема ищется зачастую долго и трудно. Успехов!


Наверх

Титульная страница Поиск, карта сайта Написать письмо