zoukankan      html  css  js  c++  java
  • TrMemo控件

    unit TrMemo;
    
    {$R-}
    interface
    
    uses
      Windows, Messages, Controls, StdCtrls, Classes;
    
    const
      TMWM__SpecialInvalidate = WM_USER + 1111;
    
    type
      TTransparentMemo = class(TMemo)
      private
        procedure SpecialInvalidate(var Message:TMessage); message TMWM__SpecialInvalidate;
        procedure WMHScroll(var Message: TWMHScroll); message WM_HSCROLL;
        procedure WMVScroll(var Message: TWMVScroll); message WM_VSCROLL;
        procedure WMSetText(var Message:TWMSetText); message WM_SETTEXT;
        procedure CNCTLCOLOREDIT(var Message:TWMCTLCOLOREDIT); message CN_CTLCOLOREDIT;
        procedure WMKeyDown(var Message: TWMKeyDown); message WM_KEYDOWN;
        procedure WMEraseBkgnd(var Message: TWMEraseBkgnd); message WM_ERASEBKGND;
      protected
        procedure CreateParams(var Params: TCreateParams); override;
      public
        constructor Create(AOwner: TComponent); override;
      end;
    
    procedure Register;
    
    implementation
    
    { TTransparentMemo }
    procedure TTransparentMemo.WMHScroll(var Message: TWMHScroll);
    begin
      inherited;
      PostMessage(Handle,TMWM__SpecialInvalidate,0,0);
    end;
    
    procedure TTransparentMemo.WMVScroll(var Message: TWMVScroll);
    begin
      SendMessage(Handle,TMWM__SpecialInvalidate,0,0);
      inherited;
      PostMessage(Handle,TMWM__SpecialInvalidate,0,0);
    end;
    
    procedure TTransparentMemo.CNCTLCOLOREDIT(var Message:TWMCTLCOLOREDIT);
    begin
      with Message do
        begin
          SetBkMode(ChildDC,TRANSPARENT);
          Result:=GetStockObject(HOLLOW_BRUSH)
        end
    end;
    
    procedure TTransparentMemo.WMSetText(var Message:TWMSetText);
    begin
      inherited;
      if not (csDesigning in ComponentState) then
        PostMessage(Handle,TMWM__SpecialInvalidate,0,0)
    end;
    
    procedure TTransparentMemo.SpecialInvalidate(var Message:TMessage);
    var r:TRect;
    begin
      if Parent<>nil then
      begin
        r:=ClientRect;
        r.TopLeft:=Parent.ScreenToClient(ClientToScreen(r.TopLeft));
        r.BottomRight:=Parent.ScreenToClient(ClientToScreen(r.BottomRight));
        InvalidateRect(Parent.Handle,@r,true);
        RedrawWindow(Handle,nil,0,RDW_FRAME+RDW_INVALIDATE)
      end;
    end;
    
    procedure TTransparentMemo.WMKeyDown(var Message: TWMKeyDown);
    begin
      SendMessage(Handle,TMWM__SpecialInvalidate,0,0);
      inherited;
      PostMessage(Handle,TMWM__SpecialInvalidate,0,0);
    end;
    
    procedure TTransparentMemo.WMEraseBkgnd(var Message: TWMEraseBkgnd);
    begin
      Message.Result := 1;
    end;
    
    constructor TTransparentMemo.Create(AOwner: TComponent);
    begin
      inherited;
      ControlStyle := [csCaptureMouse, csDesignInteractive, csClickEvents,
        csSetCaption, csOpaque, csDoubleClicks, csReplicatable, csNoStdEvents];
    end;
    
    procedure TTransparentMemo.CreateParams(var Params: TCreateParams);
    begin
      inherited CreateParams(Params);
      with Params do
      begin
        ExStyle:=ExStyle or WS_EX_TRANSPARENT and not WS_EX_WINDOWEDGE
          and not WS_EX_STATICEDGE and not WS_EX_DLGMODALFRAME and not WS_EX_CLIENTEDGE;
      end;
    end;
    
    procedure Register;
    begin
      RegisterComponents('cool!', [tTransparentMemo]);
    end;
    
    end.
    View Code
  • 相关阅读:
    从zk监控canal-client消费延迟情况
    python面向对象——类的参数
    python面向对象——类的继承
    python并发——进程间同步和通信(二)
    python并发——线程池与进程池(转)
    python从指定目录排除部分子目录——用于删除目录
    python并发统计s3目录大小
    Java对象的序列化和反序列化
    多态、抽象类和接口
    Java输入输出流
  • 原文地址:https://www.cnblogs.com/blogpro/p/11453379.html
Copyright © 2011-2022 走看看