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

其元素是:


标签可能会扩展到非客户区域,就像在Google chrome本身中一样。
启用玻璃后,可以在Vista和Windows 7上正确绘制
标签在玻璃上的工作方式与Google chrome一样,看起来像Google chrome。




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


如何获得控件(VCL控件)以扩展到非客户区域?
 (一个很好的控件示例就是VCL源代码中包含的Ribbon控件,但是我还没有看到其他人这样做,并且还需要进行一些恶意的操作才能使Ribbon起作用)
如何在玻璃上正确绘制位图? (DWM API)。 related question已经回答了这个问题,在这里,我也问过这个问题。

最佳答案

您不希望有一个完整的玻璃窗,但是您将不得不自己绘制选项卡,因为据我所知,没有控件可以为您提供所需的确切外观。如果使用当前窗体的GlassFrame属性,请启用它并将顶部设置为所需的选项卡高度,在此区域上放置一个画框,并使用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.


形成:

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


编辑已更新为抗锯齿文本,因此看起来更好。

关于delphi - Delphi中玻璃上的Google Chrome样式标签,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3924720/

10-10 09:52