Форум: "Основная";
Текущий архив: 2002.11.04;
Скачать: [xml.tar.bz2];
ВнизProject/Options/Forms Найти похожие ветки
← →
AL2002 (2002-10-18 17:21) [0]Есть AutoCreate и есть AvailableForms
при автосоздании они создаются и невидимы.
При авейелэбл прога делает эксепшн при слове Form1.Show.
Как эти формы всё-таки показывать и ныкать, чтоб они все вместе память не занимали? Т.е., чтобы они были в списке Available Forms, но можно было их показывать и ликвидировать, когда надо, а потом снова показывать.
← →
AL2002 (2002-10-18 18:06) [1]Я тут нарыл, что надо использовать метод Create. Только ей ещё и АOwner какой-то нужен. Как её создать, блин?
Рыжик, где ты? :((
← →
Pat (2002-10-18 18:37) [2]AutoCreate - автоматически создаваемые
AvailableForms - доступные формы для вашего проекта. Их надо создавать:
MyForm:=TMyForm.Create(self)
....
MyForm.Free
Насчет self - отдельная история...Если поставить вместо self, например, application, то эта форма будет уничтожена при закрытии приложения. А вообще народ говорит, что правило хорошего тона - self :-))
← →
AL2002 (2002-10-18 18:54) [3]>Pat © (18.10.02 18:37)
А как сделать, чтобы форма, та, что в Availables, создалась и работала?
← →
Pat (2002-10-18 19:05) [4]Если не хочешь создавать ее руками - перемести ее в Autocreated
← →
AL2002 (2002-10-18 19:12) [5]>Pat © (18.10.02 19:05)
Я там что-то наваял, типа:
with TForm1.Create(Self) do begin
Show;
Она-то показалась, но ни одна функция не работала. Постоянный Exception. Но ведь должно же работать! :(
← →
Anatoly Podgoretsky (2002-10-18 19:31) [6]Должно если правильно написано, вот вызов и создание сейчас написаны правильно, вот только begin в данном случае лишний
Потом ты ссылаешь на Exception и не приводишь какой, видимо сильно уверен в нащих телепатических способностях
← →
Pat (2002-10-18 20:27) [7]>телепатических способностях
теле Patических способностях :-)))))
>Постоянный Exception
Расставь брейкпоинты, посмотри на какой строчке...
← →
AL2002 (2002-10-21 14:42) [8]А по другому сделал.
Я делаю
Form1.Free;
Application.CreateForm(TForm2,Form2);
Form2.Show;
и наоборот:
Form2.Free;
Application.CreateForm(TForm1,Form1);
Form1.Show;
Так нормально?
← →
Рыжик (2002-10-21 15:56) [9]AutoCreated - формы, которые создаются при запуске приложения.
Available Forms - формы, которые не создаются автоматически, их нужно создавать самому, прежде чем использовать.
Если формы AutoCreated, то чтобы их небыло видно при запуске программы поставь им Visible = false. Потом когда надо форму показать, делаешь Show или Visible=true. Дальше чтобы форму можно было показывать снова, при закрытии её надо не уничтожать, а прятать (OnClose, Action:=caHide). В этом случае форма всегда будет оставаться в памяти, но зато все изменения сделанные с формой будут сохраняться при её следующем показе.
Либо можно создавать форму при первом к ней обращении, а потом прятать: Available, caHide (оно по-умолчанию). Тогда перед показом формы следует проверить её на nil и если надо создать MyForm:=TMyForm.Create(Application);
Чтобы форма не висела в памяти, её надо сделать Available и на OnClose устанавливать Action=caFree. Затем, когда надо показать форму - создавать её заново.
← →
AL2002 (2002-10-22 11:43) [10]
> Action=caFree
Это что?
Рыжик, а если я делаю как я писал в AL2002 © (21.10.02 14:42) то это нормально. Ресурсы освобождаются?
← →
Snake (2002-10-22 12:09) [11]Action=caFree - это уничтожение формы при закрытии. Как правило, применяется в диалогах и MDI-формах.
← →
Restart (2002-10-22 14:14) [12]
> AL2002 © (22.10.02 11:43)
Нормально. Освобождаются.
Application.CreateForm(TForm2,Form2) ~ Form2:=TForm2.Create(Application)
← →
Restart (2002-10-22 14:24) [13]Ой, нет!
> Form1.Free;
> Application.CreateForm(TForm2,Form2);
> Form2.Show;
Может имелось в виду Form2.Free? А то, если Form2 уже есть, то у тебя получиться что создаётся ещё одна, а старая так и будет присутствовать среди Application.Components. И уничтожиться только при закрытии приложения.
← →
Рыжик (2002-10-22 14:27) [14]Пардон, это я была ;)
← →
AL2002 (2002-10-22 17:11) [15]>2Рыжик Aka Restart
Я нахожусь на форме1. Нажимаю кнопку.
> Form1.Free;
> Application.CreateForm(TForm2,Form2);
> Form2.Show;
И появляюсь на форме2.
И наоборот.
Нормально?
← →
Рыжик (2002-10-23 08:48) [16]Ни чего не понимаю...
Хочешь сказать, что у тебя работает вот это:
procedure TForm1.Button1Click(Sender: TObject);
???????
begin
Form1.Free;
end;
Или кнопка всё-таки на какой-то другой форме? А то как-то не правдоподобно...
В любом случае так можно делать, только если логика программы гарантирует, что в момент вызова Application.CreateForm(TForm2,Form2) формы Form2 не существует. Но будь готов к тому, что пройдёт время, ты про всё это забудешь, программа сильно изменится, - и будешь потом мучительно искать, почему-же программа жрёт память.
Лучше делать так:
if Form2=nil then Application.CreateForm(TForm2,Form2);
или так:
if Form2<>nil then
begin
Form2.Free;
Application.CreateForm(TForm2,Form2);
end;
← →
makdi (2002-10-23 14:18) [17]А не проще было бы сделать так:
Application.CreateForm(TForm2,Form2)
Form2.Show;
Form2.Update; // без него покажется форма, НО ни чего работать не будет!
.....
а в конце
Form2.Hide;
Form2.Free;
Ресурсы освобождаются полностью
← →
Рыжик (2002-10-23 14:43) [18]
> makdi (23.10.02 14:18)
> Form2.Update; // без него покажется форма, НО ни чего работать
> не будет!
Да ну?!
← →
makdi (2002-10-23 14:55) [19]> Рыжик
> Да ну?!
Попробуй, о результатах сообщи
← →
Рыжик (2002-10-23 15:03) [20]
> makdi (23.10.02 14:55)
Результат: работает всё.
А что такое "ничего"?
← →
AL2002 (2002-10-24 21:43) [21]>Результат: работает всё.
>А что такое "ничего"?
Кароче. Всё работает. Не надо никаких апдейтов.
Если (спасибо тебе, Рыжик) форма не существует, то она создаётся, а если уже существует, то показывается и ныкается, а не удаляется.
Рыжик, ты Мастер.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.11.04;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.008 c