一个透明窗体的问题

alphagx 2003-06-10 05:05:11
我有一个窗体是透明的,上面有一个LABEL,BUTTON,当我按BUTTON时,LABEL中的内容改变,但我发现结果却有所不同,当要显示的字节少于原来的字节时只替换前面的几个.
程序如下:
procedure TForm1.createparams(var params:tcreateparams);
begin
inherited createparams(params);
params.exstyle:=WS_EX_TRANSPARENT;
end;

procedure TForm1.FormCreate(Sender: TObject);

begin
//透明的窗体
Form1.brush.style:=bsclear;
Form1.borderstyle:=bsnone;
end;


procedure TForm1.Button1Click(Sender: TObject);
var
h : HDC;
begin
Label1.Caption :='dd';
h :=getwindowdc(HANDLE);
PostMessage(HANDLE,WM_ERASEBKGND,integer(h),0);
end;

LABEL中原内容是123456789
此时显示的是dd34567890但实际他是DD,
这是为什么????是窗体没有刷新吗???
...全文
43 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
jtnetcom 2003-06-21
  • 打赏
  • 举报
回复
是否与Form透明不透明无关,我遇到过Label控件显示字符时,最后一个字符显示不出。把自动修改尺寸的属性关闭就行了。
myling 2003-06-21
  • 打赏
  • 举报
回复
楼主,怎么不试试用区域的与或非来创建透明窗体呢?


{ 在窗体中添加 button,然后加入以下代码:}

procedure TForm1.FormCreate(Sender: TObject);
var
FullRgn, ClientRgn, ButtonRgn: THandle;
Margin, X, Y: Integer;
begin
Margin := (Width - ClientWidth) div 2;
FullRgn := CreateRectRgn(0, 0, Width, Height);
X := Margin;
Y := Height - ClientHeight - Margin;
ClientRgn := CreateRectRgn(X, Y, X + ClientWidth, Y + ClientHeight);
CombineRgn(FullRgn, FullRgn, ClientRgn, RGN_DIFF);
X := X + Button1.Left;
Y := Y + Button1.Top;
ButtonRgn := CreateRectRgn(X, Y, X + Button1.Width, Y + Button1.Height);
CombineRgn(FullRgn, FullRgn, ButtonRgn, RGN_OR);
SetWindowRgn(Handle, FullRgn, True);
end;
myling 2003-06-21
  • 打赏
  • 举报
回复
microjuz(天才弟弟)

1.createparams 我也没用过,不知道

2.得到的当然是self.handle了,

3.改变 FORM的ALPHABLEND和ALPHABLENDVALUE属性就行了,以前没注意这个属性吧:-)


jun_01((张军)(<--这人是个傻瓜!))
将autosize设成false
jun_01 2003-06-21
  • 打赏
  • 举报
回复
看下我这个问题:
改变label的CAPTION后
在98下怎么设都可以自动的,正常根据字的多少来调整大小。
但2K下,老比预期的要小一些,有几个字显示不出来。
microjuz 2003-06-21
  • 打赏
  • 举报
回复
还有一个问题..
设置FORM的ALPHABLEND和ALPHABLENDVALUE来达到透明的效果.
怎么做的??
microjuz 2003-06-21
  • 打赏
  • 举报
回复
很多不懂..
procedure TForm1.createparams(var params:tcreateparams);
begin
inherited createparams(params);
params.exstyle:=WS_EX_TRANSPARENT;
end;
是做什么的

procedure TForm1.Button1Click(Sender: TObject);
var
h : HDC;
begin
Label1.Caption :='dd';
h :=getwindowdc(HANDLE);  //得到的是label的句柄吗??怎么会
PostMessage(HANDLE,WM_ERASEBKGND,integer(h),0);
end;

单独试了一下上面的代码,label改为dd了..
alphagx 2003-06-21
  • 打赏
  • 举报
回复
仍然没有解决谢谢楼上的各位兄弟们
结贴了
alphagx 2003-06-12
  • 打赏
  • 举报
回复
楼上的你用的是什么字体???
LuckyJan 2003-06-11
  • 打赏
  • 举报
回复
gz
alphagx 2003-06-11
  • 打赏
  • 举报
回复
Linux2001(我想买手提电脑啊!) :不行,

各位注意了,我在透明窗体上的LABEL的Transparent为TRUE;不是FALSE.
如果设ALPHABLEND,ALPHABLENDVALUE那窗体的都看不见了
l_xiaofeng 2003-06-11
  • 打赏
  • 举报
回复
有没有想过是字体的事呢,反正你这个问题挺奇怪,我这里就没问题。
jenemery 2003-06-11
  • 打赏
  • 举报
回复
gz
alphagx 2003-06-11
  • 打赏
  • 举报
回复
只有在进行最大化最小化变化或在不同程序间切换才能正常显示,请问这是为什么?
按理他是一个重画的过程,但我在赋值后发消息重画但却不行,这又是为什么?

firetoucher(风焱),不行我要这个窗体不能HIDE,不能最大最小化,
alphagx 2003-06-11
  • 打赏
  • 举报
回复
我把改为
procedure TForm1.Button1Click(Sender: TObject);
var
h : HDC;
begin
Label1.Caption :='dd';
Self.RecreateWnd;
end;

有时第一次按BUTTON可以显示正常,有时要按几次,这是为什么???
请各位指教
firetoucher 2003-06-11
  • 打赏
  • 举报
回复
重绘
简单的办法:
procedure TForm1.Button1Click(Sender: TObject);
begin
label1.Caption := 'dd';
form1.hide;
form1.Show;
end;
alphagx 2003-06-11
  • 打赏
  • 举报
回复
怎么没人回我呀
xiaoqlj 2003-06-10
  • 打赏
  • 举报
回复
通过设置FORM的ALPHABLEND和ALPHABLENDVALUE来达到透明的效果.
这样做方便啊!
Linux2001 2003-06-10
  • 打赏
  • 举报
回复
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
Label1: TLabel;
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
procedure CreateParams(var Params:TCreateParams);override;
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.CreateParams(var Params: TCreateParams);
begin
inherited CreateParams(Params);
Params.Exstyle:=Params.ExStyle or WS_EX_TRANSPARENT;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
Form1.brush.style:=bsClear;
Form1.borderstyle:=bsNone;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
h : HDC;
begin
Label1.Caption :='dd';
h :=Label1.Canvas.Handle;
SendMessage(HANDLE ,WM_ERASEBKGND, Integer(H), 0);
end;

end.
搞定
walterwl 2003-06-10
  • 打赏
  • 举报
回复
不懂
alphagx 2003-06-10
  • 打赏
  • 举报
回复
不行,这样一来我LABEL上的也是有种不清楚的感觉
加载更多回复(3)

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧