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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.01.2008, 22:04   #11
Никки
Форумчанин Подтвердите свой е-майл
 
Аватар для Никки
 
Регистрация: 20.11.2007
Сообщений: 500
По умолчанию

попробуй по таймеру проверять координаты курсора мыши. Если координаты лежат например в прямоугольнике от Labe1.Left до Label1.Left+Label1.Width (это ширина) и от Labe1.Top до Label1.Top+Label1.Height (это высота), то значит курсор находится над объектом Labe1!!
Никки вне форума Ответить с цитированием
Старый 21.01.2008, 23:14   #12
Лубышев
Участник клуба
 
Аватар для Лубышев
 
Регистрация: 23.07.2007
Сообщений: 1,054
По умолчанию

Я это пробывал, конечно здорово, но сам посуди, это не рационально...
Программа конечно будет работать, но не лучшим образом. А если бы была большущая программа? Процессор занят был бы какимито пустяками, а не делом. (Нужна оптимизация)
Писано по д'Эльфийски
Лубышев вне форума Ответить с цитированием
Старый 22.01.2008, 19:07   #13
)Игнат(
Форумчанин
 
Регистрация: 06.01.2008
Сообщений: 180
По умолчанию

Задам вопрос проще: какое событие отменяет событие OnMouseMove?
)Игнат( вне форума Ответить с цитированием
Старый 22.01.2008, 20:22   #14
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
Сообщение от )Игнат( Посмотреть сообщение
Задам вопрос проще: какое событие отменяет событие OnMouseMove?
Виндовое сообщение CM_MOUSELEAVE, я же описал...
А таймер использовать - это ... (ну нет слов, окромя матерных)
Цитата:
А если бы не знал своего события
Ну ваще... Это как это? Предусмотреть надо, любезный. "Защита от дурака" называется, второй пункт заповедей программиста...

Последний раз редактировалось mihali4; 22.01.2008 в 21:08.
mihali4 вне форума Ответить с цитированием
Старый 22.01.2008, 21:00   #15
Никки
Форумчанин Подтвердите свой е-майл
 
Аватар для Никки
 
Регистрация: 20.11.2007
Сообщений: 500
По умолчанию

А если бы не знал своего события, то как бы вышел из ситуации?
Никки вне форума Ответить с цитированием
Старый 22.01.2008, 21:52   #16
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

если уж извращаца, то для всех контролов формы пишем в OnMouseMove:
ActiveControl := TControl(Sender);
в классе формы дописываем:
Код:
...
private
  FActiveControl: TControl;
  procedure SetActiveControl(value: TControl);
public
  property ActiveControl: TControl read FActiveCOntrol write SetActiveControl;
...
end;
...
procedure TForm1.SetActiveControl(value: TControl);
begin
  if (FActiveControl <> value) then
  begin
    // Выполняем нужный код. value - контрол на который навели мышку, а FActiveControl - с которого увели мышь
    FActiveControl := value;
  end;
end;
у формы можно написать в OnMouseMove:
ActiveControl := nil;
ну и проверки ставить на nil
ЗЫ. писал здесь, так что может где и ошибся
pu4koff вне форума Ответить с цитированием
Старый 22.01.2008, 22:11   #17
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
для всех контролов формы пишем в OnMouseMove
Не ловится зачастую событие "ухода", поэтому и используем OnMouseLeave... Попробуйте на быстром движении мышки. А вот OnMouseLeave срабатывает безупречно...
mihali4 вне форума Ответить с цитированием
Старый 22.01.2008, 22:16   #18
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Цитата:
Сообщение от mihali4 Посмотреть сообщение
Не ловится зачастую событие "ухода", поэтому и используем OnMouseLeave... Попробуйте на быстром движении мышки. А вот OnMouseLeave срабатывает безупречно...
блин. я вот забыл про уход с формы. а так ведь если внутри формы ездить, то у какого-нибудь контрола да обработаеца OnMouseMove, но всеравно мое предложение - извращение )
ЗЫ. я этим никогда не пользовался и никому не советую, но всеже это помойму несколько лучше, чем по таймеру определять
pu4koff вне форума Ответить с цитированием
Старый 22.01.2008, 22:41   #19
Романнн
Пользователь
 
Регистрация: 04.11.2007
Сообщений: 64
По умолчанию

мнение ламера:
делаем событие на тик таймера, при котором в переменную записывается глобальное положение курсора мыши, и сравнивается с предыдущим. if положение = предыдущему, то движение мыши завершено, else движение мыши продолжается...
таймер поставить на 1 сек где-то
и далее, если движение закончено, то выполнить какое угодно действие
p.s. лично я так понял смысл вопроса...
Романнн вне форума Ответить с цитированием
Старый 22.01.2008, 23:10   #20
Романнн
Пользователь
 
Регистрация: 04.11.2007
Сообщений: 64
По умолчанию

вот,собственно,код:
Код:
unit Unit11;

interface

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

type
  TForm11 = class(TForm)
    Button1: TButton;
    Timer1: TTimer;
    procedure Timer1Timer(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form11: TForm11;
  point1,point2:tpoint;
implementation

{$R *.dfm}

procedure TForm11.FormCreate(Sender: TObject);
begin
point1:=mouse.CursorPos;//получаем текущее положение курсора
end;

procedure TForm11.Timer1Timer(Sender: TObject);
begin
point2:=mouse.CursorPos; //обновляем положение курсора
if (point2.X=point1.X) and (point2.Y=point1.Y) then //сравниваем старое с новым-если отличается,то...
button1.Visible:=false else
begin
button1.Visible:=true;
point1:=mouse.CursorPos;//обновляем положение курсора
end;
end;

end.
и проект...
процессор,естественно,нисколько не грузится
Вложения
Тип файла: rar Timer.rar (8.3 Кб, 8 просмотров)

Последний раз редактировалось Романнн; 22.01.2008 в 23:14.
Романнн вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Форма остаётся видимой при Visible=False Viteef Общие вопросы Delphi 10 23.02.2015 08:07
Visible [Smarik] Помощь студентам 2 28.03.2008 18:01
Panel1.Visible:=true s-force Компоненты Delphi 7 30.08.2007 02:22