VCL biblioteka sama po sebi nije pogodna za brzo i glatko skrolovanje delova bitmape. Za sve sto ima veze sa elementima "video igara" koriste se posebne tehnike i biblioteke, koje su projektovane i optimizovane za takve stvari. Postoji forum na [ES]-u posvecen video igrama.
Skrolovanje u VCL maniru bi se svodilo da pomeranje Left i Top osobina objekta, uz konstantno osvezavanje ekrana, sto ces i sam videti da je sasvim bezveze.
Po nekom mom iskustvu, najvise sto mozes da uradis po pitanju brzine i glatkoce skrola sa TImage je da komponentu spakujes u TScrolBox objekat (TImage da bude unutar TScrollBox-a).
Kasnije mozes da napravis neki ovakav test kod:
Code:
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
// ovo sluzi da sliku koja je unutar boxa, poveca na originalnu velicinu,
// preptostavka je da je slika daleko veca od scroll box-a
Image1->Width = Image1->Picture->Width;
Image1->Height = Image1->Picture->Height;
// Ovo sluzi da ukloni vertikalni i horizontalni scroll bar, mozes to uraditi i kroz object inspector.
// Takodje, mozes sasvim ukloniti i border, snadji se sam da ne preturam sad po Helpu
ScrollBox1->VertScrollBar->Visible = false;
ScrollBox1->HorzScrollBar->Visible = false;
}
void __fastcall TForm1::Button1Click(TObject *Sender)
{
// ovo ce kao skrolovati ucitanu sliku po dijagonali...
for ( int i=0; i<=Image1->Picture->Width; i++ )
{
// mala pauza, da bi video max brzinu, ukloni sasvim ovu liniju
Sleep( 1 );
// OVO JE KLJUCNA METODA (ScrollBy), PROUCI U HELPU STA ZNACI KOJI PARAMETAR
ScrollBox1->ScrollBy( -1, -1 );
// osvezavanje
ScrollBox1->Update();
}
}
Ako je slika koju zelis da postavis unutar ScrollBox-a prevelika, tada je potreban drugaciji pristup. Sliku je potrebno izdeliti na segmente (kao kvadrate matrice) i dinamicki ucitati. Kod za takvo nesto imas ovde:
http://www.antivari.com/moving.zip