Difference between revisions of "Theme library"

From Lazarus wiki
(What is the current state of implementation?)
(What ownerdraw controls do we have?)
Line 10: Line 10:
  
 
# TCustomSpeedButton descendants (TSpeedButton)
 
# TCustomSpeedButton descendants (TSpeedButton)
 +
# TCustomSplitter descendants (TSplitter)
 
# TCustomGrid descendants (TStringGrid, TDBGrid)
 
# TCustomGrid descendants (TStringGrid, TDBGrid)
  

Revision as of 09:38, 30 May 2007

What is Theme manager?

Theme manager has been originally created by Mike Lischke (see http://www.soft-gems.net/) to enable Windows XP theme painting in Borland Delphi and Borland C++ Builder applications.

Why do we need Theme manager?

It gives the ability to have ownerdraw controls with the same look and feel as native controls.

What ownerdraw controls do we have?

  1. TCustomSpeedButton descendants (TSpeedButton)
  2. TCustomSplitter descendants (TSplitter)
  3. TCustomGrid descendants (TStringGrid, TDBGrid)

What is the current state of implementation?

Windows XP and Vista applications with manifest - fully implemented since theme manager originally created for Windows XP.

Element default gtk gtk2 carbon qt
teButton Partially Implemented Partially Implemented Partially Implemented Partially Implemented Not Implemented
teHeader Partially Implemented Partially Implemented Partially Implemented Partially Implemented Not Implemented
teRebar Partially Implemented Partially Implemented Partially Implemented Partially Implemented Not Implemented
teToolBar Partially Implemented Partially Implemented Partially Implemented Partially Implemented Not Implemented

How to use ThemeServices class for painting?

It is rather simple. Let's do an empty form and paint a push button on it with normal state.

unit Unit1; 
{$mode objfpc}{$H+}

interface
uses
  Classes, SysUtils, LResources, Forms, Controls, Graphics;

type
  TForm1 = class(TForm)
  private
    { private declarations }
  public
    procedure Paint; override;
  end;

var
  Form1: TForm1; 

implementation
{$R manifest.res}

uses
  LCLType, Themes;
  
procedure TForm1.Paint;
var
  Details: TThemedElementDetails;
  PaintRect: TRect;
begin
  inherited Paint;
  PaintRect := Rect(10, 10, 80, 50);
  Details := ThemeServices.GetElementDetails(tbPushButtonNormal);
  ThemeServices.DrawElement(Canvas.Handle, Details, PaintRect, nil);
  PaintRect := ThemeServices.ContentRect(Canvas.Handle, Details, PaintRect);
  ThemeServices.DrawText(Canvas, Details, 'Test caption', PaintRect,
    DT_CENTER or DT_VCENTER or DT_SINGLELINE, 0);
end;

initialization
  {$I unit1.lrs}
end.

And the result will look so:

theme painting.png

--Paul Ishenin 08:11, 23 May 2007 (CEST)