Difference between revisions of "Lazarus Custom Drawn Controls/ru"
(Created page with "'''Lazarus Custom Drawn Controls''' это набор элементов управления, эквивалентный стандартным элементам управ...") |
m |
||
Line 1: | Line 1: | ||
+ | {{Translate}} | ||
+ | |||
'''Lazarus Custom Drawn Controls''' это набор элементов управления, эквивалентный стандартным элементам управления Lazarus, но для самостоятельного рисования. Они могут иметь множество применений, включая: возможность полностью настроить прорисовку, возможность одинаково выглядеть на разных платформах, а также более высокую согласованность поведения. | '''Lazarus Custom Drawn Controls''' это набор элементов управления, эквивалентный стандартным элементам управления Lazarus, но для самостоятельного рисования. Они могут иметь множество применений, включая: возможность полностью настроить прорисовку, возможность одинаково выглядеть на разных платформах, а также более высокую согласованность поведения. | ||
Revision as of 21:29, 9 December 2018
Lazarus Custom Drawn Controls это набор элементов управления, эквивалентный стандартным элементам управления Lazarus, но для самостоятельного рисования. Они могут иметь множество применений, включая: возможность полностью настроить прорисовку, возможность одинаково выглядеть на разных платформах, а также более высокую согласованность поведения.
Этот набор элементов управления разделен на две части:
- настраиваемые элементы управления, необходимые для реализации наборов виджетов Lazarus и расположенные в модуле lazarus/lcl/customdrawncontrols.pas. Здесь их определения.
- все другие пользовательские элементы управления, которые используются часто, но не являются необходимыми для реализации набора пользовательских элементов управления LCL. Те находятся в пакете lazarus/components/customdrawn. Они описаны на странице Lazarus Custom Drawn Package
Как начать использовать эти компоненты?
Чтобы использовать их в конструкторе графического интерфейса Lazarus, установите пакет lazarus/components/customdrawn.lpk
Чтобы создавать компоненты customdrawn используя код, можно просто добавить customdrawncontrols, customdrawndrawers и customdrawn_common в раздел uses, чтобы объявить и использовать их. Обратите внимание, что в настоящее время в LCL находится Drawer (прорисовщик интерфейса) только для Win2000, поэтому любые другие Drawer'а необходимо получить из пакета customdrawn.lpk
Важно отметить, что стили доступны только в том случае, если вы добавляете объявление соответствующего модуля стиля в раздел uses.
Как работают эти компоненты?
Базовые методы программирования, используемые этим набором элементов управления, объясняется на Developing with Graphics#Create a custom control which draws itself странице.
Код самого элемента управления реализован в модуле customdrawncontrols.pas, но этот модуль совсем не имеет кода для рисования. Customdrawncontrols.pas предоставляет код, который обрабатывает все события клавиатуры и мыши элемента управления, реализуя все действия мыши и реакции на нажатия клавиш. Каждый экземпляр элемента управления имеет связанный с ним Drawer. Drawer в нашем представлении (экземпляр класса TCDDrawer) похож на движок рендеринга или нечто подобное. Модуль customdrawndrawers.pas управляет списком всех известных Drawer'ов, а также объявляет все основные типы данных, необходимые для State и StateEx. Эти свойства содержат всю информацию о текущем состоянии элемента управления, которая передается в Drawer, чтобы он имел информацию, необходимую для правильного рисования элемента управления. В программе может существовать только один экземпляр каждого Drawer'а, и все элементы управления ссылаются на этот единственный экземпляр через менеджер в customdrawndrawers.pas. Каждый элемент управления имеет свойство DrawStyle, которое позволяет вам выбрать (из перечисляемого типа), какой стиль рисования использовать, а затем customdrawndrawers.pas преобразует эту информацию в экземпляр Drawer. Вы можете указать dsDefault DrawStyle, который затем будет использовать стиль, указанный в глобальной переменной DefaultStyle. Это было сделано для одновременного изменения стиля всех элементов управления. Просто измените эту глобальную переменную и затем вызовите Invalidate для элементов управления. Ниже вы можете увидеть фрагмент кода из customdrawndrawers.pas, который показывает методы, которые были представлены для управления списком Drawer'ов, а также стиль по умолчанию:
unit customdrawndrawers;
//...
TCDDrawStyle = (
// Значение по умолчанию задается глобальной переменной DefaultStyle
// Не использовать ничего для этого Drawer
dsDefault = 0,
// Это общий Drawer, основа для всех остальных. Он реализует вид от dsWin2000
dsCommon,
// Стили операционный систем
dsWinCE, dsWin2000, dsWinXP,
dsKDEPlastique, dsGNOME, dsMacOSX,
dsAndroid,
// Другие специальные стили для пользователя
dsExtra1, dsExtra2, dsExtra3, dsExtra4, dsExtra5,
dsExtra6, dsExtra7, dsExtra8, dsExtra9, dsExtra10
);
//...
procedure RegisterDrawer(ADrawer: TCDDrawer; AStyle: TCDDrawStyle);
function GetDefaultDrawer: TCDDrawer;
function GetDrawer(AStyle: TCDDrawStyle): TCDDrawer;
var
DefaultStyle: TCDDrawStyle = dsCommon; // В начале по умолчанию стандартный, позже для каждой платформы
Each Drawer class has methods to draw all controls and also all available primitives. All new drawers created by users should inherit from the class TCDCommonDrawer (which is the basic common drawer declared in the unit customdrawn_common.pas). If you don't inherit from TCDCommonDrawer your application might crash if it hits an abstract method. This is the most complete drawer, which implements all abstract methods from its base class, so inheriting from it guarantees that there will never be crashes owing to methods you have not yet implemented. Other drawers can override the desired methods to change the drawing style.
The dsCommon drawer uses only TCanvas for all its rendering, but other themes might also use TLazIntfImage and TFPImageCanvas instead, in order to have a faster pixel access. This programming technique is described in Developing with Graphics#Working with TLazIntfImage.
Color Palette
Drawers have also access to a color Palette, which has the usual LCL system colors. Default drawers will load their colors from the operating system via the LCL acording to the native platform. However, outside their native platform, drawers will use a standard color palette.
TCDColorPalette = class
public
ScrollBar, Background, ActiveCaption, InactiveCaption,
Menu, Window, WindowFrame, MenuText, WindowText, CaptionText,
ActiveBorder, InactiveBorder, AppWorkspace, Highlight, HighlightText,
BtnFace, BtnShadow, GrayText, BtnText, InactiveCaptionText,
BtnHighlight, color3DDkShadow, color3DLight, InfoText, InfoBk,
//
HotLight, GradientActiveCaption, GradientInactiveCaption,
MenuHighlight, MenuBar, Form: TColor;
end;
{ There are 5 possible sources of input for color palettes:
palDefault - Uses palNative when the operating system matches the drawer style,
palFallback otherwise
palNative - Obtain from the operating system
palFallback - Use the fallback colors of the drawer
palUserConfig-Load it from the user configuration files, ToDo
palCustom - The user application has set its own palette
}
TCDPaletteKind = (palDefault, palNative, palFallback, palUserConfig, palCustom);
{ TCDDrawer }
TCDDrawer = class
protected
public
Palette: TCDColorPalette;
constructor Create; virtual;
destructor Destroy; override;
procedure SetPaletteKind(APaletteKind: TCDPaletteKind);
procedure LoadNativePaletteColors;
procedure LoadFallbackPaletteColors; virtual;
As the code above shows, you can choose where the colors should come from - either from the operating system current theme, from the drawer's default, or from a user-defined scheme provided by your application. This allows you to change all yor application's colors at runtime simply by changing the palette.
The Drawers
dsCommon
This is the base drawer for all others and it implements a Win2000-look with some small improvements, like better focus drawings on controls
dsWinCE
Imitates the Windows CE look, with some small improvements like better focus drawings on controls
dsWin2000
Imitates the Windows 2000 look. Since dsCommon provides the Windows 2000 look already, this class implements no methods at all
dsWinXP
Imitates the Windows XP look
dsKDEPlastique
Imitates the look of the Plastique Qt/KDE Theme
dsAndroid
Imitates the Android look
dsWindows7
Imitates the Windows 7 look, and also can be used to imitate Windows XP and Windows 8 look, and most msstyles or Windows skins. Currently is available only with BGRABitmap graphic library, and you can get this drawer in the BGRAControls package: BGRAControls
You can try to get this working if you convert the slicescaling.pas unit. The technique used to draw the images is 9-slice scaling.
Some working code to create 9-slice scaling is available here: http://sourceforge.net/p/bmpthemeutils/home/Home/
Controls which imitate the Standard Palette
TCDButton
This is a fully custom drawn button.
Usage example:
uses customdrawnextras;
procedure TForm1.FormCreate(Sender: TObject);
var
MyButton: TCDButton;
begin
MyButton := TCDButton.Create(Self);
MyButton.Parent := Self;
MyButton.DrawStyle := dsWin2000;
MyButton.Left := 100;
MyButton.Top := 100;
MyButton.Width := 200;
MyButton.Height := 50;
MyButton.Caption := 'My Button';
MyButton.Color := clRed;
MyButton.OnClick := @HandleButtonClick;
end;
TCDEdit
This is a fully custom drawn edit control.
TCDCheckBox
This is a fully custom drawn check box.
TCDRadioButton
TCDScrollBar
TCDGroupBox
This is a fully custom drawn group box.
Controls which imitate the Additional Palette
TCDStaticText
Controls which imitate the Common Controls Palette
TCDTrackBar
A substitute for TTrackBar
TCDProgressBar
TCDListView
Under construction.
TCDTabControl
A substitute for TTabControl
TCDPageControl
A substitute for TPageControl
Custom Drawn Packages
Moved here: Lazarus Custom Drawn Package
Other good custom drawn components for Lazarus
Maintainers
- Felipe Monteiro de Carvalho
- JiXian Yang