Question

J'essaie d'implémenter les onglets de style Google Chrome, sous Windows 7, dans une application Delphi.

Les éléments de ceci sont :

  • les onglets peuvent s'étendre dans la zone non client comme c'est le cas dans Google Chrome lui-même.
  • dessine correctement sur Vista et Windows 7 lorsque le verre est activé
  • les onglets fonctionnent comme Google Chrome et ressemblent à Google Chrome, sur verre.

enter image description here

J'ai découvert que les défis que je dois surmonter sont les suivants :

  • Comment puis-je étendre un contrôle (contrôle VCL) dans la zone non client ?(Un bon exemple d'un contrôle qui fait cela est le contrôle Ribbon inclus dans les sources VCL, mais je n'ai vu personne d'autre le faire, et il faut un piratage méchant pour que le ruban fonctionne)
  • Comment dessiner correctement des bitmaps sur du verre ?(API DWM).UN question connexe répond déjà à cet aspect, ici, cette question a également été posée par moi.
Était-ce utile?

La solution

Vous ne voulez pas une fenêtre en verre plein, mais vous devez dessiner les onglets vous car il n'y a pas un contrôle que je suis conscient de cela vous donnera l'apparence exacte que vous cherchez. Si vous utilisez les propriétés GlassFrame de la forme actuelle, l'activer et définir le haut à la hauteur que vous voulez pour vos onglets, déposez un paintbox dans ce domaine et utiliser les appels GDI + pour dessiner vos onglets manuellement. Une bonne bibliothèque qui devrait fonctionner pour cela est disponible sur le EDN ( http: //cc.embarcadero .com / Download.aspx? id = 26950 ). Sans l'aide de GDI +, vous serez en mesure de tirer à la boîte de peinture, mais le noir deviendra transparent. Avec GDI + vous pouvez dessiner librement sur le verre dans toutes les couleurs. Par exemple:

exemple en cours d'exécution

Source:

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.

Formulaire:

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

EDIT Mise à jour à l'anti-alias le texte de sorte qu'il semble mieux.

Autres conseils

Je viens de terminer une implémentation presque complète des onglets Chrome pour Delphi.

enter image description here

Les fonctionnalités incluent :

  • Apparence et convivialité entièrement configurables, y compris les dégradés, les transparences et les formes d'onglets personnalisées
  • Les onglets peuvent être peints dans la barre de titre lors de l'utilisation d'Aero
  • Fonctionne sur le verre Vista
  • Animation de mouvement des onglets
  • Effets de style de transition des onglets (fondu entre les couleurs et les niveaux alpha)
  • Glisser-déposer dans le conteneur et entre les conteneurs
  • Faites glisser l'image affiche l'onglet et n'importe quel TWinControl
  • Redimensionnement de l'onglet intelligent lorsque l'utilisateur clique sur le bouton de fermeture
  • Redimensionnement fluide des onglets avec tailles d'onglet minimales et maximales
  • Le bouton Ajouter un onglet peut être positionné à gauche, à droite ou à droite flottante
  • Défilement complet, y compris le défilement automatique lors du glissement
  • L'affichage du contenu de l'onglet intelligent masque/affiche les éléments en fonction de la largeur de l'onglet
  • Le propriétaire dessine n'importe quel objet
  • Texte de droite à gauche
  • Onglets épinglés
  • Spinners d'onglets - à la fois rendus et bitmap.
  • Onglets modifiés avec lueur animée
  • Images d'onglets et images de superposition
  • Passez la souris sur la lueur
  • Beaucoup d'événements
  • Charger/enregistrer l'apparence et les options de diffusion/fichier
  • Générer l'apparence et les options du code Delphi

Vous pouvez télécharger la source et une démo/éditeur complet ici : http://code.google.com/p/delphi-chrome-tabs/

Trouvé beaucoup plus tard, De Klever Composants:

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

entrer image description ici

Peinture dans la légende d'une forme vitreuse expliqué ici: http://delphihaven.wordpress.com/2010/04/22/setting-up-a-custom-title-bar-reprise/ vous pouvez également regarder dans les sources des contrôles de ruban de delphi.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top