Главная страница
    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.45 MB
Время: 0.012 c
3-1136760672
parovoZZ
2006-01-09 01:51
2006.03.05
Зачем связывают таблицы?


15-1139675986
vidiv
2006-02-11 19:39
2006.03.05
Parser Лебедева


2-1140356030
_shark_@list.ru
2006-02-19 16:33
2006.03.05
Уважаемые мастера, подскажите пожалуйсто, как можно прочитать из


1-1139082744
Pavel__
2006-02-04 22:52
2006.03.05
Прочитать значение из xml-файла, не загружая файл целиком


15-1139481995
Gero
2006-02-09 13:46
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский