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

7 komentarzy

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!