Trzeba myśleć [!!!] [!!!] [!!!] Jakim cudem dynamicznie stworzony Image ma "wiedzieć" że jest poruszany
czy cokolwiek jest z nim robione skoro nie ma przypisanych żadnych zdarzeń? Co z tego że wkleisz kod,
sam komponent nie jest taki domyślny. Poza tym statycznie tworzony komponent też sam nie zareaguje
na zdarzenia dopóki mu takich zdarzeń nie oprogramujesz i nie ustawiasz w zakładce "Events". Zrób tak:
// ... ciach ...
type
// ... ciach ...
procedure Salea_MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure Salea_MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure Salea_MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
// ... ciach ...
procedure TForm1.Salea_MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
MD := True;
P := Point(X, Y);
end;
procedure TForm1.Salea_MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if MD then
begin
Salea.Left := Salea.Left + (X - P.X);
Salea.Top := Salea.Top + (Y - P.Y);
end;
end;
procedure TForm1.Salea_MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
MD := False;
end;
// ... ciach ...
I w procedurze dla na przykład przycisku - wklej taki kod jak poniżej. Ja ładuje dla testów obrazek z dysku,
ale Ty możesz sobie assignować inny obiekt Image czy co Ci się tam podobra :P Ważne są trzy ostatnie
linijki kodu, bez nich Twoj komponent jak już wspominałem nie "domyśli się" co się z nim aktualnie dzieje.
Salea := Timage.Create(GroupBox1);
Salea.Parent := Self.groupbox1;
Salea.Picture.LoadFromFile('test.jpg');
Salea.Top := 211;
Salea.Left := 110;
Salea.AutoSize := True;
Salea.Transparent := True;
Salea.OnMouseDown := Self.Salea_MouseDown;
Salea.OnMouseMove := Self.Salea_MouseMove;
Salea.OnMouseUp := Self.Salea_MouseUp;
Poza tym dobrym nawykiem jest formatowanie kodu i oddzielanie := spacjami po i przed tym operatorem.