Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
 Динамические объекты их Drug&Drop и DblClick  [new]
oleg_maestro
Member

Откуда:
Сообщений: 6
Всем привет!

15 лет не занимался программированием, но вот судьба сделала в жизни поворот))..приходится осваивать заново.
Задача:
в БД хранятся данные о продолжительности некоторых процессов производства.
На форме разлинована временная шкала.
На этой шкале, в соответствие с данными в БД, размещены динамические объекты(TPanel) соответствующие этим процессам.(типа диаграммы ганта получается)
с помощью мыши есть возможность перетаскивать эти объекты по временному полю, в соответствие с этим меняются данные о сроках в БД.
Объект создается так:
        mPanel:=TPanel.Create(F_Grafik);
        with mPanel do begin
          Parent:=F_Grafik;
          ParentBackground:=false;
          ParentColor:=false;
          DragMode:=dmAutomatic;
//          DragMode:=dmManual;
          Width := m_width;  //вычисляется по данным в БД
          height := 50;
          Top := m_top;   //вычисляется по данным в БД
          Left := m_left;  //вычисляется по данным в БД
          font.Color:=clWhite;
          Caption:='№-'+FieldByname('nomer').AsString;
          color:=HtmlToColor(FieldByname('color').AsString,clCream);
          BorderWidth := 10;
          Name:='Panel'+FieldByName('g.id').AsString+'_'+FieldByName('s').AsString;

          OnMouseDown:=F_Grafik.PanelDragDropMouseDown;

          OnDblClick:=F_Grafik.P_DblClick;
          PopupMenu:=DM.PP_GrafikPanel;

        end;

событие OnMouseDown - отлично отрабатывает. объекты перемещаются данные в БД меняются.
Теперь возникла задача при двойном клике на панели открывать форму с данными, но событие OnDblClick не отрабатывается.
Попытался решить проблему с помощью PopUp меню, но при правом клике на панели вылетает ошибка
"raised exception class EInvalidOperation with message 'Cannot drag a form'."

чего то фундаментального я видимо не понимаю...причем тут Drag a Form, если я правую кнопку мыши нажимаю(тачпада если быть точным)...и почему не работает OnDblClick(как в прочем и любое другое событие)

пните плиз в нужном направлении...заранее благодарен.

Модератор: Пользуйтесь тегом (кнопкой) SRC для оформления кода, пожалуйста.


Сообщение было отредактировано: 27 июл 20, 17:34
27 июл 20, 11:54    [22174101]     Ответить | Цитировать Сообщить модератору
 Re: Динамические объекты их Drug&Drop и DblClick  [new]
Мимопроходящий
Member

Откуда: бурятский тундрюк, эсквайр
Сообщений: 31323
oleg_maestro
но событие OnDblClick не отрабатывается.
ищи причину.
27 июл 20, 12:10    [22174107]     Ответить | Цитировать Сообщить модератору
 Re: Динамические объекты их Drug&Drop и DblClick  [new]
Gerasimenko
Member

Откуда:
Сообщений: 4612
Мимопроходящий
oleg_maestro
но событие OnDblClick не отрабатывается.
ищи причину.

а чего ее искать?
OnMouseDown:=F_Grafik.PanelDragDropMouseDown;
27 июл 20, 12:26    [22174115]     Ответить | Цитировать Сообщить модератору
 Re: Динамические объекты их Drug&Drop и DblClick  [new]
DimaBr
Member

Откуда:
Сообщений: 11808
Как вы собираетесь отрабатывать DblClick, если первый Click - это начало перетаскивания
27 июл 20, 12:31    [22174120]     Ответить | Цитировать Сообщить модератору
 Re: Динамические объекты их Drug&Drop и DblClick  [new]
DimaBr
Member

Откуда:
Сообщений: 11808
Картинка с другого сайта.
27 июл 20, 12:36    [22174128]     Ответить | Цитировать Сообщить модератору
 Re: Динамические объекты их Drug&Drop и DblClick  [new]
Мимопроходящий
Member

Откуда: бурятский тундрюк, эсквайр
Сообщений: 31323
DimaBr
Как вы собираетесь отрабатывать DblClick, если первый Click - это начало перетаскивания
у него не клик, а MouseDown.
27 июл 20, 13:08    [22174147]     Ответить | Цитировать Сообщить модератору
 Re: Динамические объекты их Drug&Drop и DblClick  [new]
oleg_maestro
Member

Откуда:
Сообщений: 6
DimaBr,

не совсем понял...вы мне предложили отказаться от Drug&Drop?
за setBounds спасибо...немного сократили код))
27 июл 20, 13:09    [22174148]     Ответить | Цитировать Сообщить модератору
 Re: Динамические объекты их Drug&Drop и DblClick  [new]
DimaBr
Member

Откуда:
Сообщений: 11808
oleg_maestro
DimaBr,
не совсем понял...вы мне предложили отказаться от Drug&Drop?

DragMode = dmAutomatic убивает OnClick
27 июл 20, 13:25    [22174159]     Ответить | Цитировать Сообщить модератору
 Re: Динамические объекты их Drug&Drop и DblClick  [new]
oleg_maestro
Member

Откуда:
Сообщений: 6
DimaBr
Как вы собираетесь отрабатывать DblClick, если первый Click - это начало перетаскивания


да я понял уже что в этом дело...

в общем сделал DragMode:=dmManual; и чтобы таскать можно было только при нажатом Alt

c "Cannot drag a form" тоже разобрался. в обработчике MouseDown было написано просто
BeginDrag(True) ;
и он естественно начинал таскать саму форму. исправил на
(sender as TPanel).BeginDrag(True) ;

вроде все заработало!
27 июл 20, 13:33    [22174163]     Ответить | Цитировать Сообщить модератору
 Re: Динамические объекты их Drug&Drop и DblClick  [new]
oleg_maestro
Member

Откуда:
Сообщений: 6
Gerasimenko
Мимопроходящий
пропущено...
ищи причину.

а чего ее искать?
OnMouseDown:=F_Grafik.PanelDragDropMouseDown;


и вот получается что неправильно вы дядя Федор бутэрброд скушали...
ошибка была в
DragMode:=dmAutomatic;
27 июл 20, 13:52    [22174171]     Ответить | Цитировать Сообщить модератору
 Re: Динамические объекты их Drug&Drop и DblClick  [new]
Gerasimenko
Member

Откуда:
Сообщений: 4612
oleg_maestro
Gerasimenko
пропущено...

а чего ее искать?
OnMouseDown:=F_Grafik.PanelDragDropMouseDown;


и вот получается что неправильно вы дядя Федор бутэрброд скушали...
ошибка была в
DragMode:=dmAutomatic;

кинь панельку на пустую форму (D7)
procedure TForm1.Panel1DblClick(Sender: TObject);
begin
  Panel1.Caption:='mmm'
end;

procedure TForm1.Panel1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  Panel1.Caption:='m-m-m';
end;
27 июл 20, 14:01    [22174177]     Ответить | Цитировать Сообщить модератору
 Re: Динамические объекты их Drug&Drop и DblClick  [new]
oleg_maestro
Member

Откуда:
Сообщений: 6
DimaBr,

procedure TF_Grafik.PanelDragDropMouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin

//  if ssAlt in Shift  then
  if Button= mbLeft  then
    (sender as TPanel).BeginDrag(True) ;

end;



все работает...и таскает левой кнопкой без всякого alt и dblclick отрабатывает и popup меню показывает.

Сообщение было отредактировано: 27 июл 20, 17:36
27 июл 20, 14:01    [22174178]     Ответить | Цитировать Сообщить модератору
 Re: Динамические объекты их Drug&Drop и DblClick  [new]
Gerasimenko
Member

Откуда:
Сообщений: 4612
Gerasimenko
oleg_maestro
пропущено...


и вот получается что неправильно вы дядя Федор бутэрброд скушали...
ошибка была в
DragMode:=dmAutomatic;

кинь панельку на пустую форму (D7)
procedure TForm1.Panel1DblClick(Sender: TObject);
begin
  Panel1.Caption:='mmm'
end;

procedure TForm1.Panel1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  Panel1.Caption:='m-m-m';
end;
я к тому, что результат может быть не тот, что хотелось.... но отработает. Только не понятно что с Вашим интерфейсом: то, что вы ожидали, али нет
(проверить, что отработает:
procedure TForm1.Panel1DblClick(Sender: TObject);
begin
  Panel1.Caption:='mmm';
  ShowMessage('MMM');
end;
27 июл 20, 14:32    [22174201]     Ответить | Цитировать Сообщить модератору
 Re: Динамические объекты их Drug&Drop и DblClick  [new]
oleg_maestro
Member

Откуда:
Сообщений: 6
Gerasimenko,
да возникли неожиданности. в частности после того как закрывается форма, вызванная даблкликом на объекте начинает выполняться TF_Grafik.FormDragOver...а мне это совсем не нужно))
будем что то придумывать...
27 июл 20, 16:45    [22174282]     Ответить | Цитировать Сообщить модератору
Все форумы / Delphi Ответить