• 0
Alexander

Всплывающая панель

Вопрос

Хочу реализовать всплывающую панель с объектами управления.

Если сделать анимацию открытие/закрытие панели на тригерах (IsMouseOver=true/IsMouseOver=false) , то при наведении мыши на контрол управления в панели(допустим кнопка) соотвественно панель сворачивается. По логике работы всё верно, но "оно мне так не надо". Какие будут предложения?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

9 ответов на этот вопрос

  • 0

...при наведении мыши на контрол управления в панели(допустим кнопка) соотвественно панель сворачивается. По логике работы всё верно, но "оно мне так не надо".

Хм... А как Вам надо? И почему у Вас по логике верно, что при наведении мыши на контрол, панель должна свернуться? Как я понимаю, в обычном состоянии панель у Вас не должна быть видна. Тогда вопрос: куда надо навести курсор мыши, чтобы панель появилась? А если панель в обычном состоянии видна, то по Вашей "верной логике работы" при наведении на нее мыши панель свернется. Как же тогда на ней нажать кнопку?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

Когда то эту проблему я решил так 

кидаешь на форму панель а в него два FloatAnimation

В свойствах компонента делал примерно так

 

FloatAnimation1->PropertyName->Scale.X;

FloatAnimation2->PropertyName->Scale.X;

 

FloatAnimation1->StartValue->1;

FloatAnimation1->StopValue->3;

 

FloatAnimation2->StartValue->3;

FloatAnimation2->StopValue->1;

 

и потом в событиях панели так

procedure TForm1.Panel1MouseEnter(Sender: TObject);
begin
FloatAnimation1.Start;
end;

procedure TForm1.Panel1MouseLeave(Sender: TObject);
begin
FloatAnimation2.Start;
end;
Изменено пользователем R.is

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

Все это можно сделать при помощи одной анимации.

В инспекторе объектов:

FloatAnimation1.PropertyName = "Scale.X";

FloatAnimation1.StartValue = 1;

FloatAnimation1.StopValue = 3;

FloatAnimation1.Inverse = true;

procedure TForm1.Panel1MouseEnter(Sender: TObject);
begin
FloatAnimation1.Inverse = not FloatAnimation1.Inverse;
FloatAnimation1.Start;
end;

procedure TForm1.Panel1MouseLeave(Sender: TObject);
begin
Panel1MouseEnter(this);
end;

Но только топикстартеру похоже это уже не надо.

Изменено пользователем d7d1cd

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

Но только топикстартеру похоже это уже не надо.

Надо, пока не добрался до компа,пишу со смартфона, что я хотел получить :

На форму кладём панель, на неё допустим кнопку в позиции по вертикали 35. У панели свойство height выставляем в 30, чтоб скрыть кнопку. Еще у панели нужно выставить свойство ClipChildren в true, чтоб скрыть кнопку. К панели прикрепляем Floatanimation, Startposition := 30; StopPosition := 60; триггеры выставляем на вход мыши и выход мыши. Запускаем приложение. Если подвести мышь к панели она развертится, но при попытке навести мышь на кнопку панель свернется. В общем, кнопку не нажать. Еще обнаружен баг. При сворачиваНИИ панели и установленном ClipChildren := true остаются следы от панели по мере сворачивания

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

Alexander, прикладываю проект и исполняемый файл (на случай, если Вы пишете не на С++). Думаю, что Вам именно это надо.

PanelTest.zip

PanelTestProject.zip

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

   d7d1cd,  Спасибо!

Это конечно "костыль", такой же как и мой. На панель подвесил две анимации. первая на открытие, вторая на закрытие. Первая срабатывает по тригеру при входе мыши в панель. Вторая запускается "принудительно" по движению мыши по форме.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

Понятно, что костыль. Но что делать...

По поводу Вашего метода: думаю, что мой метод лучше тем, что в нем используется только одна анимация, а так же минимум кода. Я, кстати, всегда стараюсь писать как можно меньше кода, ибо есть золотое правило: чем сложнее механизм, тем более вероятно, что он сломается. Хотя может я и не прав :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

у меня одна строка кода, запустить вторую анимацию по входу мыши в форму :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

Зато 2 анимации :). Хотя твой метод может быть и с одной анимацией.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!


Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.


Войти сейчас

  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу