Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.02.24;
Скачать: CL | DM;

Вниз

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

 
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;
Скачать: CL | DM;

Наверх




Память: 0.54 MB
Время: 0.013 c
1-75951
Sergey-ZZZ
2003-02-12 13:06
2003.02.24
ComboBox


4-76222
SLON_2k
2003-01-11 12:41
2003.02.24
диалер


14-76115
BALU1111
2003-02-06 11:30
2003.02.24
Что такое сабж?


1-75931
Ricky-Ticky-Tavy
2003-02-14 09:02
2003.02.24
OLE, Word2000, Delphi5, WinME не получается


7-76204
sniknik
2002-12-24 20:37
2003.02.24
Нормальное завершение системы.