Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/21: Рейтинг темы: голосов - 21, средняя оценка - 4.86
0 / 0 / 0
Регистрация: 22.02.2015
Сообщений: 97
1

Перемещение Image в Panel

21.04.2015, 16:16. Показов 4044. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Я расположил картинку на панели и нужно сделать так, чтобы картинка двигалась только в пределах панели. Чтобы даже на 1px не заходила за пределы.

Чтобы не было такой ситуации, как на видео.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.04.2015, 16:16
Ответы с готовыми решениями:

Перетащить Image на Panel
Подскажите пожалуйста, замучилась уже. С перетаскиванием изображения по форме все понятно (делаю...

Динамическое создание Image в Panel, которые находятся в ScrollBox
Люди помогите пожалуйста. Я создаю динамически tpanel с название 'result1' внутри scrollbox, а...

Удаление динамически созданных компонентов (panel, image, label)
Всем привет. У меня есть panel который создаётся внутри ScrollBox вместе с image и label внутри, ну...

Перемещение Image на ScrollBox
Подскажите, пожалуйста, как программно поменять местами несколько Image на ScrollBox (Image...

5
Модератор
3492 / 2614 / 742
Регистрация: 19.09.2012
Сообщений: 7,977
21.04.2015, 16:28 2
Какой код используется для перемещения Image ?
0
0 / 0 / 0
Регистрация: 22.02.2015
Сообщений: 97
21.04.2015, 16:34  [ТС] 3
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
procedure TForm1.Image4MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  DoubleBuffered := True;
  //запоминаем кординаты клика
  tx := X;
  ty := Y;
 
  //картинку поверх
  (Sender as TControl).BringToFront;
end;
 
//движение image
procedure TForm1.Image4MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
 
begin
  if Shift = [ssLeft] then
    with (Sender as TControl) do
    begin
      Left := Left + X - tx;
      Top := Top + Y - ty;
end;
end;
0
пофигист широкого профиля
4755 / 3190 / 861
Регистрация: 15.07.2013
Сообщений: 18,462
21.04.2015, 16:49 4
Лучший ответ Сообщение было отмечено egorzhartun как решение

Решение

Delphi
1
2
3
Left := Left + X - tx;
if Left < 0 then Left:=0
else if Left > (Parent.Width - Width) then Left:=Parent.Width - Width;
Для высоты аналогично.
1
Модератор
3492 / 2614 / 742
Регистрация: 19.09.2012
Сообщений: 7,977
21.04.2015, 18:19 5
Для ограничения области перемещения картинки удобно использовать ф-цию ClipCursor():
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
var
  Form1: TForm1;
  isMove: Boolean;
  Xo, Yo: Integer;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var
  R: TRect;
  P: TPoint;
begin
  isMove := True;
  SetCursor(Screen.Cursors[crDrag]);
  P := Panel1.ClientToScreen(Panel1.ClientRect.TopLeft);
  R := Bounds(P.X + X, P.Y + Y, Panel1.Width - Image1.Width, Panel1.Height - Image1.Height);
  ClipCursor(@R);
  Xo := X;
  Yo := Y;
end;
 
procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  if not isMove then Exit;
 
  Image1.Left := Image1.Left + X - Xo;
  Image1.Top  := Image1.Top  + Y - Yo;
end;
 
procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  isMove := False;
  SetCursor(Screen.Cursors[crDefault]);
  ClipCursor(nil);
end;
 
procedure TForm1.FormCreate(Sender: TObject);
begin
  Panel1.DoubleBuffered := True;
end;
1
843 / 738 / 342
Регистрация: 22.09.2012
Сообщений: 5,034
21.04.2015, 19:15 6
Цитата Сообщение от egorzhartun Посмотреть сообщение
Чтобы даже на 1px не заходила за пределы.
Ну дак сделай привязку какую-то.
Это примерно так, а на панели, тебе лучще панель создать для твоих объектов как родитель и отсчитываться от него?
Миниатюры
Перемещение Image в Panel  
0
21.04.2015, 19:15
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.04.2015, 19:15
Помогаю со студенческими работами здесь

перемещение memo по image
Здравствуйте, вот допустим, я создал memo, как сделать чтобы за верхние углы я мог перемещать...

Перемещение Image за курсором
Всех с праздником)) Все кому я показываю свою курсовую игру, говорят что неплохо, но надо...

Перемещение с image мышкой
Как например если навести на image мышью,и жать левую кнопку мыши,и чтоб он перемещался за...

Перемещение Image по форме с ограничениями
Доброго времени суток! Подскажите пожалуйста, как лучше реализовать границы для перемещения Image...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru