Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > DRAG & DROP & MOUSEDOWN & UP


Автор: Artemon 10.8.2005, 09:50


Такое впечатление, что Builder глючит, привожу код:


void __fastcall MouseDown(TObject* Sender,..................................)
{
if(Button == mbLeft)
((TImage*)Sender)->BeginDrag(false,10);
}

void __fastcall MouseUp(TObject* Sender,..................................)
{
ShowMessage("OK");
}

Внимание глюк:

При нажатии левой кнопки мыши как и положено происходит событие MouseDown, но далее не отпуская мыши проиходит событие MouseUp.

Если кто знает в чем дело, подскажите.

Спасибо.

Автор: Mal Hack 10.8.2005, 14:52
Проверил. Все нормально.
Я думаю, что BeginDrag как бы эмитирует Up или вызывает.

Автор: Поручик 14.8.2005, 21:32
А как обойти вызов или MouseUp при BeginDrag'e??????

Автор: p0s0l 14.8.2005, 22:47
В BeginDrag идёт вызов Perform( WM_LBUTTONUP, ... )
Чтобы не срабатывал MouseUp сделай так:
Код

void __fastcall MouseDown(TObject* Sender,..................................)
{
if(Button == mbLeft)
{
SomeFlag = true
((TImage*)Sender)->BeginDrag(false,10);
SomeFlag = false;
}
}

void __fastcall MouseUp(TObject* Sender,..................................)
{
if (!SomeFlag) ShowMessage("OK");
}

Но опять же, если тебе нужно отловить отпускание кнопки, то надо бы обрабатывать событие OnEndDrag...

А вообще, к чему это ? Может проще выставить у Image'ов свойство DragMode в dmAutomatic, а в событии OnCreate у формы написать:
Код
  Mouse->DragImmediate = False;
  Mouse->DragThreshold = 10;

Автор: Artemon 18.8.2005, 10:40
Почему-то ничего не помогает, может еще как-нибудь можно решить эту проблеу?

Автор: Artemon 19.8.2005, 10:31
Я подозреваю, что вопрос не понят до конца.

Вопрос:

Над Image's нужно сделать следующие действия:

1) Перетаскивать Image.
2) Обрабтывать отпускание кнопки мыши.


Когда я пытаюсь это сделать, у меня роисходит следующее:
Я нажимаю на Image (но не тащу его) и сразуже происходит событие OnMouseUp.

Как же сделать так, что бы все шло своим чередом?

Автор: Mal Hack 19.8.2005, 10:37
Как вариант - повесить обработчик не на OnMouseUp, а на события окончания Drag&Drop, OnEndDrag.

Автор: Artemon 26.8.2005, 19:09
Что ничего не вяжется друг с другом.

Если использовать OnEndDrag, то все работает нормально,
но в моей программе имеется возможность отключить DRAG&DROP. Ролучается что если я отключаю DRAG&DROP, то автоматически отключается OnMouseUp.

Как мне действовать в этой ситуации?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)