Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.08.2009, 14:29   #1
Квэнди
Старожил
 
Аватар для Квэнди
 
Регистрация: 13.12.2006
Сообщений: 3,859
По умолчанию Dock-инг TGroupBox внутри Tpanel

Идея в следующем:
тестовая форма содержит панель с Align alclient
На этой панели находится пара GroupBox с каким- то содержимым
Цель:
Перемещать внутри Tpanel эти GroupBox-ы свободно, но не "пуская за пределы". ВОщем- то пределы пока не столь важны. Как правильн сделать чтобы GroupBox-ы свободно перемешались по панели с помощью докинга?
Попробовал так:
Код:
object pnl1: TPanel
.....
DockSite = True
DragMode = dmAutomatic
....
object grp1: TGroupBox
.....
DragKind = dkDock
DragMode = dmAutomatic
.....
Но как только grp1 "отцепляется" от поверхности, он сразу же полностью заполняет Panel.
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи
Квэнди вне форума Ответить с цитированием
Старый 07.08.2009, 14:47   #2
SERG1980
Участник клуба
 
Аватар для SERG1980
 
Регистрация: 28.03.2007
Сообщений: 1,814
По умолчанию

Есть один пример может подойдёт
Вложения
Тип файла: rar перемещение окон контролов.rar (211.6 Кб, 10 просмотров)
SERG1980 вне форума Ответить с цитированием
Старый 07.08.2009, 14:51   #3
Квэнди
Старожил
 
Аватар для Квэнди
 
Регистрация: 13.12.2006
Сообщений: 3,859
По умолчанию

Хотелось именно с докингом
без него и так не сложно сделать и без таких извратов
Код:
var
  Form6: TForm6;
  msx,msy:Integer;
implementation

{$R *.dfm}

procedure TForm6.grp1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
msx:=x;
msy:=y;
end;

procedure TForm6.grp1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
if ssLeft in Shift then
	begin
	  grp1.Left:=grp1.Left+(x-msx);
    grp1.Top:=grp1.Top+(y-msy);
    grp1.Repaint;
  end;
end;
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи
Квэнди вне форума Ответить с цитированием
Старый 07.08.2009, 15:02   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
чтобы GroupBox-ы свободно перемешались по панели с помощью докинга?
А механизм докинга очень важен? Может проще просто перемещать и во время перемещения проверять выходы за пределы?

Порой в сторону метода Dock:
Код:
procedure TForm1.GroupBox1EndDock(Sender, Target: TObject; X, Y: Integer);
var p:TPoint;
begin
  TGroupBox(sender).Dock(Panel1,TGroupBox(sender).ClientRect);
  p.X:=x;p.Y:=y;
  p:=Panel1.ScreenToClient(p);
  TGroupBox(sender).Left:=p.X;
  TGroupBox(sender).top:=p.y;
end;
Это вернет назад то что таскал. Только код требует поправки. Там с координатами мелкий баг
I'm learning to live...

Последний раз редактировалось Stilet; 07.08.2009 в 15:10.
Stilet вне форума Ответить с цитированием
Старый 07.08.2009, 15:08   #5
Квэнди
Старожил
 
Аватар для Квэнди
 
Регистрация: 13.12.2006
Сообщений: 3,859
По умолчанию

Цель была попутно с докингом разобраться =) Докинг между панелями понятен и рабтает более менее нормально (хотя четкое ощущений "грабель" не покидает) А вот с докингом внутри одной панели как-то не понятно
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи
Квэнди вне форума Ответить с цитированием
Старый 07.08.2009, 18:47   #6
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Возможно это просто недоработано, между панелями отладили, а тут руки не дошли, там ведь тоже живые люди работают. Чем головой пробивать стену, так проще свой докинг в этом случае реализовать.
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог
mutabor вне форума Ответить с цитированием
Старый 10.08.2009, 08:14   #7
Квэнди
Старожил
 
Аватар для Квэнди
 
Регистрация: 13.12.2006
Сообщений: 3,859
По умолчанию

Ну собственно в выходные решил культурно разобраться, у марко кенту написано что докинг возможен только у align-компоннтов, т.е. если мы хотим "докить" компонент, у него должен быть какой- нибудь align, т.е. докинг внутри одной панели возможен, если она заполнена компонентами, у которых выставлен align. Вобщем отказался я от этой идеи и сделал по- свойму. Все- таки докинг очень сильно попахивает костылями=)
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи
Квэнди вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Drag and Dock shadowofjustice Общие вопросы Delphi 14 14.11.2009 01:44
Mac OS X - Dock for WinNT BOBAH13 Софт 55 29.10.2008 15:29
Цвет у TGroupBox такой же как у формы. Ozerich Компоненты Delphi 1 05.09.2008 15:43
TPanel Valera Помощь студентам 10 07.08.2008 11:15
Вопрос по TPanel SeRhy Общие вопросы Delphi 3 30.12.2007 11:33