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

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

Не могу понять что происходит? [D5, D6, WinME]


alexvanglukhman ©   (2002-08-30 15:59:00) 

Уважаемые мастера подскажите плиз. У меня в одной форме по нажатию кнопки динамически создаётся новая форма.Прежняя форма скрывается(hide), далее я работаю в новой форме и по окончанию работы жму на ней кнопку где эта форма уничтожается (free) а старая (show). Всё бы было нормально но в конце процедуры обработки onclick выскакивает Exception класса EAbstractError. Можно конечно его обработать, но хотелось бы понять суть этого исключения.


Skier   (2002-08-30 17:19:00) [1]

>alexvanglukhman
Ну вот и ладушки...:)))


alexvanglukhman   (2002-08-30 17:16:00) [2]

TO SkierYes Yes Yes!!!!!!!!
Спасибо огромное. А из-за чего всё это происходило? Именно от этих объектов на второй форме?


Skier   (2002-08-30 17:10:00) [3]

>alexvanglukhman

procedure TFNeGlavnaja.ButtonVihodClick(Sender: TObject);
begin
FGlavnaja.Show;
FNeglavnaja := nil;
Release;
end;

и в коде проверяй FNeglavnaja на nil


alexvanglukhman   (2002-08-30 17:09:00) [4]

А за код,который написан спасибо,но у меня он аналогичен. Это вроде бы должен знать каждый кто пытается чего й то рисовать.
Самое интересное, что из главной формы я делал точно такие же вызовы в другие формы и всё проходило. Всё-таки наверное это запрос. Попробую втупую определить свойства.


alexvanglukhman   (2002-08-30 17:03:00) [5]

Единственное, что у меня на форме подозрительное - это динамически создаваемый Query. В TRadioGroup у меня категория выбора. И в зависимости от этого идёт тот или иной SQL. Естественно 2 элемента. DBGrid и Query меняют свои свойства и первоначально они не определены. Но мне кажется, это то должно проходить.


Skier   (2002-08-30 16:54:00) [6]

>alexvanglukhman
Вот рабочий код
Убери форму TFNeGlavnaja из списка Auto-Create

program Project2;

uses
Forms,
Unit1 in "Unit1.pas" {FGlavnaja},
Unit2 in "Unit2.pas" {FNeGlavnaja};

{$R *.RES}

begin
Application.Initialize;
Application.CreateForm(TFGlavnaja, FGlavnaja);
Application.Run;
end.


unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;

type
TFGlavnaja = class(TForm)
Button: TButton;
procedure ButtonClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
FGlavnaja: TFGlavnaja;

implementation

{$R *.DFM}

uses Unit2;

procedure TFGlavnaja.ButtonClick(Sender: TObject);
begin
FNeGlavnaja:=TFNeGlavnaja.Create(Application);
FNeGlavnaja.Show;
FGlavnaja.Hide;
end;

end.

unit Unit2;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;

type
TFNeGlavnaja = class(TForm)
ButtonVihod: TButton;
procedure ButtonVihodClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
FNeGlavnaja: TFNeGlavnaja;

implementation

uses Unit1;

{$R *.DFM}

procedure TFNeGlavnaja.ButtonVihodClick(Sender: TObject);
begin
FGlavnaja.Show;
FNeglavnaja.Free;
end;

end.


И ошибка вожет быть из-за того что у тебя не формах есть
(или создаётся в run-time) "что-то" подозрительное...


Mikhail   (2002-08-30 16:54:00) [7]

Ищи ошибку в другом месте


alexvanglukhman   (2002-08-30 16:50:00) [8]

Пробовал уже. Сути не меняет при Free EAbstractError, при Сlose, Release, Destroy - EAccessViolation


Mikhail   (2002-08-30 16:47:00) [9]


FNeGlavnaja.Free <- ?
м.б FNeGlavnaja.Close


alexvanglukhman   (2002-08-30 16:39:00) [10]

procedure TFGlavnaja.ButtonClick(Sender: TObject);
begin
FNeGlavnaja:=TFNeGlavnaja.Create(Application);
FNeGlavnaja.Show;
FGlavnaja.Hide;
end;


procedure TFNeGlavnaja.ButtonVihodClick(Sender: TObject);
begin
FGlavnaja.Show;
FNeglavnaja.Free;
end;


Skier   (2002-08-30 16:32:00) [11]

>alexvanglukhman
Всё !
Удалённая отладка закончена !
Либо код, либо...


alexvanglukhman   (2002-08-30 16:30:00) [12]

To SkierНе помогло


Skier   (2002-08-30 16:15:00) [13]

>alexvanglukhman
Ещё вариант :)
-Делай Close (вместо Free)
-А в обработчике OnClose напиши
Action := caFree

Не поможет ?


Lola   (2002-08-30 16:10:00) [14]

Исключение класса EAbstractError генерируется во время выполнения при попытке вызвать абстрактный метод. В процессе проектирования это исключение генерируется при размещении на форме компонента с абстрактным методом.
Абстрактный метод, объявляемый директивой abstract должен быть перегружен в производных классах прежде, чем создается экземпляр объекта.
Все свойства и методы исключения EAbstractError наследуются от базового класса Exception.
Это цитата из Help-а. ;)


alexvanglukhman   (2002-08-30 16:08:00) [15]

Попробовал Release. Пошло EAccessViolation


alexvanglukhman   (2002-08-30 16:04:00) [16]

Ну то что это абстрактный метод и так понятно. Но хотелось бы подробнее об абстрактном методе.


Skier   (2002-08-30 16:04:00) [17]

>alexvanglukhman

> форма уничтожается (free) а старая (show)

попробуй Release...


Skier   (2002-08-30 16:02:00) [18]

>alexvanglukhman

> но хотелось бы понять суть этого исключения


EAbstractError - это попытка вызова абстрактного метода.


Наверх

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