![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
![]() Подскажите как реализовать перетаскивание мышью динамически созданных объектов?
есть процедура, нормально осуществляющая перетаскивание статично созданного объекта Код:
procedure Tfrm_Main.drag_Terminal; const SC_DragMove = $F012; begin begin ReleaseCapture; Panel1.Perform(WM_SysCommand, SC_DragMove, 0); end; end; Код:
gr_Term.OnMouseDown:=drag_Terminal(self); Вопрос 1 Почему, в этой строке возникает ошибка [DCC Error] main.pas(97): E2010 Incompatible types: 'TMouseEvent' and 'procedure, untyped pointer or untyped parameter' Вопрос 2 Как в строке Код:
Panel1.Perform(WM_SysCommand, SC_DragMove, 0); отправить сообщение о переносе именно тому объекту на котором была нажата левая кнопка мыши? |
#2
|
|||
|
|||
![]() С процедурой вроде разобрался
Теперь вопрос можно ли получить объект по имени и назначить конкретно ему обработчик? Поясню объекты gr_Term создаются динамически при двойном нажатии на панель, соответственно каждому из них назначаю имя и tag. Код:
gr_Term.Tag:=term_Index; gr_Term.Name:='Ter'+InttoStr(term_Index); term_Index тип integer увеличивающаяся на единицу, с каждым созданным объектом. как мне теперь назначать на них обработчики при создании? Понятно что будет выглядеть как то так Код:
gr_Term.OnMouseDown:=drag_Terminal ; но как сделать чтобы OnMouseDown навешивалась именно на созданную gr_Term. что то типа Код:
gr_Term['индекс tag'].OnMouseDown:=drag_Terminal ; Код:
gr_Term.getName('Ter1').OnMouseDown:=drag_Terminal ; |
#3
|
|||
|
|||
![]() Может быть создавать массив gr_Term?
|
#4
|
|||
|
|||
![]() Цитата:
Если с процедурой разобрался, то у неё должен быть первый параметр Sender:TObject. Это и есть ваш gr_Term |
#5
|
|||
|
|||
![]() так вот тут и начинается самое интересное
![]() при инициализации процедуры Код:
procedure drag_Terminal(Sender: TObject; Button: TMouseButton;Shift: TShiftState; X, Y: Integer); Код:
procedure Tfrm_Main.drag_Terminal; begin (sender as TGroupBox ).left := X; (sender as TGroupBox ).top := Y; end; Не работает перетаскивание мышью. Насколько я помню параметры X и Y не нужно передавать в процедуру и они автоматически будут получены от координат мыши. Но , могу и ошибаться |