Obsługa komponentu w innym pliku.

problemy z funkcjonowaniem bibliotek, komponentów itp.

Obsługa komponentu w innym pliku.

Nowy postprzez markosik20 » sobota, 16 sierpnia 2008, 23:33

Czy jest to do zrobienia? Mam bardzo dużo komponentów reagujących na zdażenie OnClick w jednym formularzu. Wszystkie inne funkcje już "wyniosłem" do innego pliku cpp.
Cz np: takÄ… funkcjÄ™
Kod: Zaznacz cały
void __fastcall TForm1::UpDown13Click(TObject *Sender, TUDBtnType Button)

mozna umieścić w innym pliku niż main.cpp, bez tworzenia drugiego fromularza?
Avatar użytkownika
markosik20
 
    NieznanyNieznana

Re: Obsługa komponentu w innym pliku.

Nowy postprzez Cyfrowy Baron » niedziela, 17 sierpnia 2008, 10:10

Zdarzeń nie można przenosić, każde zdarzenie to funkcja i jest połączone z konkretnym obiektem.

Przykład. Masz na formularzu Form1 komponent Button1 i utworzone dla niego zdarzenie OnClick, ale chcesz mieć możliwość wywoływania tego zdarzenia zarówno na Form1 jak i Form2, jest to możliwe dzięki mechanizmowi zwanemu rzutowaniem i przypisaniem polimorficznym. Przekazywanie zdarzeń odbywa się poprzez obiekt Sender klasy TObject. Do zdarzenie OnClick przycisku Button1, możesz się odwołać w innym zdarzeniu lub funkcji, ale musisz najpierw "połączyć" ze sobą obydwa formularze, tak żeby "wiedziały o własnym istnieniu", dokładny opis znajdziesz w serwisie Cyfrowy Baron w dziale: teoria | przekazywanie obiektów i funkcji pomiędzy formularzami.
Formularze "powiadamiasz o sobie" w ten sposób, że w plikach źródłowych obu formularzy w sekcji include umieszczasz odwołanie do drugiego formularza, czyli w skrócie coś takiego:

Kod: Zaznacz cały
#include "Unit1.h"
#include "Unit2.h"


Teraz np. na formularzu Form2 umieszczasz jakiś przycisk np. MyButton1 i chcesz w nim wywołać zdarzenie OnClick przycisku Button1 z formularza Form1, robisz to w ten sposób:

Kod: Zaznacz cały
void __fastcall TForm2::MyButton1Click(TObject *Sender)
{
Form1->Button1Click(Sender);
}


Ze zdarzeniem OnClick UpDown13 z Twojego przykład sytuacja jest nieco bardziej skomplikowana, gdyż to zdarzenie pobiera dwa argumenty, pierwszy to Sender, drugi to wskaźnik do obiektu typu TUDBtnType i tutaj trzeba przekazać dokładnie taki typ obiektu lub konkretną wartość pasującą do typu. Trzeba wiedzieć jak działa dane zdarzenie, a OnClick obiektu TUpDown działa mniej więcej w ten sposób, że sprawdza, czy kliknięto w strzałkę do góry czy do dołu, jeżeli odwołasz się do tego zdarzenie w zdarzeniu OnClick jakiegoś przycisku typu TButton, to musisz przekazać konkretną wartość, gdyż zdarzenie OnClick Button'a sprawdza tylko kliknięcie, nie wie nic o klikaniu w strzałki, dlatego trzeba to wywoływać tak:

Kod: Zaznacz cały
void __fastcall TForm2::MyButton2Click(TObject *Sender)
{
Form1->UpDown13Click(Sender, btNext);  // btNext odpowiada klikniÄ™ciu w górnÄ… strzaÅ‚kÄ™
// można też przekazać wartość btPrev odpowiadającą kliknięciu w dolną strzałkę
}


Jeżeli jednak odwołujesz się do zdarzenie OnClick obiektu UpDown z formularza Form1 w zdarzeniu OnClick obiektu UpDown formularza Form2 to robisz to tak

Kod: Zaznacz cały
void __fastcall TForm2::UpDown1Click(TObject *Sender, TUDBtnType Button)
{
Form1->UpDown13Click(Sender, Button);
}



Mam nadzieję, że już rozumiesz jak to działa.
Zalecam również przeczytanie artykułu w serwisie Cyfrowy Baron w dziale: teoria | rzutowanie typoów, przypisanie polimorficzne, gdyż jest to dokładnie tym czego potrzebujesz do swoich celów.
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
    NieznanyNieznana

Re: Obsługa komponentu w innym pliku.

Nowy postprzez markosik20 » niedziela, 17 sierpnia 2008, 19:18

Dzięki wielkie za odpowiedź.
Właśnie nie chciałbym tworzyć nowego Form1 :? . No cóż wszystkie funkcje obsługi komponentów bedą musiały być w jednym pliku (main.cpp) a pozostałe porozmieszczam w innych segregując je na grupy.
A gdy zrobi się tego dłuuuuga lista....to zrobię jak powiedziałeś.
Z pozdr.

PS: Widzę że forum dopiero rusza..to tak jak ja z C++Builderem ;) .
Avatar użytkownika
markosik20
 
    NieznanyNieznana


  • 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 9 gości

cron