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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.10.2008, 02:59   #1
Ruzzz
 
Регистрация: 14.10.2008
Сообщений: 6
По умолчанию как "ловить мышку" после ответа HTCAPTION на WM_NCHITTEST

нужно следить за мышкой, пока не отпущена кнопка мыши! Как это сделать?

Делаю так:

Код:
procedure WMNCHITTEST(var Message : TMessage); message  WM_NCHITTEST;

...

procedure TMoveControl.WMNCHITTEST(var Message: TMessage);
begin
 if not (csDesigning in ComponentState) then begin
   Message.Result := HTCAPTION;
   if Assigned(FOnMove) then begin
     FOnMove(Self);
   end;
 end else
   Message.Result := HTCLIENT;
end;
но OnMove вызывается только после того как отпустили кнопку мышки

Последний раз редактировалось rpy3uH; 14.10.2008 в 11:10.
Ruzzz вне форума Ответить с цитированием
Старый 14.10.2008, 10:27   #2
Лубышев
Участник клуба
 
Аватар для Лубышев
 
Регистрация: 23.07.2007
Сообщений: 1,054
По умолчанию

Считать координаты мыши
Код:
var a:Tpoint;
GetCursorPos(a);
А задать координаты
Код:
var a,b:integer;
a:=10;
b:=20;
SetCursorPos(a,b);
Писано по д'Эльфийски

Последний раз редактировалось Лубышев; 14.10.2008 в 10:30.
Лубышев вне форума Ответить с цитированием
Старый 14.10.2008, 14:16   #3
Ruzzz
 
Регистрация: 14.10.2008
Сообщений: 6
По умолчанию

т.е. при нажатии запускать таймер?

Меня больше интересует, посылаются ли какие-нибудь сообщения мыши в этот момент окну?
Ruzzz вне форума Ответить с цитированием
Старый 14.10.2008, 18:28   #4
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Хук на мыш ставь и не парся.
BOBAH13 вне форума Ответить с цитированием
Старый 14.10.2008, 19:06   #5
JTG
я получил эту роль
Старожил
 
Аватар для JTG
 
Регистрация: 25.05.2007
Сообщений: 3,694
По умолчанию

Сформулируйте задачу точнее, надо за мышью следить, или за положением загадочного TMoveControl? Во втором случае всё просто

Код:
procedure WMMOVE(var Message : TMessage); message  WM_MOVE;

procedure WMMOVE(var Message: TMessage);
begin
  Caption := format('X=%d Y=%d',[message.LParamLo, Message.LParamHi]);
end;
пыщь

Последний раз редактировалось rpy3uH; 15.10.2008 в 08:40.
JTG вне форума Ответить с цитированием
Старый 15.10.2008, 20:31   #6
Ruzzz
 
Регистрация: 14.10.2008
Сообщений: 6
По умолчанию

Спасибо!!!

Все просто, но как-то не догадался )

Вот что я писал, компонент позволяющий передвигать себя по форме, помощью него можно двигать и другие компоненты:
Код:
unit MoveControl;

interface

uses
  SysUtils, Classes, Controls, Messages, WinProcs, Graphics;

type
  TMoveEvent = procedure(Sender: TObject; const X, Y: Integer) of object;
  TPaintEvent = procedure(Sender: TObject; Canvas: TCanvas) of object;

  TMoveControl = class(TCustomControl)
  private
    FOnMove: TMoveEvent;
    FOnPaint: TPaintEvent;
    { Private declarations }
  protected
    { Protected declarations }
    procedure Paint; override;
    procedure WMNCHITTEST(var Message : TMessage); message  WM_NCHITTEST;
    procedure WMMOVE(var Message : TMessage); message WM_MOVE;
  public
    { Public declarations }
    constructor Create(AOwner: TComponent); override;
  published
    { Published declarations }
    property OnMove: TMoveEvent read FOnMove write FOnMove;
    property OnPaint: TPaintEvent read FOnPaint write FOnPaint;
  end;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('Samples', [TMoveControl]);
end;

{ TMoveControl }

constructor TMoveControl.Create(AOwner: TComponent);
begin
  inherited;
  Cursor := crSizeNWSE;
end;

procedure TMoveControl.Paint;
begin
  inherited;
  if not (csDesigning in ComponentState) and Assigned(OnPaint) then begin
    FOnPaint(Self, Canvas);
  end else begin
    Canvas.Brush.Style := bsSolid;
    Canvas.Brush.Color := clRed;
    Canvas.Pen.Color := clRed;
    Canvas.FillRect(ClientRect);
  end;
end;

procedure TMoveControl.WMMOVE(var Message: TMessage);
begin
  if Assigned(FOnMove) then begin
    FOnMove(Self, message.LParamLo, Message.LParamHi);
  end;
end;

procedure TMoveControl.WMNCHITTEST(var Message: TMessage);
begin
  if not (csDesigning in ComponentState) then begin
    Message.Result := HTCAPTION;
  end else
    Message.Result := HTCLIENT;
end;

end.
Ruzzz вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
C++, препроцессор, как из "int" сделать "char"? Максай Помощь студентам 3 05.09.2008 08:16
сделать окно "открыть","сохранить как" blackstersl Общие вопросы Delphi 1 24.08.2008 10:31
Как "Ловить" сообщения приложения? Air Win Api 5 26.02.2008 19:26
Создаю диаграмму "Bar". Подскажите как убрать растояние между "столбами" MAcK Компоненты Delphi 11 24.10.2007 10:49