Delphi. Как из события с message CM_MOUSEENTER вызывать событие с CM_MOUSEENTER? Есть 2 компонентка - DBGrid и Panel.
Поверх DBGrid находиться Panel c Visible:=false;
При наведении на DBGrid Panel появляется.
Теперь нужно убирать её когда курсор мыши уводиться с DBGrid.
Использую CM_MOUSELEAVE, получаю LParam, сравниваю с handler DBGrid и убираю панель.
Но!
Т.к. панель это уже другой объект, то при переходе мышки на панель она исчезает, хотя курсор мыши фактически еще находится в границах DBgrid'а.
Как в CM_MOUSELEAVE исключить исчезновение панели, при переходе на неё?
Думал тут же проверять CM_MOUSEENTER, но так и не понял как вызывать из события с CM_MOUSEELAVE.

21 Авг 2019 в 07:02
169 +1
0
Ответы
1

Вам не нужно вызывать событие CM_MOUSEENTER из события CM_MOUSELEAVE. Вместо этого, вы можете использовать один обработчик событий для обеих ситуаций.

Вы можете использовать переменную, чтобы отслеживать, находится ли мышь над DBGrid или Panel, и в зависимости от этого показывать или скрывать Panel.

Примерно так можно это сделать:

var
IsMouseOverDBGrid: Boolean;
procedure TForm1.DBGridMouseEnter(Sender: TObject);
begin
Panel.Visible := True;
IsMouseOverDBGrid := True;
end;
procedure TForm1.DBGridMouseLeave(Sender: TObject);
begin
if not PtInRect(DBGrid.BoundsRect, ScreenToClient(Mouse.CursorPos)) then
begin
Panel.Visible := False;
IsMouseOverDBGrid := False;
end;
end;
procedure TForm1.PanelMouseLeave(Sender: TObject);
begin
Panel.Visible := False;
IsMouseOverDBGrid := False;
end;
procedure TForm1.PanelMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
IsMouseOverDBGrid := False;
end;
procedure TForm1.DBGridMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
IsMouseOverDBGrid := True;
end;
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
if not (IsMouseOverDBGrid or PtInRect(Panel.BoundsRect, ScreenToClient(Mouse.CursorPos))) then
begin
Panel.Visible := False;
end;
end;

Этот код отслеживает положение мыши над DBGrid и Panel и скрывает Panel, если мышь покидает эти компоненты.

20 Апр в 13:09
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 84 654 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир