CYFROWY BARON • PROGRAMOWANIE • Zobacz wątek - ToolBar

ToolBar

problemy z funkcjonowaniem bibliotek, komponentów itp.

ToolBar

Nowy postprzez politech » niedziela, 5 września 2010, 21:39

Mam problem z komponentem Toolbar
najpierw kod:
KOD cpp:     UKRYJ  
void __fastcall TForm1::FormCreate(TObject *Sender)
{
Form1->Caption="Automat";
Form1->Panel1->Hide();
Form1->Panel2->Hide();
Form1->Panel3->Hide();
pobierz_haslo();

void __fastcall TForm1::ToolButton5Click(TObject *Sender)
{
Form1->Panel3->Show();
Form1->ToolBar1->Enabled=false;
list<skrzynka>::iterator i;
i=klasa.begin();
AnsiString m;
        while (i!=klasa.end()){
        Sleep(200);
        m=daj_mail(i->email);
         if(zalozkonto(m,i)==false){

                i->log+="nie udalo sie";



                }
          i++;


        }
  calc();

 Form1->Panel3->Hide();
 Form1->ToolBar1->Enabled=true;
  return;
}
}


 


TollBar nie zmienia się na disabled(może to być związane z faktem, że wywołuje akcje enable=false na akcji onclik toolbarbutton?) oraz panel3 w ogole sie nie pojawia(nie mam pojecią czemu)
Avatar użytkownika
politech
Homos antropiczny
Homos antropiczny
 
Posty: 56
Dołączył(a): poniedziałek, 26 lipca 2010, 13:21
Podziękował : 0
Otrzymał podziękowań: 0
System operacyjny: Windows XP Pro SP2
Kompilator: C++ Builder 2006
Gadu Gadu: 0
    Windows XPFirefox

Re: ToolBar

Nowy postprzez Cyfrowy Baron » niedziela, 5 września 2010, 21:48

Zrób, nie Panel1->Hide() i Panel1->Show(), ale Panel1->Visible = false; i Panel1->Visible = true.

TollBar nie zmienia się na disabled


Zmienia się, ale tego nie widzisz, gdyż w jednym zdarzeniu najpierw go wyłączasz (Enabled = false), a na końcu zdarzenia włączasz (Enabled = true). Ponieważ kolejka komunikatów nie jest odświeżana, więc nie widać tej zmiany. To samo tyczy się obiektu Panel1.
Zrób tak:

KOD cpp:     UKRYJ  
Form1->Panel3->Show();
Form1->ToolBar1->Enabled = false;
Application->ProcessMessages();
// reszta kodu...




Jeżeli komponenty, do których się odwołujesz znajdują się na formularzu Form1, to nie musisz ich adresować poprzez podawanie Form1->..., to dotyczy tylko sytuacji, gdy komponenty znajdują się na innym formularzu. Przeczytaj sobie artykuł w serwisie Cyfrowy Baron w dziale: teoria -> Przekazywanie obiektów i funkcji pomiędzy formularzami.



Co na końcu zdarzenia robi funkcja return, Skoro nic nie ma po return, to nie ma sensu stosowanie tego wewnątrz zdarzenia, funkcji.



Tak to powinno wyglądać:

KOD cpp:     UKRYJ  
void __fastcall TForm1::FormCreate(TObject *Sender)
{
 Caption = "Automat";
 Panel1->Visible = false;
 Panel2->Visible = false;
 Panel3->Visible = false;
 pobierz_haslo();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ToolButton5Click(TObject *Sender)
{
 Panel3->Visible = true;
 ToolBar1->Enabled = false;

 Application->ProcessMessages();

 list<skrzynka>::iterator i;
 i = klasa.begin();
 AnsiString m;

 while( i != klasa.end() )
 {
   Sleep(200);
   m = daj_mail( i->email );
   if( zalozkonto( m, i ) == false )
   {
     i->log += "nie udalo się"; // można używać polskich znaków
   }

  i++;
 }

 calc();

 Panel3->Visible = false;
 ToolBar1->Enabled = true;
}


Ty pomieszałeś w swoim kodzie z nawiasami i umieściłeś zdarzenie OnToolButton5Click wewnątrz zdarzenia OnCreate. Zakładam, że popełniłeś błąd podczas wstawiania kodu na forum, gdyż takie zagnieżdżanie funkcji jest niedopuszczalne. Jeżeli chcesz w zdarzeniu OnCreate wywołać zdarzenie OnToolButton5Click, to należy wykorzystać polimorfizm.

KOD cpp:     UKRYJ  
void __fastcall TForm1::FormCreate(TObject *Sender)
{
 Caption = "Automat";
 Panel1->Visible = false;
 Panel2->Visible = false;
 Panel3->Visible = false;
 pobierz_haslo();

 ToolButton5Click(Sender); // tutaj wywołuję zdarzenie
}
Jeżeli nie rozumiesz tego mechanizmu to zajrzyj do serwisu Cyfrowy Baron dział: teoria -> Rzutowanie typów, przypisanie polimorficzne.



Zwróć uwagę jak sformatowałem kod. Jest czytelniejszy, prawda?! ;)
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox


  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

Powrót do Biblioteki i komponenty

Kto przegląda forum

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

cron