[BCB] Problem z klasą

0

Mam taki problem :( w osobnym pliku stworzyłem sobie klase i w jednej z metod tej klasy próbuje sie odwołać do pola tekstowego i wpisać w nim jakiś tekst to sie nie da :( program kompiluje sie normalnie ale przy wywołaniu tej metody zgłasza błąd :( nie wiem co robie źle dla pewności zamieszcze kod klasy:

class TGrafika: public TImage
{
public:
int pozX, pozY;
bool go;
int licz;
__fastcall TGrafika();
void __fastcall MouseDown(TObject *Sender,TMouseButton Button, TShiftState Shift, int X, int Y);
void __fastcall MouseMove(TObject *Sender,TShiftState Shift, int X, int Y);
void __fastcall MouseUp(TObject *Sender,TMouseButton Button, TShiftState Shift, int X, int Y);
};

__fastcall TGrafika::TGrafika():TImage(Owner)
{
this->OnMouseDown=MouseDown;
this->OnMouseMove=MouseMove;
this->OnMouseUp=MouseUp;
go = false;
this->Cursor=crHandPoint;
this->AutoSize=true;
this->Stretch=true;

}

void __fastcall TGrafika::MouseDown(TObject *Sender,TMouseButton Button, TShiftState Shift, int X, int Y)
{
pozX = X;
pozY = Y;
go = true;

Form1->Nazwa->Text="Cos tam"; // tu właśnie prubuje wpisać jakiś text
}
void __fastcall TGrafika::MouseMove(TObject *Sender,TShiftState Shift, int X, int Y)
{
if(go)
{
this->Left =(this->Left - pozX)+X;
this->Top =(this->Top - pozY)+Y;
}
}
void __fastcall TGrafika::MouseUp(TObject *Sender,TMouseButton Button, TShiftState Shift, int X, int Y)
{
go = false;
}
0

Twoja klasa chyba po prostu nie do końca "wie" co to jest Form1. Zrób jedną z dwóch rzeczy:

Po pierwsze:
Definicje funkcji składowych wyrzuć do modułu CPP, dołącz do niego (include) plik nagłówkowy klasy TForm1, a sam moduł dołącz do projektu. Jeszcze musisz includnąć vcl.h do nagłówka gdzie definiujesz klasę TGrafika. To w sumie tak jakbyś dodawał do projektu nową formatkę (z jej modułem CPP i nagłówkiem).

Po drugie:
Inna zupełnie możliwość to utworzenie w klasie TGrafika odpowiedniej właściwości (zachowująć wszystko w jednym pliku i nie dołączając nic do projektu). Np tak:

  1. w definicji klasy:
    private:
    TMemo* FMemo;
    ...
    public:
    ...
    __property TMemo* Memo = {read = FMemo, write = FMemo};

  2. w OnMouseDown zamiast Form1->...:
    if (FMemo) FMemo->Text = "Coś Tam";

Oczywiście trzeba gdzieś tę właściwość ustawić.

Jeśli ta klasa ma być wykorzystana w jednym tylko konkretnym projekcie, użyj pierwszej metody. Jeśli ma być to jednak bardziej uniwersalne - zdecydowanie drugiej.

1 użytkowników online, w tym zalogowanych: 0, gości: 1