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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.08.2011, 12:14   #1
KAMENYKA
Пользователь
 
Аватар для KAMENYKA
 
Регистрация: 06.12.2007
Сообщений: 87
По умолчанию Работа с курсор

Доброе времени суток! На форме с лева есть «фрэйм» с элементами меню(в принципе окно с деревом), как можно реализовать «скачок мыши», тобиш я виду курсор подвожу к границе этого фрейма он стоит к примеру 2 секунды а потом тока попадает на этот фрейм, но при условии что курсор не сдвинули с границы. Чтоб было понятней это нужно для избежание случайного клика по пункту меню, получается что пользователь сознательно нажал на пункте меню.
Пробовал функцию ClipCursor в принципе устраивает, но не понятно на какое событие его вешать, потому что если повесить на FormMouseMov, даже с признаком чтобы выполнялось 1 раз то вылетает ошибка к доступу памяти, может кто то реализовывал что то подобное подскажите пожалуйста.
KAMENYKA вне форума Ответить с цитированием
Старый 30.08.2011, 12:45   #2
chertovich
Форумчанин
 
Аватар для chertovich
 
Регистрация: 26.07.2009
Сообщений: 489
По умолчанию

Можно попробывать OnEnter (или OnMouseMove). Отсчитывать время таймером. Лучше все продумать, ведь не всем пользователям это понравится, но в настройках можно добавить возможность настройки
Если в глубине души вы программист, то, следуя своим наклонностям, вы захотите написать кусок кода.
chertovich вне форума Ответить с цитированием
Старый 30.08.2011, 13:08   #3
KAMENYKA
Пользователь
 
Аватар для KAMENYKA
 
Регистрация: 06.12.2007
Сообщений: 87
По умолчанию

Пост выше мне кажется не несет в себе не какой смысловой нагрузке, но все же спасибо за помощь, тема еще актуальна!
KAMENYKA вне форума Ответить с цитированием
Старый 30.08.2011, 14:40   #4
chertovich
Форумчанин
 
Аватар для chertovich
 
Регистрация: 26.07.2009
Сообщений: 489
По умолчанию

Цитата:
Сообщение от KAMENYKA Посмотреть сообщение
Пост выше мне кажется не несет в себе не какой смысловой нагрузке
Цитата:
Пробовал функцию ClipCursor в принципе устраивает, но не понятно на какое событие его вешать
Ну почему же? это половина действий. Вторая половина: ограничение перемещения курсора мыши. Это можно сделать разными способами.
Цитата:
вылетает ошибка к доступу памяти
Потому что руки не от туда растут, в наше время это еще актуально.
Прежде чем просить помощи, необходимо предъявить свой исходник или хотя бы листинг.
Если в глубине души вы программист, то, следуя своим наклонностям, вы захотите написать кусок кода.
chertovich вне форума Ответить с цитированием
Старый 30.08.2011, 15:03   #5
KAMENYKA
Пользователь
 
Аватар для KAMENYKA
 
Регистрация: 06.12.2007
Сообщений: 87
По умолчанию

Цитата:
Сообщение от chertovich Посмотреть сообщение
Ну почему же? это половина действий. Вторая половина: ограничение перемещения курсора мыши. Это можно сделать разными способами.

Потому что руки не от туда растут, в наше время это еще актуально.
Прежде чем просить помощи, необходимо предъявить свой исходник или хотя бы листинг.
1. Функция ClipCursor и ограничивает перемещения курсора мыши так что это ПЕРВАЯ половина действий, я не должен давать вставать курсору на фрейм сразу без задержки!

2. Попробуйте запустить функцию ClipCursor на событие OnMouseMove, я хотел бы посмотреть что у вас получиться!(прежде чем говорить о руках надо головой думать!)

3. Какой листинг программы? Там три оператора, что их приводить?

4. Тролям отвечать больше не буду, мне нужна помощь а не бесполезная дискуссия с людьми у которых прямые руки и все всегда легко получается!!!

P.S Кто сталкивался с проблемой подскажите плиз, алгоритмов перебрал кучу, пожалуйста мне нужен способ в котором вы уверены, заранее благодарен!
KAMENYKA вне форума Ответить с цитированием
Старый 30.08.2011, 15:28   #6
chertovich
Форумчанин
 
Аватар для chertovich
 
Регистрация: 26.07.2009
Сообщений: 489
По умолчанию

Моя агрессия была вызванная тем, что вы проигнорировали мой ответ:
Цитата:
Можно попробывать OnEnter (или OnMouseMove). Отсчитывать время таймером. Лучше все продумать, ведь не всем пользователям это понравится, но в настройках можно добавить возможность настройки
Не пытаясь разобраться в нем.
Код:
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);
  private
    { Private declarations }
  public
    procedure Clip(Enabled: Boolean = True);
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Clip(Enabled: Boolean);
var
  R: TRect;
begin
  if Enabled then
  begin
    R.Left := Left + Panel1.Width + 6;
    R.Top := 0;
    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 := 100; {0.1 секунды}
end;

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

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

end.
Если в глубине души вы программист, то, следуя своим наклонностям, вы захотите написать кусок кода.

Последний раз редактировалось chertovich; 30.08.2011 в 15:42.
chertovich вне форума Ответить с цитированием
Старый 30.08.2011, 15:34   #7
fate
Форумчанин
 
Аватар для fate
 
Регистрация: 17.03.2009
Сообщений: 318
По умолчанию

Цитата:
к границе этого фрейма он стоит к примеру 2 секунды а потом тока попадает на этот фрейм
если тебе надо переместить курсор то используй SetCursorPos

Цитата:
Попробуйте запустить функцию ClipCursor на событие OnMouseMove, я хотел бы посмотреть что у вас получиться!
запустил и что?

может стоит прислушаться к словам
Цитата:
Потому что руки не от туда растут
Выкладывай код своего события OnMouseMove
fate вне форума Ответить с цитированием
Старый 30.08.2011, 15:49   #8
KAMENYKA
Пользователь
 
Аватар для KAMENYKA
 
Регистрация: 06.12.2007
Сообщений: 87
По умолчанию

Может быть я что то не понимаю, но откуда у панели событие onMouseEnter, это же не фокусируемый контрол?

На примере 1 обычная панель как и в вашем, на примере 2 моя панель, к сожалению я не обладаю событием onMouseEnter.
Изображения
Тип файла: jpg Файл.jpg (49.0 Кб, 127 просмотров)

Последний раз редактировалось KAMENYKA; 30.08.2011 в 15:51.
KAMENYKA вне форума Ответить с цитированием
Старый 30.08.2011, 15:52   #9
chertovich
Форумчанин
 
Аватар для chertovich
 
Регистрация: 26.07.2009
Сообщений: 489
По умолчанию

Цитата:
Может быть я что то не понимаю, но откуда у панели событие onMouseEnter, это же не фокусируемый контрол?
В новых версиях есть. Врочем, если оч нужно можно и с OnMouseMove замутить. Сейчас попробую использовать остатки своих мозгов)
Если в глубине души вы программист, то, следуя своим наклонностям, вы захотите написать кусок кода.

Последний раз редактировалось chertovich; 30.08.2011 в 16:12.
chertovich вне форума Ответить с цитированием
Старый 30.08.2011, 15:52   #10
fate
Форумчанин
 
Аватар для fate
 
Регистрация: 17.03.2009
Сообщений: 318
По умолчанию

Цитата:
к сожалению я не обладаю событием onMouseEnter.
delphi 7 ?
fate вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 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