Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Перетаскивание панелей. / 25 сообщений из 26, страница 1 из 2
18.03.2020, 20:39
    #39938908
Dasha123123
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перетаскивание панелей.
Здравствуйте, помогите пожалуйста, пишу курсовую.

Суть в том, что я нажатием на кнопку динамически создаю панель(имитация панели управления), загвоздка в том, что я не могу понять как с помощью мышки реализовать её перетаскивание, при этом запоминая координаты, при отпускании левой кнопки мыши, а при нажатии на правую происходит её удаление.
...
Рейтинг: 0 / 0
19.03.2020, 11:33
    #39939016
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перетаскивание панелей.
это всё есть в FAQ-ах
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
19.03.2020, 11:40
    #39939020
Гаджимурадов Рустам
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перетаскивание панелей.
Dasha123123> как с помощью мышки реализовать её перетаскивание

Как пробовала и не получилось?

В архивах форума полно примеров, да
и компоненты готовые есть для этого.

https://sql.ru/forum/972534
https://sql.ru/forum/1304139
https://sql.ru/forum/1098054
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
19.03.2020, 11:41
    #39939022
DimaBr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перетаскивание панелей.
У вас набор кнопок на одной панели.
Вы хотите перетаскивать их на другую панель и там выстраивать в нужном порядке ?
...
Рейтинг: 0 / 0
19.03.2020, 16:32
    #39939195
Dasha123123
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перетаскивание панелей.
DimaBr,
Нажав на одну из кнопок, у меня на розовой панели создаются новые панели, которые я хочу выстаивать определенным образом. Встроенные функции для перетаскивания не работают, так как этих панелей ещё не существует. Я пробовала и OnMouseDown и DragDrop.
...
Рейтинг: 0 / 0
19.03.2020, 17:17
    #39939247
DimaBr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перетаскивание панелей.
Dasha123123
Встроенные функции для перетаскивания не работают, так как этих панелей ещё не существует.

Нет никаких встроенных функций для перетаскивания
...
Рейтинг: 0 / 0
19.03.2020, 18:27
    #39939278
Dasha123123
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перетаскивание панелей.
DimaBr, хорошо, встроенные процедуры!
...
Рейтинг: 0 / 0
19.03.2020, 18:34
    #39939281
rgreat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перетаскивание панелей.
Процедур тоже нет.

У панели можно менять свойства Left и Top. Там указаны координаты в пикселях левого верхнего угла панели.
При их изменении панель будет смещатся.
А вот как вы будете менять свойства Left и Top это уже ваше дело.
...
Рейтинг: 0 / 0
19.03.2020, 18:43
    #39939284
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перетаскивание панелей.
19.03.2020 18:34, rgreat пишет:
>
> У панели можно менять свойства Left и Top. Там указаны координаты в пикселях левого верхнего угла панели.
> При их изменении панель будет смещатся.
> А вот как вы будете менять свойства Left и Top это уже ваше дело.
>

предлагаю начать с кнопок.
(отрабатывать OnKeyDown)
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
19.03.2020, 18:49
    #39939287
Гаджимурадов Рустам
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перетаскивание панелей.
Предлагаю прочитать по указанным ссылкам.
Там есть и объяснения, и готовые код и даже
готовые компоненты.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
19.03.2020, 19:19
    #39939300
Dasha123123
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перетаскивание панелей.
Панели, которые обведены красным я создаю динамически нажатием на любую кнопку.
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
procedure newPanel();
var npanel:TPanel;
begin
inc(countPanel);
npanel:= TPanel.Create(Form1);
  npanel.Parent :=Form1.Panel2;
  npanel.Height :=40;
  npanel.Width:=40;
  npanel.left:= 125 ;
  npanel.Top:= 250;
end;

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
newPanel();
   Form1.ActiveControl:=panels[countPanel];
 //Panel16.Caption:=inttostr(countPanel);
end;


и вот эти созданные панели мне нудно перетаскивать мышкой, чтобы выстроить цепочку.

Модератор: Пользуйтесь тегом (кнопкой) SRC для оформления кода, пожалуйста.
...
Рейтинг: 0 / 0
19.03.2020, 19:21
    #39939302
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перетаскивание панелей.
19.03.2020 19:19, Dasha123123 пишет:
> и вот эти созданные панели мне нудно перетаскивать мышкой, чтобы выстроить цепочку.

начни перетаскивать кнопками.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
19.03.2020, 19:29
    #39939305
Dasha123123
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перетаскивание панелей.
Мимопроходящий, я понимаю, что так проще. Но эта программа предназначена для детей начальной школы, а может и младше. Я не думаю, что для них мучаться с кнопками это норм,наоборот хотели уйти от этого.
...
Рейтинг: 0 / 0
19.03.2020, 19:51
    #39939309
rgreat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перетаскивание панелей.
Код: pascal
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.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
type
  TMyPanel = class(TPanel)
  public
    X0,Y0  : integer;
    InMove : boolean;
  end;

procedure TForm15.NewPanel;
var
  npanel: TMyPanel;
begin
  npanel:=TMyPanel.Create(Form15);
  npanel.Parent:=Form15.Panel1;
  npanel.Height:=40;
  npanel.Width:=40;
  npanel.left:=125;
  npanel.Top:=250;
  npanel.OnMouseDown:=MyMouseDown;
  npanel.OnMouseMove:=MyMouseMove;
  npanel.OnMouseUp:=MyMouseUp;
end;

procedure TForm15.MyMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var
  Panel: TMyPanel;
begin
  Panel:=TMyPanel(Sender);
  Panel.InMove:=True;
  Panel.X0:=X;
  Panel.Y0:=Y;
end;

procedure TForm15.MyMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
var
  Panel : TMyPanel;
begin
  Panel:=TMyPanel(Sender);
  if Panel.InMove then begin
    Panel.Top:=Panel.Top+Y-Panel.Y0;
    Panel.Left:=Panel.Left+X-Panel.X0;
    Panel1.repaint;
  end;
end;

procedure TForm15.MyMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var
  Panel : TMyPanel;
begin
  Panel:=TMyPanel(Sender);
  Panel.InMove:=False;
end;

procedure TForm15.Button1Click(Sender: TObject);
begin
  newPanel;
end;
...
Рейтинг: 0 / 0
20.03.2020, 11:03
    #39939435
Zmeelov2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перетаскивание панелей.
Dasha123123
Мимопроходящий, я понимаю, что так проще. Но эта программа предназначена для детей начальной школы, а может и младше. Я не думаю, что для них мучаться с кнопками это норм,наоборот хотели уйти от этого.
Никто не предлагает делать управление только на кнопках. Управление кнопками нужно на период отладки. Смотрите : любое перетаскивание есть положительное/отрицательное изменение вертикального/горизонтального положения. Отладьте все граничные случаи изменения позиций с кнопок, потом переходите к ловле мыши. Потом, ближе к релизу, сможете скрыть или удалить кнопки
...
Рейтинг: 0 / 0
20.03.2020, 13:45
    #39939521
Dasha123123
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перетаскивание панелей.
rgreat, Спасибо большое!!!! А как сделать её удаление?
...
Рейтинг: 0 / 0
20.03.2020, 13:57
    #39939529
rgreat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перетаскивание панелей.
Dasha123123,

Саму панель удалять через Self.Free;

А вот как вы собираетесь делать сам вызов удаления - это уже ваше дело.
...
Рейтинг: 0 / 0
20.03.2020, 14:01
    #39939532
Dasha123123
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перетаскивание панелей.
rgreat, Я уже сделала, спасибо вам большое*
...
Рейтинг: 0 / 0
20.03.2020, 17:23
    #39939641
Dasha123123
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перетаскивание панелей.
rgreat, только остался один вопрос, как к ним обращаться, чтобы отсортировать по у?
...
Рейтинг: 0 / 0
20.03.2020, 17:29
    #39939646
rgreat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перетаскивание панелей.
Dasha123123
rgreat, только остался один вопрос, как к ним обращаться, чтобы отсортировать по у?

Сделайте список панелей (массив или лист) и добавляйте в него панель при ее создании, удаляя из списка при удалении панели, соотвественно.

Кроме того у панели на которой вы создаете свои панельки есть свойство Components, где перечисленны все компоненты лежащие на ней.

http://docs.embarcadero.com/products/rad_studio/delphiAndcpp2009/HelpUpdate2/EN/html/delphivclwin32/Classes_TComponent_Components.html
http://docs.embarcadero.com/products/rad_studio/delphiAndcpp2009/HelpUpdate2/EN/html/delphivclwin32/Classes_TComponent_ComponentCount.html
...
Рейтинг: 0 / 0
21.03.2020, 15:40
    #39939876
Dasha123123
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перетаскивание панелей.
rgreat, Я вот при создании панелей, добавила создание на ней Image и добавляю картинку, но при этом перестает работать перемещение. Что нужно исправить в процедурах перетаскивания?

Код: pascal
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.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
procedure TForm1.NewPanel(n:Integer);
var
  npanel: TMyPanel;
  nimage: TImage;
begin
  inc(countPanel);
  npanel:=TMyPanel.Create(Form1);
  npanel.Parent:=Form1.Panel2;
  npanel.Height:=60;
  npanel.Width:=60;
  npanel.left:=125;
  npanel.Top:=250;
  npanel.Caption:=inttostr(n);
  npanel.OnMouseDown:=MyMouseDown;
  npanel.OnMouseMove:=MyMouseMove;
  npanel.OnMouseUp:=MyMouseUp;
          panels[countPanel]:=npanel;

 nImage := TImage.Create(npanel);
nImage.Align := altop;
 nImage.Left := 125;
nImage.Top := 250;
nImage.Width := 50;
nImage.Height := 50;
 nImage.Picture.LoadFromFile(IntToStr(n)+'.bmp');
end;

procedure TForm1.MyMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X: Integer; Y: Integer);
var
  Panel: TMyPanel;
begin
  Panel:=TMyPanel(Sender);
  Panel.InMove:=True;
  Panel.X0:=X;
  Panel.Y0:=Y;
if button = mbRight then  f:=true;
if button = mbleft then  f:=false;
end;

procedure TForm1.MyMouseMove(Sender: TObject; Shift: TShiftState; X: Integer; Y: Integer);
var
  Panel : TMyPanel;   i,k:integer;  nImage:TImage;
begin
  nImage:=TImage(Sender);
  if (Panel.InMove) and f then  begin
  Panel.Destroy ;
  for i := 1 to countPanel do
  if panels[i].InMove then k:=i;
  for i:=k to countPanel-1 do
      panels[i] := panels[i+1];
  dec(countPanel)
   end else
 if (Panel.InMove) and not(f) then
  begin
    Panel.Top:=Panel.Top+Y-Panel.Y0;

    Panel.Left:=Panel.Left+X-Panel.X0;
    Panel1.repaint;
  end;
end;

procedure TForm1.MyMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X: Integer; Y: Integer);
var
  Panel : TMyPanel;
begin
  Panel:=TMyPanel(Sender);
  Panel.InMove:=False;

end;
...
Рейтинг: 0 / 0
21.03.2020, 16:02
    #39939879
rgreat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перетаскивание панелей.
Т.к. TImage лежит на панели и закрывает ее собой, то события мышки происходят уже не на панели а на TImage.

Прикручивайте обработку событий к TImage, аналогично тому как это сделано для TPanel.
...
Рейтинг: 0 / 0
21.03.2020, 16:25
    #39939883
Dasha123123
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перетаскивание панелей.
rgreat, это я понимаю, но не получается.(((
...
Рейтинг: 0 / 0
21.03.2020, 16:29
    #39939884
rgreat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перетаскивание панелей.
Dasha123123,

Судя по размеру и расположению вашего TImage относительно размеров панели на которой вы пытаетесь его уместить я вообще не понимаю что вы хотели сделать.
...
Рейтинг: 0 / 0
21.03.2020, 16:33
    #39939890
Dasha123123
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перетаскивание панелей.
rgreat, да они оба размером 50*50 просто забыла поменять
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Перетаскивание панелей. / 25 сообщений из 26, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]