- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如何在桌面窗口上绘制以在用户点击时绘制圆形动画...
我已经尝试了下面的代码,启动一个线程来绘制动画...
下面的代码可以工作,但有一些绘制问题:
unit UMouseEmphasizer;
interface
implementation
uses
Classes, Windows, Messages, Graphics, Forms;
type
TEmphasizePointDrawer = class(TThread)
private
fPoint: TPoint;
fCanvas: TCanvas;
protected
procedure Execute; override;
public
constructor Create(pt: TPoint); reintroduce;
destructor Destroy; override;
end;
constructor TEmphasizePointDrawer.Create(pt: TPoint);
begin
fPoint := pt;
fCanvas := TCanvas.Create;
fCanvas.Handle := GetDCEx(0, 0, DCX_PARENTCLIP);
inherited Create(True);
FreeOnTerminate := True;
Resume;
end;
destructor TEmphasizePointDrawer.Destroy;
begin
ReleaseDC(0, fCanvas.Handle);
fCanvas.Free;
inherited;
end;
procedure TEmphasizePointDrawer.Execute;
const
INFLATE_DELTA = 10;
var
i: integer;
r: TRect;
begin
r := rect(0,0,0,0);
with fCanvas do
begin
Brush.Style := bsClear;
Pen.Style := psSolid;
Pen.Color := clRed;
Pen.Width := 2;
for i := 0 to 2 do
begin
r := rect(
fPoint.X - (i * INFLATE_DELTA),
fPoint.Y - (i * INFLATE_DELTA),
fPoint.X + (i * INFLATE_DELTA),
fPoint.Y + (i * INFLATE_DELTA)
);
Ellipse(r);
sleep(100);
end;
end;
InflateRect(r, 2, 2);
RedrawWindow(0, @R, 0, RDW_INVALIDATE or RDW_UPDATENOW or RDW_ALLCHILDREN);
end;
function MouseHookHandler(nCode: Integer; MsgID: WParam; Data: LParam): LResult; stdcall;
var
pt: TPoint;
begin
Result := 0;
if nCode < 0 then
Exit;
pt := PMouseHookStruct(Data)^.pt;
case MsgID of
WM_LBUTTONUP:
TEmphasizePointDrawer.Create(pt);
end;
end;
var
gHook: HHOOK=0;
procedure HookMouse; stdcall;
begin
gHook := SetWindowsHookEx(WH_MOUSE, MouseHookHandler, HINSTANCE, 0);
end;
procedure UnhookMouse;
begin
UnhookWindowsHookEx(gHook);
gHook := 0;
end;
initialization
HookMouse;
finalization
UnhookMouse;
end.
最佳答案
我解决了这个问题:
procedure TEmphasizePointDrawer.Execute;
const
INFLATE_DELTA = 5;
COUNT = 3;
BORDER = 2;
var
i: integer;
r: TRect;
begin
with fCanvas do
begin
Brush.Style := bsClear;
Pen.Style := psSolid;
Pen.Color := clRed;
Pen.Width := BORDER;
for i := COUNT downto 0 do
begin
if i < COUNT then
begin
InflateRect(r, BORDER, BORDER);
RedrawWindow(0, @R, 0, RDW_INVALIDATE or RDW_UPDATENOW or RDW_ALLCHILDREN);
sleep(0);
BitBlt(Handle, r.Left, r.Top, (r.Right - r.Left), (r.Bottom - r.Top), Handle, r.Left, r.Top, SRCCOPY);
end;
r := rect(
fPoint.X - (i * INFLATE_DELTA),
fPoint.Y - (i * INFLATE_DELTA),
fPoint.X + (i * INFLATE_DELTA),
fPoint.Y + (i * INFLATE_DELTA)
);
InflateRect(r, BORDER, BORDER);
RedrawWindow(0, @R, 0, RDW_INVALIDATE or RDW_UPDATENOW or RDW_ALLCHILDREN);
sleep(0);
BitBlt(Handle, r.Left, r.Top, (r.Right - r.Left), (r.Bottom - r.Top), Handle, r.Left, r.Top, SRCCOPY);
InflateRect(r, -BORDER, -BORDER);
Ellipse(r);
sleep(50);
end;
end;
r := rect(
fPoint.X - (COUNT * INFLATE_DELTA) - BORDER,
fPoint.Y - (COUNT * INFLATE_DELTA) - BORDER,
fPoint.X + (COUNT * INFLATE_DELTA) + BORDER,
fPoint.Y + (COUNT * INFLATE_DELTA) + BORDER
);
RedrawWindow(0, @R, 0, RDW_INVALIDATE or RDW_UPDATENOW or RDW_ALLCHILDREN);
end;
function MouseHookHandler(nCode: Integer; MsgID: WParam; Data: LParam): LResult; stdcall;
var
pt: TPoint;
begin
// draw only when over my application forms!!!
if (nCode < 0) or (FindControl(GetForegroundWindow()) = nil) then
begin
Result := CallNextHookEx(gHook, nCode, MsgID, Data);
Exit;
end;
pt := PMouseHookStruct(Data)^.pt;
case MsgID of
WM_LBUTTONUP, WM_RBUTTONUP, WM_MBUTTONUP:
TEmphasizePointDrawer.Create(pt);
end;
Result := 0;
end;
感谢您的回复!
关于delphi - 使用 Delphi 在桌面上绘图以强调鼠标点击,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12782290/
如果您绝对必须设置 html 按钮的样式,那么强调其中一些按钮的正确方法是什么?例如“添加到购物车”通常会在视觉上得到强调,以使其脱颖而出。 选项 1 - 用 em 或 strong + css 包装
Underscore 提供了方法,throttle。来自他们的文档: 创建并返回所传递函数的新的 throttle 版本,当重复调用时,每等待毫秒最多只会实际调用一次原始函数。对于发生速度快于您无法跟
我正在使用 Docx4j 从模板创建文档。 我无法找到创建斜体段落的方法(HTML 中的)。 这是创建段落的方法示例,并提供以粗体进行创建的选项。 private static org.docx4j.
我正在研究一些简单的 Markdown 文本,以玩弄和学习 Pyparsing 和一般语法。我几乎立即遇到了一个我无法解决的问题。我正在尝试解析 CommonMark 的简单版本强调的规范。在此设置中
如果我使用 ggplot,则 x Axis (y==0) 的水平线与 y 的任何其他值相同。我想强调一个事实,即图表的底部不是 x Axis ,并且 x Axis 在图中较高。我怎样才能做到这一点?
我正在尝试实现一个包含特定公交时刻表的 ListView(它只是一个包含特定时间的列表)。 我正在寻找的是一种正确的方法(遵循指南)来突出显示/强调特定行以指示下一类车何时到达。 首先,我改变了行的背
所以我有一个关于 Kindle 设备上的 flexbox 支持的问题,如果你有关于总体支持的更多信息。似乎不支持 display:flex 和 flex-wrap:wrap/nowrap 属性,至少在
我似乎无法制作斜体(即*强调*)链接。我尝试了以下语法: *[text](url)* [*text*](url) *[text]*(url) [*emphasised* text](url) 根据 D
我需要调整别人构建的应用程序以使用我编写的 API。在生产环境中,该应用程序将向具有签名的受信任证书的服务器发出 HTTPS 请求。没问题。 但是,我的本地开发服务器没有 SSL 证书(除了我自己创建
有人有这四个的工作配置吗? - Django - uWSGI - Nginx - SSL 主要问题是如何为此正确设置SSL?我在谷歌上搜索了很多,但仍然无法正常工作。我有一个使用 unix socke
如何使用 GWT 或 Javascript 强调 DIV 内的文本: Element content = DOM.createElement("div"); content.setInnerText(
我是一名优秀的程序员,十分优秀!