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

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

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.01.2007, 09:27   #1
Аlex
Форумчанин
 
Регистрация: 16.11.2006
Сообщений: 175
По умолчанию мышь хвостатая...

Подскажите как так, чтобы при наведении мыши на форму изменялась прозрачность, А ПРИ УВЕДЕНИИ МЕНЯЛАСЬ ОБРАТНО?
проблема в основном в последнем....
чайник юзеру не товарищ, а сам себе враг...
Аlex вне форума Ответить с цитированием
Старый 24.01.2007, 12:52   #2
Virtson
Владимир М.
Участник клуба
 
Аватар для Virtson
 
Регистрация: 30.10.2006
Сообщений: 1,289
По умолчанию

проверять в таймере положение курсора мыши .
GetCursorPos()
Берегите друг друга!
Virtson вне форума Ответить с цитированием
Старый 25.01.2007, 02:15   #3
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

А еще у формы есть событие OnMouseMove.
Вот как раз, начиная с него и можно запускать таймер.
mihali4 вне форума Ответить с цитированием
Старый 25.01.2007, 20:09   #4
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,804
По умолчанию

тогда как узнать что мышка ушла с формы
rpy3uH вне форума Ответить с цитированием
Старый 26.01.2007, 02:29   #5
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
тогда как узнать что мышка ушла с формы
Ответ:
Цитата:
проверять в таймере положение курсора мыши .
GetCursorPos()
Только не на форме, а на скрине, т.е. глобальные координаты мыши.
mihali4 вне форума Ответить с цитированием
Старый 28.01.2007, 01:41   #6
SuperVisor
Павел Сергеевич
Форумчанин
 
Регистрация: 05.11.2006
Сообщений: 665
Лампочка

Поломал немного голову... Сначала форма моргала, теперь работает, как часы.

Timer1:
Enabled = False;
Interval = 1;

Timer2:
Enabled = False;
Interval = 3;

Timer3:
Enabled = True;
Interval = 100;

Полний рабочий код:
Код:
 
procedure TForm1.Timer1Timer(Sender: TObject);
begin
if AlphaBlendValue<>255 then AlphablendValue:=AlphablendValue+5 else Timer1.Enabled:=False;
end;
 
procedure TForm1.FormActivate(Sender: TObject);
begin
 Timer2.Enabled:=False;
 Timer1.Enabled:=True;
end;
 
procedure TForm1.Timer2Timer(Sender: TObject);
begin
if AlphaBlendValue<>150 then AlphablendValue:=AlphablendValue-5 else Timer2.Enabled:=False;
end;
 
procedure TForm1.FormDeactivate(Sender: TObject);
begin
 Timer1.Enabled:=False;
 Timer2.Enabled:=True;
end;
 
procedure TForm1.Timer3Timer(Sender: TObject);
var
 Pt: TPoint;
  function GetPrnt(Hndl: HWND): boolean;
  begin
   Result:=false;
   while (hndl <> Form1.Handle) do
    begin
     Hndl:=GetParent(hndl);
     if hndl = 0 then break;
    end;
    if hndl <> 0 then Result:=true;
  end;
begin
GetCursorPos(Pt);
if not (timer1.Enabled or timer2.Enabled) then
 if (GetPrnt(GetFocus) or GetPrnt(WindowFromPoint(Pt))) then
 begin
   if (AlphaBlendValue<>255) then FormActivate(self)
  end else
   if (AlphaBlendValue<>150) then FormDeactivate(self);
end;
 
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
 if (AlphaBlendValue<>255) and (not Timer1.Enabled) then FormActivate(self);
end;
end.
Познавая других, мы познаем себя.
С'est la vie...
SuperVisor вне форума Ответить с цитированием
Старый 28.01.2007, 13:45   #7
psyke
Пользователь
 
Аватар для psyke
 
Регистрация: 08.01.2007
Сообщений: 41
По умолчанию

О! значит я не один такой
я бился с этим вопросом неделю, и пришёл к выводу, что тут нада действовать окольными путями. простыми событиями onmousexxx, prinrect...это не решишь. да и у некоторых компонентов нет такого события вообще и получается так, что мышь на форме, а она гаснуть начинает.
psyke вне форума Ответить с цитированием
Старый 19.02.2007, 14:54   #8
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

привет, я считаю что подход к форме как Scroll компонент - т.к. он и является предком TForm )) так что на TForm так же действуют сообщения, такие как CM_MOUSEENTER и CM_MOUSELEAVE по этому логично следующее

Код:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
  private
      procedure CMMOUSEENTER(var Message: TMessage); message CM_MOUSEENTER;
      procedure CMMOUSELEAVE(var Message: TMessage); message CM_MOUSELEAVE;
  public
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.CMMOUSEENTER;
begin
      AlphaBlendValue := 150;
end;

procedure TForm1.CMMOUSELEAVE;
begin
      AlphaBlendValue := 255;
end;

end.
разумеется предварительно включить в инспекторе Form.AlphaBlend = True дерзайте...

Последний раз редактировалось BOBAH13; 19.02.2007 в 14:56.
BOBAH13 вне форума Ответить с цитированием
Старый 13.03.2007, 20:36   #9
Аlex
Форумчанин
 
Регистрация: 16.11.2006
Сообщений: 175
Счастье

ВОВАН13 - ! Самый то.
чайник юзеру не товарищ, а сам себе враг...
Аlex вне форума Ответить с цитированием
Старый 16.01.2008, 15:50   #10
Аlex
Форумчанин
 
Регистрация: 16.11.2006
Сообщений: 175
По умолчанию

попутно возник такой вопрос: как отловить клик на Screen-e. т.е нужно чтобы user указал окно, а программа с помощью функции WindowFromPoint передала нме указатель на это окно типа HWND.
Не через Hook ли надо делать? можт как нить проще можно?
чайник юзеру не товарищ, а сам себе враг...
Аlex вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Мышь Михаил Юрьевич Общие вопросы Delphi 8 09.06.2008 11:23
мышь в паскале. Iceman Паскаль, Turbo Pascal, PascalABC.NET 6 10.03.2008 14:50
Уматная мышь Sibedir Свободное общение 8 21.01.2008 15:27
Мышь многокнопочная NoName_emaNoN Win Api 9 14.12.2007 14:31
Мышь kl45gp Общие вопросы Delphi 7 16.06.2007 22:47