Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Компоненты Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.11.2011, 20:46   #1
IHaveQuestions
Пользователь
 
Регистрация: 08.08.2011
Сообщений: 19
По умолчанию Динамичная панель - Можно ли сделать так чтобы панель или любой элемент, выдвигались при наведении

Можно ли сделать так чтобы панель или любой элемент, выдвигались при наведении. Чтобы при наведении элемент сдвигался на небольшое расстояние
IHaveQuestions вне форума Ответить с цитированием
Старый 27.11.2011, 20:58   #2
kettanaito
Веб-дизайнер
Форумчанин
 
Аватар для kettanaito
 
Регистрация: 11.08.2011
Сообщений: 305
По умолчанию

Делаешь необходимое действие на событие наведения мышки (onMouseEnter) и событие, когда мышка покидает компонент (onMouseLeave). Т.е. если я хочу увеличить длину панели на 100 при наведении:
Код:
procedure TForm1.Panel1MouseEnter(Sender: TObject);
begin
Panel1.Width:=Panel1.Width+1;
end;
kettanaito вне форума Ответить с цитированием
Старый 29.11.2011, 18:31   #3
IHaveQuestions
Пользователь
 
Регистрация: 08.08.2011
Сообщений: 19
По умолчанию

Цитата:
Сообщение от kettanaito Посмотреть сообщение
Делаешь необходимое действие на событие наведения мышки (onMouseEnter) и событие, когда мышка покидает компонент (onMouseLeave). Т.е. если я хочу увеличить длину панели на 100 при наведении:
Код:
procedure TForm1.Panel1MouseEnter(Sender: TObject);
begin
Panel1.Width:=Panel1.Width+1;
end;
Проблема в том, что в компоненте Label нет OnMouseEnter и Leave. Если делать это кликом, то он тупо будет постоянно растягивать Label.
IHaveQuestions вне форума Ответить с цитированием
Старый 29.11.2011, 18:54   #4
_Колибри_
Пользователь
 
Аватар для _Колибри_
 
Регистрация: 22.10.2011
Сообщений: 15
По умолчанию

Цитата:
Сообщение от IHaveQuestions Посмотреть сообщение
Проблема в том, что в компоненте Label нет OnMouseEnter и Leave.
У TLable есть события OnMouseLeave и OnMouseMove.
_Колибри_ вне форума Ответить с цитированием
Старый 29.11.2011, 23:06   #5
IHaveQuestions
Пользователь
 
Регистрация: 08.08.2011
Сообщений: 19
По умолчанию

А компонент Panel как с ним быть
IHaveQuestions вне форума Ответить с цитированием
Старый 30.11.2011, 00:44   #6
ProgerWin
 
Аватар для ProgerWin
 
Регистрация: 28.11.2011
Сообщений: 9
По умолчанию

Положи на форму 1 панель и 2 таймера
один таймер будет ее выдвигать а другой убирать
У первого таймера поставь имя Name = tmrPanelIn а у второго tmrPanelOut
Интервалы Interval у обоих 25

Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls;

type
  TForm1 = class(TForm)
    Panel1: TPanel;
    tmrPanelIn: TTimer;
    tmrPanelOut: TTimer;
    procedure Panel1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure tmrPanelInTimer(Sender: TObject);
    procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure tmrPanelOutTimer(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Panel1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  tmrPanelIn.Enabled:= True;
  tmrPanelOut.Enabled:= False;
end;

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  tmrPanelOut.Enabled:= True;
  tmrPanelIn.Enabled:= False;
end;

procedure TForm1.tmrPanelInTimer(Sender: TObject);
begin
  if Panel1.Top < 0 then
    Panel1.Top:= Panel1.Top + 1  // при каждом срабатывании этого таймера панель передвигаеться на 1 пиксел
  else
    tmrPanelIn.Enabled:= False;
end;

procedure TForm1.tmrPanelOutTimer(Sender: TObject);
begin
  if Panel1.Top >= -Panel1.Height + 10 then // на 10 пикселей она будет видна
    Panel1.Top:= Panel1.Top - 1
  else
    tmrPanelOut.Enabled:= False;
end;



end.

Последний раз редактировалось ProgerWin; 30.11.2011 в 00:48.
ProgerWin вне форума Ответить с цитированием
Старый 30.11.2011, 08:54   #7
IHaveQuestions
Пользователь
 
Регистрация: 08.08.2011
Сообщений: 19
По умолчанию

Не работает. Когда я запускаю программу, панель начинает без остановки ехать вверх, вне зависимости от того где находится курсор. И остановить её нельзя
IHaveQuestions вне форума Ответить с цитированием
Старый 30.11.2011, 09:49   #8
Zer0
Форумчанин
 
Аватар для Zer0
 
Регистрация: 13.12.2007
Сообщений: 788
По умолчанию

Отключите таймеры изначально
благодарность - сюда (не забываем писать от кого)
Zer0 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как сделать, чтобы DBGrid не перекрывала панель? ГОСЕАН Помощь студентам 3 26.10.2011 09:04
как сделать так,чтобы он левой рукой до стены коснулся? и если можно чтобы двери лифта закрылись maxon56 Паскаль, Turbo Pascal, PascalABC.NET 0 07.06.2011 18:46
!!! Можно ли сделать так,чтобы программа в Delphi работала с самим компьютером?!!! kotaina Общие вопросы Delphi 19 07.04.2011 13:40
Возможно ли сделать так,чтобы при наведении на ячейку с названием делали высвечивалась крупным планом Кама Microsoft Office Excel 6 15.07.2010 14:57
Как создать программу-панель (как панель Msoffice), чтобы была поверх всех окон Romanbl4 Общие вопросы Delphi 6 27.06.2007 17:23