git-svn-id: https://192.168.0.254/svn/Componentes.Terceros.DevExpressVCL@8 05c56307-c608-d34a-929d-697000501d7a
444 lines
14 KiB
ObjectPascal
444 lines
14 KiB
ObjectPascal
unit EditorsStylesDemoStylesPalette;
|
|
|
|
interface
|
|
|
|
uses
|
|
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
|
|
Dialogs, EditorsStylesDemoBase, Menus, cxPropertiesStore, cxContainer, cxEdit,
|
|
cxControls, cxTextEdit, cxMemo, cxHeader, cxSpinEdit, cxSpinButton,
|
|
cxCheckComboBox, cxFontNameComboBox, cxMaskEdit, cxDropDownEdit,
|
|
cxColorComboBox, cxCheckListBox, cxTrackBar, cxProgressBar, cxLabel,
|
|
cxGroupBox, cxSplitter, cxListView, ComCtrls, ExtCtrls, StdCtrls, ImgList, cxGraphics,
|
|
cxRadioGroup, cxStyles, cxCustomData, cxFilter, cxData, cxDataStorage,
|
|
cxImageComboBox, cxGridLevel, cxGridCustomTableView, cxGridTableView,
|
|
cxClasses, cxGridCustomView, cxGrid, cxExtEditRepositoryItems,
|
|
cxEditRepositoryItems, cxCalc, cxCalendar, cxCheckBox;
|
|
|
|
type
|
|
TValueColumnType = (vctBorderColor, vctBorderStyle, vctColor, vctTextColor, vctTextStyle);
|
|
|
|
TEditorsStylesDemoStylesPaletteFrame = class(TEditorsStylesDemoBaseFrame)
|
|
ilForegroundBitmaps: TImageList;
|
|
ilCheckGlyphs: TImageList;
|
|
gbEditors: TcxGroupBox;
|
|
cxProgressBar: TcxProgressBar;
|
|
cxTrackBar: TcxTrackBar;
|
|
cxCheckListBox: TcxCheckListBox;
|
|
cxColorComboBox: TcxColorComboBox;
|
|
cxCheckComboBox: TcxCheckComboBox;
|
|
cxFontNameComboBox: TcxFontNameComboBox;
|
|
cxCoolLabel: TcxLabel;
|
|
lbCheckListBox: TcxLabel;
|
|
lbFontNameComboBox: TcxLabel;
|
|
lbDateEdit: TcxLabel;
|
|
lbTrackBar: TcxLabel;
|
|
lbProgressBar: TcxLabel;
|
|
lbSpinEdit: TcxLabel;
|
|
lbCalcEdit: TcxLabel;
|
|
lbColorComboBox: TcxLabel;
|
|
pnlStyle: TcxGroupBox;
|
|
Grid: TcxGrid;
|
|
tvStyles: TcxGridTableView;
|
|
clnStyleCategory: TcxGridColumn;
|
|
clnStyleValueName: TcxGridColumn;
|
|
clnStyleValue: TcxGridColumn;
|
|
lvStyles: TcxGridLevel;
|
|
cxEditRepository1: TcxEditRepository;
|
|
eriBorderStyle: TcxEditRepositoryImageComboBoxItem;
|
|
eriColor: TcxEditRepositoryColorComboBox;
|
|
eriTextStyle: TcxEditRepositoryCheckComboBox;
|
|
cxCalcEdit: TcxCalcEdit;
|
|
cxDateEdit: TcxDateEdit;
|
|
lbCheckComboBox: TcxLabel;
|
|
cxSpinEdit: TcxSpinEdit;
|
|
cxLabel1: TcxLabel;
|
|
Panel: TPanel;
|
|
rgColorPalette: TcxRadioGroup;
|
|
rgLookAndFeel: TcxRadioGroup;
|
|
cxStyleRepository1: TcxStyleRepository;
|
|
cxStyle1: TcxStyle;
|
|
cbDisableEditors: TcxCheckBox;
|
|
procedure cxTrackBarPropertiesDrawThumb(Sender: TObject;
|
|
ACanvas: TcxCanvas; const ARect: TRect);
|
|
procedure cxTrackBarPropertiesGetThumbRect(Sender: TObject;
|
|
var ARect: TRect);
|
|
procedure rgLookAndFeelPropertiesChange(Sender: TObject);
|
|
procedure rgStylesPropertiesChange(Sender: TObject);
|
|
procedure FormCreate(Sender: TObject);
|
|
procedure clnStyleValueGetProperties(Sender: TcxCustomGridTableItem;
|
|
ARecord: TcxCustomGridRecord;
|
|
var AProperties: TcxCustomEditProperties);
|
|
procedure StyleValueColumnPropertiesEditValueChanged(Sender: TObject);
|
|
procedure cbDisableEditorsClick(Sender: TObject);
|
|
private
|
|
FBitmap: TBitmap;
|
|
procedure AdjustCheckListGlyphs(AStyleSheetType: TcxStyleSheetType;
|
|
ACheckListBox: TcxCheckListBox);
|
|
procedure SetProgressBarBitmap(AStyleSheetType: TcxStyleSheetType;
|
|
AProgressBar: TcxProgressBar);
|
|
procedure AdjustTrackBarThumb(AStyleSheetType: TcxStyleSheetType;
|
|
ATrackBar: TcxTrackBar; ABitmap: TBitmap);
|
|
|
|
function GetStyleStartRecordIndex(AStyleState: TcxContainerStateItem): Integer;
|
|
function GetStyleStateByRecordIndex(ARecordIndex: Integer): TcxContainerStateItem;
|
|
|
|
function GetStyleValue(AStyle: TcxCustomContainerStyle;
|
|
AValueColumnType: TValueColumnType): Variant;
|
|
procedure SetStyleValue(AStyle: TcxCustomContainerStyle;
|
|
AValueColumnType: TValueColumnType; Value: Variant);
|
|
|
|
procedure InitStylesView(AStyleController: TcxEditStyleController);
|
|
public
|
|
constructor Create(AOwner: TComponent); override;
|
|
destructor Destroy; override;
|
|
procedure ChangeDisplayStyle(ADisplayStyle: TcxStyleSheetType); override;
|
|
function Name: string; override;
|
|
function BriefName: string; override;
|
|
function Description: String; override;
|
|
function StylesIniPath: string; override;
|
|
end;
|
|
|
|
const
|
|
ValueColumnTypeCount = Integer(High(TValueColumnType)) - Integer(Low(TValueColumnType)) + 1;
|
|
StyleCategoryCount = 4;
|
|
|
|
var
|
|
EditorsStylesDemoStylesPaletteFrame: TEditorsStylesDemoStylesPaletteFrame;
|
|
|
|
implementation
|
|
|
|
uses cxLookAndFeels;
|
|
|
|
{$R *.dfm}
|
|
|
|
const
|
|
StyleValueNames: array[TValueColumnType] of string =
|
|
('BorderColor', 'BorderStyle', 'Color', 'TextColor', 'TextStyle');
|
|
StyleCategoryOrders: array[TcxContainerStateItem] of Integer = (0, 2, 1, 3);
|
|
|
|
function FontStylesToInteger(AFontStyles: TFontStyles): Integer;
|
|
var
|
|
AFontStyle: TFontStyle;
|
|
begin
|
|
Result := 0;
|
|
for AFontStyle := Low(TFontStyle) to High(TFontStyle) do
|
|
if AFontStyle in AFontStyles then
|
|
Result := Result or (1 shl Integer(AFontStyle));
|
|
end;
|
|
|
|
function IntegerToFontStyles(Value: Integer): TFontStyles;
|
|
var
|
|
AFontStyle: TFontStyle;
|
|
begin
|
|
Result := [];
|
|
for AFontStyle := Low(TFontStyle) to High(TFontStyle) do
|
|
if Value and (1 shl Integer(AFontStyle)) <> 0 then
|
|
Include(Result, AFontStyle);
|
|
end;
|
|
|
|
{ TEditorsStylesDemoStylesPaletteFrame }
|
|
|
|
constructor TEditorsStylesDemoStylesPaletteFrame.Create(AOwner: TComponent);
|
|
begin
|
|
inherited Create(AOwner);
|
|
FBitmap := TBitmap.Create;
|
|
FBitmap.TransparentColor := clFuchsia;
|
|
FBitmap.Transparent := True;
|
|
|
|
cxColorComboBox.Properties.PrepareDelphiColorList(False, False);
|
|
HintStyle := hcstNoHint;
|
|
FDisplayStyle := shtLightBlue;
|
|
FTempDisplayStyle := shtLightBlue;
|
|
end;
|
|
|
|
function TEditorsStylesDemoStylesPaletteFrame.Description: String;
|
|
begin
|
|
Result := 'Style Palette Notes';
|
|
end;
|
|
|
|
function TEditorsStylesDemoStylesPaletteFrame.Name: string;
|
|
begin
|
|
Result := 'Style Palette';
|
|
end;
|
|
|
|
function TEditorsStylesDemoStylesPaletteFrame.BriefName: string;
|
|
begin
|
|
Result := 'Styles';
|
|
end;
|
|
|
|
function TEditorsStylesDemoStylesPaletteFrame.StylesIniPath: string;
|
|
begin
|
|
Result := 'StylesFrmStylePalette\';
|
|
end;
|
|
|
|
procedure TEditorsStylesDemoStylesPaletteFrame.ChangeDisplayStyle(
|
|
ADisplayStyle: TcxStyleSheetType);
|
|
begin
|
|
inherited ChangeDisplayStyle(ADisplayStyle);
|
|
FDisplayStyle := FTempDisplayStyle;
|
|
end;
|
|
|
|
procedure TEditorsStylesDemoStylesPaletteFrame.AdjustTrackBarThumb(AStyleSheetType: TcxStyleSheetType; ATrackBar: TcxTrackBar; ABitmap: TBitmap);
|
|
begin
|
|
case AStyleSheetType of
|
|
shtWood:
|
|
begin
|
|
ABitmap.LoadFromFile(StylesIniPath + 'Wood.bmp');
|
|
ATrackBar.Properties.ThumbType := cxttCustom;
|
|
end;
|
|
shtDeepSea:
|
|
begin
|
|
ABitmap.LoadFromFile(StylesIniPath + 'DeepSea.bmp');
|
|
ATrackBar.Properties.ThumbType := cxttCustom;
|
|
end;
|
|
else
|
|
ATrackBar.Properties.ThumbType := cxttRegular;
|
|
end;
|
|
end;
|
|
|
|
function TEditorsStylesDemoStylesPaletteFrame.GetStyleStartRecordIndex(
|
|
AStyleState: TcxContainerStateItem): Integer;
|
|
begin
|
|
Result := StyleCategoryOrders[AStyleState] * ValueColumnTypeCount;
|
|
end;
|
|
|
|
function TEditorsStylesDemoStylesPaletteFrame.GetStyleStateByRecordIndex(
|
|
ARecordIndex: Integer): TcxContainerStateItem;
|
|
begin
|
|
for Result := Low(TcxContainerStateItem) to High(TcxContainerStateItem) do
|
|
if ARecordIndex div ValueColumnTypeCount = StyleCategoryOrders[Result] then
|
|
Break;
|
|
end;
|
|
|
|
function TEditorsStylesDemoStylesPaletteFrame.GetStyleValue(AStyle: TcxCustomContainerStyle;
|
|
AValueColumnType: TValueColumnType): Variant;
|
|
begin
|
|
case AValueColumnType of
|
|
vctBorderColor:
|
|
Result := AStyle.BorderColor;
|
|
vctBorderStyle:
|
|
Result := Integer(AStyle.BorderStyle);
|
|
vctColor:
|
|
Result := AStyle.Color;
|
|
vctTextColor:
|
|
Result := AStyle.TextColor;
|
|
vctTextStyle:
|
|
Result := FontStylesToInteger(AStyle.TextStyle);
|
|
end;
|
|
end;
|
|
|
|
procedure TEditorsStylesDemoStylesPaletteFrame.SetStyleValue(AStyle: TcxCustomContainerStyle;
|
|
AValueColumnType: TValueColumnType; Value: Variant);
|
|
begin
|
|
case AValueColumnType of
|
|
vctBorderColor:
|
|
AStyle.BorderColor := Value;
|
|
vctBorderStyle:
|
|
AStyle.BorderStyle := TcxContainerBorderStyle(Value);
|
|
vctColor:
|
|
AStyle.Color := Value;
|
|
vctTextColor:
|
|
AStyle.TextColor := Value;
|
|
vctTextStyle:
|
|
AStyle.TextStyle := IntegerToFontStyles(Value);
|
|
end;
|
|
end;
|
|
|
|
procedure TEditorsStylesDemoStylesPaletteFrame.InitStylesView(AStyleController: TcxEditStyleController);
|
|
|
|
procedure InitStyleRecords(AStyle: TcxCustomContainerStyle);
|
|
var
|
|
AStartRecordIndex: Integer;
|
|
I: TValueColumnType;
|
|
begin
|
|
AStartRecordIndex := GetStyleStartRecordIndex(AStyle.State);
|
|
for I := Low(TValueColumnType) to High(TValueColumnType) do
|
|
begin
|
|
tvStyles.DataController.Values[AStartRecordIndex + Integer(I),
|
|
clnStyleValue.Index] := GetStyleValue(AStyle, I);
|
|
end;
|
|
end;
|
|
|
|
var
|
|
AStyleState: TcxContainerStateItem;
|
|
begin
|
|
tvStyles.BeginUpdate;
|
|
try
|
|
for AStyleState := Low(TcxContainerStateItem) to High(TcxContainerStateItem) do
|
|
InitStyleRecords(AStyleController.Styles[AStyleState]);
|
|
finally
|
|
tvStyles.EndUpdate;
|
|
end;
|
|
end;
|
|
|
|
procedure SetLookAndFeel(AEditStyleController: TcxEditStyleController; AItemIndex: Integer);
|
|
var
|
|
Kind: TcxLookAndFeelKind;
|
|
begin
|
|
if AItemIndex < 4 then
|
|
begin
|
|
Kind := TcxLookAndFeelKind(AItemIndex);
|
|
AEditStyleController.Style.LookAndFeel.Kind := Kind;
|
|
AEditStyleController.Style.LookAndFeel.NativeStyle := False;
|
|
end else
|
|
AEditStyleController.Style.LookAndFeel.NativeStyle := True;
|
|
end;
|
|
|
|
procedure TEditorsStylesDemoStylesPaletteFrame.AdjustCheckListGlyphs(
|
|
AStyleSheetType: TcxStyleSheetType; ACheckListBox: TcxCheckListBox);
|
|
begin
|
|
ACheckListBox.Glyph := nil;
|
|
case AStyleSheetType of
|
|
shtDeepSea:
|
|
ilCheckGlyphs.GetBitmap(0, ACheckListBox.Glyph);
|
|
shtWood:
|
|
ilCheckGlyphs.GetBitmap(1, ACheckListBox.Glyph);
|
|
end;
|
|
end;
|
|
|
|
procedure TEditorsStylesDemoStylesPaletteFrame.SetProgressBarBitmap(
|
|
AStyleSheetType: TcxStyleSheetType; AProgressBar: TcxProgressBar);
|
|
var
|
|
ABitmap: TBitmap;
|
|
begin
|
|
ABitmap := TBitmap.Create;
|
|
try
|
|
case AStyleSheetType of
|
|
shtRainyDay:
|
|
ilForegroundBitmaps.GetBitmap(1, ABitmap);
|
|
shtBrick:
|
|
ilForegroundBitmaps.GetBitmap(0, ABitmap);
|
|
end;
|
|
AProgressBar.Properties.ForegroundImage := ABitmap;
|
|
finally
|
|
ABitmap.Free;
|
|
end;
|
|
end;
|
|
|
|
procedure TEditorsStylesDemoStylesPaletteFrame.cxTrackBarPropertiesDrawThumb(
|
|
Sender: TObject; ACanvas: TcxCanvas; const ARect: TRect);
|
|
begin
|
|
ACanvas.Draw(ARect.Left, ARect.Top, FBitmap);
|
|
end;
|
|
|
|
procedure TEditorsStylesDemoStylesPaletteFrame.cxTrackBarPropertiesGetThumbRect(
|
|
Sender: TObject; var ARect: TRect);
|
|
begin
|
|
ARect := FBitmap.Canvas.ClipRect;
|
|
end;
|
|
|
|
destructor TEditorsStylesDemoStylesPaletteFrame.Destroy;
|
|
begin
|
|
FBitmap.Free;
|
|
inherited Destroy;
|
|
end;
|
|
|
|
procedure TEditorsStylesDemoStylesPaletteFrame.rgLookAndFeelPropertiesChange(
|
|
Sender: TObject);
|
|
var
|
|
AItemIndex: Integer;
|
|
AStyleState: TcxContainerStateItem;
|
|
begin
|
|
AItemIndex := TcxRadioGroup(Sender).ItemIndex;
|
|
SetLookAndFeel(cxLabelStyleController, AItemIndex);
|
|
SetLookAndFeel(cxEditStyleController, AItemIndex);
|
|
|
|
for AStyleState := Low(TcxContainerStateItem) to High(TcxContainerStateItem) do
|
|
cxEditStyleController.Styles[AStyleState].AssignedValues :=
|
|
cxEditStyleController.Styles[AStyleState].AssignedValues - [svBorderStyle, svButtonStyle];
|
|
|
|
InitStylesView(cxEditStyleController);
|
|
end;
|
|
|
|
procedure TEditorsStylesDemoStylesPaletteFrame.rgStylesPropertiesChange(
|
|
Sender: TObject);
|
|
var
|
|
AStyleSheetType: TcxStyleSheetType;
|
|
begin
|
|
SendMessage(gbEditors.Handle, WM_SETREDRAW, 0, 0);
|
|
try
|
|
AStyleSheetType := TcxStyleSheetType((Sender as TcxRadioGroup).ItemIndex);
|
|
ChangeDisplayStyle(AStyleSheetType);
|
|
SetProgressBarBitmap(AStyleSheetType, cxProgressBar);
|
|
AdjustCheckListGlyphs(AStyleSheetType, cxCheckListBox);
|
|
AdjustTrackBarThumb(AStyleSheetType, cxTrackBar, FBitmap);
|
|
InitStylesView(cxEditStyleController);
|
|
finally
|
|
SendMessage(gbEditors.Handle, WM_SETREDRAW, 1, 0);
|
|
RedrawWindow(gbEditors.Handle, nil, 0, RDW_INVALIDATE or RDW_ALLCHILDREN);
|
|
end;
|
|
end;
|
|
|
|
procedure TEditorsStylesDemoStylesPaletteFrame.FormCreate(Sender: TObject);
|
|
|
|
procedure InitRecords;
|
|
var
|
|
I: Integer;
|
|
begin
|
|
tvStyles.BeginUpdate;
|
|
try
|
|
tvStyles.DataController.RecordCount := StyleCategoryCount * ValueColumnTypeCount;
|
|
for I := 0 to tvStyles.DataController.RecordCount - 1 do
|
|
begin
|
|
tvStyles.DataController.Values[I, clnStyleCategory.Index] := I div ValueColumnTypeCount;
|
|
tvStyles.DataController.Values[I, clnStyleValueName.Index] :=
|
|
StyleValueNames[TValueColumnType(I mod ValueColumnTypeCount)];
|
|
end;
|
|
finally
|
|
tvStyles.EndUpdate;
|
|
end;
|
|
clnStyleValueName.ApplyBestFit;
|
|
// clnStyleValue.ApplyBestFit;
|
|
clnStyleValue.Width := 150;
|
|
end;
|
|
|
|
begin
|
|
InitRecords;
|
|
InitStylesView(cxEditStyleController);
|
|
cxDateEdit.Date := Now;
|
|
end;
|
|
|
|
procedure TEditorsStylesDemoStylesPaletteFrame.clnStyleValueGetProperties(
|
|
Sender: TcxCustomGridTableItem; ARecord: TcxCustomGridRecord;
|
|
var AProperties: TcxCustomEditProperties);
|
|
var
|
|
AValueColumnType: TValueColumnType;
|
|
begin
|
|
AValueColumnType := TValueColumnType(ARecord.RecordIndex mod ValueColumnTypeCount);
|
|
case AValueColumnType of
|
|
vctBorderColor, vctColor, vctTextColor:
|
|
AProperties := eriColor.Properties;
|
|
vctBorderStyle:
|
|
AProperties := eriBorderStyle.Properties;
|
|
vctTextStyle:
|
|
AProperties := eriTextStyle.Properties;
|
|
end;
|
|
end;
|
|
|
|
procedure TEditorsStylesDemoStylesPaletteFrame.StyleValueColumnPropertiesEditValueChanged(
|
|
Sender: TObject);
|
|
var
|
|
AFocusedRecordIndex: Integer;
|
|
begin
|
|
AFocusedRecordIndex := tvStyles.DataController.FocusedRecordIndex;
|
|
SetStyleValue(
|
|
cxEditStyleController.Styles[GetStyleStateByRecordIndex(AFocusedRecordIndex)],
|
|
TValueColumnType(AFocusedRecordIndex mod ValueColumnTypeCount), TcxCustomEdit(Sender).EditValue);
|
|
InitStylesView(cxEditStyleController);
|
|
end;
|
|
|
|
procedure TEditorsStylesDemoStylesPaletteFrame.cbDisableEditorsClick(
|
|
Sender: TObject);
|
|
var
|
|
I: Integer;
|
|
begin
|
|
for I := 0 to gbEditors.ControlCount - 1 do
|
|
if not(gbEditors.Controls[I] is TcxLabel) and not(gbEditors.Controls[I] is TcxCheckBox) then
|
|
gbEditors.Controls[I].Enabled := not cbDisableEditors.Checked;
|
|
end;
|
|
|
|
initialization
|
|
EditorsStylesDemoFrameManager.RegisterFrameClass(TEditorsStylesDemoStylesPaletteFrame);
|
|
|
|
end.
|