Google Chrome style tabs on glass in Delphi

前端 未结 4 1890
鱼传尺愫
鱼传尺愫 2020-12-13 07:58

I am trying to implement Google Chrome style tabs, in Windows 7, in a Delphi application.

The elements of this are:

  • tabs may extend into the non-client
相关标签:
4条回答
  • 2020-12-13 08:22

    I've just completed a pretty much complete implementation of Chrome Tabs for Delphi.

    enter image description here

    The features include:

    • Fully configurable Look and Feel including gradients, transparencies and custom tab shapes
    • Tabs can be painted in the title bar when using Aero
    • Works on Vista glass
    • Tab movement animation
    • Tab transitional style effects (fade between colours and alpha levels)
    • Drag and Drop within container and between containers
    • Drag image displays tab and any TWinControl
    • Smart tab resizing when user clicks close button
    • Fluid tab resizing with minimum and maximum tab sizes
    • Add tab button can be positioned on the left, right or floating right
    • Full featured scrolling including auto scroll when dragging
    • Smart tab content display hides/shows items depending on the tab width
    • Owner draw any item
    • Right to Left text
    • Pinned tabs
    • Tab spinners - both rendered and bitmap.
    • Modified tabs with animated glow
    • Tab images and overlay images
    • Mouse over glow
    • Lots of events
    • Load/save look and feel and options to stream/file
    • Generate look and feel/options Delphi code

    You can download the source and a full demo/editor here: http://code.google.com/p/delphi-chrome-tabs/

    0 讨论(0)
  • 2020-12-13 08:34

    Found much later, From Klever Components:

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

    enter image description here

    0 讨论(0)
  • 2020-12-13 08:36

    Painting in the caption of a glassy form explained here: http://delphihaven.wordpress.com/2010/04/22/setting-up-a-custom-title-bar-reprise/ Also you can look in to the sources of delphi's ribbon controls.

    0 讨论(0)
  • 2020-12-13 08:38

    You don't want a full glass window, but you will have to draw the tabs yourself as there isn't a control that I am aware of that will give you the exact look your looking for. If you use the GlassFrame properties of the current form, enable it and set the top to the height you will want for your tabs, drop a paintbox on this area and use GDI+ calls to draw your tabs manually. A good library that should work for this is available on the EDN (http://cc.embarcadero.com/Download.aspx?id=26950). Without using GDI+ you will be able to draw to the paint box, but black will become transparent. With GDI+ you can draw freely to the glass in any color. For example:

    running example

    Source:

    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.
    

    Form:

    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
    

    EDIT Updated to anti-alias the text so it looks better.

    0 讨论(0)
提交回复
热议问题