Wielokrotne otworzenie formularza

dział ogólny

Wielokrotne otworzenie formularza

Nowy postprzez mani » piÄ…tek, 8 maja 2009, 22:45

Do projektu dołączony jest drugi formularz, Form2. Klikając na button w pierwszym formularzu, chcę wyświetlić ten drugi (używałem funkcji Form2->Show), jednak chciałbym, by otworzył się on 3 razy. Jak to zrobić?
;]
Avatar użytkownika
mani
Bladawiec
Bladawiec
 
Posty: 24
Dołączył(a): niedziela, 15 marca 2009, 20:55
PodziÄ™kowaÅ‚ : 0
OtrzymaÅ‚ podziÄ™kowaÅ„: 0
    NieznanyNieznana

Re: Wielokrotne otworzenie formularza

Nowy postprzez banita » piÄ…tek, 8 maja 2009, 22:53

rozumiem ze chcesz odpalic 3egemplarze form2.

musisz usunac ten formularz z listy auto-create w opcjach projektu.
nastepnie pod przyciskiem dac kod:

nazwa_formularza - new Tnazwa_formularza(this);
nazwa_formularza->Show();

gdzie: nazwa_formularza to np globalny wskaznik twozony automatycznie przy dodaniu nowej formatki.

taki zabieg spowoduje to iz ilekroc klikniesz na Button to do wskaznika nazwa_formularza zostanie przydzielona nowa pamiec i powstanie nowy egzemplarz formularza. zauwaz ze w nie ma wywolania delete nazwa_formularza. co za tym idzie przy twozeniu nowej kopii tracimy dostep do starej i nie ma jak po niej posprzatac.
aby rozwiazac ten problem musisz w zdarzeniu OnClose formularza2(tego ktory otwierasz) dac kod:

Action = caFree;

powoduje on ze podczas zamykania kazda kopia form2 sama po sobie posprzata.
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: Wielokrotne otworzenie formularza

Nowy postprzez mani » piÄ…tek, 8 maja 2009, 23:05

Po wklejeniu twojego kodu, program nie chce się skompilować
Kod: Zaznacz cały
[C++ Error] Unit1.cpp(22): E2451 Undefined symbol 'nazwa_formularza'
[C++ Error] Unit1.cpp(22): E2303 Type name expected
[C++ Error] Unit1.cpp(22): E2379 Statement missing ;

Podstawiając za nazwa_formularza Form2, program kompiluje się, ale wysypuje po użyciu buttona.

Co robię źle ;] ?
;]
Avatar użytkownika
mani
Bladawiec
Bladawiec
 
Posty: 24
Dołączył(a): niedziela, 15 marca 2009, 20:55
PodziÄ™kowaÅ‚ : 0
OtrzymaÅ‚ podziÄ™kowaÅ„: 0
    NieznanyNieznana

Re: Wielokrotne otworzenie formularza

Nowy postprzez banita » sobota, 9 maja 2009, 00:05

nazwa_formularza - new Tnazwa_formularza(this);

tu zamiast '-' jest '=' ale to chyba oczywiste ze to literowka...
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: Wielokrotne otworzenie formularza

Nowy postprzez mani » sobota, 9 maja 2009, 11:36

Zrobiłem to w ten sposób:
Kod: Zaznacz cały
TForm2 *Form2 = new TForm2(this);
Form2->Show();

I niby działa, ale Form2 ukazuje się dopiero, kiedy kliknę OK przy wyświetlającym się errorze:
Obrazek

I drugie pytanie, może troszkę nie na temat. Czy da się zrobić, żeby formularz utworzył się po jakimś czasie od włączenia programu, automatycznie, bez klikania w nic? Jeśli tak, to jak?
;]
Avatar użytkownika
mani
Bladawiec
Bladawiec
 
Posty: 24
Dołączył(a): niedziela, 15 marca 2009, 20:55
PodziÄ™kowaÅ‚ : 0
OtrzymaÅ‚ podziÄ™kowaÅ„: 0
    NieznanyNieznana

Re: Wielokrotne otworzenie formularza

Nowy postprzez Miroo_007 » sobota, 9 maja 2009, 12:59

Kod: Zaznacz cały
TForm2 *Form_2 = new TForm2(this);
Form_2->ShowModal();
delete Form_2;
Form_2 = NULL;

Odp. do drugiego pytania (użyłem kontrolki TTimer):
Kod: Zaznacz cały
void __fastcall TForm1::FormCreate(TObject *Sender) {
      Timer1->Interval = 10000; //okno utworzy siÄ™ po 10 sekundach od uruchomienia
      Timer1->Enabled = true;
}
void __fastcall TForm1::Timer1Timer(TObject *Sender) {
      Timer1->Enabled = false;
      TForm2 *Form_2 = new TForm2(this);
      Form_2->ShowModal();
      delete Form_2;
      Form_2 = NULL;   
}
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: Wielokrotne otworzenie formularza

Nowy postprzez mani » sobota, 9 maja 2009, 14:14

Dobra, wielkie dzięki. Jeszcze jedno pytanie, jak zrobić, by okna ustawiały się jakoś inaczej (gdy włącza się to okno po raz drugi, jest w tym samym miejscu), ustalić ich pozycję na ekranie przed wyświetleniem?
;]
Avatar użytkownika
mani
Bladawiec
Bladawiec
 
Posty: 24
Dołączył(a): niedziela, 15 marca 2009, 20:55
PodziÄ™kowaÅ‚ : 0
OtrzymaÅ‚ podziÄ™kowaÅ„: 0
    NieznanyNieznana

Re: Wielokrotne otworzenie formularza

Nowy postprzez banita » sobota, 9 maja 2009, 14:38

Miroo_007 w twoim przykladzie mozna uruchomic roznoczesnie jedno okno potomne.

mani nie rozumiem z czym jest problem.

sa dwa formularze, form1 - glowny i form2 ktory uruchamiamy z poziomu form1.
form2 z racji iz ma byc jego wiele egzemplarzy usuwamy z zakladki auto-create w opcjach projektu.
przy dodaniu do projektu form2 IDE samo dodalo globalny wskaznik do niego, cos takiego:
Kod: Zaznacz cały
#include <vcl.h>
#pragma hdrstop

#include "Unit2.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm2 *Form2; <-------------------- TO


w form1 inkludujemy header form2. pod onclick button dajemy kod:
Kod: Zaznacz cały
   Form2 = new TForm2(this);
   Form2->Show();
<-- jezli ten kod umiescisz w petli do 3 to z automatu odpala sie trzy egzemplarze form2

natomiast co jest bardzo wazne w onclose form2 dajemy:
Kod: Zaznacz cały
   Action = caFree;

aby przy zamknieciu formatka posobie sprzatala.

teraz ile razy nacisniesz button na form1 zostanei otwozony kolejny egzemplarz form2.
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: Wielokrotne otworzenie formularza

Nowy postprzez Miroo_007 » sobota, 9 maja 2009, 15:23

banita napisał(a):Miroo_007 w twoim przykladzie mozna uruchomic roznoczesnie jedno okno potomne.

Zadanie było takie:
mani napisał(a):I drugie pytanie, może troszkę nie na temat. Czy da się zrobić, żeby formularz utworzył się po jakimś czasie od włączenia programu, automatycznie, bez klikania w nic? Jeśli tak, to jak?

Czyli utworzenie jednego formularza.
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: Wielokrotne otworzenie formularza

Nowy postprzez banita » sobota, 9 maja 2009, 15:50

racja! nie doczytalem tego fragmentu.
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: Wielokrotne otworzenie formularza

Nowy postprzez mani » sobota, 9 maja 2009, 16:09

banita napisał(a):mani nie rozumiem z czym jest problem.

Zrobiłem to tak, jak poradził Miroo. Wszystko działa. Ale mam drugie pytanie, może źle zadałem. Czy da się ustawić miejsce na ekranie, w którym ustawi się formularz od razu po pokazaniu? Bo domyślnie ustawia się gdzieś na środku, a ja chciałbym, żeby wyświetlało się ono w innym miejscu, załóżmy lewy górny róg okna programu był przy pokazaniu go umiejscowiony 100 px od górnej i 100 od lewej krawędzi ekranu.
;]
Avatar użytkownika
mani
Bladawiec
Bladawiec
 
Posty: 24
Dołączył(a): niedziela, 15 marca 2009, 20:55
PodziÄ™kowaÅ‚ : 0
OtrzymaÅ‚ podziÄ™kowaÅ„: 0
    NieznanyNieznana

Re: Wielokrotne otworzenie formularza

Nowy postprzez Miroo_007 » sobota, 9 maja 2009, 16:36

Kod: Zaznacz cały
void __fastcall TForm1::FormCreate(TObject *Sender) {
    this->Left = 100;
    this->Top = 100;
}

Ustaw Position na poDefault w Object Inspector.
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: Wielokrotne otworzenie formularza

Nowy postprzez mani » sobota, 9 maja 2009, 17:07

Dzięki wielkie ;]
;]
Avatar użytkownika
mani
Bladawiec
Bladawiec
 
Posty: 24
Dołączył(a): niedziela, 15 marca 2009, 20:55
PodziÄ™kowaÅ‚ : 0
OtrzymaÅ‚ podziÄ™kowaÅ„: 0
    NieznanyNieznana


  • 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ł: Google [Bot] i 14 gości