Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Движение компонента 
:(
    Опции темы
Delphist
Дата 21.10.2005, 13:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphist Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2145
Регистрация: 3.2.2004
Где: всегда в сети

Репутация: 2
Всего: 3



У меня есть собственный компонент TConEquipment наследник от TGraphicControl, который может свободно перемещаться на форме. <B>Проблема в следующем:</B>
На форме есть два TConEquipment: ConEquipment1 и ConEquipment2. ConEquipment1 находится в состоянии покоя, а ConEquipment2 мы перемещаем по форме. Когда конец (в виде кружка) ConEquipment2 находит на конец ConEquipment1, то он должен прицепить ConEquipment1 и уже двигаться как единое целое. Как это сделать?

P.S. Исходники прикрепляю.

Присоединённый файл ( Кол-во скачиваний: 6 )
Присоединённый файл  FromLineTo.rar 9,40 Kb


--------------------
ProcessInfo 1-ая моя программа (аналог spyxx.exe с гораздо большим функц-ом - внедрение dll в адр. простр. процесса, перехват API-функций, разбор приложения на окна мн.др).
Когда-то давным-давно использовал это...
PM MAIL ICQ   Вверх
p0s0l
Дата 22.10.2005, 23:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: 58
Всего: 112



В MouseUp нужно проверить, есть ли поблизости какие-либо концы других элементов. Если есть, то занести эти элементы в "список прицепок"... Упрощенно как-то так:
Код

   TConEquipment = class(TGraphicControl)
  private
    FConnections : array of TConEquipment; // список прицепленных элементов
...

procedure TConEquipment.MouseUp(Button: TMouseButton; Shift: TShiftState;  X, Y: Integer);
var
  pt : TPoint;
  i : integer;
  c : TConEquipment;
 
begin
  pt := ClientToParent(Point(X, Y));
// просматриваем все контролы
  for i := 0 to Parent.ControlCount-1 do
    if Parent.Controls[i] is TConEquipment then
    begin
      c := TConEquipment(Parent.Controls[i]);
      if c = Self then Continue;
// проверка на то, соприкасается ли коннек, за который таскали, с концами элемента c
      if <проверка соприкосновения pt с концами элемента c> then
      begin
// теперь надо проверить, прицеплен ли уже этот элемент ?
        found := False;
        for j := 0 to High(FConnections) do
          if FConnections[j] = c then 
          begin
            found := True;
            Break;
          end;
        if found then Continue;
// заносим в список прицепок
        SetLength (FConnections, Length(FConnections)+1);
        FConnections[High(FConnections)] := c;
// возможно нужно будет занести себя в список прицепок элемента c
//        SetLength (c.FConnections, Length(c.FConnections)+1);
//        c.FConnections[High(c.FConnections)] := Self;
        
      end;
    end;
end;
Теперь в DoMouseMove нужно сдвигать/изменять размеры элементов, занесенных в FConnections...



--------------------
С уважением, г-н Посол.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0484 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.