首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

问一上,EDIT字后面背景如何弄成透明的

2012-12-29 
问一下,EDIT字后面背景怎么弄成透明的,问一下,EDIT字后面背景怎么弄成透明的,怎么自己画,[解决办法]干脆用

问一下,EDIT字后面背景怎么弄成透明的,
问一下,EDIT字后面背景怎么弄成透明的,
怎么自己画,
[解决办法]
干脆用 Label,把 Transparent 属性设置为 true 即可透明。
[解决办法]
将窗体的Color属性设为clGreen,TransparentColor属性设为True,就是透明的,可从窗体类继承一个新类。
[解决办法]
{*******************************************************
项目:
模块:
描述:  本单元为透明的Edit控件,用来将集装箱数据居中显示

版本:  1.0
日期:  2006-3-3
作者:  killer-lijun
更新:
todo:
*******************************************************}
unit TranComp;

interface

uses
  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;

implementation

const
  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.
[解决办法]
例子代码已发送到你的邮箱,请查收。

热点排行