Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: WinAPI и системное программирование > WM_MOUSEMOVE WM_LBUTTONDOWN


Автор: Ragli 7.4.2007, 17:50
Здравствуйте
Не подскажете как связать движение мышки и нажатие на левую кнопку мыши?
Т.е.  мне нужно чтоб после нажатия левой нопки мыши считывалась координата движения мышки и при отпускании левой кнопки останавливалось чтение координат курсора.
Пожалуйста помогите,очень нужно

Вот так вот я делаю

Код

.......................
//Нажата левая клавиша мыши во внутренней области окна
    procedure MesDblClick1 (var MyMessage:TWMMouse);
    message WM_LBUTTONDOWN;
........................
 mas:word;
.........................
procedure TGlav.MesDblClick1 (var MyMessage:TWMMouse);
var
   Sender: TObject;
begin
   x_lin_start:=(MyMessage.XPos*2)/Glav.ClientWidth-1;
   y_lin_start:=1-(MyMessage.YPos*2)/Glav.ClientHeight;
  
   if  mas=WM_MOUSEMOVE then
      FormPaint(Sender);

end;

Автор: ctulhu 7.4.2007, 19:40
во первых для начала если работаешь с формой то не сочиняй никаких доп. обработчиков, работай с событиями формы.

во вторых

1) когда у тебя нажалась левая кнопка мыши т.е.
в обработчике WM_LBUTTONDOWN или {Form}.MouseDown регистриуешь нажатие кнопки в 
какую нибудь булевую переменную (True).

2) когда у тебя кнопка мыши отпустилась т.е.
в обработчике WM_LBUTTONUP или {Form}.MouseUp регистриуешь обратное значение (False).

3) в обработчике WM_MOUSEMOVE или {Form}.MouseMove
поступаешь так как тебе нужно в зависимсти от индикаторной булевой переменной.

Автор: StranikS 7.4.2007, 21:52
Если я правильно понял, то тебе нужно вот ето:

Код

var
  Form1: TForm1;
  LBDFlag:Boolean;{Флаг зажатой левой кнопки мыши}

implementation

{$R *.dfm}

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
//Берем координаты курсора
if LBDFlag=true then form1.Caption:='X='+IntToStr(X)+', Y='+IntToStr(Y);
end;

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
if Button=mbLeft then LBDFlag:=true;
end;

procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
if LBDFlag=true then LBDFlag:=not(LBDFlag);
end;

Автор: Alexeis 7.4.2007, 21:54
Модератор: не создавайте дубликатов тем

Автор: ctulhu 9.4.2007, 19:33
StranikS: привёл абсолютно верный код

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)