惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

T
Tailwind CSS Blog
The GitHub Blog
The GitHub Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
B
Blog
Microsoft Security Blog
Microsoft Security Blog
Stack Overflow Blog
Stack Overflow Blog
量子位
Martin Fowler
Martin Fowler
月光博客
月光博客
P
Proofpoint News Feed
博客园_首页
Y
Y Combinator Blog
I
InfoQ
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
V
Visual Studio Blog
H
Help Net Security
U
Unit 42
GbyAI
GbyAI
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
博客园 - 司徒正美
MongoDB | Blog
MongoDB | Blog
F
Fortinet All Blogs
罗磊的独立博客
酷 壳 – CoolShell
酷 壳 – CoolShell

博客园 - Enli

IOS 命令行安装备忘 IOS开发备忘 MAC 编制计划任务 弹出式窗口管理单元备忘 Wininet请求包装类简稿 自备工具库 多屏开发的备忘 rc资源文件的中英文应用备忘 Wininet下载类初稿 Dephi调用C#编写的WebService的一些问题与解决 (转) 关于Window的快捷方式,图标缓存的清理 Delphi 备忘五 http断点续传的单元 Delphi 代码优化(转) [转载]Delphi的四舍五入函数 同名派生的应用(转) 关于delphi的程序在英文操作系统下乱码问题 - Enli - 博客园 TWebBrowser备忘 组件开发中的技巧(转)
界面方面的备忘
Enli · 2011-11-08 · via 博客园 - Enli

1. 透明panel

unit uWnTransparentPanel;

interface

uses
  Windows,Classes,StdCtrls,ExtCtrls,Messages,Forms;

type
  TWnTransparentPanel = class(TPanel)
  private
    FTransparentPercent: Integer;
    procedure SetTransparentPercent(const Value: Integer);
  protected
    procedure WMPaint(var message : TMessage); message WM_Paint;
  public
    procedure StepShow(const ALeft,ATop,HStet,VStep:Integer);
  published
    property TransparentPercent: Integer read FTransparentPercent write SetTransparentPercent;
  end;

implementation

{ TWnTransparentPanel }

procedure TWnTransparentPanel.SetTransparentPercent(const Value: Integer);
begin
  FTransparentPercent := Value;
end;

procedure TWnTransparentPanel.StepShow(const ALeft, ATop,HStet, VStep: Integer);
var
  I: Integer;
begin
  Visible := True;
  Left := ALeft;
  Top := ATop+VStep*10  ;
  for I := 0 to 9 do
  begin
    Top := ATop +(9-I)*VStep;
    Self.Parent.Update;
    Self.Repaint;
    Sleep(100);
    Application.HandleMessage;
  end;
end;

procedure TWnTransparentPanel.WMPaint(var message: TMessage);
  procedure AlphaBlendTabControl;
  var
  MemBitmap, OldBitmap: HBITMAP;
  BF: BLENDFUNCTION;
  MemDC, DC: HDC;
  begin
    if (Parent = nilor not Parent.HandleAllocated then
    Exit;
    DC := GetDC(0);
    MemBitmap := CreateCompatibleBitmap(DC, Parent.Width, Parent.Height);
    ReleaseDC(0, DC);
    MemDC := CreateCompatibleDC(0);
    OldBitmap := SelectObject(MemDC, MemBitmap);
    try
      Parent.Perform(WM_ERASEBKGND, MemDC, MemDC);
      Parent.Perform(WM_PAINT, MemDC, 0);

      BF.SourceConstantAlpha := TransparentPercent;
      BF.AlphaFormat := 0;
      BF.BlendOp := AC_SRC_OVER;
      BF.BlendFlags := 0;
      Windows.AlphaBlend(Canvas.Handle, 00, Width, Height, MemDC, Left, Top, Width, Height, BF);
    finally
      SelectObject(MemDC, OldBitmap);
      DeleteDC(MemDC);
      DeleteObject(MemBitmap);
    end;
  end;
begin
  inherited;
  AlphaBlendTabControl;
end;

end.

2. 设计的时候,panel可以用Anchors = [akLeft, akTop, akRight, akBottom] 加上Align = alCustom达到自动预留边框的目的,就可以避免panel用Align = alClient的时候panel贴边的问题

3. Grid载入数据的时候界面频刷的问题,主要是要Grid paint之初就要设定好高宽,而不是边画边设高宽