Delphi中的Google Chrome风格标签

War*_* P 16 delphi dwm tabbed-interface aero-glass

我正在尝试在Windows 7中的Delphi应用程序中实现Google Chrome样式选项卡.

这个元素是:

  • 标签可以像谷歌浏览器本身一样延伸到非客户区域.
  • 启用玻璃时,在Vista和Windows 7上正确绘制
  • 标签工作就像谷歌浏览器一样,看起来像谷歌铬,玻璃.

在此输入图像描述

我发现我必须克服的挑战是:

  • 如何将控件(VCL控件)扩展到非客户端区域?(执行此操作的控件的一个很好的示例是VCL源中包含的Ribbon控件,但我没有看到任何其他人这样做,并且需要一些邪恶的黑客才能使功能区运行)
  • 如何在玻璃上正确绘制位图?(DWM API).一个相关的问题已经回答了这方面,在这里,我也问过这个问题.

nor*_*aul 18

我刚刚为Delphi完成了一个非常完整的Chrome Tabs实现.

在此输入图像描述

功能包括:

  • 完全可配置的外观,包括渐变,透明度和自定义标签形状
  • 使用Aero时,可以在标题栏中绘制选项卡
  • 适用于Vista玻璃
  • 标签移动动画
  • Tab过渡样式效果(颜色和alpha级别之间的淡入淡出)
  • 在容器内和容器之间拖放
  • 拖动图像显示选项卡和任何TWinControl
  • 用户单击关闭按钮时,智能选项卡调整大小
  • 使用最小和最大标签尺寸调整流体选项卡的大小
  • 添加标签按钮可以位于左侧,右侧或右侧
  • 全功能滚动,包括拖动时自动滚动
  • 智能选项卡内容显示根据选项卡宽度隐藏/显示项目
  • 所有者绘制任何项目
  • 从右到左文本
  • 固定标签
  • Tab旋转器 - 渲染和位图.
  • 带有动画光晕的修改标签
  • 标签图像和叠加图像
  • 鼠标在发光
  • 很多事件
  • 加载/保存外观和流/文件选项
  • 生成外观和选项Delphi代码

您可以在此处下载源代码和完整的演示/编辑器:http://code.google.com/p/delphi-chrome-tabs/

  • @kobik - 完成.您可以在http://code.google.com/p/delphi-chrome-tabs/downloads/list找到它 (3认同)
  • 这很棒.我将看看我是否可以构建一个帮助组件,将标签集成到非客户区域,就像谷歌Chrome一样. (2认同)
  • 哇,刚开始exe演示,我印象深刻!非常精致,工作流畅.非常好看,当你拖动它时,标签的内容是如何透明显示的,你可以将它放在另一个表格上. (2认同)

ska*_*adt 7

你不需要一个完整的玻璃窗,但你必须自己绘制标签,因为没有我知道的控件会给你你想要的精确外观.如果您使用当前表单的GlassFrame属性,请启用它并将顶部设置为您需要的选项卡高度,在此区域放置一个paintbox并使用GDI +调用手动绘制选项卡.EDN(http://cc.embarcadero.com/Download.aspx?id=26950)上提供了一个适用于此的好库.如果不使用GDI +,您将可以绘制到绘图框,但黑色将变为透明.使用GDI +,您可以任意颜色自由地绘制到玻璃上.例如:

运行示例

资源:

unit Unit6;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, GdiPlusHelpers, GdiPlus, StdCtrls, ExtCtrls;

type
  TForm6 = class(TForm)
    pb1: TPaintBox;
    procedure pb1Paint(Sender: TObject);
  private
    { Private declarations }
   public
    { Public declarations }
  end;

var
  Form6: TForm6;

implementation

{$R *.dfm}

procedure TForm6.pb1Paint(Sender: TObject);
var
  Graphics : IGPGraphics;
  Brush: IGPSolidBrush;
  FontFamily: IGPFontFamily;
  Font: IGPFont;
  Point: TGPPointF;
  Pen: IGPPen;
begin
  Graphics := Pb1.ToGPGraphics;
  Brush := TGPSolidBrush.Create(TGPColor.Create(255, 0, 0, 0));
  FontFamily := TGPFontFamily.Create('Consolas');
  Font := TGPFont.Create(FontFamily, 12, FontStyleRegular, UnitPoint);
  Point.Initialize(1, 0);
  Graphics.TextRenderingHint := TextRenderingHintAntiAlias;
  Graphics.DrawString('GDI+ Black Text', Font, Point, Brush);
  Pen := TGPPen.Create(TGPColor.Create(255, 0, 0, 0));
  Graphics.DrawLine(Pen, 0, 0, 200, 100);
end;

end.
Run Code Online (Sandbox Code Playgroud)

形成:

object Form6: TForm6
  Left = 0
  Top = 0
  Caption = 'Form6'
  ClientHeight = 282
  ClientWidth = 418
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'Tahoma'
  Font.Style = []
  GlassFrame.Enabled = True
  GlassFrame.Top = 22
  OldCreateOrder = False
  PixelsPerInch = 96
  TextHeight = 13
  object pb1: TPaintBox
    Left = 0
    Top = 0
    Width = 313
    Height = 105
    OnPaint = pb1Paint
  end
end
Run Code Online (Sandbox Code Playgroud)

编辑更新为反别名文本,使其看起来更好.


War*_* P 7

很久以后,来自Klever Components:

http://rmklever.com/?p=248

在此输入图像描述