Difference between revisions of "Theme library"
From Lazarus wiki
Jump to navigationJump to searchPaul Ishenin (talk | contribs) |
Paul Ishenin (talk | contribs) |
||
Line 83: | Line 83: | ||
{$I unit1.lrs} | {$I unit1.lrs} | ||
end. | end. | ||
− | <delphi> | + | </delphi> |
And the result will look so: | And the result will look so: | ||
Line 89: | Line 89: | ||
[[Image:theme_painting.png]] | [[Image:theme_painting.png]] | ||
− | -- | + | --[[User:Paul Ishenin|Paul Ishenin]] 20:31, 9 June 2007 (CEST) |
Revision as of 20:31, 9 June 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?
- TCustomSpeedButton descendants (TSpeedButton)
- TCustomSplitter descendants (TSplitter)
- TCustomGrid descendants (TStringGrid, TDBGrid)
- TCustomUpDown descendants (TUpDown)
- ...
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 | Used in components |
---|---|---|---|---|---|---|
teButton | Partially Implemented | Partially Implemented | Partially Implemented | Partially Implemented | Not Implemented | TSpeedButton |
teHeader | Partially Implemented | Partially Implemented | Partially Implemented | Not Implemented | Not Implemented | TCustomGrid |
teRebar | Partially Implemented | Partially Implemented | Partially Implemented | Partially Implemented | Not Implemented | TSplitter |
teToolBar | Partially Implemented | Partially Implemented | Partially Implemented | Partially Implemented | Not Implemented | TSpeedButton |
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.
<delphi>
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.
</delphi>
And the result will look so:
--Paul Ishenin 20:31, 9 June 2007 (CEST)