Forms delphi窗体透明度在win7中不起作用

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

我提出了一个小小的申请

其中我有mainform和
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样式。我认为你没有尽力去问一个精确的问题。我认为这个问题已经足够清楚了,我不能再描述我的问题了,因为我的英语技能。如果你能帮助我,那么就提出一些建议。如果你不能帮助我,不要责怪我的“编程”和语言技能。如果你是对的。也许我不知道我在说什么。也许我不知道什么是一个好问题。祝你好运也许其他人可以复制你的程序。我必须说,德尔福需要它能得到的所有新手,虽然我欣赏“帮助别人学会帮助自己”的意图,但这里展示的态度无助于鼓励人们加入到这一行列。