zoukankan      html  css  js  c++  java
  • 什么是透明(和Windows主题有关系),研究TLable和TPanel是两个好例子

    在controls.pas单元里只有判断,没有赋值,所以一直不是很明白。于是在stdCtrls.pas里找了几个例子,直观加深一下印象:

    constructor TCustomLabel.Create(AOwner: TComponent);
    begin
      inherited Create(AOwner);
      ControlStyle := ControlStyle + [csReplicatable];
      Width := 65;
      Height := 17;
      FAutoSize := True;
      FShowAccelChar := True;
      { The "default" value for the Transparent property depends on
        if you have Themes available and enabled or not. If you have
        ever explicitly set it, that will override the default value. }
      if ThemeServices.ThemesEnabled then
        ControlStyle := ControlStyle - [csOpaque]
      else
        ControlStyle := ControlStyle + [csOpaque]; // 默认走这里
    end;
    
    function TCustomLabel.GetTransparent: Boolean;
    begin
      Result := not (csOpaque in ControlStyle);
    end;
    
    procedure TCustomLabel.SetTransparent(Value: Boolean);
    begin
      if Transparent <> Value then
      begin
        if Value then
          ControlStyle := ControlStyle - [csOpaque] 
        else
          ControlStyle := ControlStyle + [csOpaque];
        Invalidate;
      end;
      FTransparentSet := True;
    end;
    
    constructor TCustomListBox.Create(AOwner: TComponent);
    const
      ListBoxStyle = [csSetCaption, csDoubleClicks, csOpaque];
    begin
      inherited Create(AOwner);
      if NewStyleControls then
        ControlStyle := ListBoxStyle else
        ControlStyle := ListBoxStyle + [csFramed];
      Width := 121;
      Height := 97;
      TabStop := True;
      ParentColor := False;
      FAutoComplete := True;
      FItems := TListBoxStrings.Create;
      TListBoxStrings(FItems).ListBox := Self;
      FCanvas := TControlCanvas.Create;
      TControlCanvas(FCanvas).Control := Self;
      FItemHeight := 16;
      FBorderStyle := bsSingle;
      FExtendedSelect := True;
      FOldCount := -1;
    end;

    再在ExtCtrls.pas里找几个素材:

    procedure TImage.PictureChanged(Sender: TObject);
    var
      G: TGraphic;
      D : TRect;
    begin
      if AutoSize and (Picture.Width > 0) and (Picture.Height > 0) then
        SetBounds(Left, Top, Picture.Width, Picture.Height);
      G := Picture.Graphic;
      if G <> nil then
      begin
        if not ((G is TMetaFile) or (G is TIcon)) then
          G.Transparent := FTransparent;
            D := DestRect;
        if (not G.Transparent) and (D.Left <= 0) and (D.Top <= 0) and
           (D.Right >= Width) and (D.Bottom >= Height) then
          ControlStyle := ControlStyle + [csOpaque]
        else  // picture might not cover entire clientrect
          ControlStyle := ControlStyle - [csOpaque];
        if DoPaletteChange and FDrawing then Update;
      end
      else ControlStyle := ControlStyle - [csOpaque];
      if not FDrawing then Invalidate;
    end;
    
    constructor TCustomPanel.Create(AOwner: TComponent);
    begin
      inherited Create(AOwner);
      ControlStyle := [csAcceptsControls, csCaptureMouse, csClickEvents,
        csSetCaption, csOpaque, csDoubleClicks, csReplicatable];
      { When themes are on in an application default to making
        TCustomPanel's paint with their ParentBackground }
      if ThemeServices.ThemesEnabled then
        ControlStyle := ControlStyle + [csParentBackground] - [csOpaque];
      Width := 185;
      Height := 41;
      FAlignment := taCenter;
      BevelOuter := bvRaised;
      BevelWidth := 1;
      FBorderStyle := bsNone;
      Color := clBtnFace;
      FFullRepaint := True;
      UseDockManager := True;
    end;
    
    procedure TCustomPanel.SetParentBackground(Value: Boolean);
    begin
      { TCustomPanel needs to not have csOpaque when painting
        with the ParentBackground in Themed applications }
      if Value then
        ControlStyle := ControlStyle - [csOpaque]
      else
        ControlStyle := ControlStyle + [csOpaque];
      FParentBackgroundSet := True;
      inherited;
    end;
  • 相关阅读:
    JBPM流程部署之流程版本升级
    JBPM流程部署校验之java利用XSD校验XML
    JBPM节点分支之Group节点分析
    Object Oriented Programming in JavaScript
    JBPM流程部署之部署环境初始化
    JBPM流程定义校验之.net利用XSD校验XML
    JBPM流程部署之流程定义实体对象分析
    使用Jasob混淆javascript代码
    利用javascript的面向对象的特性实现限制试用期
    JBPM流程部署之流程支持的节点扩展
  • 原文地址:https://www.cnblogs.com/findumars/p/5185087.html
Copyright © 2011-2022 走看看