如何让鼠标跟随文字,脱离Form1窗体使用?

lovedeadyou 2019-12-18 08:45:15
因为,我要用这个文字当录制屏幕时的水印
谢谢大家了~~

unit Unit1;
interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,stdctrls,extctrls; //后两个为动态创建控件的类

type
TForm1 = class(TForm)
Timer1: TTimer;
procedure FormCreate(Sender: TObject);
procedure FormDragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
procedure Timer1Timer(Sender: TObject);
procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
lab : array[0..255] of TLabel;
mx,my:integer;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var i,t:integer;
s:string;
begin
s:='欲 穷 千 里 目 , 更 上 一 层 楼 。'; //作业:改为汉字 ,有字体、颜色
t:=length(s);
for i:=0 to 11 do
begin
lab[i]:=TLabel.Create(Application.MainForm);
lab[i].Parent := self;
lab[i].caption:=copy(s,i*4,4)+' ';
lab[i].Left :=50+60*i;
lab[i].DragMode := dmAutomatic;
lab[i].Font.color:=clRed; //设置颜色
lab[i].Font.Name :='隶书'; //设置字体
//设置每一个字的颜色都不同
case i of
0: lab[i].Font.color:=clRed;
1: lab[i].Font.color:=clGreen;
2: lab[i].Font.color:=clFuchsia;
end;
//self.Color:=rgb(random(2147483647));
// self.Color:=floor(random(2147483647));

end;

end;

procedure TForm1.FormDragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
begin
// mx:=x;
// my:=y;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
var i:integer;
begin
for i:= 11 downto 1 do //从后往前逐一给每个字符新的位置坐标
begin
lab[i].Left :=lab[i-1].Left +50;
lab[i].Top :=lab[i-1].Top ;
end;
lab[0].Left:=mx+50; //第一个点的坐标为当前鼠标的坐标mx,my
lab[0].Top:=my;
end;

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
mx:=x;
my:=y;
end;

end.
...全文
156 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
lovedeadyou 2019-12-20
  • 打赏
  • 举报
回复
引用 8 楼 p47655255 的回复:
//download.csdn.net/download/p47655255/12041087
晕,下载不了,1分也没有了。 请传到蓝揍云吧,谢谢。
p47655255 2019-12-20
  • 打赏
  • 举报
回复
//download.csdn.net/download/p47655255/12041087
p47655255 2019-12-19
  • 打赏
  • 举报
回复
p47655255 2019-12-19
  • 打赏
  • 举报
回复
这个也简单,只需要修改获取鼠标位置的地方即可
function proc(icode: integer; wparam: wparam; lparam: lparam): lresult; stdcall;
var
evtmsg: teventmsg;
begin

case wparam of
WM_MOUSEMOVE:
begin
// Form1.Label1.Left := mouse.CursorPos.X + 10;
// form1.Label1.Top := mouse.CursorPos.Y + 10;
mx:= mouse.CursorPos.X;// 修改的地方
my:= mouse.CursorPos.Y;
end;
end;
result := CallNextHookEx(0, icode, wparam, lparam);
end;
lovedeadyou 2019-12-19
  • 打赏
  • 举报
回复
引用 3 楼 p47655255 的回复:
效果如下:
亲,字符不够长,没有了文字相连的拖尾效果
lovedeadyou 2019-12-19
  • 打赏
  • 举报
回复
[quote=引用 6 楼 p47655255 的回复:] 亲,还需要粘下完整的代码, 我就把最佳答案给你了。 最好是把整个工程文件打包 传上来,谢谢,比较的笨哟~~
doloopcn 2019-12-18
  • 打赏
  • 举报
回复
一般应该用线程去做比较好,Timer效果应该没有线程好
p47655255 2019-12-18
  • 打赏
  • 举报
回复
效果如下:
p47655255 2019-12-18
  • 打赏
  • 举报
回复
procedure TForm1.FormCreate(Sender: TObject);
begin
TransparentColor := True;
TransparentColorValue := clSilver;
i := setwindowshookex(WH_MOUSE_LL, @proc, hinstance, 0);

SetWindowLong(Handle, GWL_EXSTYLE, WS_EX_APPWINDOW or WS_EX_TOOLWINDOW);

end;
function proc(icode: integer; wparam: wparam; lparam: lparam): lresult; stdcall;
var
evtmsg: teventmsg;
begin

case wparam of
WM_MOUSEMOVE:
begin
Form1.Left := mouse.CursorPos.X + 10;
form1.Top := mouse.CursorPos.Y + 10;

end;

end;
result := CallNextHookEx(0, icode, wparam, lparam);
end;

用鼠标钩子 监控鼠标移动 使得窗口跟随鼠标

16,749

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧