powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Контейнер с плашками
5 сообщений из 5, страница 1 из 1
Контейнер с плашками
    #40055904
istrebitel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Народ подскажите как правильно сделать контейнер с плашками, как на рисунке. Хочется сделать 2 базовых класса, чтобы потом можно было использовать в разных формах. Сейчас это TScrollBox и TPanel.
Контейнер должен хранить плашки и ведать только о их расположении, позволять таскать, сохранять позиции, восстанавливать позиции. А плашка представляет собой панельку, на которой расположены другие панельки / контролы.
Почитал везде пишут так, что на панельке обрабатывают OnMouseDown, Move, Up для перемещения. Мне не очень нравится такой способ, хотелось чтобы класс контейнера отвечал за перемещение. Можно конечно при добавлении панельки в контейнер переопределить ей эти события, предварительно сохранив оригинальные и отрабатывать таскание и вызывать оригинальные обработчики, но как то костыльненько. Плюс если на панельку кинуть другой контрол, то события перестают срабатывать и надо назначать обработчики для всех, если хочется таскать за любую часть. Можно конечно сделать вверху область - импровизированный заголовок и таскать только за него.
  • В общем можно ли поймать MouseDown / Move / Up в ScrollBox'е когда щёлкаешь по панельке?
  • Что лучше использовать за базу плашки TPanel или TFrame? Последний можно будет в дизайне художить, но он потяжелее будет.
  • Или есть решение получше?
...
Рейтинг: 0 / 0
Контейнер с плашками
    #40055906
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
имхо, тут программист нужен! ©
...
Рейтинг: 0 / 0
Контейнер с плашками
    #40055908
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вы думаете, что по вашим картинкам мы поняли где "контейнер" а где "плашки" и что по чём нужно такскать ?
...
Рейтинг: 0 / 0
Контейнер с плашками
    #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
Контейнер с плашками
    #40056037
ma1tus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
istrebitel
Или есть решение
s / таскать / https://www.youtube.com/watch?v=GUGziWMXK-4
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Контейнер с плашками
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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