Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Контейнер с плашками / 5 сообщений из 5, страница 1 из 1
22.03.2021, 15:57
    #40055904
istrebitel
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Контейнер с плашками
Народ подскажите как правильно сделать контейнер с плашками, как на рисунке. Хочется сделать 2 базовых класса, чтобы потом можно было использовать в разных формах. Сейчас это TScrollBox и TPanel.
Контейнер должен хранить плашки и ведать только о их расположении, позволять таскать, сохранять позиции, восстанавливать позиции. А плашка представляет собой панельку, на которой расположены другие панельки / контролы.
Почитал везде пишут так, что на панельке обрабатывают OnMouseDown, Move, Up для перемещения. Мне не очень нравится такой способ, хотелось чтобы класс контейнера отвечал за перемещение. Можно конечно при добавлении панельки в контейнер переопределить ей эти события, предварительно сохранив оригинальные и отрабатывать таскание и вызывать оригинальные обработчики, но как то костыльненько. Плюс если на панельку кинуть другой контрол, то события перестают срабатывать и надо назначать обработчики для всех, если хочется таскать за любую часть. Можно конечно сделать вверху область - импровизированный заголовок и таскать только за него.
  • В общем можно ли поймать MouseDown / Move / Up в ScrollBox'е когда щёлкаешь по панельке?
  • Что лучше использовать за базу плашки TPanel или TFrame? Последний можно будет в дизайне художить, но он потяжелее будет.
  • Или есть решение получше?
...
Рейтинг: 0 / 0
22.03.2021, 15:59
    #40055906
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Контейнер с плашками
имхо, тут программист нужен! ©
...
Рейтинг: 0 / 0
22.03.2021, 16:02
    #40055908
DimaBr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Контейнер с плашками
Вы думаете, что по вашим картинкам мы поняли где "контейнер" а где "плашки" и что по чём нужно такскать ?
...
Рейтинг: 0 / 0
22.03.2021, 16:22
    #40055922
istrebitel
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Контейнер с плашками
Это панельки лежащие на ScrollBox'e, они таскаются. Контейнер это ScrollBox, таскаются панели с помощью кода типа такого
Код: 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.
procedure TForm1.Button1Click(Sender: TObject);
begin
  if not Assigned(FTableButton) then begin
    FTableButton := TButton.Create(self);
    FTableButton.Parent := self;
    FTableButton.Caption := 'I am New';
    FTableButton.OnMouseDown := TableButtonMouseDown;
    FTableButton.OnMouseMove := TableButtonMouseMove;
    FTableButton.OnMouseUp := TableButtonMouseUp;
  end;
end;

procedure TForm1.TableButtonMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  FTableButtonDragging := true;
  FMouseDownLocation := Mouse.CursorPos;
  FButtonStartingLocation := TPoint.Create(FTableButton.Left, FTableButton.Top);
end;

procedure TForm1.TableButtonMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  if FTableButtonDragging then begin
    FTableButton.Left := FButtonStartingLocation.X + (Mouse.CursorPos.X - FMouseDownLocation.X);
    FTableButton.Top := FButtonStartingLocation.Y + (Mouse.CursorPos.Y - FMouseDownLocation.Y);
    FTableButton.Invalidate;
  end;
end;

procedure TForm1.TableButtonMouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  FTableButtonDragging := false;
end;


Этот код просто со stackoverflow.com чтоб принцип показать.
...
Рейтинг: 0 / 0
22.03.2021, 19:45
    #40056037
ma1tus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Контейнер с плашками
istrebitel
Или есть решение
s / таскать / https://www.youtube.com/watch?v=GUGziWMXK-4
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Контейнер с плашками / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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