Jak poruszać jakiś obrazek po formie - Bez migania!
WikoX
W tym celu należy skorzystać z własności opisującej działanie pikseli wielu wizualnych komponentów - "Canvas".
Należy przykładowo "postawić" na formularzu komponent IMAGE, następnie właściwość "Align" ustawić na alClient (nie jest to jednak konieczne).
Deklarujemy również zmienną typu TBitmap, która będzie przechowywała nasz obrazek.
Przykład:
w procedurę MouseMove dla IMAGE wpisujemy:
procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
var
B: TBitmap; //deklaracja zmiennej przechowującej obrazek.
begin
Screen.Cursor := CrNone; //Ukrywanie kursora myszki (nie konieczne)
B := TBitmap.Create; //Tworzenie obrazka
B.LoadFromFile('NAZWA PLIKU.bmp'); //Wgrywanie Obrazka z pliku
B.Transparent := True; //Aktywacja przeźroczystego koloru dla obrazka (Nie konieczne)
B.TransparentColor := ClFuchsia; //Rodzaj przeźroczystego koloru (Nie konieczne)
Image1.Canvas.Rectangle(0,0,Image1.Width,Image1.Height); //Tworzenie ramki, dzięki której nasz wczytany obrazek nie będzie pozostawiał śladow...
Image1.Canvas.Draw(X,Y,B); //Wstawianie obrazka w pozycje (X,Y) dla IMAGE
B.Free; //Uwolnienie pamięci dla danego obrazka
end;
Mam nadzieję, że jest to w miarę zrozumiałe...
Jak coś to piszcie pod GG: 4910
Jeśli komuś nie podobają się skutki działania DoubleBufferd w XP, polecam TFlickerFreePaintBox.
Wystarczy w OnCreate wpisać:
Doublebuffered := True;
Właśnie tak działa DoubleBuffered...
DoubleBuffered - Nie zawsze działa, a w szczególności kiedy ktoś pracuje na obazkach o dużych rozdzielczościach na komputerach słabej klasy. Ta procedura zaś pomija błędy - np: z gwałtownym zatrzymywaniem się spacerujących po formie IMAGEów...
po co za kazdym razem przy kliknieciu ladowac ten sam obrazek? tracimy czas na zaladowanie tej bitmapy do pamieci za kazdym kliknieciem...
(chyba :) )
Latwiej DoubleBuffered na true :-P
formatowanie kodu!! znaczniki < delphi> i wcięcia!