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

Вниз

Удаление фрейма   Найти похожие ветки 

 
AlexanderSK   (2003-02-13 17:17) [0]

Как правельно удалить фрейм в следующей ситуации:
1. фрейм на нем кнопка
2. при нажатии на эту кнопку вызывается метод формы
3. в этом методе и нужно удалит фрейм

Как это сделать?

Заранее благодарен за помощь!


 
AGGRESSOR   (2003-02-13 17:33) [1]

А удалять обязательно? Скрыть не поможет?


 
AlexanderSK   (2003-02-13 17:40) [2]

Помоч то поможет!
Но память то всетаки хочется сэкономить! (хотябы чуть-чуть!)
Тем более что это фрейм нужен в самом начале работы приложения, и больше не понадобиться!


 
Паша   (2003-02-13 17:45) [3]

делай Close

а Form1OnClose(var Action ,...)
begin
Action:= caFree
end
усе прибьется


 
AlexanderSK   (2003-02-13 17:52) [4]

А причем тут собственно Close?
Мне надо удалить фрейм НО форма-то должна остаться!


 
Романов Р.В.   (2003-02-13 17:59) [5]

При нажатии на кнопку Free


 
Паша   (2003-02-13 18:00) [6]

>удалить фрейм НО форма-то должна остаться!
а фрейм - это что такое?


 
Романов Р.В.   (2003-02-13 18:04) [7]


> Паша © (13.02.03 18:00)


TFrame is a container for components; it can be nested within forms or other frames.
TForm is the component for a standard application window (form).


 
AlexanderSK   (2003-02-13 18:07) [8]

>Романов Р.В. © (13.02.03 17:59)
>При нажатии на кнопку Free
EAccessViolation - что вполне объяснимо.
>Паша © (13.02.03 18:00)
>а фрейм - это что такое?
Фрейм - это НЕ совсем форма!
Нет у него ни Close ни OnClose!


 
Паша   (2003-02-13 18:15) [9]

Никогда с такой бедой не сталкивался вживую. F1 не помогло. это в какой версии delphi?


 
AlexanderSK   (2003-02-13 18:21) [10]

>Паша © (13.02.03 18:15)
>Никогда с такой бедой не сталкивался вживую. F1 не помогло. это в какой версии delphi?
У меня в данный момент шестая!


 
Романов Р.В.   (2003-02-13 18:56) [11]


> >При нажатии на кнопку Free
> EAccessViolation - что вполне объяснимо.

Объясни. Желательно с примером кода.


 
Calm   (2003-02-14 10:04) [12]

По-моему, обяснено вполне понятно.

Мне тоже интересно знать решение проблемы.


 
han_malign   (2003-02-14 11:16) [13]

PostMessage(Handle,WM_CLOSE,0,0);


 
Романов Р.В.   (2003-02-14 11:19) [14]

Нифига не понятно. Все олично удаляется методом Free.


 
AGGRESSOR   (2003-02-14 12:27) [15]

Если не удаляется с помощью Free, тогда сначала удали таким образом компоненты на фрейме, а потом уже пустой фрейм. Должно помочь.


 
Calm   (2003-02-14 13:15) [16]


> Все олично удаляется методом Free.

У меня было подозрение, что если после Free в обработчкие кнопки фрейма больше ничего не вызывать, то все будет нормально.
Ан нет!
Возникает Access Violation. Но не всегда, некоторые фреймы удаляются корректно, а некоторые с глюком. Зависимости пока не уловил.
А еще изредка выпадает Abstract Error.


 
Романов Р.В.   (2003-02-14 13:36) [17]


> Calm © (14.02.03 13:15)

Какие фреймы удаляются некорректно?


 
Calm   (2003-02-14 14:07) [18]


> Зависимости пока не уловил.

:(


 
AlexanderSK   (2003-02-14 15:08) [19]

>han_malign © (14.02.03 11:16)
>PostMessage(Handle,WM_CLOSE,0,0);

Не удаляет оно фрейм! Не удаляет!!!


 
AlexanderSK   (2003-02-14 15:16) [20]

>AGGRESSOR (14.02.03 12:27)
>Если не удаляется с помощью Free, тогда сначала удали таким образом компоненты на фрейме, а потом уже пустой фрейм. Должно помочь.

Нет не помогает! Да вообщем-то и не должно!


 
AGGRESSOR   (2003-02-14 15:21) [21]

1. Попробуй destroy вместо free
2. Переназнач удаление фрейма какой-нибудь отдельной кнопке на форме (но не на фрейме) и посмотри, что получится.

Если это не поможет- я сдаюсь. У меня все работает изначально.


 
Calm   (2003-02-14 15:29) [22]


> 1. Попробуй destroy вместо free

Не поможет. Читаем в модуле System
procedure TObject.Free;
begin
if Self <> nil then
Destroy;
end;



 
AlexanderSK   (2003-02-14 15:42) [23]

>AGGRESSOR (14.02.03 15:21)
>2. Переназнач удаление фрейма какой-нибудь отдельной кнопке на форме (но не на фрейме) и посмотри, что получится.

Если это будет отдельная кнопка на форме все будет замечательно работать!
Но в тотм-то вся проблема - этот метод не подходит!!!


 
AGGRESSOR   (2003-02-14 15:47) [24]


> Если это будет отдельная кнопка на форме все будет замечательно
> работать!

Ну вот и ответ на твой вопрос. Программа после выполнения меотда формы хочет передать управление процедуре нажатия на кнопку, которую ты уже к этому времени успешно убил.
Как выход- используй free не в методе формы, а следующей строкой после вызова метода формы в процедуре обработки нажатия кнопки, и чтобы эта строка была последней перед end. Авось заработает...


 
Calm   (2003-02-14 16:01) [25]


> чтобы эта строка была последней перед end.

Не помогает. Хотя, по идее, должно.
Возможно, у меня глюки не во фреймах... Но больше подозревать некого.


 
AGGRESSOR   (2003-02-14 16:17) [26]

Есть еще один вариант. Переназначь этой кнопке на фрейме свойство parent на форму, а не на фрейм, а потом освобождай. Возможно, твои ошибки из-за поломанного z-order.


 
Романов Р.В.   (2003-02-14 16:20) [27]

Уже больше суток изобритается велосипед, а правильных чертежей так и нет :)


 
AlexanderSK   (2003-02-14 16:37) [28]

>Романов Р.В. © (14.02.03 16:20)
>Уже больше суток изобритается велосипед, а правильных чертежей так и нет :)

Если мы изобретаем велосипед значт его кто-то уже изобрел! Так может этот кто-то поделиться уже наконец этими самыми чертежами?


 
AlexanderSK   (2003-02-14 16:40) [29]

>чтобы эта строка была последней перед end.
На скорлько я понимаю это не причем! т.к. для того чтобы понять что эта строка была последней все равно нужно вернуться в точку вызова. А эта самая точка относится к объекту, а это как раз там... точнее то чего уже не существует!

По-моему так.


 
alxx   (2003-02-14 16:48) [30]

> 1. фрейм на нем кнопка
> 2. при нажатии на эту кнопку вызывается метод формы

!! При нажатии должно посылаться сообщение форме, чтобы вызывался метод формы (WM_USER). !!

> 3. в этом методе и нужно удалит фрейм
Удаляй.



 
han_malign   (2003-02-14 16:51) [31]

А эта самая точка относится к объекту, а это как раз там... точнее то чего уже не существует!
- удаляется экземпляр объекта, код слинкован изначально и до завершения процесса никуда не денется (вообще говоря статические методы, не использующие полей и виртуальных/динамических методов класса, можно вполне безболезнено вызывать даже у разрушенного объекта), иначе как-бы работало TObject(nil).Free...


 
AlexanderSK   (2003-02-14 16:55) [32]

>han_malign
Ну а в чем же тогда проблема?


 
Романов Р.В.   (2003-02-14 16:56) [33]


> !! При нажатии должно посылаться сообщение форме

Через PostMessage


 
AlexanderSK   (2003-02-14 17:02) [34]

>alxx ©
Спасибо БОЛЬШОЕ!
Только что проверил! ЗАРАБОТАЛА!

Всем спасибо!



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

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

Наверх





Память: 0.52 MB
Время: 0.009 c
1-75946
happyboy
2003-02-11 18:31
2003.02.24
PopupMenu и спец. фонты


9-75726
Leo^Sun
2002-09-14 16:49
2003.02.24
Stack Overflow


14-76091
cdadmitriy
2003-02-09 17:05
2003.02.24
Virtual COM port


3-75798
BuS
2003-02-06 13:03
2003.02.24
формат дат


1-75997
Bob2
2003-02-11 20:17
2003.02.24
ListBox с многострочным вводом





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