
Wcześniej nie zwróciłem na to uwagi, ale istnieje bardzo prosty sposób rysowania na przycisku
AdvGlowButton, trzeba tylko umieścić kod w jego zdarzeniu
OnDrawButton:
void __fastcall TForm1::AdvGlowButton1DrawButton(TObject *Sender, TCanvas *Canvas,
TRect &Rect, TGlowButtonState State)
{
Gdiplus::Graphics grphxPNG(Canvas->Handle);
grphxPNG. DrawImage(imagePNG, 0, 0, imagePNG->GetWidth(), imagePNG->GetHeight());
}
Zmiana zawartości imagePNG i grafiki, która będzie wyświetlana na przycisku jest proste, gdyż wystarczy zmienić tylko zawartość imagePNG, a obraz na przycisku zmieni się automatycznie. Przy takim rozwiązaniu imagePNG nie może być obiektem lokalnym, w moim przykładzie jest obiektem prywatnym.
Kompletny kod z przełączaniem grafiki.
Plik nagłówkowy np. Unit1.h
private: // User declarations
Gdiplus::GdiplusStartupInput gdiplusStartupInput;
ULONG_PTR gdiplusToken;
Gdiplus::Image *imagePNG;
Plik źródłowy np. Unit1.cpp
#define STRICT
//.............
#pragma link "gdiplus.lib"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
GdiplusStartup( &gdiplusToken, &gdiplusStartupInput, NULL );
String pathPNG = ExtractFilePath( ParamStr(0) ) + "plik.png";
imagePNG = new Gdiplus::Image( pathPNG.c_str() );
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormDestroy(TObject *Sender)
{
GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::AdvGlowButton1DrawButton(TObject *Sender, TCanvas *Canvas,
TRect &Rect, TGlowButtonState State)
{
Gdiplus::Graphics grphxPNG( Canvas->Handle );
grphxPNG. DrawImage( imagePNG, 0, 0, imagePNG->GetWidth(), imagePNG->GetHeight() );
}
//---------------------------------------------------------------------------
void __fastcall TForm1::AdvGlowButton1Click(TObject *Sender)
{
/* Po naciśnieciu przycisku zmienia się grafika */
if( imagePNG != NULL ) delete imagePNG;
imagePNG = new Gdiplus::Image( L"c:\\image2.png" );
}
Ten sposób jednak różni się od wczytywania grafiki do właściwości Picture przycisku, gdyż zasłania cały przycisk wraz z tekstem na przycisku. To jest po prosty sposób na rysowanie na przycisku, a nie na wstawianie grafiki do przycisku.