- 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/
我正在制作一个应用程序,我需要使用 ffmpeg 将两个视频文件叠加在另一个之上。 .我尝试了各种命令,但它所做的只是合并视频。 最佳答案 基本方法是 ffmpeg -i in1 -i in2 -fi
我将 Qt3D 与 offscreen renderer 结合使用并修改框架图以包含背景图像,例如 here . 不幸的是,使用 QPhongAlphaMaterial 为绘制在背景图像上的对象添加透
我正在开发的这个组件有视觉问题。它是带有 2 个 JTextField 和 2 个 JLabel 的 JPanel。我不能做坚实的背景。我尝试了几种不透明/背景颜色组合但没有成功。 我不允许附加图像,
我正在使用 Gnuplot 成功绘制一些时间序列数据。然而,该系列相当密集(大约 5 英寸空间中有 10,000 个样本),当我绘制多个系列时,很难看到绘制在顶部的系列下方。 有什么方法可以使线条具有
我正在尝试设置一个自定义拖动图标以在 NSTableView 中使用。一切似乎都正常,但由于我对 Quartz 缺乏经验,我遇到了问题。 - (NSImage *)dragImageForRowsWi
是否可以制作例如 20% 透明的 TMemo 或其他 vcl 组件?像 TButton 或 TEdit 吗? 在谷歌搜索解决方案时,我发现了这个: From Here ,然后我想,如果我在窗体上绘制图
我目前正在学习如何使用 Scenekit,并且遇到了透明对象的问题。我写了一个着色器来增加正面看脸时的透明度,当我选择白色背景时,一切都按预期工作...... transparency with wh
我对 openGL 中的 alpha 混合有疑问... 我尝试了一些绘制透明对象的方法...通过在绘制透明面之前禁用 GL_DEPTH_TEST 并在绘制透明面后再次重新启用 GL_DEPTH_TES
我正试图让我的背景 webView 像那样透明: webView.setBackgroundColor(0x00000000); 但它不起作用,如果我添加这一行,一切都是透明的(我看不到我的 html
我目前正在创建一个应用程序并且出现了这个问题,我想让 TabLayout 透明。当我使用 RelativeLayout TabLayout 覆盖内容时,当我使用 LinearLayout TabLay
我有一个 UINavigationItem(不是 UINavigationBar),我想使其透明或不透明。这是在我建立从导航 Controller 到我的 UIViewController 子类的关系
是否可以让您的 android Activity 以透明模式在当前正在运行的 Activity 之上运行,以便您可以通过它看到它下面的 Activity ?如果可能,您可以设置不同级别的透明度吗? 最
我正在使用 noUiSlider 范围 slider 。这是 jsfiddle: https://jsfiddle.net/oun5p1xz/ behaviourSlider = document.g
有没有办法改变控制台的不透明度使其半透明? 还有办法将控制台的背景颜色更改为自定义颜色吗? 最佳答案 快速谷歌显示 this site其中包含用于具有透明窗口的控制台应用程序的代码。 本质上,您必须获
主.xml: 这是我的 main.xml,我试图使按钮最透明,但我仍然想看到它们,但我不知道要添加什么以及在哪里添加,请用低不透明度更正我的 xml在按钮
如何将实际内容 Pane 的背景设置为不透明,我添加到其中的面板我已经设置为不透明,但即使我这样做,选项卡 Pane 的主要区域仍显示为蓝色 JTabbedPane tabbedPane = new
是否可以继承颜色但覆盖不透明度值?以下是伪 CSS 中的示例: .color-class { background-color: rgba(255, 0, 0, 0); } .lighten
我正在尝试让我的导航栏变得 100% 透明,以便 UINavigationButtonItems 只可见并且背景(通常为白色)应该显示背景图像。 我试过了 HomeNavigationControll
RGBA 非常有趣,-webkit-gradient、-moz-gradient 和呃... progid:DXImageTransform.Microsoft.gradient 也是如此...是的。
我一直在尝试使用 AppBarLayout,但找不到使它的背景透明的方法。 我的意思是: 这是我的 XML: 如您所见,我使用的是颜色 #8000
我是一名优秀的程序员,十分优秀!