Вкладки в стиле 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 связанный вопрос уже отвечает на этот аспект, здесь этот вопрос также был задан мной.
Ответы
Ответ 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/
Ответ 3
Найден много позже, из компонентов Klever:
http://rmklever.com/?p=248
![enter image description here]()
Ответ 4
Живопись в заголовке стеклянной формы, описанной здесь: http://delphihaven.wordpress.com/2010/04/22/setting-up-a-custom-title-bar-reprise/
Также вы можете ознакомиться с источниками элементов управления лентой delphi.