| 
| 
 | Вопрос # 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 формы, чтобы включить вторую кнопочку |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |