Zamykanie formy (Form2)

dział ogólny

Zamykanie formy (Form2)

Nowy postprzez Miroo_007 » poniedziałek, 16 marca 2009, 21:11

Jak zamknąć formę? Taki kod nie działa:
Kod: Zaznacz cały
Form2->Close();

Wyskakuje mi błąd dostępu do adresu w pliku "cvl100.bpl". Wiem, że program przy zamykaniu wykonuje jeszcze raz funkcje OnClose i pewnie dlatego wyskakuje ten błąd.
Avatar użytkownika
Miroo_007
Intelektryk
Intelektryk
 
Posty: 160
Dołączył(a): sobota, 18 października 2008, 10:49
Lokalizacja: Rzeszów
Podziękował : 0
Otrzymał podziękowań: 0
    NieznanyNieznana

Re: Zamykanie formy (Form2)

Nowy postprzez Corvis » poniedziałek, 16 marca 2009, 22:20

Ale ta forma jest formą główną ?? Czy formą dodatkową ???
"Sukcesy trwają, dopóki ich ktoś nie spieprzy. Porażki są wieczne"

Dr Gregory House
Avatar użytkownika
Corvis
Programista I
Programista I
 
Posty: 880
Dołączył(a): sobota, 26 lipca 2008, 00:31
Podziękował : 80
Otrzymał podziękowań: 30
System operacyjny: WINDOWS 7 64-bity
Kompilator: Praca - C++ Builder XE2 ENTERPRISE - Update 4, Dom - C++ Builder XE4 - Uddate 1
Gadu Gadu: 0
    NieznanyNieznana

Re: Zamykanie formy (Form2)

Nowy postprzez polymorphism » poniedziałek, 16 marca 2009, 22:30

Wiem, że program przy zamykaniu wykonuje jeszcze raz funkcje OnClose i pewnie dlatego wyskakuje ten błąd.

A co to ma do rzeczy? Skupiłbym się przede wszystkim na wskaźniku Form2, czy aby poprawnie jest zainicjalizowany (wtedy, gdy okno tworzysz przez new).
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    NieznanyNieznana

Re: Zamykanie formy (Form2)

Nowy postprzez Miroo_007 » poniedziałek, 16 marca 2009, 22:33

W formie głównej mam taki kod:
Kod: Zaznacz cały
TForm2 *form_2 = new TForm2(this);
form_2->Show();

W formie drugiej (dodatkowej) chcę ją (Form2) zamknąć po dokonaniu obliczeń.
Avatar użytkownika
Miroo_007
Intelektryk
Intelektryk
 
Posty: 160
Dołączył(a): sobota, 18 października 2008, 10:49
Lokalizacja: Rzeszów
Podziękował : 0
Otrzymał podziękowań: 0
    NieznanyNieznana

Re: Zamykanie formy (Form2)

Nowy postprzez banita » poniedziałek, 16 marca 2009, 22:39

z zapisu ktory przedstawiles wynika ze wskaznik jest twozony lokalnie. inne formy nic o nim nie wiedza.
Avatar użytkownika
banita
Kreacjusz
Kreacjusz
 
Posty: 283
Dołączył(a): poniedziałek, 28 lipca 2008, 20:07
Podziękował : 1
Otrzymał podziękowań: 18
System operacyjny: Windows 7 Professional
Kompilator: C++Builder 2010 Update 5,
Delphi 2010 Update 5,
NetBeans 6.9(MinGw + Qt),
Visual Studio 2008 + Qt
Gadu Gadu: 0
    NieznanyNieznana

Re: Zamykanie formy (Form2)

Nowy postprzez Miroo_007 » poniedziałek, 16 marca 2009, 22:41

Możesz jaśniej?
Avatar użytkownika
Miroo_007
Intelektryk
Intelektryk
 
Posty: 160
Dołączył(a): sobota, 18 października 2008, 10:49
Lokalizacja: Rzeszów
Podziękował : 0
Otrzymał podziękowań: 0
    NieznanyNieznana

Re: Zamykanie formy (Form2)

Nowy postprzez banita » poniedziałek, 16 marca 2009, 22:44

no jezeli twozysz wskaznik w funkcji np obslugi zdarzenia(twozysz a nie tylko przydzielasz pamiec!) to poza ta funkcja nic nie wiadomo o istnieniu tego wskaznika.

void fun()
{
int* x = new int(21);
}

tu juz nic nie wiadomo o istnieniu wskaznika x
Avatar użytkownika
banita
Kreacjusz
Kreacjusz
 
Posty: 283
Dołączył(a): poniedziałek, 28 lipca 2008, 20:07
Podziękował : 1
Otrzymał podziękowań: 18
System operacyjny: Windows 7 Professional
Kompilator: C++Builder 2010 Update 5,
Delphi 2010 Update 5,
NetBeans 6.9(MinGw + Qt),
Visual Studio 2008 + Qt
Gadu Gadu: 0
    NieznanyNieznana

Re: Zamykanie formy (Form2)

Nowy postprzez Miroo_007 » poniedziałek, 16 marca 2009, 22:48

Tak ale ja tworzę obiekt, który powinien sam siebie usunąć (no i zwolnić zajmowane miejsce). Przecież to jest osobna forma.
Avatar użytkownika
Miroo_007
Intelektryk
Intelektryk
 
Posty: 160
Dołączył(a): sobota, 18 października 2008, 10:49
Lokalizacja: Rzeszów
Podziękował : 0
Otrzymał podziękowań: 0
    NieznanyNieznana

Re: Zamykanie formy (Form2)

Nowy postprzez Miroo_007 » poniedziałek, 16 marca 2009, 22:50

Druga sprawa. Jeżeli stworzę obiekt globalny to automatycznie zwiększy się miejsce, które ten program będzie zajmował. Ja tego nie chcę.
Avatar użytkownika
Miroo_007
Intelektryk
Intelektryk
 
Posty: 160
Dołączył(a): sobota, 18 października 2008, 10:49
Lokalizacja: Rzeszów
Podziękował : 0
Otrzymał podziękowań: 0
    NieznanyNieznana

Re: Zamykanie formy (Form2)

Nowy postprzez Corvis » poniedziałek, 16 marca 2009, 23:42

Druga sprawa. Jeżeli stworzę obiekt globalny to automatycznie zwiększy się miejsce, które ten program będzie zajmował. Ja tego nie chcę.


Zasada numer 1 -> Wpierw naucz się programować potem optymalizuj kod
Ps. Po co globalnie jak można jako prywatny składni klasy ??

Co do istoty dyskusji

Nie widzę problemu : Robisz co masz trzeba w formie drugiej i robisz w klasie TForm2 pod przyciskiem czy tam gdzie chcesz poprostu Close(). Z tego zapisu co podałeś wynika, że nie zwalniasz pamięci dla tworzonej formy dodaj delete Form2; albo Form2->Free();


Banita ty też zapomniałeś o delete :evil:
"Sukcesy trwają, dopóki ich ktoś nie spieprzy. Porażki są wieczne"

Dr Gregory House
Avatar użytkownika
Corvis
Programista I
Programista I
 
Posty: 880
Dołączył(a): sobota, 26 lipca 2008, 00:31
Podziękował : 80
Otrzymał podziękowań: 30
System operacyjny: WINDOWS 7 64-bity
Kompilator: Praca - C++ Builder XE2 ENTERPRISE - Update 4, Dom - C++ Builder XE4 - Uddate 1
Gadu Gadu: 0
    NieznanyNieznana

Re: Zamykanie formy (Form2)

Nowy postprzez Witold » wtorek, 17 marca 2009, 00:23

Miroo_007 napisał(a):Jak zamknąć formę? Taki kod nie działa:
Kod: Zaznacz cały
Form2->Close();

Wyskakuje mi błąd dostępu do adresu w pliku "cvl100.bpl". Wiem, że program przy zamykaniu wykonuje jeszcze raz funkcje OnClose i pewnie dlatego wyskakuje ten błąd.


Gdy dodajesz formę do projektu (TForm2), dostajesz gratis wskaźnik do niej (TForm2 * Form2 w Unit2.hpp/cpp). Gdy ustawisz nieautomatyczne tworzenie tej formy wskaźnik nie zostanie zainicjalizowany. I dalej pewnie o czym pisał banita, ustawisz lokalny wskaźnik, a wskaźnik Form2 (z Unit2.hpp/cpp) nie jest sensownie ustawiony. Potem Form2->Close()… bum!

Corvis napisał(a): albo Form2->Free();


Help BCB napisał(a):TObject::Free

Destroys an object and frees its associated memory, if necessary.

__fastcall Free();

Description

Do not call the Free method of an object. Instead, use the delete keyword, which invokes Free to destroy an object. Free automatically calls the destructor if the object reference is not NULL.
Ostatnio edytowano wtorek, 17 marca 2009, 15:39 przez Witold, łącznie edytowano 1 raz
Avatar użytkownika
Witold
Konstrukcjonista
Konstrukcjonista
 
Posty: 223
Dołączył(a): piątek, 29 sierpnia 2008, 10:53
Podziękował : 1
Otrzymał podziękowań: 14
Kompilator: bcb6, Turbo C++ Explorer
    NieznanyNieznana

Re: Zamykanie formy (Form2)

Nowy postprzez Miroo_007 » wtorek, 17 marca 2009, 00:49

To dużo wyjaśnia. Jakiś czas temu zastanawiałem się dlaczego funkcja Close() działa tylko w obszarze funkcji gdzie stworzyłem nowy formularz.
Avatar użytkownika
Miroo_007
Intelektryk
Intelektryk
 
Posty: 160
Dołączył(a): sobota, 18 października 2008, 10:49
Lokalizacja: Rzeszów
Podziękował : 0
Otrzymał podziękowań: 0
    NieznanyNieznana

Re: Zamykanie formy (Form2)

Nowy postprzez banita » wtorek, 17 marca 2009, 01:08

Corvis napisał(a):
Banita ty też zapomniałeś o delete :evil:


yy gdzie? przeciez ja tylko zobrazowalem to co zrobil autor tematu. chodzilo o to ze nici z tego ze jest zarezerwowana pamiec na forme skoro jedyny wskaznik na ta forme zaginie.
Avatar użytkownika
banita
Kreacjusz
Kreacjusz
 
Posty: 283
Dołączył(a): poniedziałek, 28 lipca 2008, 20:07
Podziękował : 1
Otrzymał podziękowań: 18
System operacyjny: Windows 7 Professional
Kompilator: C++Builder 2010 Update 5,
Delphi 2010 Update 5,
NetBeans 6.9(MinGw + Qt),
Visual Studio 2008 + Qt
Gadu Gadu: 0
    NieznanyNieznana

Re: Zamykanie formy (Form2)

Nowy postprzez Corvis » wtorek, 17 marca 2009, 09:34

Witold

Faktycznie powaliło mi się Dzięki :)
"Sukcesy trwają, dopóki ich ktoś nie spieprzy. Porażki są wieczne"

Dr Gregory House
Avatar użytkownika
Corvis
Programista I
Programista I
 
Posty: 880
Dołączył(a): sobota, 26 lipca 2008, 00:31
Podziękował : 80
Otrzymał podziękowań: 30
System operacyjny: WINDOWS 7 64-bity
Kompilator: Praca - C++ Builder XE2 ENTERPRISE - Update 4, Dom - C++ Builder XE4 - Uddate 1
Gadu Gadu: 0
    NieznanyNieznana

Re: Zamykanie formy (Form2)

Nowy postprzez Miroo_007 » piątek, 3 kwietnia 2009, 10:46

Dalej wyskakuje mi błąd przy zamykaniu Form2. Jak można zamknąć formę przy użyciu instrukcji WinAPI?
Avatar użytkownika
Miroo_007
Intelektryk
Intelektryk
 
Posty: 160
Dołączył(a): sobota, 18 października 2008, 10:49
Lokalizacja: Rzeszów
Podziękował : 0
Otrzymał podziękowań: 0
    NieznanyNieznana

Następna strona

  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

Powrót do Ogólne problemy z programowaniem

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 8 gości