Главная страница
    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.012 c
15-1139677592
scorp123
2006-02-11 20:06
2006.03.05
Установка DSPac


2-1140250059
Id
2006-02-18 11:07
2006.03.05
Печать в Excel-e


5-1126264742
Schooler
2005-09-09 15:19
2006.03.05
Проблема с TFileStream


3-1136465833
tytus
2006-01-05 15:57
2006.03.05
BDE Error Field(xxx) mast have value


15-1139080310
Kerk
2006-02-04 22:11
2006.03.05
IE vs FF





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский