Initial commit
This commit is contained in:
@@ -0,0 +1,205 @@
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
#include <vcl.h>
|
||||
|
||||
#pragma hdrstop
|
||||
|
||||
#include "PNGButton.h"
|
||||
//#pragma package(smart_init)
|
||||
//---------------------------------------------------------------------------
|
||||
// ValidCtrCheck is used to assure that the components created do not have
|
||||
// any pure virtual functions.
|
||||
//
|
||||
|
||||
//static inline void ValidCtrCheck(TPNGButton *)
|
||||
//{
|
||||
// new TPNGButton(NULL);
|
||||
//}
|
||||
////---------------------------------------------------------------------------
|
||||
|
||||
__fastcall CBTPNButton::CBTPNButton(TComponent* Owner)
|
||||
: TGraphicControl(Owner)
|
||||
{
|
||||
Height = 25; //a default Height
|
||||
Width = 75; //a default Width
|
||||
FStateCount = 4; //default state count
|
||||
FPngImg = new Vcl::Imaging::Pngimage::TPngImage(); //we create our png
|
||||
FDown = false;
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
__fastcall CBTPNButton::~CBTPNButton(void)
|
||||
{
|
||||
if(FPngImg)
|
||||
delete FPngImg; //destroy our png
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
void __fastcall CBTPNButton::SetStateCount( int count )
|
||||
{
|
||||
if( count>4 ) count = 4;
|
||||
if( count<2 ) count = 2;
|
||||
|
||||
FStateCount = count;
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
void __fastcall CBTPNButton::SetPngImg(Vcl::Imaging::Pngimage::TPngImage *value)
|
||||
{
|
||||
FPngImg->Assign(value);
|
||||
|
||||
//Now setting the component width and height by the png image used
|
||||
Height = FPngImg->Height;
|
||||
Width = FPngImg->Width / FStateCount;
|
||||
|
||||
Constraints->MaxHeight = Height;
|
||||
Constraints->MinHeight = Height;
|
||||
Constraints->MaxWidth = Width;
|
||||
Constraints->MinWidth = Width;
|
||||
|
||||
EtatBtn = 0; //reset the component state to normal
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
void __fastcall CBTPNButton::SetDown(bool value)
|
||||
{
|
||||
if( FStateCount<3 )
|
||||
value = false;
|
||||
|
||||
FDown = value;
|
||||
if( FDown==False )
|
||||
EtatBtn = 0; //is the mouse down is false then we reset the component state to normal
|
||||
|
||||
Paint();
|
||||
// Refresh(); //we repaint the componet)
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
void __fastcall CBTPNButton::SetColor( TColor value )
|
||||
{
|
||||
FBkColor = value;
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
void __fastcall CBTPNButton::Paint(void)
|
||||
{
|
||||
TRect rect = GetClientRect();
|
||||
Canvas->Brush->Color = FBkColor;
|
||||
Canvas->FillRect( rect );
|
||||
|
||||
if( FPngImg ){
|
||||
switch( EtatBtn ){
|
||||
case 0:
|
||||
FPngImg->Draw( Canvas, Rect(0, 0, FStateCount*Width, Height) ); // Normal
|
||||
break;
|
||||
case 1:
|
||||
FPngImg->Draw( Canvas, Rect(-Width, 0, (FStateCount-1)*Width, Height) ); // Mouse Entered
|
||||
break;
|
||||
case 2:
|
||||
FPngImg->Draw( Canvas, Rect(-(Width*2), 0, (FStateCount-2)*Width, Height) ); // Pressed
|
||||
break;
|
||||
case 3:
|
||||
FPngImg->Draw( Canvas, Rect(-(Width*3), 0, (FStateCount-3)*Width, Height) ); // Disabled
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
void __fastcall CBTPNButton::SetEnabled(bool Value)
|
||||
{
|
||||
if(FStateCount<4) //can't be disable
|
||||
Value = true;
|
||||
|
||||
TGraphicControl::SetEnabled(Value);
|
||||
|
||||
if( Enabled )
|
||||
EtatBtn = 0;
|
||||
else
|
||||
EtatBtn = 3;
|
||||
|
||||
Paint();
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
void __fastcall CBTPNButton::MouseDown(System::Uitypes::TMouseButton Button,
|
||||
System::Classes::TShiftState Shift, int X, int Y)
|
||||
{
|
||||
TGraphicControl::MouseDown( Button, Shift, X, Y );
|
||||
|
||||
if( Button==mbLeft && Enabled && FStateCount>2){
|
||||
EtatBtn = 2; // Pressed
|
||||
Paint();
|
||||
// Refresh();
|
||||
}
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
void __fastcall CBTPNButton::MouseUp(System::Uitypes::TMouseButton Button,
|
||||
System::Classes::TShiftState Shift, int X, int Y)
|
||||
{
|
||||
TGraphicControl::MouseUp( Button, Shift, X, Y );
|
||||
|
||||
if( Button==mbLeft && Enabled ){
|
||||
if( X>=0 && X<Width && Y>=0 && Y<Height )
|
||||
EtatBtn = 1; //Mouse Entered
|
||||
else
|
||||
EtatBtn = 0; //normal;
|
||||
|
||||
Paint();
|
||||
// Refresh(); //repaint component
|
||||
}
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
void __fastcall CBTPNButton::CMMouseEnter(Winapi::Messages::TMessage &Msg)
|
||||
{
|
||||
if( Enabled ){//&& !ComponentState.Contains(csDesigning) ){
|
||||
EtatBtn = 1; // Mouse Entered
|
||||
|
||||
Paint();
|
||||
// Refresh(); //repainting the component
|
||||
}
|
||||
|
||||
if( FOnMouseEnter )
|
||||
FOnMouseEnter(this); //if user set a mouse enter procedure then we execute it
|
||||
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
void __fastcall CBTPNButton::CMMouseLeave(Winapi::Messages::TMessage &Msg)
|
||||
{
|
||||
if( Enabled ){//&& !ComponentState.Contains(csDesigning) ) {
|
||||
EtatBtn = 0; //Normal
|
||||
|
||||
Paint();
|
||||
// Refresh(); //repainting the component
|
||||
}
|
||||
|
||||
if( FOnMouseLeave )
|
||||
FOnMouseLeave(this); //if user set a mouse leave procedure then we execute it
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
void __fastcall CBTPNButton::Click(void)
|
||||
{
|
||||
TCustomForm * parentForm = GetParentForm( this );
|
||||
if( parentForm ){
|
||||
parentForm->ModalResult = FModalResult;
|
||||
parentForm->Close();
|
||||
}
|
||||
|
||||
TGraphicControl::Click();
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
//namespace Pngbutton
|
||||
//{
|
||||
// void __fastcall PACKAGE Register()
|
||||
// {
|
||||
// TComponentClass classes[1] = {__classid(TPNGButton)};
|
||||
// RegisterComponents(L"Samples", classes, 0);
|
||||
// }
|
||||
//}
|
||||
////---------------------------------------------------------------------------
|
||||
Reference in New Issue
Block a user