на основе MSN
https://msdn.microsoft.com/en-us/library/windows/desktop/ms632669(v=vs.85).aspx
есть много проблем, сообщили об использовании этой функции. Поэтому я рекомендую вам пойти и реализовать анимацию самостоятельно.
Поскольку вы заинтересованы только в скользящей информации делать дальше:
Кулака изменить размер формы, чтобы вписаться в размер монитора.
MyForm.Width := Screen.Width;
MyForm.Height := Screen.Height;
Затем переместите форму на край экрана, с которого вы хотите начать анимацию. При этом держите по крайней мере один пиксель формы внутри видимой области монитора.
//Strating animation from left border
MyForm.Left := 1 - MyForm.Width;
MyForm.Top := 0;
//Starting from right border
MyForm.Left := MyForm.Width - 1;
MyForm.Top := 0;
//Starting from top border
MyForm.Left := 0;
MyForm.Top := 1 - MyForm.Height;
//Starting from bottom border
MyForm.Left := 0;
MyForm.Top := MyForm.Height - 1;
После того, как ваши позиционируют свою форму в стартовом possition сделать его видимым и включить таймер, который будет beused обновлять формы позиции несколько раз (одушевленных), пока он не попадет в нужное положение
MyForm.Show;
AniTimer.Enabled;
И начать анимацию который в основном просто обновляет ваше положение формы с помощью простого таймера
//Left to right animation
procedure MyForm.AniTimerOnTimer(Sender: TObject);
//Constant used to define by how many pixels will the form be moved
//on each timer interval
const MoveStep: Integer = 5;
begin
if MyForm.Left < MoveStep then
begin
MyForm.Left := MyForm.Left + MoveStep;
end;
else
begin
MyForm.Left := 0;
AniTimer.Enabled := False;
end;
end;
Используйте аналогичный подход для других направлений, если необходимо.
Вместо определения MoveStep как константы вы можете сделать это как переменную, а затем динамически вычислить ее значение, чтобы анимация была завершена с помощью N шагов.
MoveStep := Screen.Width div N;
Если вы хотите иметь диагональную анимацию, вам понадобятся две переменные MoveStep. Один для горизонтального и один для вертикальной оси. И вам нужно, чтобы убедиться, что оба рассчитывают для того, чтобы закончить анимацию определенного количества шагов
MoveStepX := Screen.Width div N;
MoveStepY := Screen.Height div N;
Так что теперь вы можете контролировать скорость анимации, изменяя MoveStep и интервал таймера.
Примечание. Я не рекомендую устанавливать интервал таймера на маленький. Зачем?
Как известно, возможно, что компонент TTimer не известен своей акроностью, поэтому он может привести к заметному изменению скорости вашей анимации.
Кроме того, изменение позиции формы несколько раз woulrd требует, чтобы часть ее была переименована в hwen, она попала в визуальный ярость, чтобы она могла генерировать значительную нагрузку на процессор.
Перемещение fomr несколько раз и с большими приращениями может значительно снизить нагрузку на процессор, все еще сохраняя адекватную насыщенность.
Так что сделайте некоторое тестирование, чтобы найти наилучшую комбинацию таймера и шаг шага.
@Wel - Вы попробовали это? –