读书人

就求解决办法鼠标移动事件FormMouseMo

发布时间: 2012-03-11 18:15:39 作者: rapoo

就求解决方法鼠标移动事件FormMouseMove
我在一个界面当中特定的区域实现一个鼠标移动事件FormMouseMove,在这个事件中鼠标到达特定区域是在特定区域显示一个数字,这个已经实现。我现在想要知道当我把鼠标移开这个区域的时候这个事件消失。我写的一些代码如下:
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
var
i: Integer;
begin
Button1.Caption := IntToStr(X) + ' ' + IntToStr(Y);
for i := 1 to 48 do
begin
if (X>=QIU[i].X)and(Y>=QIU[i].Y)and(X<=QIU[i].X + 45)and(Y<=QIU[i].Y + 45) then
begin

Form1.Canvas.TextOut(QIU[i].X+8,QIU[i].Y+1,'42');

end;
end;
end;
主要是想怎么样解决Form1.Canvas.TextOut(QIU[i].X+8,QIU[i].Y+1,'42');
这个事件。
刚学Delpi才几天,请大侠们帮帮忙。

[解决办法]
能不能用Label或者其它的控件来替代你的特殊区域,这样你的触发事件就写在新加的控件上就行了
[解决办法]
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
var
i: Integer;
begin
self.Refresh;
Button1.Caption := IntToStr(X) + ' ' + IntToStr(Y);
for i := 1 to 48 do
begin
if (X>=QIU[i].X)and(Y>=QIU[i].Y)and(X<=QIU[i].X + 45)and(Y<=QIU[i].Y + 45) then
begin

Form1.Canvas.TextOut(QIU[i].X+8,QIU[i].Y+1,'42');

end;
end;
end;
[解决办法]
开双缓冲
DoubleBuffered := True

鼠标不在那个区域用背景色刷一次不就行了?
[解决办法]

Delphi(Pascal) code
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,Y: Integer);
[解决办法]
非指定区域重新填充行不?
if then
else
Form1.Canvas.FillRect();
[解决办法]
先设置窗口的canvas.pen.mode := pmXor,判断鼠标移除区域以后,把上次绘的文字再重新绘一次,就擦除了

另防止窗口闪烁的厉害,在窗口的OnCreate事件中添加
DoubleBuffered := True

读书人网 >.NET

热点推荐