16

DelphiアプリケーションのWindows7でGoogleChromeスタイルのタブを実装しようとしています。

この要素は次のとおりです。

  • タブは、グーグルクローム自体の場合と同様に、クライアント以外の領域に拡張される場合があります。
  • Glassが有効になっている場合、VistaおよびWindows7で正しく描画されます
  • タブはグーグルクロームのように機能し、ガラス越しにグーグルクロームのように見えます。

ここに画像の説明を入力してください

私が克服しなければならない課題は次のとおりです。

  • 非クライアント領域に拡張するコントロール(VCLコントロール)を取得するにはどうすればよいですか?(これを行うコントロールの良いサンプルは、VCLソースに含まれているリボンコントロールですが、他の誰もそれを行っているのを見たことがありません。リボンを機能させるには、邪悪なハッキングが必要です)
  • ガラスの上にビットマップを正しく描画するにはどうすればよいですか?(DWM API)。関連する質問はすでにその側面に答えています、ここで、この質問は私によっても尋ねられました。
4

4 に答える 4

19

Delphi用のChromeタブのほぼ完全な実装を完了しました。

ここに画像の説明を入力してください

機能は次のとおりです。

  • グラデーション、透明度、カスタムタブ形状など、完全に構成可能なルックアンドフィール
  • Aeroを使用すると、タイトルバーにタブをペイントできます
  • Vistaガラスで動作します
  • タブ移動アニメーション
  • タブトランジショナルスタイル効果(色とアルファレベルの間のフェード)
  • コンテナ内およびコンテナ間でドラッグアンドドロップ
  • 画像をドラッグすると、タブとTWinControlが表示されます
  • ユーザーが閉じるボタンをクリックしたときのスマートタブのサイズ変更
  • 最小および最大タブサイズでの流体タブのサイズ変更
  • [タブの追加]ボタンは、左、右、またはフローティング右に配置できます
  • ドラッグ時の自動スクロールを含むフル機能のスクロール
  • スマートタブコンテンツ表示は、タブ幅に応じてアイテムを表示/非表示にします
  • 所有者は任意のアイテムを描画します
  • 右から左へのテキスト
  • 固定されたタブ
  • タブスピナー-レンダリングとビットマップの両方。
  • アニメーション化されたグローで変更されたタブ
  • タブ画像とオーバーレイ画像
  • グロー上のマウス
  • たくさんのイベント
  • ルックアンドフィールとストリーミング/ファイルのオプションをロード/保存します
  • ルックアンドフィール/オプションのDelphiコードを生成する

ソースと完全なデモ/エディターはこちらからダウンロードできます:http ://code.google.com/p/delphi-chrome-tabs/

于 2012-12-12T15:48:51.893 に答える
7

完全なガラス窓は必要ありませんが、探している正確な外観を提供することを私が認識しているコントロールがないため、自分でタブを描画する必要があります。現在のフォームのGlassFrameプロパティを使用する場合は、それを有効にして、タブに必要な高さに上部を設定し、この領域にペイントボックスをドロップし、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

編集テキストのアンチエイリアスに更新され、見栄えが良くなりました。

于 2010-10-13T17:03:22.613 に答える
7

ずっと後に、Kleverコンポーネントから:

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

ここに画像の説明を入力してください

于 2011-06-30T01:26:26.920 に答える
0

ここで説明されているガラスの形のキャプションでの絵画:http://delphihaven.wordpress.com/2010/04/22/setting-up-a-custom-title-bar-reprise/ また、デルフィのリボンコントロール。

于 2012-12-13T09:52:47.353 に答える