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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.06.2009, 12:37   #1
blackstersl
Форумчанин
 
Аватар для blackstersl
 
Регистрация: 23.08.2008
Сообщений: 374
Вопрос "Выезжающая" панель.

Привет всем. Как можно сделать "Выезжающую" панель, тоесть при наведении мышки на панель или близко возле неё, то панель выезжает из за экрана(снизу), а если отвести мышку, то она обратно залазит под экран. Подскажите что делать, или ссылочку какую-то подкиньте. Спасибо.
blackstersl вне форума Ответить с цитированием
Старый 07.06.2009, 12:59   #2
Neeter
Форумчанин
 
Аватар для Neeter
 
Регистрация: 22.02.2009
Сообщений: 875
По умолчанию

Проверяйте текущую позицию мыши где-нибудь в таймере.
вот как можно ее узнать:
Код:
var
 p: TPoint;
begin
 GetCursorPos(p);
 edit1.text := IntToStr(p.x);
 edit2.text := IntToStr(p.y);
end;
или так:
Код:
begin
 edit1.text := IntToStr(Mouse.CursorPos.x);
 edit2.text := IntToStr(Mouse.CursorPos.y);
end;
И соотносите их с позицией панели или просто нижней части экрана.
Screen.Height и Screen.Width - размеры экрана
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство.

Последний раз редактировалось Neeter; 07.06.2009 в 13:01.
Neeter вне форума Ответить с цитированием
Старый 07.06.2009, 13:00   #3
Ntlegend
Форумчанин
 
Аватар для Ntlegend
 
Регистрация: 12.05.2007
Сообщений: 373
По умолчанию

в таймере проверяешь положение мыши (GetCursorPos) если мыша находится в определённом прямоугольнике (PtInRect) то меняешь Left и/или Top своей формы.. их можна менять тоже по таймеру, чтобы был эфект плавного появления/исчезновения
Перемен! - требуют наши сердца. Перемен! - требуют наши глаза.
В нашем смехе и в наших слезах, И в пульсации вен:
"Перемен!Мы ждем перемен!"
Ntlegend вне форума Ответить с цитированием
Старый 07.06.2009, 13:19   #4
blackstersl
Форумчанин
 
Аватар для blackstersl
 
Регистрация: 23.08.2008
Сообщений: 374
По умолчанию

если честно я ничё не понял -( а вы можете это как то показать?
blackstersl вне форума Ответить с цитированием
Старый 07.06.2009, 13:30   #5
Ntlegend
Форумчанин
 
Аватар для Ntlegend
 
Регистрация: 12.05.2007
Сообщений: 373
По умолчанию

если мыша находится по середине экрана (по вертикали) и достигает правого края (последние 5 пикселей) - то ставим выравнивание формы по правому краю экрана, когда мышь покидает форму - то прячем обратно:

Код:
procedure TForm1.Timer1Timer(Sender: TObject);
var p:TPoint;
begin
GetCursorPos(p);//узнаем позицыю курсора
if ((p.Y>200)and(p.Y<468))and(p.X>Screen.Width-5)
//проверяем местоположение курсора Y - вертикаль,Х -горизонталь
 then begin
  Form1.Align:=alRight;
//ставим выравнивание по провому краю экрана

  SetWindowPos(Self.Handle, HWND_TOPMOST, Left, Top, Width, Height,
               SWP_NOACTIVATE or SWP_NOMOVE or SWP_NOSIZE);
//делаем форму поверх всех окон
 end;
if (p.X<Form1.Left-5)
//если мыша находится левее формы
 then begin
  Form1.Align:=alNone;
//ставим свободное выравнивание
  Form1.Left:=Screen.Width+5;
//и убираем за правый край экрана
 end;
end;
Перемен! - требуют наши сердца. Перемен! - требуют наши глаза.
В нашем смехе и в наших слезах, И в пульсации вен:
"Перемен!Мы ждем перемен!"
Ntlegend вне форума Ответить с цитированием
Старый 07.06.2009, 14:59   #6
DeDoK
Форумчанин
 
Аватар для DeDoK
 
Регистрация: 05.11.2007
Сообщений: 392
По умолчанию

неправильно, пиши так
Код:
procedure TForm1.Button1Click(Sender : TObject);
begin
AnimateWindow(form2.handle, 600, AW_HOR_POSITIVE or AW HOR_SLIDE or AW_HOR_ACTIVATE;
end;
procedure TForm1.Button2Click(Sender:TObject);
begin
AnimateWindow(form2.Hadle, 600, AW_HOR_NEGATIVE or AW_HIDE);
end;
и будет тебе счатье. это делается для форм. но я думаю можно попробовать и под панели.
DeDoK вне форума Ответить с цитированием
Старый 07.06.2009, 17:04   #7
blackstersl
Форумчанин
 
Аватар для blackstersl
 
Регистрация: 23.08.2008
Сообщений: 374
По умолчанию

Всем спасибо за ответ -)
blackstersl вне форума Ответить с цитированием
Старый 08.06.2009, 11:55   #8
blackstersl
Форумчанин
 
Аватар для blackstersl
 
Регистрация: 23.08.2008
Сообщений: 374
По умолчанию

Я вот немного переделал, но проблема в том что форма всё время опускаеьтся, как её остановить? Спасибо.

Код:
procedure TForm1.Timer6Timer(Sender: TObject);
var
 pos:tpoint;
begin
if form4.sRadioButton2.Checked = true then
begin
getcursorpos(pos);
if range <> 0 then
form1.Top := form1.top + range;

end;


procedure TForm1.Timer7Timer(Sender: TObject);
 var
    pos: TPoint;
  begin
  if form4.sRadioButton2.Checked = true then
  begin
    GetCursorPos (pos);
    if pos.y > Form5.height then range := 1;
end;
end;
blackstersl вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
блок "cont" с права не принимает значение "margin: 10px;" которое описано в body tabikA HTML и CSS 5 24.02.2009 21:50
Под прикрытием "кризиса" наши доблестные "управители" хотят утопить нас в радиоактивных отходах mihali4 Свободное общение 1 17.01.2009 01:43
если пользователь наберет какой-то другой символ не "y" или "n" и нажмет enter, программа проигнорирует skobets Общие вопросы C/C++ 2 03.06.2008 06:51
Цветовая палитра и "Панель управления" Xaerl Общие вопросы Delphi 5 31.05.2008 16:43