Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

[Zadatak] BCB: Razbacivanje tastera po formi i kasnije uklanjanje

[es] :: C/C++ programiranje :: C/C++ za početnike :: [Zadatak] BCB: Razbacivanje tastera po formi i kasnije uklanjanje

[ Pregleda: 1605 | Odgovora: 2 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Brolly

Član broj: 66668
Poruke: 363
*.dialup.neobee.net.



Profil

icon [Zadatak] BCB: Razbacivanje tastera po formi i kasnije uklanjanje25.02.2007. u 09:56 - pre 209 meseci
Prvo smo radili u C-u (Turbo C), pa smo sada u 4. godini presli na BCB. Zadatak je sledeci:

Napisati program koji po formi razbaca 30 dugmadi istih dimenzija (5 redova x 6 dugmadi). Dugmad su obelezena redom brojevim od 1 do 30. Kada se klikne na neko dugme ono nestaje sa forme.

Resenje je:
Code:

//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop

#include "fORMDUGME_O.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
unsigned pom;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}

void __fastcall TForm1::FormCreate(TObject *Sender)
{
        unsigned i,j;

        Application->Title="";
        pom=1;
        for(i=0;i<6;i++){
                for(j=0;j<5;j++){
                        TButton* btn = new TButton(this);
                        btn->Parent = this;
                        btn->Height=50;
                        btn->Width=50;
                        btn->Top = 20+j*(btn->Height+20);
                        btn->Left = 20+i*(btn->Width+20);
                        btn->OnClick = ButtonXClick;
                        btn->Tag = 5*i+j;
                        btn->Font->Size=12;
                        btn->Caption = IntToStr(j*6+i+1);
                }
        }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ButtonXClick(TObject *Sender)
{
        TButton* btnx = dynamic_cast<TButton*>(Sender);

        btnx->Visible=false;
        pom++;
        if(pom==31) ShowMessage("BRAVO!!");
}


Meni nista nije jasno!!!

1. Za cega sluzi new?
2. Za cega sluzi this?
3. Zasto je btn struktura? Zasto se sa operatorom '->' moze pristupati njenim osobinama kao da je objekat na formi?
4. Sta znaci ovo dynamic_cast?
5. Ako nekome nije tesko da mi malo rastumaci ovo resenje ili makar jedan deo? Bio bih stvarno zahvalan.

Unapred hvala.
...
 
Odgovor na temu

X Files
Vladimir Stefanovic
Pozarevac

SuperModerator
Član broj: 15100
Poruke: 4902
*.tekostolac.co.yu.

Jabber: xfiles@elitesecurity.org


+638 Profil

icon Re: [Zadatak] BCB: Razbacivanje tastera po formi i kasnije uklanjanje26.02.2007. u 07:18 - pre 209 meseci
Citat:

1. Za cega sluzi new?

Ovo je pitanje koje treba da tražiš u bilo kojoj knjizi za C++.
U kontekstu ovog programa new dinamički kreira novi taster.
(objekte u BCB-u možeš praviti i dinamički, a ne samo slaganjem na formu)

Citat:

2. Za cega sluzi this?

I ovo je pitanje koje treba da tražiš u bilo kojoj knjizi za C++.
U kontekstu ovog programa btn->Parent = this; novokreiranom tasteru dodeljuje matičnu
(roditeljsku) kontrolu. Drugim rečima, kada napraviš taster, on NIČEMU nije u startu pridružen
(tj. ne mora obavezno Form-i, može i Panel-u, TabSheet-u), pa mu se EKSPLICITNO kaže da je
se pridružuje this pointeru, a to je u konkretnom slučaju pointer na Form1.

Citat:

3. Zasto je btn struktura?

btn nije struktura nego je pointer tipa TButton, što se lepo i vidi TButton* btn.

Citat:

Zasto se sa operatorom '->' moze pristupati njenim osobinama kao da je objekat na formi?

Pošto smo zaključili da je to pointer, tako se pristupa objektima na koje ukazuje.
Opet mešaš objekte na formi i objekte koji su dinamički kreirani. Sasvim je svejedno.

Citat:

4. Sta znaci ovo dynamic_cast?

Grubo rečeno, ovo je jedan od modernijih C++ načina (bezbednog) cast-ovanja pointera iz jednog tipa
u drugi, uglavnom kod polimorfnih tipova.

Nekad se to radilo ovako (u stilu C jezika):
TButton* btnx = (TButton*)Sender;

... a sada ovako:
TButton* btnx = dynamic_cast<TButton*>(Sender);

U svakom slučaju, kod koji si pokazao da bi bezbedno cast-ovanje imalo smisla, treba da ima i uslov:
Code:

TButton* btnx = dynamic_cast<TButton*>(Sender);
if ( btnx )
{
   btnx->Visible=false;
   pom++;
   if(pom==31) ShowMessage("BRAVO!!");
}

 
Odgovor na temu

Brolly

Član broj: 66668
Poruke: 363
*.dialup.neobee.net.



Profil

icon Re: [Zadatak] BCB: Razbacivanje tastera po formi i kasnije uklanjanje04.03.2007. u 07:47 - pre 208 meseci
OK, hvala ti. Nemogu doduse reci da mi je sve jasno. Ali mislim da nikada i nece biti. Ako mi ista pokida zivce u zivotu, to ce definitivno biti programiranje. :(
...
 
Odgovor na temu

[es] :: C/C++ programiranje :: C/C++ za početnike :: [Zadatak] BCB: Razbacivanje tastera po formi i kasnije uklanjanje

[ Pregleda: 1605 | Odgovora: 2 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.