//--------------------------------------------------------------------------- #include #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=0 && YModalResult = FModalResult; parentForm->Close(); } TGraphicControl::Click(); } //--------------------------------------------------------------------------- //namespace Pngbutton //{ // void __fastcall PACKAGE Register() // { // TComponentClass classes[1] = {__classid(TPNGButton)}; // RegisterComponents(L"Samples", classes, 0); // } //} ////---------------------------------------------------------------------------