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;
  • 相关阅读:
    hadoop namanodejava
    hadoop源码下载地址
    简单的RPC java实现
    hadoop 磁盘限额配置
    Python+OpenCV图像处理(十四)—— 直线检测
    树莓派学习(一)——树莓派安装系统的过程、问题及解决办法
    ubuntu16.04 无法连接wifi和校园宽带问题的解决办法
    win10 校园宽带连接不上的解决办法(错误720、“以太网”没有有效的ip设置)
    Python+OpenCV图像处理(十三)—— Canny边缘检测
    Python+OpenCV图像处理(十二)—— 图像梯度
  • 原文地址:https://www.cnblogs.com/findumars/p/5185087.html
Copyright © 2011-2022 走看看