问一下,EDIT字后面背景怎么弄成透明的,
怎么自己画,

解决方案 »

  1.   

    干脆用 Label,把 Transparent 属性设置为 true 即可透明。
      

  2.   

    将窗体的Color属性设为clGreen,TransparentColor属性设为True,就是透明的,可从窗体类继承一个新类。
      

  3.   

    EDIT控件有parentcolor属性,若设置为true,就是背景窗体的颜色,相当于透明。
      

  4.   

    怎么把EDIT的背景重画呢?
    还是自己写个,继承一下
      

  5.   

    {*******************************************************
    项目:
    模块:
    描述:  本单元为透明的Edit控件,用来将集装箱数据居中显示版本:  1.0
    日期:  2006-3-3
    作者:  killer-lijun
    更新:
    todo:
    *******************************************************}
    unit TranComp;interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      StdCtrls, ComCtrls;type
      TCtrl = class(TWinControl);  TTransEdit = class(TEdit)
      private
        FAlignText: TAlignment;
        FTransparent: Boolean;
        FPainting: Boolean;
        procedure SetAlignText(Value: TAlignment);
        procedure SetTransparent(Value: Boolean);
        procedure WMPaint(var Message: TWMPaint); message WM_PAINT;
        procedure WMNCPaint(var Message: TMessage); message WM_NCPAINT;
        procedure WMEraseBkGnd(var Message: TWMEraseBkGnd); message WM_ERASEBKGND;
        procedure CNCtlColorEdit(var Message: TWMCtlColorEdit); message CN_CTLCOLOREDIT;
        procedure CNCtlColorStatic(var Message: TWMCtlColorStatic); message CN_CTLCOLORSTATIC;
        procedure CMParentColorChanged(var Message: TMessage); message CM_PARENTCOLORCHANGED;
        procedure WMSize(var Message: TWMSize); message WM_SIZE;
        procedure WMMove(var Message: TWMMove); message WM_MOVE;
      protected
        procedure RepaintWindow;
        procedure CreateParams(var Params: TCreateParams); override;
        procedure Change; override;
        procedure SetParent(AParent: TWinControl); override;
      public
        constructor Create(AOwner: TComponent); override;
        destructor Destroy; override;
      published
        property AlignText: TAlignment read FAlignText write SetAlignText default taLeftJustify;
        property Transparent: Boolean read FTransparent write SetTransparent default false;
      end;procedure Register;implementationconst
      BorderRec: array[TBorderStyle] of Integer = (1, -1);procedure Register;
    begin
      RegisterComponents('OurComponent', [TTransEdit]);
    end;function GetScreenClient(Control: TControl): TPoint;
    var
      p: TPoint;
    begin
      p := Control.ClientOrigin;
      ScreenToClient(Control.Parent.Handle, p);
      Result := p;
    end;constructor TTransEdit.Create(AOwner: TComponent);
    begin
      inherited Create(AOwner);
      FAlignText := taLeftJustify;
      FTransparent := false;
      FPainting := false;
    end;destructor TTransEdit.Destroy;
    begin
      inherited Destroy;
    end;procedure TTransEdit.SetAlignText(Value: TAlignment);
    begin
      if FAlignText <> Value then
      begin
        FAlignText := Value;
        RecreateWnd;
        Invalidate;
      end;
    end;procedure TTransEdit.SetTransparent(Value: Boolean);
    begin
      if FTransparent <> Value then
      begin
        FTransparent := Value;
        Invalidate;
      end;
    end;procedure TTransEdit.WMEraseBkGnd(var Message: TWMEraseBkGnd);
    var
      DC: hDC;
      i: integer;
      p: TPoint;
    begin
      if FTransparent then
      begin
        if Assigned(Parent) then
        begin
          DC := Message.DC;
          i := SaveDC(DC);
          p := GetScreenClient(self);
          p.x := -p.x;
          p.y := -p.y;
          MoveWindowOrg(DC, p.x, p.y);
          SendMessage(Parent.Handle, $0014, DC, 0);
          TCtrl(Parent).PaintControls(DC, nil);
          RestoreDC(DC, i);
        end;
      end
      else
        inherited;
    end;procedure TTransEdit.WMPaint(var Message: TWMPaint);
    begin
      inherited;
      if FTransparent then
        if not FPainting then
          RepaintWindow;
    end;procedure TTransEdit.WMNCPaint(var Message: TMessage);
    begin
      inherited;
    end;procedure TTransEdit.CNCtlColorEdit(var Message: TWMCtlColorEdit);
    begin
      inherited;
      if FTransparent then
        SetBkMode(Message.ChildDC, 1);
    end;procedure TTransEdit.CNCtlColorStatic(var Message: TWMCtlColorStatic);
    begin
      inherited;
      if FTransparent then
        SetBkMode(Message.ChildDC, 1);
    end;procedure TTransEdit.CMParentColorChanged(var Message: TMessage);
    begin
      inherited;
      if FTransparent then
        Invalidate;
    end;procedure TTransEdit.WMSize(var Message: TWMSize);
    begin
      inherited;
      Invalidate;
    end;procedure TTransEdit.WMMove(var Message: TWMMove);
    begin
      inherited;
      Invalidate;
    end;procedure TTransEdit.RepaintWindow;
    var
      DC,rDC: hDC;
      TmpBitmap, Bitmap: hBitmap;
    begin
      if FTransparent then
      begin
        FPainting := true;
        HideCaret(Handle);
        rDC := GetDC(Handle);
        DC := CreateCompatibleDC(rDC);
        TmpBitmap := CreateCompatibleBitmap(rDC, Succ(ClientWidth), Succ(ClientHeight));
        Bitmap := SelectObject(DC, TmpBitmap);
        PaintTo(DC, 0, 0);
        BitBlt(rDC, BorderRec[BorderStyle], BorderRec[BorderStyle], ClientWidth, ClientHeight, DC, 1, 1,
          SRCCOPY);
        SelectObject(DC, Bitmap);
        DeleteDC(DC);
        ReleaseDC(Handle, rDC);
        DeleteObject(TmpBitmap);
        ShowCaret(Handle);
        FPainting := false;
      end;
    end;procedure TTransEdit.CreateParams(var Params: TCreateParams);
    const
      Alignments: array[TAlignment] of DWord = (ES_LEFT, ES_RIGHT, ES_CENTER);
    begin
      inherited CreateParams(Params);
      Params.Style := Params.Style or ES_MULTILINE or Alignments[FAlignText];
    end;procedure TTransEdit.Change;
    begin
      RepaintWindow;
      inherited Change;
    end;procedure TTransEdit.SetParent(AParent: TWinControl);
    begin
      inherited SetParent(AParent);
    end;end.
      

  6.   

    这个代码ERROR了Cannot load package 'dclusr70.' It contains unit 'DdeReg,'which is also contained in package 'dclstd70'
    Do you want to attempt to load this package the next time a project is loaded?
      

  7.   

    自己模拟实现一个透明效果的,很容易的咯,现在的XE版本的直接支持Unicode的,写Edit就很容易了,所以透明就容易了咯