Difference between revisions of "Lazarus Custom Drawn Controls/ru"

From Free Pascal wiki
Jump to navigationJump to search
m
(Switched template, deleted English categories.)
Line 1: Line 1:
{{Translate}}
+
{{Lazarus Custom Drawn Controls}}
  
 
'''Lazarus Custom Drawn Controls''' это набор элементов управления, эквивалентный стандартным элементам управления Lazarus, но для самостоятельного рисования. Они могут иметь множество применений, включая: возможность полностью настроить прорисовку, возможность одинаково выглядеть на разных платформах, а также более высокую согласованность поведения.
 
'''Lazarus Custom Drawn Controls''' это набор элементов управления, эквивалентный стандартным элементам управления Lazarus, но для самостоятельного рисования. Они могут иметь множество применений, включая: возможность полностью настроить прорисовку, возможность одинаково выглядеть на разных платформах, а также более высокую согласованность поведения.
Line 240: Line 240:
 
*[[Lazarus Custom Drawn Package]]
 
*[[Lazarus Custom Drawn Package]]
 
*[[Custom Drawn Interface]]
 
*[[Custom Drawn Interface]]
 
[[Category:Components]]
 
[[Category:Custom Drawn]]
 

Revision as of 21:33, 9 December 2018

English (en) русский (ru)

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

customdrawnwindows7.png

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;

Custom drawn buttons.png

TCDEdit

This is a fully custom drawn edit control.

TCDEdit.png

TCDCheckBox

This is a fully custom drawn check box.

TCDCheckBox.png

TCDRadioButton

TCDRadioButton.png

TCDScrollBar

TCDScrollBar.png

TCDGroupBox

This is a fully custom drawn group box.

TCDGroupBox.png

Controls which imitate the Additional Palette

TCDStaticText

Controls which imitate the Common Controls Palette

TCDTrackBar

A substitute for TTrackBar

TCDTrackBar.png

TCDProgressBar

TCDProgressBar.png

TCDListView

Under construction.

TCDTabControl

A substitute for TTabControl

TCDPageControl

A substitute for TPageControl

TCDPageControl.png

Custom Drawn Packages

Moved here: Lazarus Custom Drawn Package

Other good custom drawn components for Lazarus

Maintainers

See Also