![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
При Hint-e не работает Alt-F4
BMouradov © (2006-04-11 10:46:00)Подскажите, когда на экране висит Hint, то Alt-F4 не закрывает программу. Делаю так:
SetCapture(PControl(paintbox).Handle);
R := Rect(...);
mdvToolTipTrack.ToolTip[PControl(pbMap).Handle]:= 'Hint';
mdvToolTipTrack.ShowHint(PControl(pbMap).Handle, True);
Спасибо заранее.
BMouradov (2006-04-14 12:44:00) [1]SetCapture в хинтах используется вот для чего - чтобы хинт исчезал при уходе мыши или при открытии какого-либо диалога, надо описать метод onLeave, в котором хинт скрыть. Если не ставить SetCapture, то фокус переходит к хинту, вызывается onLeave, и хинт тут же скрывается.
Vladimir Kladov (2006-04-13 21:21:00) [2]SetCapture - для захвата мыши. Имеет смысл, если перетаскивание мыши начинается в пределах окна, а продолжаться может за пределами. Например, вы карту так можете двигать, не обращая внимания на то, что курсор выехал за пределы своего окна. Удобно. Но это не должно бы быть привязано к вводу с клавиатуры. Тут что-то не то. Но если рецепт помогает, то правда должно быть достаточно проверить, что Handle в Msg тот, который должен быть.
mdw (2006-04-13 18:43:00) [3]Handle еще проверять.
Или копать MSDN на тему SetCapture. попробуй такой эксперимент, эффект такой же:
procedure TMainForm.Button2Click(Sender: PObj);
begin
SetCapture(Panel.Handle);
end;
Или может вообще не использовать SetCapture? Оно для paintbox, по моему, и не к чему. В примере я для treeview ставил, чтобы не мерцало.
BMouradov (2006-04-13 15:29:00) [4]Однако, при таком решении возникла другая проблема - при закрытии любого нового модального окна "крестиком" форма закрывается. Подскажите, нет ли всё-таки аккуратного решения?
BMouradov (2006-04-12 17:03:00) [5]Спасибо, помогло!
mdw (2006-04-11 16:36:00) [6]Причина в SetCapture(PControl(paintbox).Handle);
Наверное, нужно ставить обработчик FormMessage. Что-то типа
if (Msg.message = WM_SYSCOMMAND) and (Msg.wParam = SC_CLOSE) then Form.Close;