Форум: "Основная";
Текущий архив: 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