- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
是否可以制作例如 20% 透明的 TMemo 或其他 vcl 组件?像 TButton 或 TEdit 吗?
在谷歌搜索解决方案时,我发现了这个:
From Here ,然后我想,如果我在窗体上绘制图像(OnPaint)然后设置AlphaBlend ON,我可以实现此效果但没有成功,当整个窗体透明时,未实现主要需要的效果,备忘录后面没有背景图片。
我想要达到的效果:(在photoshop中完成的)
这可能吗?如果是,怎么样? (我不要求任何人提供完整的源代码,只要可能的话,只要文章或小例子,或者方向,无论我能理解它的方式)
感谢您的关注。
<小时/>我找到了解决方案,在具有图像背景的表单上创建字母混合表单,然后在添加的表单上添加备忘录并将其与客户端对齐,这不是最好的方法,但它工作正常:
procedure TForm1.Button1Click(Sender: TObject);
var
MM : TMyMemo; frm : TForm;
begin
frm := TForm.Create(Form1);
frm.BorderStyle := bsNone;
frm.AlphaBlend := true;
frm.AlphaBlendValue := 150;
frm.Left := Form1.Left + 90;
frm.Top := Form1.Top + 90;
frm.Width := 300;
frm.Height := 300;
frm.Position := poDesigned;
frm.Visible := true;
MM := TMyMemo.Create(frm);
MM.Parent := frm;
MM.BorderStyle := bsNone;
MM.ParentColor := False;
MM.Align := alClient;
MM.Color := clBlack;
MM.Font.Color := clWhite;
MM.Font.Name := 'Sylfaen';
MM.Font.Size := 11;
MM.Visible := True;
frme := True;
end;
但是还有一个问题,当我按下备忘录时,背景表单失去焦点,当我将新表单的父级设置为Form1时,上述问题解决了,但透明效果消失了(窗口仍然是透明的,但你可以通过bg看到窗口没有可见背景)我该如何解决这个问题?
最佳答案
我认为这个问题经常被问到(也许不是在这里,但我以前见过很多次)。奇怪的是,答案几乎从来没有出现过,尽管它就在那里,隐藏在所有讨论这个问题的人之中。也许这里的问题将有助于改进 future 的搜索过程,仅仅因为它是 stackoverflow :-)
无论如何,这是我去年找到的答案(见下面的代码)。不是我的,但对我有用 - 链接到 author 。本质上,该代码定义了一个派生的 RichEdit,其中包含 WM_ERASEBACKGROUND 消息的自定义事件处理程序。
unit TransparentRichEdit;
{ Component made by Proger_XP | http://Proger.i-Forge.net }
interface
uses
Windows, Messages, SysUtils, Classes, Controls, StdCtrls, ComCtrls, Graphics;
type
TTransparentRichEdit = class (TRichEdit)
protected
FCanvas: TCanvas;
FBackground: TPicture;
procedure CreateWnd; override;
procedure WMEraseBkgnd(var Message: TWMEraseBkgnd); message WM_ERASEBKGND;
procedure SetBackground(const Value: TPicture);
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
published
property Background: TPicture read FBackground write SetBackground;
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents('Miscellaneous', [TTransparentRichEdit]);
end;
{ TTransparentRichEdit }
constructor TTransparentRichEdit.Create(AOwner: TComponent);
begin
inherited;
FCanvas := TCanvas.Create;
FBackground := TPicture.Create;
end;
destructor TTransparentRichEdit.Destroy;
begin
FBackground.Free;
FCanvas.Free;
inherited;
end;
procedure TTransparentRichEdit.CreateWnd;
begin
inherited;
SetWindowLong(Handle, GWL_EXSTYLE, GetWindowLong(Handle, GWL_EXSTYLE) or WS_EX_TRANSPARENT);
end;
procedure TTransparentRichEdit.WMEraseBkgnd(var Message: TWMEraseBkgnd);
var
UpdateRect: TRect;
Rgn: HRGN;
ToBeErased: Boolean;
Mem: TBitmap;
begin
ToBeErased:= false;
Mem := TBitmap.Create;
try
Mem.Width := ClientWidth;
Mem.Height := ClientHeight;
FCanvas.Handle := Message.DC;
Message.Result := 1;
if not GetUpdateRect(Handle, UpdateRect, ToBeErased) then
UpdateRect := Rect(0, 0, ClientWidth, ClientHeight);
with UpdateRect do
Rgn := CreateRectRgn(Left, Top, Right, Bottom);
SelectClipRgn(FCanvas.Handle, Rgn);
FCanvas.Draw(0, 0, FBackground.Graphic);
finally
Mem.Free;
end;
end;
procedure TTransparentRichEdit.SetBackground(const Value: TPicture);
begin
FBackground.Assign(Value);
Repaint;
end;
end.
关于delphi - VCL组件不透明度/透明度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17014360/
一些背景(是 TLabel and TGroupbox Captions Flicker on Resize 的延续): 所以,我有一个应用程序可以加载不同的插件并创建一个TPageControl 上
我正在从 this handy template 复制一些 VCL 规则并在最新稳定的 Varnish4 上运行。但是 VCL 的这一部分: vcl 4.0; sub vcl_init { #
无论如何,这就是我的分析。今天早上,我将我的应用程序“分发”给了我们的组织,结果发现,在 XE8 中对这个旧的 win32 应用程序进行了一个月的新工作后,不使用 Windows 7“Basic”主题
在执行命令时 sudo service varnish reload 我收到以下错误: nish@styx:~$ sudo service varnish reload * Reloading HT
所以我第一次使用 Varnish 。我花了很多时间阅读它是如何工作的,但我无法弄清楚如何有选择地清除缓存。 就像说我有一个这样的网址 /?account=123&url=google.com 另一个喜
首先,维基百科将控制面板小程序定义为: graphical user interface which allows users to view and manipulate basic system
我的主窗体(我的图像中的 form1)中央有一个页面控件,我想打开停靠在该页面控件中的其他表单。因为我的子窗体上有很多控件,所以我需要垂直和水平滚动条(在子窗体上我有事件滚动条选项处于事件状态),但这
在Varnish中,std.log子例程是否会对性能产生影响,我应该关注该影响?例如,如果我将它称为请求的3-4次,那么在处理大量请求时会产生累积效果吗? 据我所知,std.log通过请求锁定,写入消
VCL中有几个内置子例程; vcl_recv,vcl_pipe,vcl_pass,vcl_hit,vcl_miss等; 引用https://varnish-cache.org/docs/4.1/use
我有以下形式的 URL: http://some-site.com/api/v2/portal-name/some/webservice/call 我要获取的数据需要 http://portal-na
我现在遇到了一个相当罕见的情况。我有一个直接与 Windows 消息队列交互的应用程序。该应用程序还使用 LuaJIT 运行外部 Lua 脚本。我想要为这些脚本提供调试工具,因此我创建了一个普通的 V
使用 Delphi 7 IDE 进行调试时,如何单步执行程序文件/borland/delphi7/source 文件夹中的代码? 听起来是个愚蠢的问题,但好奇的人想要调试。 (并不是说我认为源有什么问
在我的编程团队中,我们都使用 Delphi XE2 Professional。我们刚刚发现,在不同的计算机上,可用的 VCL 样式数量不同。 VCL 样式从何而来?我是否需要小心地将样式从一个 Del
我注意到,当启用 VCL-Styles 时,即使没有按下 Alt 键,也会使用热键选择菜单中的项目。 这会干扰我的用户界面的其余部分,并且我发现样式库改变热键的行为非常奇怪。 我可以以某种方式消除这种
我有一个源自 TMemo 的控件。它工作得很好,直到我第一次使用 Delphi XE7 VCL Styles。在Delphi XE7下,样式不应用于控件的滚动条。如果使用深色主题/风格,看起来很糟糕,
我一直在尝试将我拥有的单位从 VCL 转换为 FMX。我使用的库之一是用于 TpenStyle 的 VCL.Graphics: wallstyle,pathstyle,solvedpathstyle:
我正在设置主菜单字体(通过 Screen.MenuFont)以匹配程序中其他地方使用的字体的名称/大小。但主菜单不会随表单的其余部分一起刷新 - 我必须将鼠标移到每个菜单项上才能让它以新字体重新绘制该
我正在设置主菜单字体(通过 Screen.MenuFont)以匹配程序中其他地方使用的字体的名称/大小。但主菜单不会随表单的其余部分一起刷新 - 我必须将鼠标移到每个菜单项上才能让它以新字体重新绘制该
我为其编写软件的产品之一是会计类应用程序。它用 C++ 编写,使用 C++ Builder 和 VCL 控件,连接到运行在 Linux 上的 PostgreSQL 数据库。 PostgreSQL 数据
我正在创建一个包含多个表单的 VCL 表单应用程序。我创建了一个名为 formCreateAppointment 的新表单。 我正在尝试通过 menuItem 中的这段代码加载表单: formCrea
我是一名优秀的程序员,十分优秀!