Ako ti ne odgovara TBitBtn, onda treba "dosta" zaobilaznog posla.
Da se izvođenjem napravi OnKey...() za TImage, nije moguće, jer je TImage izvedena
iz TGraphicControl a ne iz TWinControl. Isto je i kod TSpeedButton. TButton je pod
kontrolom OS-a, i tu nema spasa.
Jedino što mi pada na pamet je da se napravi novi TPanel koji će imati OnKey...()
događaje. Kasnije treba pridružiti i TImage na taj Panel.
Nemam sad baš puno vremena da sve to rešavam, ali otprilike ovo je put:
Ovde uvodim OnKeyDown, OnKeyPress, i OnKeyUp.
--- H ---
Code:
class TNewPanel : public TPanel
{
private:
void __fastcall MyKeyDown(TObject *Sender, WORD &Key, TShiftState Shift);
void __fastcall MyKeyPress(TObject *Sender, char &Key);
void __fastcall MyKeyUp(TObject *Sender, WORD &Key, TShiftState Shift);
protected:
public:
__fastcall TNewPanel(TComponent* Owner);
__published:
__property OnKeyDown;
__property OnKeyPress;
__property OnKeyUp;
};
Dodat pointer na TNewPanel i konstruktor.
Code:
class TForm1 : public TForm
{
__published: // IDE-managed Components
private: // User declarations
public: // User declarations
__fastcall TForm1(TComponent* Owner);
__fastcall ~TForm1();
TNewPanel *pNewPanel;
};
--- CPP ---
Ovo je dovoljno da novi panel postane vidljiv.
Code:
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
pNewPanel = new TNewPanel( this );
pNewPanel->Parent = this;
// ovde možeš da menjaš osobine...
}
__fastcall TForm1::~TForm1()
{
if ( pNewPanel )
delete pNewPanel;
}
... ili u konstruktoru, da bude default.
Code:
__fastcall TNewPanel::TNewPanel(TComponent* Owner)
: TPanel( Owner )
{
Caption = "Proba";
TabStop = true;
OnKeyDown = MyKeyDown;
OnKeyPress = MyKeyPress;
OnKeyUp = MyKeyUp;
};
Ovde metode i ne moraju da budu deo TNewPanel-a. Ja sam ih stavio unutra
čisto reda radi.
Code:
void __fastcall TNewPanel::MyKeyDown(TObject *Sender, WORD &Key,
TShiftState Shift)
{
Caption = "MyKeyDown";
}
void __fastcall TNewPanel::MyKeyPress(TObject *Sender, char &Key)
{
Caption = "MyKeyPress";
}
void __fastcall TNewPanel::MyKeyUp(TObject *Sender, WORD &Key,
TShiftState Shift)
{
Caption = "MyKeyUp";
}
... Dalje, treba implementirati postavljanje Bitmape na TNewPanel, ali sad sam
u velikoj gužvi.