Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.03.05;
Скачать: [xml.tar.bz2];

Вниз

Мастера помогите советом!( AbstractError)   Найти похожие ветки 

 
Древолаз   (2006-02-15 10:18) [0]

Есть две формы мне нужно сделать переход с одной формы на другую, при этом чтоб формы выгружались с памяти.

Делаю так.
unit Unit1;
…………
procedure TForm1.Button2Click(Sender: TObject); // Переход на форму 2
begin
Application.CreateForm(TForm2, Form2);
Form2.Show;
Form1.Free;
end;

procedure TForm1.Button1Click(Sender: TObject); // Закрываем прогу
begin
Application.CreateForm(TForm2, Form2);
Form1.Close;
end;

end.

unit Unit2;
……
procedure TForm2.Button1Click(Sender: TObject); // Закрываем прогу
begin
Application.CreateForm(TForm1, Form1);
Form1.Close;
end;

procedure TForm2.Button2Click(Sender: TObject); // Переход на форму 1
begin
Application.CreateForm(TForm1, Form1);
Form1.Show;
Form2.Free;
end;

end.

Прога работает примерно раз 15 (переходим с первой формы на вторую) а потом вывешивает окно -
“Project Project1.exe raised exception class EAbstractError with message <Abstract Error>.Process stopped.Use Step or Run continue.”

Подскажите плиз где косяк?
С уважением Константин.


 
Гаврила ©   (2006-02-15 10:31) [1]


> Подскажите плиз где косяк?



> procedure TForm1.Button2Click(Sender: TObject); //
>Переход на форму 2
>begin
>Application.CreateForm(TForm2, Form2);
>Form2.Show;
>Form1.Free;
> end;


Не разрушай себя с своем же методе так.


 
Древолаз   (2006-02-15 10:39) [2]

А как коректно? (спасибо что откликнулся)


 
Dmitrij_K   (2006-02-15 10:42) [3]

Вместо Free напиши Release


 
Древолаз   (2006-02-15 10:45) [4]

Спасибо Dmitrij_K ! (сегодня проверю)


 
Жуков Олег   (2006-02-15 10:46) [5]

Ошибка в том, что из метода самого объекта нельзя вызвать его же деструктор, т.к. на момент окончания работы метода происходит обращение к объекту и объект ещё должен существовать. T.e. в методе TForm2.AnyProc() нельзя написать  Self.Free(). Обычно, если есть такая задача, посылают какому другому то окну пользовательское сообщение (PostMessage), и, обрабатывая его, то окно разрушает объект. Однако с формами проще, поменяй Form.Free() на Form.Close(), и в обработчике OnClose напиши Action := caFree; Если ты вызовешь Close для главной формы, то закроется всё приложение, поэтому это должны быть не главные формы. Я бы сделал для этой программы отдельную невидимую главную форму.

Ещё рекомендую в методах классов форм не использовать глобальных переменных соответветсвующих экземплярам этого класса, (т.е. вместо Form2.Close писать либо Self.Close(), либо просто Close()). - это исключит ряд ошибок в дальнейшем, когда будешь создавать несколько форм одного класса.


 
Древолаз   (2006-02-15 10:51) [6]

Спасибо всем! о более подробном ответе я и не мечтал (респект Жукову Олегу).



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2006.03.05;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.017 c
6-1132797718
Bomm
2005-11-24 05:01
2006.03.05
Как узнать текущию рабочию группу?


1-1138803775
OlegNik
2006-02-01 17:22
2006.03.05
Перехват завершения работы Windows.


2-1140273551
Pit
2006-02-18 17:39
2006.03.05
Подменю в PopupMenu


1-1138805220
voron70@yandex.ru
2006-02-01 17:47
2006.03.05
Нужна помощь в переводе с СИ на Delphi


15-1139225915
Grom PE
2006-02-06 14:38
2006.03.05
Автоматизм для сапера





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский