Rysowanie w pasku tytułu formularza
Normalnie możemy rysować tylko w obszarze formularza, ale jeśli chcielibyśmy narysować coś na jego pasku tytułowy musimy w pliku nagłówkowym formularza utworzyć nowy obiekt typu TCanvas tzw. "płótno":
Unit1.h |
TCanvas *FullCanvas; |
który następnie inicjalizujemy w konstruktorze formularza:
Unit1.cpp |
__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) |
i w funkcji obsługującej zdarzenie OnPaint formularza wywołujemy funkcję Windows API GetWindowDC(), która zwraca uchwyt do tzw. kontekstu urządzenia całego okna (tj. obszaru formularza, paska tytułu, menu i suwaków), a następnie za pomocą funkcji Draw() rysujemy w punkcie o współrzędnych x=100, y=5 zawartość komponentu Image1, który znajduje się na tym formularzu, po skończeniu rysowania za pomocą funkcji Windows API ReleaseDC() zwalniamy kontekst urządzenia podając jako parametry uchwyt do okna i uchwyt do płótna:
Unit1.cpp |
void __fastcall TForm1::FormPaint(TObject *Sender) |
na koniec w funkcji OnClose wywoływanej w momencie zamykania formularza zwalniamy pamięć zajmowaną przez nasze płótno FullCanvas:
Unit1.cpp |
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action) |