Wypełnianie formularza bitmapą
Czasami zamiast szarego tła aplikacji chcielibyśmy je wypełnić bitmapą. Można by umieścić jeden duży obrazek, jednak zajmowałby on bardzo dużo miejsca jako bitmapa. Zamiast tego można na wzór stron WWW umieścić bitmapę, która będzie się powtarzała zarówno w pionie jak i w poziomie. Znam dwa różne sposoby, jak to zrobić. Obydwa obsługują zdarzenie formularza OnPaint, które jest wywoływane w momencie jego odświeżania (czyli np. w momencie wyświetlenia programu, zmiany rozmiaru, czy położenia), następnie na początku każdego zdarzenia tworzona jest dynamicznie nowa bitmapa za pomocą słowa kluczowego new i wczytywany do niej obrazek z pliku za pomocą funkcji LoadFromFile(), gdzie argumentem jest ścieżka dostępu do bitmapy (należy zwrócić uwagę na podwójny backslash oddzielaj?cy katalogi), każdy ze sposobów kończy się również zwolnieniem zajmowanej przez bitmapę pamięci za pomocą słowa kluczowego delete. Różnica polega na sposobie powielania bitmapy na formularzu.
I sposób:
Bitmapa jest przypisywana do właściwości Form1->Canvas->Brush->Bitmap, która określa rodzaj wypełnienia, a następnie za pomocą funkcji FillRect() wypełniany jest cały obszar formularza (określony za pomocą funkcji Windows API GetClientRect):
Unit1.cpp |
void __fastcall TForm1::FormPaint(TObject *Sender) |
II sposób:
Główne zadanie pełną dwie pętle while i funkcja Draw(), przy pomocy której bitmapa jest rysowana na formularzu:
Unit1.cpp |
void __fastcall TForm1::FormPaint(TObject *Sender) |