miakl, ну перед изменением курсора сохраняй в глобальную переменную типа TCursor текущий курсор, а уже затем меняй его на новый:
Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
idCur := Screen.Cursor;
Screen.Cursor := crHourGlass;
end;
Затем по второй кнопке сохраняй координаты кнопок в переменные типа Integer например, кстати тут есть некие зависимости от того, знаешь ли ты кол-во кнопок, которые ты сдвигаешь, постоянно ли это кол-во:
если кнопки статичны и их не много (кол-во не изменяется и оно изначально известно, так же, как и имена), то делай так:
Код:
procedure TForm1.Button3Click(Sender: TObject);
begin
iX1 := Button1.Left;
iX2 := Button2.Left;
iX3 := Button3.Left;
iY1 := Button1.Top;
iY2 := Button2.Top;
iY3 := Button3.Top;
end;
Если кнопок много, то разумнее их координаты хранить в массиве или массивах. Я бы сделал свой тип (конструкцию, класс, коллекцию, называйте как хотите

), который бы содержал в себе 2 переменные - X и Y, но опять же, если вы еще меняете ширину и высоту, то их тоже можно добавить; а потом бы работал с массивом элеентов этого своего типа.
В общем уточните задачу, и мы поможем
PS:
совсем забыл написать о том, как все вернуть по клику 3й кнопки, но думаю, сами справитесь, а если нет, то попробуйте сначала получше, а только потом спрашивайте, опыт на ошибках строится порой

Все логично и просто, поэкспериментируйте.
Кстати чтобы объявить глобальную переменную пропишите ее до слова
implementation.