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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.05.2010, 21:37   #1
Dj_SheLL
Форумчанин
 
Аватар для Dj_SheLL
 
Регистрация: 14.10.2009
Сообщений: 128
Печаль Изменение AlphaBlend при наведении мыши

Что я хочу получить.Есть форма,на ней календарь.Значение для формы
Код:
AlphaBlendValue:=216;
При наведении на форму или календарь,должно меняться на
Код:
AlphaBlendValue:=255;
Кидаю в обработчик
Код:
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
Form1.AlphaBlendValue:=255;
end;
И тоже самое в OnMouseMove для календаря для прочности.
Вот при наведении всё работает правильно.Убираю мышь-эффект остаётся,хотя должен приобрести обратный по задумке.
Пробовал уменьшать значение в
Код:
procedure TForm1.sMonthCalendar1MouseLeave(Sender: TObject);
Не помогает,как было так и остаётся...
Что посоветуете?Поиск оказался "не в помощь".

Последний раз редактировалось Dj_SheLL; 05.05.2010 в 21:40.
Dj_SheLL вне форума Ответить с цитированием
Старый 05.05.2010, 22:35   #2
spamer
Software Developer
Старожил
 
Аватар для spamer
 
Регистрация: 19.12.2008
Сообщений: 2,070
По умолчанию

Обработчик для таймера :
Код:
procedure TForm1.Timer1Timer(Sender: TObject);
Var
  FormPos: TRect;
  CursorPos: TPoint;
Begin
  GetCursorPos(CursorPos );
  FormPos:=Rect(Form1.Left,Form1.Top,Form1.Left + Form1.Width,Form1.Top + Form1.Height);
  If PtInRect(FormPos, CursorPos) Then
    Begin
      AlphaBlendValue := 216;
    End
  Else
    Begin
      AlphaBlendValue := 255;
    End;
end;
Интервал таймера где-то в пределах от 5 до 10.

з.ы.
Цитата:
Поиск оказался "не в помощь"
Плохо ищем...ой как плохо...
Будь проще и люди к тебе потянутся
spamer вне форума Ответить с цитированием
Старый 05.05.2010, 23:32   #3
Terran
Участник клуба
 
Аватар для Terran
 
Регистрация: 28.11.2007
Сообщений: 1,521
По умолчанию

Цитата:
И тоже самое в OnMouseMove для календаря для прочности
Это лишнее.
Попробуйте такой вариант:
Код:
...
Private
    { Private declarations }
  Procedure CMMouseEnter(Var Msg:TMessage); Message CM_MOUSEENTER;
  Procedure CMMouseLeave(Var Msg: TMessage); Message CM_MOUSELEAVE;
...
Procedure TForm1.CMMouseEnter(Var Msg:TMessage);
Begin
Inherited;
Form1.AlphaBlendValue:=255;
End;
Procedure TForm1.CMMouseLeave(Var Msg: TMessage);
Begin
Inherited;
Form1.AlphaBlendValue:=216;
End;
Ловим системные сообщения {CM_MOUSEENTER CM_MOUSELEAVE}
Всегда рад помочь!
Terran вне форума Ответить с цитированием
Старый 06.05.2010, 00:20   #4
spamer
Software Developer
Старожил
 
Аватар для spamer
 
Регистрация: 19.12.2008
Сообщений: 2,070
По умолчанию

Terran, кстати, я вот как раз и хотел предложить ТС такой вариант решения, как ты написал, но почему-то у меня он работает через раз, из-за этого и не стал писать. Собственно хотел спросить, почему у меня он может не всегда срабатывать? т.е. иногда при наведении или убирании курсора - результат нулевой.
Будь проще и люди к тебе потянутся
spamer вне форума Ответить с цитированием
Старый 06.05.2010, 01:21   #5
Terran
Участник клуба
 
Аватар для Terran
 
Регистрация: 28.11.2007
Сообщений: 1,521
По умолчанию

У меня он хорошо работает когда через заголовок программы проходит курсор, а так тоже через раз... Причину почему так получается точно не знаю.
P.S. С таймером надёжней.
Всегда рад помочь!
Terran вне форума Ответить с цитированием
Старый 06.05.2010, 11:52   #6
x128
Форумчанин
 
Регистрация: 03.02.2010
Сообщений: 178
По умолчанию

как вариант:
Код:
var
  AValue, AStep: integer;

procedure TForm1.FormCreate(Sender: TObject);
begin
  AValue:=216;
  AlphaBlendValue:=AValue;
end;

procedure TForm1.FormMouseEnter(Sender: TObject);
begin
  AStep:=2;
  Timer1.Enabled:=true;
end;

procedure TForm1.FormMouseLeave(Sender: TObject);
begin
  AStep:=-2;
  Timer1.Enabled:=true;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  if InRange(AValue,216,255) then AValue:=EnsureRange(AValue+AStep,216,255) else Timer1.Enabled:=false;
  AlphaBlendValue:=AValue;
end;
AStep можно быть 1;-1 и скоростью управлять свойством Interval у таймера

Последний раз редактировалось x128; 06.05.2010 в 11:56.
x128 вне форума Ответить с цитированием
Старый 06.05.2010, 12:49   #7
Dj_SheLL
Форумчанин
 
Аватар для Dj_SheLL
 
Регистрация: 14.10.2009
Сообщений: 128
По умолчанию

Спасибо большое за столько вариантов!
Dj_SheLL вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Изменение изображения при наведении мышки? lionman Общие вопросы Delphi 24 12.06.2010 13:03
Подсказка при наведении курсора мыши Syltan JavaScript, Ajax 2 23.04.2010 15:31
Смена картинки при наведении мыши на меню Unknown-As HTML и CSS 4 31.03.2009 16:17
изменение цвета Panel при наведении мыша Kashp Компоненты Delphi 8 08.09.2007 10:18
Изменение вида Image при наведении указателя Сергей А Помощь студентам 3 05.08.2007 15:26