我有一个窗体是透明的,上面有一个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,
这是为什么????是窗体没有刷新吗???

解决方案 »

  1.   

    1,可以通过设置FORM的ALPHABLEND和ALPHABLENDVALUE来达到透明的效果,没有你说的问题;
      

  2.   

    不行,这样一来我LABEL上的也是有种不清楚的感觉
      

  3.   

    unit Unit1;interfaceuses
      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.
    搞定
      

  4.   

    通过设置FORM的ALPHABLEND和ALPHABLENDVALUE来达到透明的效果.
    这样做方便啊!
      

  5.   

    Linux2001(我想买手提电脑啊!) :不行,各位注意了,我在透明窗体上的LABEL的Transparent为TRUE;不是FALSE.
    如果设ALPHABLEND,ALPHABLENDVALUE那窗体的都看不见了
      

  6.   

    重绘
    简单的办法:
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      label1.Caption := 'dd';
      form1.hide;
      form1.Show;
    end;
      

  7.   

    我把改为
    procedure TForm1.Button1Click(Sender: TObject);
    var 
      h : HDC;
    begin
       Label1.Caption :='dd';
       Self.RecreateWnd;
    end;有时第一次按BUTTON可以显示正常,有时要按几次,这是为什么???
    请各位指教
      

  8.   

    只有在进行最大化最小化变化或在不同程序间切换才能正常显示,请问这是为什么?
    按理他是一个重画的过程,但我在赋值后发消息重画但却不行,这又是为什么?firetoucher(风焱),不行我要这个窗体不能HIDE,不能最大最小化,
      

  9.   

    很多不懂..
    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了..
      

  10.   

    还有一个问题..
    设置FORM的ALPHABLEND和ALPHABLENDVALUE来达到透明的效果.
    怎么做的??
      

  11.   

    看下我这个问题:
    改变label的CAPTION后
    在98下怎么设都可以自动的,正常根据字的多少来调整大小。
    但2K下,老比预期的要小一些,有几个字显示不出来。
      

  12.   

    microjuz(天才弟弟) 1.createparams 我也没用过,不知道2.得到的当然是self.handle了,3.改变 FORM的ALPHABLEND和ALPHABLENDVALUE属性就行了,以前没注意这个属性吧:-)
    jun_01((张军)(<--这人是个傻瓜!)) 
    将autosize设成false
      

  13.   

    楼主,怎么不试试用区域的与或非来创建透明窗体呢?
    { 在窗体中添加 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;
      

  14.   

    是否与Form透明不透明无关,我遇到过Label控件显示字符时,最后一个字符显示不出。把自动修改尺寸的属性关闭就行了。