Sky*_*Sky 6 delphi user-interface
看下图:

如你所见,我无法发回按钮.这仅适用于标签.
所以,我怎么能发送TImage到前其透明度.
顺便说一句,我读过这个相关的问题,但没有帮助我.因为在运行Andreas Rejbrand的代码后你甚至无法点击按钮.不仅按钮,一切(如此图像中的滚动条)
编辑:
我发送回图像后,我不想让按钮可以访问.只是想把TImage一切都带到前面.
谢谢.
bum*_*mmi 11
你可以接近目标的一种方法是使用插入器类进行TWincontrols,并在使用TControlCanvas并"挂钩"WM_PAINT后绘制已经绘制的图像.
该代码使用半透明PNG图像显示原始草稿,并且可以进行增强.

unit Unit2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons, dxGDIPlusClasses, ExtCtrls;
type
TButton=Class (StdCtrls.TButton)
Procedure WMPaint(var MSG:TMessage);Message WM_Paint;
End;
TEdit=Class (StdCtrls.TEdit)
Procedure WMPaint(var MSG:TMessage);Message WM_Paint;
End;
TForm2 = class(TForm)
Image1: TImage;
SpeedButton1: TSpeedButton;
Button1: TButton;
Edit1: TEdit;
Edit2: TEdit;
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;
var
Form2: TForm2;
implementation
{$R *.dfm}
{ TButton }
procedure TButton.WMPaint(var MSG: TMessage);
var
cc:TControlCanvas;
begin
inherited;
CC:=TControlCanvas.Create;
CC.Control := TControl(Self);
CC.Draw(-Left,-Top,Form2.Image1.Picture.Graphic);
CC.Free;
end;
procedure TEdit.WMPaint(var MSG: TMessage);
var
cc:TControlCanvas;
begin
inherited;
CC:=TControlCanvas.Create;
CC.Control := TControl(Self);
CC.Draw(-Left,-Top,Form2.Image1.Picture.Graphic);
CC.Free;
end;
end.
Run Code Online (Sandbox Code Playgroud)
另一个(更好)"挂钩"的地方将覆盖PaintWindow
unit Unit2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons, dxGDIPlusClasses, ExtCtrls;
type
TButton=Class (StdCtrls.TButton)
procedure PaintWindow(DC: HDC);override;
End;
TEdit=Class (StdCtrls.TEdit)
procedure PaintWindow(DC: HDC);override;
End;
TForm2 = class(TForm)
Image1: TImage;
SpeedButton1: TSpeedButton;
Button1: TButton;
Edit1: TEdit;
Edit2: TEdit;
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;
var
Form2: TForm2;
implementation
{$R *.dfm}
{ TButton }
procedure TButton.PaintWindow(DC: HDC);
var
cc:TCanvas;
begin
inherited;
CC:=TCanvas.Create;
CC.Handle := DC;
CC.Draw(-Left,-Top,Form2.Image1.Picture.Graphic);
CC.Free;
end;
procedure TEdit.PaintWindow(DC: HDC);
var
cc:TCanvas;
begin
inherited;
CC:=TCanvas.Create;
CC.Handle := DC;
CC.Draw(-Left,-Top,Form2.Image1.Picture.Graphic);
CC.Free;
end;
end.
Run Code Online (Sandbox Code Playgroud)
你不希望图像被带到前面(顺便说一句,在窗口控件上是不可能的),因为你希望按钮也可以访问.
虽然你的问题本身就是矛盾的,但是你完全不知道你想要实现什么,我认为你的意思是在图像上有一个透明的按钮.
如果是这样,那么使用TSpeedButton,并将其设置为Transparent与Flat属性为True.
这里有一个带有三个按钮状态的示例:正常,悬停,按下:

| 归档时间: |
|
| 查看次数: |
4558 次 |
| 最近记录: |