|
Вопрос # 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 (статус: 4-ый класс), 17 февраля 2007, 02:13 [#2]:
у формы тоже есть такое событие - если кнопочка не совсем впритык к одной из границ формы, то используйте OnMouseMove формы, чтобы включить вторую кнопочку
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|