Вкладки в стиле Google Chrome на стекле в Delphi
Я пытаюсь реализовать вкладки стиля Google Chrome в Windows 7 в приложении Delphi.
элементами этого являются:
- вкладки могут распространяться на неклиентскую область, как и в самом Google chrome.
- правильно рисует на Vista и Windows 7, когда стекло включено
- вкладки работают так же, как google chrome, и выглядят как google chrome, над стеклом.
Я обнаружил, что проблемы, которые я должен преодолеть:
- как получить элемент управления (VCL control) для расширения в неклиентскую область? (Хороший образец элемента управления, который делает это, - это элемент управления лентой, включенный в источники VCL, но я не видел, чтобы кто-то еще это делал, и требуется злой взлом, чтобы лента функционировала)
- Как правильно рисовать растровые изображения поверх стекла? (DWM API). А вопрос уже отвечает на этот аспект, здесь этот вопрос также был спросил я.
4 ответов
вы не хотите полное стеклянное окно, но вам придется рисовать вкладки самостоятельно, так как нет элемента управления, который я знаю, что даст вам точный вид, который вы ищете. Если вы используете свойства GlassFrame текущей формы, включите его и установите верхнюю часть на высоту, которую вы хотите для своих вкладок, поместите paintbox в эту область и используйте вызовы GDI+ для рисования вкладок вручную. Хорошая библиотека, которая должна работать для этого, доступна на EDN (http://cc.embarcadero.com/Download.aspx?id=26950). Без использования GDI+ вы сможете рисовать в поле краски, но черный станет прозрачным. С GDI+ вы можете свободно рисовать на стекло в любом цвете. Например:
источник:
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.
функции включают в себя:
- полностью настраиваемый внешний вид, включая градиенты, прозрачные пленки и пользовательские формы вкладок
- вкладки могут быть окрашены в строке заголовка при использовании Aero
- работает на Vista glass
- вкладка анимация движения
- Tab переходные эффекты стиля (исчезают между цветами и Альфа-уровни)
- перетащите внутри контейнера и между контейнерами
- перетащите изображение отображает вкладку и любой TWinControl
- Smart tab изменение размера, когда пользователь нажимает кнопку Закрыть
- Fluid tab изменение размера с минимальными и максимальными размерами вкладок
- кнопка Добавить вкладку может быть расположена слева, справа или плавающей справа
- полнофункциональная прокрутка, включая автоматическую прокрутку при перетаскивании
- отображение содержимого смарт-вкладки скрывает / показывает элементы в зависимости от ширины вкладки
- владелец нарисовать любой элемент
- справа налево текст
- закрепленные вкладки
- Tab spinners-как визуализация, так и растровое изображение.
- измененные вкладки с анимированным свечением
- вкладка изображения и наложение изображений
- мышь над glow
- много событий
- загрузить/сохранить внешний вид и параметры потока/файла
- создать внешний вид / параметры Delphi код
вы можете скачать источник и полный демо / редактор здесь:http://code.google.com/p/delphi-chrome-tabs/
картина в заголовке стеклянной формы объясняется здесь:http://delphihaven.wordpress.com/2010/04/22/setting-up-a-custom-title-bar-reprise/ Также вы можете посмотреть на источники элементов управления Delphi ленты.