Решил сделать небольшой проектик.
В общем хочу сделать подобие движение по игровой карте (как в стратегиях и других играх). Работаю с OnMouseMove. Может я сделал немного глупо, но я растянул карту (Image) на всю её ширину и длину. Другого мне в голову пока, что не пришло.
Вот код движения карты вправо
procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if not(PtInRect(Rect(Form1.Left,
Form1.Top,
Form1.Left + Form1.Width-20,
Form1.Top + Form1.Height), ClientToScreen(Point(x, y))))
then Timer1.Enabled := true
else Timer1.Enabled := false;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
If Image1.Left >= 640 - PW then
Image1.Left := Image1.Left - 7;
end;
Вот почему ты вызываешь Form1.Top, и так далее, но ClientToScreen(Point(x, y)) ? Чей ClientToScreen вызывается, не расскажешь?
ClientToScreen вызывается на Image.
А попробуй-ка вот это:
procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
Timer1.Enabled :=
PtInRect(Rect(form1.Width - 20, 0, form1.Width, form1.Height), Point(image1.Left + X, Y))
end;
volvo, так всё работает ;)
У меня ещё небольшой вопрос есть, когда происходит движение иногда проскальзывают белые полосы. Можно что-нибудь с этим сделать?
Можно попробовать установить у формы DoubleBuffered := True, это немного снизит "мерцания".
Большое спасибо за помощь, мерциния теперь вовсе исчезли