powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Динамические объекты их Drug&Drop и DblClick
14 сообщений из 14, страница 1 из 1
Динамические объекты их Drug&Drop и DblClick
    #39984292
oleg_maestro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет!

15 лет не занимался программированием, но вот судьба сделала в жизни поворот))..приходится осваивать заново.
Задача:
в БД хранятся данные о продолжительности некоторых процессов производства.
На форме разлинована временная шкала.
На этой шкале, в соответствие с данными в БД, размещены динамические объекты(TPanel) соответствующие этим процессам.(типа диаграммы ганта получается)
с помощью мыши есть возможность перетаскивать эти объекты по временному полю, в соответствие с этим меняются данные о сроках в БД.
Объект создается так:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
        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 для оформления кода, пожалуйста.
...
Рейтинг: 0 / 0
Динамические объекты их Drug&Drop и DblClick
    #39984295
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
oleg_maestro
но событие OnDblClick не отрабатывается.
ищи причину.
...
Рейтинг: 0 / 0
Динамические объекты их Drug&Drop и DblClick
    #39984299
Gerasimenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий
oleg_maestro
но событие OnDblClick не отрабатывается.
ищи причину.

а чего ее искать?
Код: pascal
1.
OnMouseDown:=F_Grafik.PanelDragDropMouseDown;
...
Рейтинг: 0 / 0
Динамические объекты их Drug&Drop и DblClick
    #39984303
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как вы собираетесь отрабатывать DblClick, если первый Click - это начало перетаскивания
...
Рейтинг: 0 / 0
Динамические объекты их Drug&Drop и DblClick
    #39984309
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Динамические объекты их Drug&Drop и DblClick
    #39984322
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DimaBr
Как вы собираетесь отрабатывать DblClick, если первый Click - это начало перетаскивания
у него не клик, а MouseDown.
...
Рейтинг: 0 / 0
Динамические объекты их Drug&Drop и DblClick
    #39984323
oleg_maestro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DimaBr,

не совсем понял...вы мне предложили отказаться от Drug&Drop?
за setBounds спасибо...немного сократили код))
...
Рейтинг: 0 / 0
Динамические объекты их Drug&Drop и DblClick
    #39984330
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
oleg_maestro
DimaBr,
не совсем понял...вы мне предложили отказаться от Drug&Drop?

DragMode = dmAutomatic убивает OnClick
...
Рейтинг: 0 / 0
Динамические объекты их Drug&Drop и DblClick
    #39984334
oleg_maestro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DimaBr
Как вы собираетесь отрабатывать DblClick, если первый Click - это начало перетаскивания


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

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

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

вроде все заработало!
...
Рейтинг: 0 / 0
Динамические объекты их Drug&Drop и DblClick
    #39984340
oleg_maestro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Gerasimenko
Мимопроходящий
пропущено...
ищи причину.

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



и вот получается что неправильно вы дядя Федор бутэрброд скушали...
ошибка была в
DragMode:=dmAutomatic;
...
Рейтинг: 0 / 0
Динамические объекты их Drug&Drop и DblClick
    #39984342
Gerasimenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
oleg_maestro
Gerasimenko
пропущено...

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



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

кинь панельку на пустую форму (D7)
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
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;
...
Рейтинг: 0 / 0
Динамические объекты их Drug&Drop и DblClick
    #39984343
oleg_maestro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DimaBr,

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
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 меню показывает.
...
Рейтинг: 0 / 0
Динамические объекты их Drug&Drop и DblClick
    #39984353
Gerasimenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gerasimenko
oleg_maestro
пропущено...


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

кинь панельку на пустую форму (D7)
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
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;

я к тому, что результат может быть не тот, что хотелось.... но отработает. Только не понятно что с Вашим интерфейсом: то, что вы ожидали, али нет
(проверить, что отработает:
Код: pascal
1.
2.
3.
4.
5.
procedure TForm1.Panel1DblClick(Sender: TObject);
begin
  Panel1.Caption:='mmm';
  ShowMessage('MMM');
end;
...
Рейтинг: 0 / 0
Динамические объекты их Drug&Drop и DblClick
    #39984409
oleg_maestro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Gerasimenko,
да возникли неожиданности. в частности после того как закрывается форма, вызванная даблкликом на объекте начинает выполняться TF_Grafik.FormDragOver...а мне это совсем не нужно))
будем что то придумывать...
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Динамические объекты их Drug&Drop и DblClick
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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