窗体逶明????
我用上面的代码实现窗体逶明。
procedure TForm2.SetTranSparent(form: TForm);
var
AControl : TControl;
i, Margin, X, Y, CtlX, CtlY : Integer;
begin
Margin := (form.Width - form.ClientWidth) div 2;
FullRgn := CreateRectRgn(0,0,form.Width,form.Height);
X := Margin;
Y := form.Height - form.ClientHeight - Margin;
ClientRgn := CreateRectRgn(X,Y,X + form.ClientWidth, Y + form.ClientHeight );
CombineRgn(FullRgn,FullRgn,ClientRgn,RGN_DIFF );
for i := 0 to form.ControlCount - 1 do
begin
AControl := form.Controls[i];
if (AControl is TWinControl ) or (AControl is TGraphicControl) then
begin
with AControl do
begin
if Visible then
begin
CtlX := X + Left;
CtlY := Y + Top;
TransparentColor := false;
CtlRgn := CreateRectRgn(CtlX,CtlY,CtlX + Width,CtlY + Height );
Brush.Style := bsClear;
TextOut(Handle,10,10,'123',3);
CombineRgn(FullRgn,FullRgn,CtlRgn, RGN_OR );
end;
end;
end;
end;
SetWindowRgn(form.Handle, FullRgn, TRUE);
end;
现在的问题是:逶明窗体上放了Label控件,想让Label也是逶明的及只能看到文本!
注:背景播放的视频图象
问题点数:30、回复次数:9Top
1 楼LCR2002(坚持到底)回复于 2005-08-01 17:35:54 得分 0
注:背景是播放的视频图象Top
2 楼aloking(黑鲸)回复于 2005-08-01 22:56:23 得分 0
既然只是用lable,你不如直接放上个image1,上面textoutlabel文字Top
3 楼GenieWin(精灵太保)回复于 2005-08-22 23:21:48 得分 0
Label设成透明Top
4 楼zzlingaaa(小舟)回复于 2005-08-23 18:37:10 得分 0
窗体透明要这么多代码吗?TransparentColorValue和Color设置成一样的,TransparentColor:=true不就透明了.Top
5 楼hqhhh(枫叶)回复于 2005-08-23 18:38:26 得分 0
同意楼上的Top
6 楼zzlingaaa(小舟)回复于 2005-08-23 18:38:42 得分 0
label1.Transparent:=true就达到你的目的了啊,只要label1的字体颜色和窗体的颜色不一样就行了Top
7 楼yonny(会不会有一天把自己也做成EXE?)(答案:略)回复于 2005-08-23 22:52:21 得分 0
楼猪偶想问你,你那个明字前面那个字怎么读。Top
8 楼wudi_1982(向伴水学习|胃出血,住院中)回复于 2005-08-23 23:10:03 得分 0
自己看看吧,在D7和WINXP下测试通过的半透明窗体。
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, TeeProcs, TeEngine, Chart, Series;
const
WS_EX_LAYERED = $80000;
AC_SRC_OVER = $0;
AC_SRC_ALPHA = $1;
AC_SRC_NO_PREMULT_ALPHA = $1;
AC_SRC_NO_ALPHA = $2;
AC_DST_NO_PREMULT_ALPHA = $10;
AC_DST_NO_ALPHA = $20;
LWA_COLORKEY = $1;
LWA_ALPHA = $2;
ULW_COLORKEY = $1;
ULW_ALPHA = $2;
ULW_OPAQUE = $4;
type
TForm1 = class(TForm)
Chart1: TChart;
Series1: TBarSeries;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
function SetLayeredWindowAttributes(hwnd:HWND; crKey:Longint; bAlpha:byte; dwFlags:longint ):longint; stdcall; external user32;//函数声明
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
var l:longint;
begin
l:=getWindowLong(Handle, GWL_EXSTYLE);
l := l Or WS_EX_LAYERED;
SetWindowLong (handle, GWL_EXSTYLE, l);
SetLayeredWindowAttributes (handle, 0, 150, LWA_ALPHA);
Series1.AddBar(100,'',clBackground);
//第二个参数是指定透明颜色
//第二个参数为0则使用第四个参数设置alpha值,从0到255,其他的我不太清楚,因为没有api帮助
end;
end.
Top
9 楼wtg476(起飞)回复于 2005-08-24 08:49:05 得分 0
Form1.Brush.Style := bsClear;
Form1.BorderStyle := bsNoneTop




