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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.08.2011, 15:53   #11
fate
Форумчанин
 
Аватар для fate
 
Регистрация: 17.03.2009
Сообщений: 318
По умолчанию

Цитата:
В новых версиях есть
а в старых можно сделать, вот:

Цитата:
procedure CMMouseEnter(var msg:TMessage); message CM_MOUSEENTER;
procedure CMMouseLeave(var msg: TMessage); message CM_MOUSELEAVE;
..
..
..
procedure MyComponent.CMMouseEnter(var msg:TMessage);
begin

inherited;
{действия на вход мыши в область компонента}
end;

procedure MyComponent.CMMouseLeave(var msg: TMessage);
begin

inherited;
{действия на покидание мыши области компонента}
end;
Цитата:
можно и с OnMoveMouse замутить
конечно можно, немного сноровки логики и все будет ок
fate вне форума Ответить с цитированием
Старый 30.08.2011, 16:00   #12
KAMENYKA
Пользователь
 
Аватар для KAMENYKA
 
Регистрация: 06.12.2007
Сообщений: 87
По умолчанию

Цитата:
Сообщение от fate Посмотреть сообщение
delphi 7 ?
Да семерка.
KAMENYKA вне форума Ответить с цитированием
Старый 30.08.2011, 16:02   #13
chertovich
Форумчанин
 
Аватар для chertovich
 
Регистрация: 26.07.2009
Сообщений: 489
По умолчанию

Код:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Panel1: TPanel;
    Timer1: TTimer;
    procedure Timer1Timer(Sender: TObject);
//    procedure Panel1MouseEnter(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Panel1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
  private
    { Private declarations }
  public
    procedure Clip(Enabled: Boolean = True);
  end;

var
  Form1: TForm1;
  Enter: Boolean = False;

implementation

{$R *.dfm}

procedure TForm1.Clip(Enabled: Boolean);
var
  R: TRect;
begin
  if Enabled then
  begin
    R.Left := Left + Panel1.Width + 6;
    R.Top := Top;
    R.Right := Screen.Width - 100;
    R.Bottom := Screen.Height - 100;
    ClipCursor(@R);
  end
  else
    ClipCursor(nil);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Panel1.Align := alLeft;
  Timer1.Enabled := False;
  Timer1.Interval := 500; {0.5 секунды}
end;

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  Enter := False;
end;

procedure TForm1.Panel1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  if not Enter then
  begin
    Clip;
    Timer1.Enabled := True;
    Enter := True;
  end;
end;

//procedure TForm1.Panel1MouseEnter(Sender: TObject);
//begin
//  Clip;
//  Timer1.Enabled := True;
//end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  Clip(False);
  Timer1.Enabled := False;
//  Enter := True;
end;

end.
Пробуйте
Вложения
Тип файла: rar Ограничение перемещения.rar (8.2 Кб, 6 просмотров)
Если в глубине души вы программист, то, следуя своим наклонностям, вы захотите написать кусок кода.

Последний раз редактировалось chertovich; 30.08.2011 в 16:55.
chertovich вне форума Ответить с цитированием
Старый 30.08.2011, 16:46   #14
KAMENYKA
Пользователь
 
Аватар для KAMENYKA
 
Регистрация: 06.12.2007
Сообщений: 87
По умолчанию

Код:
procedure TSPMainForm.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
  var R: PRect;
begin
  inherited;
  IsClip := False;
end;

procedure TSPMainForm.dcsMenuMouseMove(Sender: TObject; Shift: TShiftState;
  X, Y: Integer);
  var foo: TPoint;
begin
  inherited;
  if not IsClip then
  begin
    Clip(True);
    Timer1.Enabled := True;
    IsClip := True;
  end;
end;

procedure TSPMainForm.Clip(Enabled: Boolean);
  var R: TRect;
      foo: TPoint;
begin
  if Enabled then
  begin
    R.Left := Left + dcsMenu.Width + 6;
    R.Top := Top;
    R.Right := Screen.Width - 100;
    R.Bottom := Screen.Height - 100;
    ClipCursor(@R);
  end
  else begin
    GetCursorPos(foo);
    ClipCursor(nil);
    SetCursorPos(foo.X - 2, foo.Y);
  end;
end;

procedure TSPMainForm.Timer1Timer(Sender: TObject);
begin
  inherited;
  Clip(False);
  Timer1.Enabled := False;
end;
Пишу так, но курсор категорически не хочет переходить на панель, дебажить практически невозможно так как событие срабатывает слишком часто и активным становиться окно кода.
KAMENYKA вне форума Ответить с цитированием
Старый 30.08.2011, 17:10   #15
chertovich
Форумчанин
 
Аватар для chertovich
 
Регистрация: 26.07.2009
Сообщений: 489
По умолчанию

Чтобы этот код работал нормально, необходимо чтобы форма была "чиста", то есть при покидании панели
Код:
IsClip := False;
Если на форме что-то находится, то эт код надо "пихать" туда, в OnMouseMove этого компонента
Если в глубине души вы программист, то, следуя своим наклонностям, вы захотите написать кусок кода.
chertovich вне форума Ответить с цитированием
Старый 30.08.2011, 17:19   #16
KAMENYKA
Пользователь
 
Аватар для KAMENYKA
 
Регистрация: 06.12.2007
Сообщений: 87
По умолчанию

Пока нечего не получилось, буду дальше пробовать, кстати в вашей программе курсор тоже не попадает на панель не через пол секунды, не через минуту )))
Большое спасибо за помощь вы мне очень помогли надеюсь скоро добью эту проблему.
KAMENYKA вне форума Ответить с цитированием
Старый 30.08.2011, 17:20   #17
fate
Форумчанин
 
Аватар для fate
 
Регистрация: 17.03.2009
Сообщений: 318
По умолчанию

Цитата:
Если на форме что-то находится, то эт код надо "пихать" туда, в OnMouseMove этого компонента
зачем? а параметр Sender на что?
fate вне форума Ответить с цитированием
Старый 30.08.2011, 17:23   #18
chertovich
Форумчанин
 
Аватар для chertovich
 
Регистрация: 26.07.2009
Сообщений: 489
По умолчанию

Цитата:
Сообщение от KAMENYKA Посмотреть сообщение
Пока нечего не получилось, буду дальше пробовать, кстати в вашей программе курсор тоже не попадает на панель не через пол секунды, не через минуту )))
Большое спасибо за помощь вы мне очень помогли надеюсь скоро добью эту проблему.
Странно, у меня все работает. пусть кто-нить проверить у себя
Если в глубине души вы программист, то, следуя своим наклонностям, вы захотите написать кусок кода.
chertovich вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
уберите курсор (в конце программы верните курсор), HECTOR.A. Паскаль, Turbo Pascal, PascalABC.NET 2 05.06.2009 20:10
Курсор soonner Общие вопросы Delphi 3 11.05.2009 19:46
Курсор wolf950 Помощь студентам 3 13.11.2008 22:24
Курсор RealSHELS Общие вопросы Delphi 2 12.05.2008 12:51
курсор steck Общие вопросы Delphi 2 02.04.2007 22:45