Как сделать так, чтобы при помещении мышки над нужным мне компонентом появлялась панель. Например, при помещении мышки над Button1 появлялась панель GroupBox4.
Уважаемые авторы вопросов! Большая просьба сообщить о результатах решения проблемы на этой странице. Иначе, следящие за обсуждением, возможно имеющие аналогичные проблемы, не получают ясного представления об их решении. А авторы ответов не получают обратной связи. Что можно расценивать, как проявление неуважения к отвечающим от автора вопроса.
16-08-2005 03:27
лучше использовать сообщения Windows CM_MOUSEENTER и CM_MOUSELEAVE. Правда в этом случае придется написать новый класс родитель которого TButton, TBitBtn и т.п.
Во-первых, писать наследника не обязательно: форма может перехватить сообщения, получаемые компонентом, используя его свойство WindowProc. Во-вторых, сообщения с префиксами CM_ и CN_ - это сообщения не Windows, а внутренние сообщения VCL. А в остальном идея верная.
Поскольку событие OnMouseMove для этого плохо подходит, лучше использовать сообщения Windows CM_MOUSEENTER и CM_MOUSELEAVE. Правда в этом случае придется написать новый класс родитель которого TButton, TBitBtn и т.п.
Будет выглядить примерно так.
TMyBtn = class(TButton)
private
procedure CMMouseEnter(var Message: TMessage); message CM_MOUSEENTER;
procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE;
protected
public
published
end;
procedure TMyBtn.CMMouseEnter(var Message: TMessage);
begin
GroupBox4.Visible := true;
end;
procedure TMyBtn.CMMouseLeave(var Message: TMessage);
begin
GroupBox4.Visible := false;
end;
Потом где-то в рантайме создаешь кнопку и определяешь ее хозяина,положение,надпись и т.п.
Пример сильно упрощенный. Если ты хочешь использовать этот класс для нескольких кнопок, тогда нужно вводить свойства типа OnMouseEnter и OnMouseLeave и в указанных процедурах (CMMouseEnter,CMMouseLeave) вызывать процедуры указанные в этих свойствах. Иначе все кнопки будут выполнять одни и те-же действия при входе и выходе мышки :)
Если вы заметили орфографическую ошибку на этой странице, просто выделите ошибку мышью и нажмите Ctrl+Enter. Функция может не работать в некоторых версиях броузеров.