MervDePerv

luty 25, 2010

AfterShow() w Builder C++

Opublikowane jako: Builder C++ — naza @ 6:54 po południu

Podejrzewam, że wielu nas spotkało się już z tym problemem. Mianowicie chodzi o wykonanie instrukcji zaraz po pokazaniu się formatki. Oczywiście jest OnShow() aczkolwiek to operacje zawarte w tym zdarzeniu zostaną wykonane przed faktycznym pokazaniem się formatki. Zatem jak wykonać operacje, funkcje po ukazaniu się naszym oczom formatki? Rozwiązań jest kilka. Ja zdecydowałem się przedstawić najbardziej wg mnie optymalne.
Wykorzystamy inne zdarzenie klasy TForm tj OnActivate(). Definicja z plików pomocy:

__property Classes::TNotifyEvent OnActivate = {read=FOnActivate, write=FOnActivate,};
Description
Use OnActivate to perform special processing when the form receives focus. A form becomes active when focus is transferred to it (when the user clicks on the form, for example).

Zatem jak widzimy zdarzenie OnActivate() jest wykonywane w momencie otrzymania przez formatkę “fokusa”(np. kliknięcie myszą). Zatem do dzieła. Dodajemy w pliku *.h naszej formatki zmienna bool wykonano:

#ifndef Unit1H
#define Unit1H
#include
#include
#include
#include
class TForm2 : public TForm
{
 __published:	// IDE-managed Components
        void __fastcall FormActivate(TObject *Sender);
private:	// User declarations
        bool wykonano;
public:		// User declarations
        __fastcall TForm2(TComponent* Owner);
};
extern PACKAGE TForm2 *Form2;
#endif

Zmienna będzie nam określać czy zdarzenie zostało już wykonane. Teraz w zdarzeniu OnActivate() dodajemy:

void __fastcall TForm2::FormActivate(TObject *Sender)
{
 if(this->wykonano == true)
 {
  ShowMessage("After Show!");
  this->wykonano = false;
 }
}

Sprawdzamy czy zmienna wykonano jest równa true i jeśli tak to wykonujemy ciąg instrukcji dla zdarzenia “AfterShow”. Pozostaje nam w zdarzeniu OnShow() ustawić:

void __fastcall TForm2::FormShow(TObject *Sender)
{
 this->wykonano = true;
 this->SetFocus();
}

Funkcja SetFocus() symuluje nam wysłanie “focusa” do formatki.
To by było na tyle.

Leave a Reply

Wspierane przez NETMARK Hosting