Подтвердить что ты не робот

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

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

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

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

enter image description here

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

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

Ответ 1

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

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

Ответ 2

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

enter image description here

Возможности включают:

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

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