Form Pytanie?

0

Potrzebuje tak zamknąć formę tworzoną dynamicznie żeby zgubiła wszystkie swoje parametry i nie pamiętała ich przy następnym wywołaniu tej formy.

Czy takie zamknięcie formy jest dopuszczalne i nie będzie zawieszało systemu w czasie dalszej pracy.

Form1.close;
Form1 := nil;

0

<font color="green">Potrzebuje tak zamknąć formę tworzoną dynamicznie żeby zgubiła wszystkie swoje parametry i nie pamiętała ich przy następnym wywołaniu tej formy.</span>

A co masz na myśli przez "parametry"... wysokość i szerokość?

<font color="green">Czy takie zamknięcie formy jest dopuszczalne i nie będzie zawieszało systemu w czasie dalszej pracy.

Form1.close;
Form1 := nil;
</span>

Najprostrzym sposobem jest sprawdzić u siebie na komputerze... co prawda nie mam pojęcia co chcesz uzyskać pisząc:

Form1 := nil;

Co to ma znaczyć w ogóle?

0

Formę uruchamiam w ten sposób

<font color="green">// Form12 = nil</span>

<font color="red">IF not Assigned(Form12) then Form12:=TForm12.Create(Form1);</span>

<font color="green">// form12 = długa lista parametrów </span>

<font color="red">Form12.Show;</span>

a zamykam

<font color="red">Form12.Close;</span>

<font color="green">// form12 = długa lista parametrów </span>

Form12 := nil;

<font color="green">// form12 = nil </span>

0

form1.free albo form1.destroy

Gwarantuję ci, że po tym forma nic nie będzie pamiętała :-)

0

Lepiej tworzyc forme

Form12:=TForm12.Create(Application);

a zwalniać pamięć: Form12.Free;

0

<font color="green">form1.destroy</span>

Nie polecam, gdyż dla początkujących programistów gwarantuje to prawie zawsze naruszeniem pamięci (Acces Violation). Użycie Free ma w sobie destruktora obiektu, a oprócz tego sprawdza czy można to zrobić...

0

<font color="green">form1.free albo form1.destroy</span>

Po użyci jednego lub drugiego nie można ponownie utworzyć formy
program wyżuca błędy.

Forma w trakcjie tworzenia jest pusta a komponenty występujące w formie są tworzone dynamicznie w różnym miejscu formy i różnej ilości.
jedynie po wykonaniu close i przyrównaniu nil fo formy wszystko jest ok.
Ale czy jest to poprawnie i czy nie będzie zawieszało programu.
Co się dziele w systemie jeżeli dam Form12 := NIL;

0

<font color="green">form1.free albo form1.destroy</span>
Co się dziele w systemie jeżeli dam Form12 := NIL;

w/g mnie tylko Stracisz dostep do klasy TFORM,
Jak zapamietasz hadnle do formy
to iswindow(form12_handle) = true ; czyli mozesz tworzyc wszystko komponenty etc..
Form12 := TForm(FindWindow(nazwa_formy12)); i tym sposobem powinienes miec znowu dostep do klasy ale oczywiscie nie probowalem ;)

0

To że program wyrzuca błędy to normalne. w SPACJA końcu zamknąłeś formę, procedura close tylko ją chowa (chyba, że jest to mainform).

Żeby użyć formy ponownie musisz ją na nowo stworzyć

np.:

Application.CreateForm(TForm2, Form2);

0

Boże, widzisz i nie grzmisz.... :) Toż takich banialuków w takiej ilości to ja jeszcze nie widziałem.... Każdy co innego pisze, a nikt nie raczył sprawdzić, czy jego wypociny mają jakiś sens... A autor tematu to już pewnie kompletnie nie wie co zrobić... Więc dokładnie wytłumaczę.

  1. Ze źródła prokektu (Project->View Source) wyrzucasz linię, w której jest tworzona dana forma.
  2. Gdy chcesz jej użyć, piszesz procedurę według tego szablonu:
var
  tmpForm: TForm12;
begin
  tmpForm:=TForm12.Create(Application);
  {...}
  tmpForm.Free;
  tmpForm:=nil; // właściwie niepotrzebne, ale nie zaszkodzi
end;

Oczywiście TForm12 zmień na to, co jest potrzebne. I może jeszcze mała rada: zmieniaj standardowe nazwy formularzy, na np. frmMain, frmOptins, frmAddRow (to np. dla aplikacji bazodanowej), frmAbout itp.

0

ej no przepraszam, ja moje porady sprawdzałem i jakoś działały.

1 użytkowników online, w tym zalogowanych: 0, gości: 1