Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "KOL";
Текущий архив: 2010.01.17;
Скачать: [xml.tar.bz2];

Вниз

Как отлавить сообщение мышки за окном?   Найти похожие ветки 

 
Valera   (2008-05-12 03:10) [0]

Как отловить сообщения мышки если она Нажала на PaintBox и переместилась на рабочий стол.
Почему то когда я в VCL делал Paint
там автоматом мне приходили сообщения от мышки (MouseMove) если она нажала на мою форму и не отпустила и ездила по рабочему столу.
А в kol они не приходят. В kol приходят сообщения если мышка находится над PaintBox.


 
Valera   (2008-05-12 03:24) [1]

Сюда можно дописать...

program paintMy;

uses
Windows,
messages,
KOL;

var
form,PaintBox:PControl;
PaintBmp,MainTemp:Pbitmap;
xD,yD:integer;
mousedown:boolean;

procedure MouseDown_(Dummy : Pointer;Sender: PControl; var Mouse: TMouseEventData );
begin
MainTemp.CopyRect(MainTemp.BoundsRect, PaintBmp,PaintBmp.BoundsRect);
xD:=Mouse.x;
yd:=Mouse.y;
PaintBox.Invalidate;
mousedown:=True;
end;

procedure MouseMove_(Dummy : Pointer; Sender: PControl; var Mouse: TMouseEventData );
begin
IF mousedown then begin
  PaintBmp.CopyRect(PaintBmp.BoundsRect, MainTemp, MainTemp.BoundsRect);
  PaintBmp.Canvas.MoveTo(xd,yd);
  PaintBmp.Canvas.LineTo(Mouse.x,Mouse.y);
end;
PaintBox.Invalidate;
end;

procedure MouseUp_(Dummy : Pointer; Sender: PControl; var Mouse: TMouseEventData );
begin
if mousedown then begin
  PaintBmp.CopyRect(PaintBmp.BoundsRect, MainTemp, MainTemp.BoundsRect);
  PaintBmp.Canvas.MoveTo(xd,yd);
  PaintBmp.Canvas.LineTo(Mouse.x,Mouse.y);
end;
PaintBox.Invalidate;
mousedown:=False;
end;

procedure Paint( Dummy : Pointer; Sender: PControl; DC: HDC );
begin
PaintBmp.Draw(DC,0,0);
end;

begin
form:=NewForm(nil,"Paint").SetSize(800,800);

PaintBox:=NewPaintBox(Form);
PaintBox.Align:=caClient;
PaintBox.OnMouseDown:= TOnMouse( MakeMethod( nil, @MouseDown_ ) );
PaintBox.OnMouseMove:= TOnMouse( MakeMethod( nil, @MouseMove_ ) );
PaintBox.OnMouseUp:= TOnMouse( MakeMethod( nil, @MouseUp_ ) );
PaintBox.OnPaint:= TOnPaint( MakeMethod( nil, @Paint ) );
///**************************************************************
MainTemp:=newBitmap(PaintBox.Width,PaintBox.Height);
MainTemp.Invert;
PaintBmp:=newBitmap(PaintBox.Width,PaintBox.Height);
PaintBmp.Invert;

Run(form);  ////// запуск формы

end.



 
D[u]fa   (2008-05-12 09:49) [2]

попробуй в маусдовн добавить SetCapture() а в моусап ReleaseCapture


 
Valera   (2008-05-12 15:26) [3]

Я не понял как делать SetCapture and ReleaseCapture.
Добавь код в исходник а то я не понял Куда именно вставлять SetCapture.


 
Valera   (2008-05-12 15:34) [4]

Ой спасибо я все понял..... Большое Спасибо D[u]fa....

Вот что я сделал



program paintMy;

uses
Windows,
messages,
KOL;

var
form,PaintBox:PControl;
PaintBmp,MainTemp:Pbitmap;
xD,yD:integer;
mousedown:boolean;

procedure MouseDown_(Dummy : Pointer;Sender: PControl; var Mouse: TMouseEventData );
begin
MainTemp.CopyRect(MainTemp.BoundsRect, PaintBmp,PaintBmp.BoundsRect);
xD:=Mouse.x;
yd:=Mouse.y;
SetCapture(PaintBox.GetWindowHandle);
PaintBox.Invalidate;
mousedown:=True;
end;

procedure MouseMove_(Dummy : Pointer; Sender: PControl; var Mouse: TMouseEventData );
begin
IF mousedown then begin
 PaintBmp.CopyRect(PaintBmp.BoundsRect, MainTemp, MainTemp.BoundsRect);
 PaintBmp.Canvas.MoveTo(xd,yd);
 PaintBmp.Canvas.LineTo(Mouse.x,Mouse.y);
end;
PaintBox.Invalidate;
end;

procedure MouseUp_(Dummy : Pointer; Sender: PControl; var Mouse: TMouseEventData );
begin
if mousedown then begin
 PaintBmp.CopyRect(PaintBmp.BoundsRect, MainTemp, MainTemp.BoundsRect);
 PaintBmp.Canvas.MoveTo(xd,yd);
 PaintBmp.Canvas.LineTo(Mouse.x,Mouse.y);
 ReleaseCapture;
end;
PaintBox.Invalidate;
mousedown:=False;
end;

procedure Paint( Dummy : Pointer; Sender: PControl; DC: HDC );
begin
PaintBmp.Draw(DC,0,0);
end;

begin
form:=NewForm(nil,"Paint").SetSize(800,800);

PaintBox:=NewPaintBox(Form);
PaintBox.Align:=caClient;
PaintBox.OnMouseDown:= TOnMouse( MakeMethod( nil, @MouseDown_ ) );
PaintBox.OnMouseMove:= TOnMouse( MakeMethod( nil, @MouseMove_ ) );
PaintBox.OnMouseUp:= TOnMouse( MakeMethod( nil, @MouseUp_ ) );
PaintBox.OnPaint:= TOnPaint( MakeMethod( nil, @Paint ) );
///**************************************************************
MainTemp:=newBitmap(PaintBox.Width,PaintBox.Height);
MainTemp.Invert;
PaintBmp:=newBitmap(PaintBox.Width,PaintBox.Height);
PaintBmp.Invert;

Run(form);  ////// запуск формы

end.


 
D[u]fa   (2008-05-12 15:39) [5]

Да все верно, либо просто PaintBox.Handle



Страницы: 1 вся ветка

Форум: "KOL";
Текущий архив: 2010.01.17;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.076 c
8-1200143658
452
2008-01-12 16:14
2010.01.17
Как вывести текст в центре Canvas по вертикали и горизонтали?


15-1258322580
POOP
2009-11-16 01:03
2010.01.17
Чем можно уменьшить скорость аудио?


2-1259171373
blackberry
2009-11-25 20:49
2010.01.17
подгрузка компаса при нажатии на картинку


6-1211800006
atruhin1
2008-05-26 15:06
2010.01.17
TWebBrowser и сертификаты


15-1257929503
Игорь Шевченко
2009-11-11 11:51
2010.01.17
За лампочки будут наказывать. Больно





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский