Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 317

/ вопрос открыт /

Наведя мышкой на Button1, появится Button2. Как мне сделать так что бы убрав мышку с Button2, обратно появлялся Button1.

procedure TForm1.Button1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
Button1.Visible := false;
Button2.Visible := true;

Толков Геннадий Викторович Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: Толков Геннадий Викторович (статус: Посетитель)
Вопрос отправлен: 17 февраля 2007, 00:52
Состояние вопроса: открыт, ответов: 2.

Ответ #1. Отвечает эксперт: Alex Van Glukhman

Здравствуйте, Толков Геннадий Викторович!

Во первых на форме надо установить property KeyPreview:=true;
Далее обрабатываем событие OnMouseEnter кнопки 1 при наведении на неё мышью
Button2.Visible:=true;
Button1.Visible:=false;
При выходе из кнопки 2 обрабатываем её событие OnMouseLeave
Button1.Visible:=true;
Button2.Visible:=false;

Удачи!

Ответ отправил: Alex Van Glukhman (статус: 7-ой класс)
Время отправки: 17 февраля 2007, 05:57
Оценка за ответ: 4

Ответ #2. Отвечает эксперт: Роман

Здравствуйте, Толков Геннадий Викторович!Используйте процедуру BringToFront.
Описание
Метод BringToFront позволяет изменять последовательность перекрытия компонентов на форме и тем самым управлять видимостью компонентов.
Перекрывающиеся компоненты на форме размещаются поверх друг друга в последовательности (называемой Z-последовательностью), соответствующей порядку размещения компонентов в процессе проектирования. Например, если вы поместили в одно и то же место формы две кнопки одинаковых размеров, то видна будет только вторая из размещенных кнопок, поскольку она расположена в Z-последовательности выше. Применение во время выполнения приложения метода BringToFront к нижней кнопке переместит ее наверх в Z
-последовательности и она станет видна пользователю.

Это справедливо по отношению к не оконным объектам, таким, как кнопки, метки, изображения и т.д., а также и к оконным компонентам, таким, как T
Memo, TComboBox и др. Но все не оконные компоненты всегда расположены в Z
-последовательности ниже оконных и метод BringToFront не может изменить это правило. Например, попытка перенести наверх методом BringToFront метку, размещенную под оконным компонентом, ни к чему не приведет.
1. Пусть вы хотите, чтобы в каком-то месте формы размещалась кнопка, которая в зависимости от текущего режима работы имела бы два различных набора свойств и выполняла бы различные функции. Вы можете разместить в нужном месте две кнопки друг на друге (пусть они имеют имена Button1 и Button2), задать каждой нужные свойства и для каждой описать соответствующие обработчики событий. Тогда для смены этих кнопок вы в соответствующих местах кода программы пишете операторы

Button1.BringToFront

или

Button2.BringToFront

и пользователь будет видеть то одну, то другую из этих кнопок.

2. Пусть в приложении в одном и том же месте формы друг на друге расположены две панели: Panel1 и на ней Panel2, содержащие какие-то управляющие компоненты для разных режимов работы. Panel2 расположена на Panel1, которая является, таким образом, ее родителем. В обработчик события формы OnCreate можно вставить операторы:

Panel2.Parent := Form1;
Panel2.BoundsRect := Panel1.BoundsRect;
Panel1.BringToFront;

Первый оператор делает родительским компонентом панели Panel2 форму Form1
. Второй оператор задает панели Panel2 то же местоположение и размеры, которые имеет панель Panel1. Последнее необходимо, поскольку при проектировании ее координаты соответствовали координатному пространству контейнера - клиентской области панели Panel1. А теперь ее родитель сменился на форму, и надо ее расположить в том же месте формы, в котором расположена Panel1. Третий оператор перемещает наверх форму Panel1.

Приведенный код можно сократить, и убрать из него первый оператор, если в процессе проектирования размещать панель Panel2 не на панели Panel1, а в каком-то другом месте непосредственно на форме. Тогда в обработчике события формы OnCreate достаточно двух операторов:

Panel2.BoundsRect := Panel1.BoundsRect;
Panel1.BringToFront;

изменяющих положение Panel2 и перемещающих наверх форму Panel1.
В результате работы приведенных операторов в момент создания формы на ней будет видна панель Panel1. В момент, когда ее надо заменить на Panel2
, можно выполнить оператор:

Panel2.BringToFront;

выносящий наверх вторую панель. Когда надо вернуть на экран изображение Panel1, можно выполнить операторы:

Panel1.BringToFront;

Ответ отправил: Роман (статус: 5-ый класс)
Время отправки: 17 февраля 2007, 11:03
Оценка за ответ: 4


Мини-форум вопроса

Всего сообщений: 2; последнее сообщение — 17 февраля 2007, 02:13; участников в обсуждении: 2.
Николай Рубан

Николай Рубан (статус: 10-ый класс), 17 февраля 2007, 01:23 [#1]:

Вы немного некорректно сформулировали вопрос...

Возможно Вам просто нужно...
Изначально видно только Button1, наведя мышкой на Button1, появится Button2, но Button1 - исчезнет. Так???

После чего убрав мы переводим указатель мыши на Button2, и когда мы убираем его с Button2 обратно появлялся Button1.

Я правильно понял???
mvp

mvp (статус: 4-ый класс), 17 февраля 2007, 02:13 [#2]:

у формы тоже есть такое событие - если кнопочка не совсем впритык к одной из границ формы, то используйте OnMouseMove формы, чтобы включить вторую кнопочку

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:35
Выполнено за 0.03 сек.