Вкладки в стиле Google Chrome на стекле в Delphi

Я пытаюсь реализовать вкладки стиля Google Chrome в Windows 7 в приложении Delphi.

элементами этого являются:

  • вкладки могут распространяться на неклиентскую область, как и в самом Google chrome.
  • правильно рисует на Vista и Windows 7, когда стекло включено
  • вкладки работают так же, как google chrome, и выглядят как google chrome, над стеклом.

enter image description here

Я обнаружил, что проблемы, которые я должен преодолеть:

  • как получить элемент управления (VCL control) для расширения в неклиентскую область? (Хороший образец элемента управления, который делает это, - это элемент управления лентой, включенный в источники VCL, но я не видел, чтобы кто-то еще это делал, и требуется злой взлом, чтобы лента функционировала)
  • Как правильно рисовать растровые изображения поверх стекла? (DWM API). А вопрос уже отвечает на этот аспект, здесь этот вопрос также был спросил я.

4 ответов


вы не хотите полное стеклянное окно, но вам придется рисовать вкладки самостоятельно, так как нет элемента управления, который я знаю, что даст вам точный вид, который вы ищете. Если вы используете свойства GlassFrame текущей формы, включите его и установите верхнюю часть на высоту, которую вы хотите для своих вкладок, поместите paintbox в эту область и используйте вызовы GDI+ для рисования вкладок вручную. Хорошая библиотека, которая должна работать для этого, доступна на EDN (http://cc.embarcadero.com/Download.aspx?id=26950). Без использования GDI+ вы сможете рисовать в поле краски, но черный станет прозрачным. С GDI+ вы можете свободно рисовать на стекло в любом цвете. Например:

running example

источник:

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

редактировать обновлено до анти-псевдонима текста, чтобы он выглядел лучше.


Я только что завершил довольно полную реализацию вкладок Chrome для Delphi.

enter image description here

функции включают в себя:

  • полностью настраиваемый внешний вид, включая градиенты, прозрачные пленки и пользовательские формы вкладок
  • вкладки могут быть окрашены в строке заголовка при использовании Aero
  • работает на Vista glass
  • вкладка анимация движения
  • Tab переходные эффекты стиля (исчезают между цветами и Альфа-уровни)
  • перетащите внутри контейнера и между контейнерами
  • перетащите изображение отображает вкладку и любой TWinControl
  • Smart tab изменение размера, когда пользователь нажимает кнопку Закрыть
  • Fluid tab изменение размера с минимальными и максимальными размерами вкладок
  • кнопка Добавить вкладку может быть расположена слева, справа или плавающей справа
  • полнофункциональная прокрутка, включая автоматическую прокрутку при перетаскивании
  • отображение содержимого смарт-вкладки скрывает / показывает элементы в зависимости от ширины вкладки
  • владелец нарисовать любой элемент
  • справа налево текст
  • закрепленные вкладки
  • Tab spinners-как визуализация, так и растровое изображение.
  • измененные вкладки с анимированным свечением
  • вкладка изображения и наложение изображений
  • мышь над glow
  • много событий
  • загрузить/сохранить внешний вид и параметры потока/файла
  • создать внешний вид / параметры Delphi код

вы можете скачать источник и полный демо / редактор здесь:http://code.google.com/p/delphi-chrome-tabs/


найдено намного позже, из компонентов Klever:

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

enter image description here


картина в заголовке стеклянной формы объясняется здесь:http://delphihaven.wordpress.com/2010/04/22/setting-up-a-custom-title-bar-reprise/ Также вы можете посмотреть на источники элементов управления Delphi ленты.