• 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 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу