У меня проблема с триггером эффекта (эффект тени). Я поставил триггер на ismouseover = true
. Итак, когда я помещаю мышь на панель (родительскую), активируются тени, и все работает нормально, пока я не начну размещать некоторые кнопки внутри панели (дочерние).
Эффект теней отключается, когда мышь находится над детьми.
Итак, можно ли как-то сосредоточиться на родителях, сосредоточившись на детях?
Я пытался изменить триггер эффектов (с ismouseover
на isfocused
), но это не дало никаких других результатов.
Альтернативой может быть использование кнопок без окон, тогда они не смогут украсть фокус ввода. В противном случае рассмотрите возможность отслеживания движений мыши вручную и просто проверяйте при каждом движении, входит ли мышь в ограничивающий прямоугольник панели или выходит из нее.
Если вы выберете кнопки без окон, не забывайте, что вам все равно нужно сделать клавиатуру с графическим интерфейсом пригодной для использования.
Как уже говорилось, ваш дизайн неверен, тогда вы можете удалить триггер и сделать это вручную:
// show or hide shadow effect
procedure TForm2.ShowShadowEffect(AValue: boolean);
begin
if ShadowEffect1.Enabled <> AValue then
ShadowEffect1.Enabled := AValue;
end;
// show when enter on panel
procedure TForm2.Panel1MouseEnter(Sender: TObject);
begin
ShowShadowEffect(True);
end;
// hide when leave the panel
procedure TForm2.Panel1MouseLeave(Sender: TObject);
begin
ShowShadowEffect(False);
end;
// keep visible when over button
procedure TForm2.Button1MouseEnter(Sender: TObject);
begin
ShowShadowEffect(True);
end;
Фокус клавиатуры предназначен для работы таким образом. Ваш дизайн неверен ... вам нужен еще один уровень косвенности, чтобы управлять тем, когда окно должно отображать специальные эффекты, например, проверять, есть ли фокус у каких-либо дочерних окон, а также предостережения