Forms delphi窗体透明度在win7中不起作用
我提出了一个小小的申请 其中我有mainform和Forms delphi窗体透明度在win7中不起作用,forms,delphi,transparency,Forms,Delphi,Transparency,我提出了一个小小的申请 其中我有mainform和form.color:=clolive 并设置了transparentcolor:=true 和透明色值:=clolive 它在我的windows 8.1上运行良好,没有桌面效果。 我可以在mainform.canvas上“绘制” 当我在Windows7上用视觉样式测试这个迷你应用程序时,表单透明度被忽略,我无法画图,我的鼠标光标“触摸”了mainform 有没有办法解决这个问题 谢谢 我的代码: unit Unit1; interface
form.color:=clolive代码>
并设置了transparentcolor:=true代码>
和透明色值:=clolive代码>
它在我的windows 8.1上运行良好,没有桌面效果。
我可以在mainform.canvas上“绘制”
当我在Windows7上用视觉样式测试这个迷你应用程序时,表单透明度被忽略,我无法画图,我的鼠标光标“触摸”了mainform
有没有办法解决这个问题
谢谢
我的代码:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure FormClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
application.minimize;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
application.terminate;
end;
procedure TForm1.FormClick(Sender: TObject);
var p: TPoint;
begin
form1.Canvas.Pen.Color:=clyellow;
form1.Canvas.Pen.Width:=5;
p.X:=mouse.CursorPos.X;
p.y:=mouse.CursorPos.Y;
form1.Canvas.PenPos:=p;
form1.Canvas.LineTo(p.x,p.y);
end;
end.
表格1:
formstyle:=fsStayOnTop;
borderstyle:=bsNone;
WindowState:=wsMaximized;
TransparentColor:=true;
TransparentColorValue:=clOlive;
Color:=clOlive;
代码的最大问题是在错误的地方绘制。您需要绘制以响应Windows绘制消息,WM\u paint
。在VCL应用程序的上下文中,通常意味着在重写的Paint
方法或OnPaint
事件处理程序中
为了在窗体上绘制,您可以处理窗体的OnPaint
事件并在那里进行绘制。这意味着您需要记住表单上的每次单击,当要求您绘制窗口时,您需要为迄今为止发生的每次单击绘制一些内容
这是一个常见的错误。窗口没有持久性图形画布。窗户必须能够根据需要在任何时间点自行喷漆。我建议您阅读Win32 graphics的入门教程。你可以做得比从佩佐尔德的书开始更糟
当我在windows 7上用视觉样式测试这个迷你应用程序时,
窗体透明度被忽略,我无法绘制鼠标光标
“触摸”主窗体后面的图标和对象
在Windows 7和Aero主题打开的情况下,表单是透明的,但会对鼠标单击做出反应,因此可以进行绘图。鼠标单击(或移动)不会穿过窗体到达窗体下方的任何对象
关闭Windows 7和Aero主题后,窗体对于鼠标操作也是透明的,随后绘图不起作用,鼠标操作将作用于窗体下方的任何对象
所以有区别,但我不清楚你想要什么
也许你的问题是你的Windows设置?请参阅谢谢您的回复,我试图更改windows设置,但我想制作通用应用程序。。。因此,我制作了一个框架并放入表单中,将AlphaBlend
设置为True,AlphaBlend
的值设置为1(非常透明:)。。它在Windows7、Windows8、Windows8.1和Windows10上对我都有效。。。这不是一个很好的解决方案,但至少奏效了…我想我们可以尝试构建您的程序并进行调查。但我肯定会担心我构建了一个与您不同的程序,因此调试错误。接下来你会说,“哦,不,我的程序不是那样的,它是这样做的”。事情就是这样。这种情况可能不会发生,但很多次都是这样。如果你提供了一个答案,那么这种情况将是不可能的。谢谢@DavidHeffernan的回复。。它的应用非常简单,只需设置透明度,一个最小化和退出按钮。。和mainform.Canvas.Pen.Color:=clyellow;formstyle被最大化,并添加了一个事件:Tmainform.FormClick(发送者:ToObject);下面是什么:p(TPoint)p.x:=mouse.cursorpos.x;p、 y:=mouse.cursorpos.y;mainform.Canvas.PenPos:=p;mainform.canvas.lineto(p.x,p.y);所以-整个程序是基于绘制“点”,线的桌面。原因——这将是老师的助手,他们可以在不影响图标的情况下在桌面上做标记和画画……)你知道吗,我想我不会。如果你找不到在问题中添加a的动机,我就找不到。@DavidHeffernan-整个代码都添加到了问题中…谢谢你的回答,但它仍然无法解决问题,因为在win8上,没有视觉效果的透明窗口与在win7上有aero的透明窗口的不同行为。。Form.click在win8上有效,但在win7上不适用于aero.OK,那么也许您应该询问一下,不要通过在OnClick
事件处理程序中绘制来混淆问题。你能据此修改这个问题吗。对MCVE中的M表示适当的尊重。问题中的代码也没有提到VCL样式。我认为你没有尽力去问一个精确的问题。我认为这个问题已经足够清楚了,我不能再描述我的问题了,因为我的英语技能。如果你能帮助我,那么就提出一些建议。如果你不能帮助我,不要责怪我的“编程”和语言技能。如果你是对的。也许我不知道我在说什么。也许我不知道什么是一个好问题。祝你好运也许其他人可以复制你的程序。我必须说,德尔福需要它能得到的所有新手,虽然我欣赏“帮助别人学会帮助自己”的意图,但这里展示的态度无助于鼓励人们加入到这一行列。