我正在尝试在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/