Kopiuje się wszystko, ale funkcja CopyRect w Twoim kodzie, odrysowuje jedną grafikę na drugiej, więc nowa grafika wczytana do obszaru docelowego zasłania - wymazuje grafikę, która została tam wcześniej narysowana. Musisz sobie uzmysłowić, że ani klasa TCanvas, ani TBitmap i w zasadzie cała klasa TGraphics nie obsługują warstw, nie możesz więc umieścić jednej grafiki na drugiej, gdyż to jest tak jakbyś rysował na jednej kartce papieru i zawsze jak narysujesz na niej nowy obrazek to stary zniknie i nie możesz do niego powrócić nawet gdybyś użył gumki, gdyż gumka wymaże wszystko do białego papieru.W tym konkretnym przypadku zamiast funkcji
CopyRect lepiej jest użyć funkcji
Draw.
Prosty przykład z umieszczaniem obok siebie trzech bitmap za pomocą funkcji Draw bez wektorów:- Kod: Zaznacz cały
Graphics::TBitmap *bitmapa = new Graphics::TBitmap;
for(int i = 0; i < 3; i++)
{
String fileName = "c:\\image" + (String)(i + 1) + ".bmp";
bitmapa->LoadFromFile(fileName);
Image1->Canvas->Draw(i * bitmapa->Width, 0, bitmapa);
}
delete bitmapa;
Ten sam efekt można uzyskać za pomocą funkcji
CopyRect, trzeba jednak prawidłowo ustawić współrzędne płótna docelowego:
- Kod: Zaznacz cały
Graphics::TBitmap *bitmapa = new Graphics::TBitmap;
for(int i = 0; i < 3; i++)
{
String fileName = "c:\\image" + (String)(i + 1) + ".bmp";
bitmapa->LoadFromFile(fileName);
Image1->Canvas->CopyRect(
Rect(i * bitmapa->Width, 0, (i * bitmapa->Width) + bitmapa->Width, bitmapa->Height),
bitmapa->Canvas,
Rect(0, 0, bitmapa->Width, bitmapa->Height)
);
}
delete bitmapa;