Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
8-11340
Val
2002-07-12 10:23
2002.11.04
Соединение .wav-файлов в один


3-11115
Антоха
2002-10-16 12:42
2002.11.04
Констрайнт


4-11551
chsv
2002-09-22 20:25
2002.11.04
?


3-11123
Dr. Well
2002-10-16 16:30
2002.11.04
Сумма в QReport


4-11535
Grombl
2002-09-21 22:57
2002.11.04
Проблемма с soundplay.





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