Вкладки в стиле Google Chrome на стекле в Delphi - PullRequest
16 голосов
/ 13 октября 2010

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

Элементы этого:

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

enter image description here

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

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

Ответы [ 4 ]

17 голосов
/ 12 декабря 2012

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

enter image description here

В число функций входят:

  • Полностью настраиваемый видПочувствуйте, включая градиенты, прозрачные пленки и пользовательские формы вкладок
  • В строке заголовка можно использовать вкладки при использовании Aero
  • Работает на стекле Vista
  • Анимация движения вкладок
  • Эффекты переходного стиля вкладок (переход между цветами и альфа-уровнями)
  • Перетаскивание внутри контейнера и между контейнерами
  • Перетаскивание вкладок отображения изображений и любого TWinControl
  • Изменение размера смарт-вкладкикогда пользователь нажимает кнопку закрытия
  • Изменение размера вкладки жидкости с минимальным и максимальным размерами вкладки
  • Кнопка добавления вкладки может располагаться слева, справа или с плавающей справа
  • Полнофункциональная прокрутка, включаяавтопрокрутка при перетаскивании
  • Отображение содержимого смарт-вкладки скрывает / показывает элементы в зависимости от ширины вкладки
  • Владелец рисует любой элемент
  • Текст справа налево
  • Закрепленные вкладки
  • Вращатели вкладок - как визуализированные, так и растровые.
  • Модифицированные вкладки с анимированным свечением
  • Изображения вкладок и наложенные изображения
  • Наведите курсор на свечение
  • Множество событий
  • Загрузить / сохранить внешний вид и параметры и параметры для потоковой передачи / файла
  • Создать внешний вид и параметры / параметры Delphi code

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

7 голосов
/ 30 июня 2011

Найден гораздо позже, от Klever Components:

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

enter image description here

7 голосов
/ 13 октября 2010

Вам не нужно полное стеклянное окно, но вам придется самостоятельно рисовать вкладки, поскольку я не знаю, какой элемент управления даст вам точный вид, который вы ищете. Если вы используете свойства GlassFrame текущей формы, включите ее и установите высоту, необходимую для ваших вкладок, поместите поле рисования в эту область и используйте вызовы 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

РЕДАКТИРОВАТЬ Обновлено для сглаживания текста, чтобы он выглядел лучше.

0 голосов
/ 13 декабря 2012

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

...