"skórka" na buttona w BCB6

0

Mam problem, jak zrobic skorke dla buttona... chodzi o nalozenie na niego Bitmapy. Na forum znalazlem juz cos podobnego (tam chodzilo o nalozenie bitmapy na ComboBox'a) z tym ze problem polega na tym ze Button nie posiada zdarzenia OnDrawItem. czy cos w tym stylu... probowalem cos tam zrobic przez Brush...

Button->Brush->Bitmap
albo moze
Button->Brush->Assign(Bitmapa jakas tam)

wiadomo o co chodzi... tylko ze nie chodzi :] Jak na to cos nawlec tak zebym mial fajnego buttona z wlasnej bitmapy i z tekstem z Button->Caption ... a najlepiej zeby jeszcze na to wszystko razem mozna bylo wrzucic ikonke/bitmapke (taka podobna wersja tylko ze dla BitBtn bedzie jeszcze bardziej mile widziana :] )

0

Coś takiego możesz zrobić rysując bitmapy na przycisku, niestety, on sam nie ma klasy canvas, więc kod wyjdzie troche dłuższy...

// Plik nagłówkowy np. Unit1.h.
//--------------------------------
private:
  TControlCanvas *FCanvas;
//--------------------------------
// Plik źródłowy np. Unit1.cpp
//--------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
   FCanvas = new TControlCanvas;
   FCanvas->Control = Button1;
}
//--------------------------------
// Plik źródłowy np. Unit1.cpp
//--------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  Graphics::TBitmap *bmp = new Graphics::TBitmap;
  bmp->LoadFromFile("nazwa_pliku");

  FCanvas->Brush->Bitmap = bmp;
  FCanvas->FillRect(Rect(0, 0, Button1->Width, Button1->Height));

  delete bmp;
}
//--------------------------------

ikone dodasz podobnie (musi mieć format .bmp), a z tekstem to będzie coś takiego:

FCanvas->TextOutA(10,10,"tekst"); 

szczerze mówiąc nie wiem jak sie pozbyć tego białego tła z tekstu. Wymysliłem, że można to jakos zapisac do bitmapy a potem ustawić biały kolor jako przezroczysty, le to by chyba nie zdało egzaminu...

0

Dzieki... faktycznie banalne... jakos na to nie wpadlem, ale czlowiek uczy sie przez cale zycie :]

0

Wszystko jest pieknie i wspaniale... działa ekstra. ostatnio pojawil sie jednak dodatkowy problem. Otoz w momecie kiedy klikam na inne okienko, to w moim programie wszystko sie odswieze i widze surowe hamskie kwadraciki (standardowe przyciski!). Wstepnie myslalem ze nalezy zmodyfikowac Events dla Form'y cos typu Activate, Deactivate, Paint itd, ale to nic nie daje. Czy ktos moze wie co wpisac i gdzie aby dzialalo to jak nalezy.

0

może wrzuć to do jakiegoś timera z intervalem jakoeś 50ms żeby nie muliło, albo do pętli OnIdle

0

ja to robiłem przez subclassing buttona, dodałem takie eventy

  ret=CallWindowProc()
 ...
Case WM_PAINT // tutaj return 0
 Case& WM_ENABLE
 Case& WM_SETFOCUS
 Case& WM_KILLFOCUS
 Case& WM_MOUSEMOVE
 Case& WM_MOUSELEAVE
 Case& WM_CHAR
  ... DrawIconEx() 
  return ret

i tylko pozostał jeden bug : wciśnięcie TAB w dialogu z kontrolkami ze stylem tabstop

0

ale szczerze mówiąc, po co robic to buttonem? o wiele prościej byłoby zrobić skórke jako bitmape i przycisk zrobic z pomocą TImage...

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