Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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


Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы
Старый 25.01.2008, 10:04   #1
JoanM
Дешево пишу проги)
Форумчанин Подтвердите свой е-майл
 
Аватар для JoanM
 
Регистрация: 12.12.2006
Сообщений: 106
По умолчанию Mouse Exit для TForm

Здравствуйте все!

Вопрос такой:
Как принять формой такие события мышкой, как наведение на форму и выход мышки за поля формы?
Если не понятно, то по-другому:
Как сделать альтернативу MouseEnter и MouseLeave компонента TLabel для TForm?
JoanM вне форума
Старый 25.01.2008, 10:19   #2
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Вариантов достаточно например 1е в голову влетело это таймер и WindowFromPoint Тем более форма это также контрол и получает такие сообщения CM_MOUSEENTER и CM_MOUSELEAVE ( вроде верно ) и пробывать ловить их через Application -> в нем есть обработчик сообщений. Я это так написал, проверять не проверял... Но поидеи должно получиться
BOBAH13 вне форума
Старый 25.01.2008, 10:20   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,840
По умолчанию

Код:
unit Unit1;

interface

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

type

  TForm1 = class(TForm)
    procedure p(var w:TMessage); message CM_MOUSELEAVE;
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.p(var w: TMessage);
begin
caption:=caption+'1';
end;

end.
Stilet вне форума
Старый 25.01.2008, 10:29   #4
JoanM
Дешево пишу проги)
Форумчанин Подтвердите свой е-майл
 
Аватар для JoanM
 
Регистрация: 12.12.2006
Сообщений: 106
По умолчанию

Не то...
Не работает должным образом.
А расскажи алгоритм WindowFromPoint!
JoanM вне форума
Старый 25.01.2008, 10:32   #5
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Этот способ немного не корректен
Ну на таймере проверяй возвращаемый хендл окна WindowFromPoint если он равен твоему окну иначе мышь не над ним... думаю сработает

Последний раз редактировалось BOBAH13; 25.01.2008 в 10:35.
BOBAH13 вне форума
Старый 25.01.2008, 10:36   #6
JoanM
Дешево пишу проги)
Форумчанин Подтвердите свой е-майл
 
Аватар для JoanM
 
Регистрация: 12.12.2006
Сообщений: 106
По умолчанию

Блин! Что делать...
JoanM вне форума
Старый 25.01.2008, 10:39   #7
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Вот попробывал и что делаем в обработчике таймера:
Код:
var
  h: THandle;
begin
  h := WindowFromPoint(Mouse.CursorPos);
  while True do
  begin
    if GetParent(h) = 0 then
      Break;
    h := GetParent(h);
  end;
  if h = Handle then
    Caption := 'On mouse' else
    Caption := 'Off mouse';
end;
BOBAH13 вне форума
Старый 25.01.2008, 10:41   #8
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

В обработчике WM_MOUSEMOVE (WM_NCMOUSEMOVE) вызывается TrackMouseEvent, которая в зависимости от флагов и наших желаний дает WM_NCMOUSEHOVER, WM_NCMOUSELEAVE, WM_MOUSEHOVER, WM_MOUSELEAVE.
B_N вне форума
Старый 25.01.2008, 10:47   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,840
По умолчанию

Цитата:
Блин! Что делать...
А чем CM_MOUSELEAVE; для формы не устраивает?
Stilet вне форума
Старый 25.01.2008, 10:47   #10
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

А ты закинь панельку с Align = alClient
И пробуйте быстро выводить мышку за границы формы, посмотрю я на ваши сообщения
BOBAH13 вне форума
Закрытая тема

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Mouse самовольничает! Altera Железо 13 06.04.2008 19:26
TService+TForm Viteef Общие вопросы Delphi 0 25.02.2008 09:13
Что означает TForm1 = class(TForm)>/STRONG> metamfetamin Помощь студентам 6 11.11.2007 23:40