mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-11-15 14:49:23 +01:00
999 lines
26 KiB
ObjectPascal
999 lines
26 KiB
ObjectPascal
unit LRDialogControls;
|
|
|
|
{$mode objfpc}{$H+}
|
|
|
|
interface
|
|
|
|
uses
|
|
Classes, SysUtils, LResources, Graphics, DB, LR_Class, Controls, StdCtrls,
|
|
LMessages, LCLType, LCLIntf, Buttons, EditBtn, Themes;
|
|
|
|
type
|
|
TLRDialogControls = class(TComponent)
|
|
end;
|
|
|
|
{ TlrVisualControl }
|
|
|
|
TlrVisualControl = class(TfrControl)
|
|
private
|
|
function GetAutoSize: Boolean;
|
|
function GetCaption: string;
|
|
function GetColor: TColor;
|
|
function GetEnabled: boolean;
|
|
function GetFont: TFont;
|
|
function GetOnClick: TfrScriptStrings;
|
|
procedure SetAutoSize(AValue: Boolean);
|
|
procedure SetCaption(AValue: string);
|
|
procedure SetColor(AValue: TColor);
|
|
procedure SetEnabled(AValue: boolean);
|
|
procedure SetFont(AValue: TFont);
|
|
procedure OnClickHandle(Sender: TObject);
|
|
procedure SetOnClick(AValue: TfrScriptStrings);
|
|
protected
|
|
FControl: TControl;
|
|
procedure PaintDesignControl; override;
|
|
procedure SetName(const AValue: string); override;
|
|
procedure UpdateControlPosition; override;
|
|
procedure AfterCreate;override;
|
|
function CreateControl:TControl;virtual;abstract;
|
|
public
|
|
constructor Create(AOwnerPage:TfrPage); override;
|
|
procedure LoadFromXML(XML: TLrXMLConfig; const Path: String); override;
|
|
procedure SaveToXML(XML: TLrXMLConfig; const Path: String); override;
|
|
|
|
property Control: TControl read FControl write FControl;
|
|
property AutoSize: Boolean read GetAutoSize write SetAutoSize;
|
|
property Color:TColor read GetColor write SetColor;
|
|
property Caption:string read GetCaption write SetCaption;
|
|
property Text:string read GetCaption write SetCaption;
|
|
property Font:TFont read GetFont write SetFont;
|
|
property OnClick:TfrScriptStrings read GetOnClick write SetOnClick;
|
|
published
|
|
property Enabled:boolean read GetEnabled write SetEnabled;
|
|
end;
|
|
TlrVisualControlClass = class of TlrVisualControl;
|
|
|
|
{ TlrLabel }
|
|
|
|
TlrLabel = class(TlrVisualControl)
|
|
private
|
|
function GetAlignment: TAlignment;
|
|
function GetWordWrap: boolean;
|
|
procedure SetAlignment(AValue: TAlignment);
|
|
procedure SetWordWrap(AValue: boolean);
|
|
protected
|
|
procedure PaintDesignControl; override;
|
|
function CreateControl:TControl;override;
|
|
public
|
|
constructor Create(AOwnerPage:TfrPage); override;
|
|
procedure LoadFromXML(XML: TLrXMLConfig; const Path: String); override;
|
|
procedure SaveToXML(XML: TLrXMLConfig; const Path: String); override;
|
|
published
|
|
property Alignment: TAlignment read GetAlignment write SetAlignment;
|
|
property WordWrap:boolean read GetWordWrap write SetWordWrap;
|
|
property AutoSize;
|
|
property Color;
|
|
property Caption;
|
|
property Font;
|
|
property OnClick;
|
|
end;
|
|
|
|
{ TlrEdit }
|
|
|
|
TlrEdit = class(TlrVisualControl)
|
|
private
|
|
protected
|
|
procedure PaintDesignControl; override;
|
|
function CreateControl:TControl;override;
|
|
public
|
|
constructor Create(AOwnerPage:TfrPage); override;
|
|
procedure LoadFromXML(XML: TLrXMLConfig; const Path: String); override;
|
|
procedure SaveToXML(XML: TLrXMLConfig; const Path: String); override;
|
|
published
|
|
property Color;
|
|
property Enabled;
|
|
property Text;
|
|
property OnClick;
|
|
end;
|
|
|
|
{ TlrMemo }
|
|
|
|
TlrMemo = class(TlrVisualControl)
|
|
private
|
|
procedure MemoChange(Sender: TObject);
|
|
protected
|
|
procedure PaintDesignControl; override;
|
|
function CreateControl:TControl;override;
|
|
public
|
|
constructor Create(AOwnerPage:TfrPage); override;
|
|
procedure LoadFromXML(XML: TLrXMLConfig; const Path: String); override;
|
|
procedure SaveToXML(XML: TLrXMLConfig; const Path: String); override;
|
|
published
|
|
property Color;
|
|
property Enabled;
|
|
property Memo;
|
|
property OnClick;
|
|
end;
|
|
|
|
{ TlrButton }
|
|
|
|
TlrButton = class(TlrVisualControl)
|
|
private
|
|
function GetKind: TBitBtnKind;
|
|
procedure SetKind(AValue: TBitBtnKind);
|
|
protected
|
|
procedure PaintDesignControl; override;
|
|
function CreateControl:TControl;override;
|
|
public
|
|
constructor Create(AOwnerPage:TfrPage); override;
|
|
procedure LoadFromXML(XML: TLrXMLConfig; const Path: String); override;
|
|
procedure SaveToXML(XML: TLrXMLConfig; const Path: String); override;
|
|
published
|
|
property AutoSize;
|
|
property Color;
|
|
property Enabled;
|
|
property Caption;
|
|
property Kind: TBitBtnKind read GetKind write SetKind;
|
|
property OnClick;
|
|
end;
|
|
|
|
{ TlrCheckBox }
|
|
|
|
TlrCheckBox = class(TlrVisualControl)
|
|
private
|
|
function GetChecked: boolean;
|
|
procedure SetChecked(AValue: boolean);
|
|
protected
|
|
procedure PaintDesignControl; override;
|
|
function CreateControl:TControl;override;
|
|
function GetCheckStyle(ACheck:boolean):TThemedButton;virtual;
|
|
public
|
|
constructor Create(AOwnerPage:TfrPage); override;
|
|
procedure LoadFromXML(XML: TLrXMLConfig; const Path: String); override;
|
|
procedure SaveToXML(XML: TLrXMLConfig; const Path: String); override;
|
|
published
|
|
property AutoSize;
|
|
property Color;
|
|
property Enabled;
|
|
property Caption;
|
|
property Checked:boolean read GetChecked write SetChecked;
|
|
property OnClick;
|
|
end;
|
|
|
|
{ TlrRadioButton }
|
|
|
|
TlrRadioButton = class(TlrCheckBox)
|
|
protected
|
|
function CreateControl:TControl;override;
|
|
function GetCheckStyle(ACheck:boolean):TThemedButton;override;
|
|
public
|
|
constructor Create(AOwnerPage:TfrPage); override;
|
|
end;
|
|
|
|
{ TlrListBox }
|
|
|
|
TlrListBox = class(TlrVisualControl)
|
|
private
|
|
function GetItemIndex: integer;
|
|
function GetItems: TStrings;
|
|
procedure SetItemIndex(AValue: integer);
|
|
procedure SetItems(AValue: TStrings);
|
|
protected
|
|
procedure PaintDesignControl; override;
|
|
function CreateControl:TControl;override;
|
|
public
|
|
constructor Create(AOwnerPage:TfrPage); override;
|
|
procedure LoadFromXML(XML: TLrXMLConfig; const Path: String); override;
|
|
procedure SaveToXML(XML: TLrXMLConfig; const Path: String); override;
|
|
published
|
|
property Color;
|
|
property Enabled;
|
|
property Items:TStrings read GetItems write SetItems;
|
|
property ItemIndex:integer read GetItemIndex write SetItemIndex;
|
|
property OnClick;
|
|
end;
|
|
|
|
{ TlrComboBox }
|
|
|
|
TlrComboBox = class(TlrVisualControl)
|
|
private
|
|
function GetDropDownCount: integer;
|
|
function GetItemIndex: integer;
|
|
function GetItems: TStrings;
|
|
function GetStyle: TComboBoxStyle;
|
|
procedure SetDropDownCount(AValue: integer);
|
|
procedure SetItemIndex(AValue: integer);
|
|
procedure SetItems(AValue: TStrings);
|
|
procedure SetStyle(AValue: TComboBoxStyle);
|
|
protected
|
|
procedure PaintDesignControl; override;
|
|
function CreateControl:TControl;override;
|
|
public
|
|
constructor Create(AOwnerPage:TfrPage); override;
|
|
procedure LoadFromXML(XML: TLrXMLConfig; const Path: String); override;
|
|
procedure SaveToXML(XML: TLrXMLConfig; const Path: String); override;
|
|
published
|
|
property Color;
|
|
property Enabled;
|
|
property Text;
|
|
property AutoSize;
|
|
property Style:TComboBoxStyle read GetStyle write SetStyle;
|
|
property Items:TStrings read GetItems write SetItems;
|
|
property ItemIndex:integer read GetItemIndex write SetItemIndex;
|
|
property DropDownCount:integer read GetDropDownCount write SetDropDownCount;
|
|
property OnClick;
|
|
end;
|
|
|
|
{ TlrDateEdit }
|
|
|
|
TlrDateEdit = class(TlrVisualControl)
|
|
private
|
|
function GetDate: TDateTime;
|
|
procedure SetDate(AValue: TDateTime);
|
|
protected
|
|
procedure PaintDesignControl; override;
|
|
function CreateControl:TControl;override;
|
|
public
|
|
constructor Create(AOwnerPage:TfrPage); override;
|
|
procedure LoadFromXML(XML: TLrXMLConfig; const Path: String); override;
|
|
procedure SaveToXML(XML: TLrXMLConfig; const Path: String); override;
|
|
published
|
|
property Color;
|
|
property Enabled;
|
|
property Date:TDateTime read GetDate write SetDate;
|
|
property OnClick;
|
|
end;
|
|
|
|
procedure Register;
|
|
|
|
procedure DoRegsiterControl(var cmpBMP:TBitmap; lrClass:TlrVisualControlClass);
|
|
implementation
|
|
uses typinfo, types,
|
|
lrDBDialogControls;
|
|
|
|
procedure Register;
|
|
begin
|
|
RegisterComponents('LazReport',[TLRDialogControls]);
|
|
end;
|
|
|
|
var
|
|
lrBMP_LRLabel:TBitmap = nil;
|
|
lrBMP_LREdit:TBitmap = nil;
|
|
lrBMP_LRButton:TBitmap = nil;
|
|
lrBMP_LRCheckBox:TBitmap = nil;
|
|
lrBMP_LRComboBox:TBitmap = nil;
|
|
lrBMP_LRRadioButton:TBitmap = nil;
|
|
lrBMP_LRMemo:TBitmap = nil;
|
|
lrBMP_LRListBox:TBitmap = nil;
|
|
lrBMP_LRDateEdit:TBitmap = nil;
|
|
|
|
procedure DoRegsiterControl(var cmpBMP:TBitmap; lrClass:TlrVisualControlClass);
|
|
begin
|
|
if not assigned(cmpBMP) then
|
|
begin
|
|
cmpBMP := TBitmap.Create;
|
|
cmpBMP.LoadFromLazarusResource(lrClass.ClassName);
|
|
frRegisterObject(lrClass, cmpBMP, lrClass.ClassName, nil, otlUIControl, nil);
|
|
end;
|
|
end;
|
|
|
|
procedure InitLRComp;
|
|
begin
|
|
DoRegsiterControl(lrBMP_LRLabel, TlrLabel);
|
|
DoRegsiterControl(lrBMP_LREdit, TlrEdit);
|
|
DoRegsiterControl(lrBMP_LRMemo, TlrMemo);
|
|
DoRegsiterControl(lrBMP_LRButton, TlrButton);
|
|
DoRegsiterControl(lrBMP_LRCheckBox, TlrCheckBox);
|
|
DoRegsiterControl(lrBMP_LRComboBox, TlrComboBox);
|
|
DoRegsiterControl(lrBMP_LRRadioButton, TlrRadioButton);
|
|
DoRegsiterControl(lrBMP_LRListBox, TlrListBox);
|
|
DoRegsiterControl(lrBMP_LRDateEdit, TlrDateEdit);
|
|
end;
|
|
|
|
{ TlrDateEdit }
|
|
|
|
function TlrDateEdit.GetDate: TDateTime;
|
|
begin
|
|
Result:=TDateEdit(FControl).Date;
|
|
end;
|
|
|
|
procedure TlrDateEdit.SetDate(AValue: TDateTime);
|
|
begin
|
|
TDateEdit(FControl).Date:=AValue;
|
|
end;
|
|
|
|
procedure TlrDateEdit.PaintDesignControl;
|
|
var
|
|
AY, aH:integer;
|
|
R1:TRect;
|
|
begin
|
|
AY:=(DRect.Top + DRect.Bottom) div 2;
|
|
aH:=Canvas.TextHeight(Text) div 2;
|
|
Canvas.Frame3d(DRect, 1, bvLowered);
|
|
Canvas.Brush.Color := FControl.Color;
|
|
Canvas.FillRect(DRect);
|
|
Canvas.Font:=FControl.Font;
|
|
Canvas.TextRect(DRect, DRect.Left + 3, AY - aH, Text);
|
|
|
|
R1:=DRect;
|
|
R1.Left:=R1.Right - 16;
|
|
DrawFrameControl(Canvas.Handle, R1, DFC_BUTTON, DFCS_BUTTONPUSH);
|
|
end;
|
|
|
|
function TlrDateEdit.CreateControl: TControl;
|
|
begin
|
|
Result:=TDateEdit.Create(OwnerForm);
|
|
end;
|
|
|
|
constructor TlrDateEdit.Create(AOwnerPage: TfrPage);
|
|
begin
|
|
inherited Create(AOwnerPage);
|
|
BaseName := 'lrDateEdit';
|
|
AutoSize:=true;
|
|
end;
|
|
|
|
procedure TlrDateEdit.LoadFromXML(XML: TLrXMLConfig; const Path: String);
|
|
begin
|
|
inherited LoadFromXML(XML, Path);
|
|
end;
|
|
|
|
procedure TlrDateEdit.SaveToXML(XML: TLrXMLConfig; const Path: String);
|
|
begin
|
|
inherited SaveToXML(XML, Path);
|
|
end;
|
|
|
|
{ TlrListBox }
|
|
|
|
function TlrListBox.GetItemIndex: integer;
|
|
begin
|
|
Result:=TListBox(FControl).ItemIndex;
|
|
end;
|
|
|
|
function TlrListBox.GetItems: TStrings;
|
|
begin
|
|
Result:=TListBox(FControl).Items;
|
|
end;
|
|
|
|
procedure TlrListBox.SetItemIndex(AValue: integer);
|
|
begin
|
|
TListBox(FControl).ItemIndex:=AValue;
|
|
end;
|
|
|
|
procedure TlrListBox.SetItems(AValue: TStrings);
|
|
begin
|
|
TListBox(FControl).Items:=AValue;
|
|
if Assigned(frDesigner) then
|
|
frDesigner.Modified:=true;
|
|
end;
|
|
|
|
procedure TlrListBox.PaintDesignControl;
|
|
var
|
|
AY, aH, i:integer;
|
|
S:string;
|
|
begin
|
|
aH:=Canvas.TextHeight(Text) div 2;
|
|
Canvas.Frame3d(DRect, 1, bvLowered);
|
|
Canvas.Brush.Color := FControl.Color;
|
|
Canvas.FillRect(DRect);
|
|
Canvas.Font:=FControl.Font;
|
|
AY:=DRect.Top + 1;
|
|
i:=0;
|
|
while (AY < DRect.Bottom) and (i<TListBox(FControl).Items.Count) do
|
|
begin
|
|
S:=TListBox(FControl).Items[i];
|
|
Canvas.TextRect(DRect, DRect.Left + 3, AY, S);
|
|
inc(AY, aH + 3);
|
|
inc(i);
|
|
end;
|
|
end;
|
|
|
|
function TlrListBox.CreateControl: TControl;
|
|
begin
|
|
Result:=TListBox.Create(OwnerForm);
|
|
end;
|
|
|
|
constructor TlrListBox.Create(AOwnerPage: TfrPage);
|
|
begin
|
|
inherited Create(AOwnerPage);
|
|
BaseName := 'lrListBox';
|
|
AutoSize:=true;
|
|
end;
|
|
|
|
procedure TlrListBox.LoadFromXML(XML: TLrXMLConfig; const Path: String);
|
|
begin
|
|
inherited LoadFromXML(XML, Path);
|
|
Items.Text:=XML.GetValue(Path+'Items/Text/Value'{%H-}, '');
|
|
ItemIndex:=XML.GetValue(Path+'ItemIndex/Value'{%H-}, -1);
|
|
end;
|
|
|
|
procedure TlrListBox.SaveToXML(XML: TLrXMLConfig; const Path: String);
|
|
begin
|
|
inherited SaveToXML(XML, Path);
|
|
XML.SetValue(Path+'Items/Text/Value'{%H-}, Items.Text);
|
|
XML.SetValue(Path+'ItemIndex/Value'{%H-}, ItemIndex);
|
|
end;
|
|
|
|
{ TlrMemo }
|
|
|
|
procedure TlrMemo.MemoChange(Sender: TObject);
|
|
begin
|
|
if Assigned(FControl) then
|
|
TMemo(FControl).Lines.Assign(Memo);
|
|
end;
|
|
|
|
procedure TlrMemo.PaintDesignControl;
|
|
var
|
|
AY, aH, i:integer;
|
|
S:string;
|
|
begin
|
|
aH:=Canvas.TextHeight(Text) div 2;
|
|
Canvas.Frame3d(DRect, 1, bvLowered);
|
|
Canvas.Brush.Color := FControl.Color;
|
|
Canvas.FillRect(DRect);
|
|
Canvas.Font:=FControl.Font;
|
|
AY:=DRect.Top + 1;
|
|
i:=0;
|
|
while (AY < DRect.Bottom) and (i<TMemo(FControl).Lines.Count) do
|
|
begin
|
|
S:=TMemo(FControl).Lines[i];
|
|
Canvas.TextRect(DRect, DRect.Left + 3, AY, S);
|
|
inc(AY, aH + 3);
|
|
inc(i);
|
|
end;
|
|
end;
|
|
|
|
function TlrMemo.CreateControl: TControl;
|
|
begin
|
|
Result:=TMemo.Create(OwnerForm);
|
|
end;
|
|
|
|
constructor TlrMemo.Create(AOwnerPage: TfrPage);
|
|
begin
|
|
inherited Create(AOwnerPage);
|
|
BaseName := 'lrMemo';
|
|
Memo.OnChange:=@MemoChange;
|
|
end;
|
|
|
|
procedure TlrMemo.LoadFromXML(XML: TLrXMLConfig; const Path: String);
|
|
begin
|
|
inherited LoadFromXML(XML, Path);
|
|
end;
|
|
|
|
procedure TlrMemo.SaveToXML(XML: TLrXMLConfig; const Path: String);
|
|
begin
|
|
inherited SaveToXML(XML, Path);
|
|
end;
|
|
|
|
{ TlrRadioButton }
|
|
|
|
function TlrRadioButton.CreateControl: TControl;
|
|
begin
|
|
Result:=TRadioButton.Create(OwnerForm);
|
|
end;
|
|
|
|
function TlrRadioButton.GetCheckStyle(ACheck: boolean): TThemedButton;
|
|
begin
|
|
if ACheck then
|
|
Result:=tbRadioButtonCheckedNormal
|
|
else
|
|
Result:=tbRadioButtonUncheckedNormal
|
|
end;
|
|
|
|
constructor TlrRadioButton.Create(AOwnerPage: TfrPage);
|
|
begin
|
|
inherited Create(AOwnerPage);
|
|
BaseName := 'lrRadioButton';
|
|
end;
|
|
|
|
|
|
{ TlrComboBox }
|
|
|
|
function TlrComboBox.GetDropDownCount: integer;
|
|
begin
|
|
Result:=TComboBox(FControl).DropDownCount;
|
|
end;
|
|
|
|
function TlrComboBox.GetItemIndex: integer;
|
|
begin
|
|
Result:=TComboBox(FControl).ItemIndex;
|
|
end;
|
|
|
|
function TlrComboBox.GetItems: TStrings;
|
|
begin
|
|
Result:=TComboBox(FControl).Items;
|
|
end;
|
|
|
|
function TlrComboBox.GetStyle: TComboBoxStyle;
|
|
begin
|
|
Result:=TComboBox(FControl).Style;
|
|
end;
|
|
|
|
procedure TlrComboBox.SetDropDownCount(AValue: integer);
|
|
begin
|
|
TComboBox(FControl).DropDownCount:=AValue;
|
|
end;
|
|
|
|
procedure TlrComboBox.SetItemIndex(AValue: integer);
|
|
begin
|
|
TComboBox(FControl).ItemIndex:=AValue;
|
|
end;
|
|
|
|
procedure TlrComboBox.SetItems(AValue: TStrings);
|
|
begin
|
|
TComboBox(FControl).Items:=AValue;
|
|
if Assigned(frDesigner) then
|
|
frDesigner.Modified:=true;
|
|
end;
|
|
|
|
procedure TlrComboBox.SetStyle(AValue: TComboBoxStyle);
|
|
begin
|
|
TComboBox(FControl).Style:=AValue;
|
|
end;
|
|
|
|
procedure TlrComboBox.PaintDesignControl;
|
|
var
|
|
AY, aH:integer;
|
|
R1:TRect;
|
|
begin
|
|
AY:=(DRect.Top + DRect.Bottom) div 2;
|
|
aH:=Canvas.TextHeight(Text) div 2;
|
|
Canvas.Frame3d(DRect, 1, bvLowered);
|
|
Canvas.Brush.Color := FControl.Color;
|
|
Canvas.FillRect(DRect);
|
|
Canvas.Font:=FControl.Font;
|
|
Canvas.TextRect(DRect, DRect.Left + 3, AY - aH, Text);
|
|
|
|
R1:=DRect;
|
|
R1.Left:=R1.Right - 16;
|
|
DrawFrameControl(Canvas.Handle, R1, DFC_BUTTON, DFCS_BUTTONPUSH);
|
|
end;
|
|
|
|
function TlrComboBox.CreateControl: TControl;
|
|
begin
|
|
Result:=TComboBox.Create(OwnerForm);
|
|
end;
|
|
|
|
constructor TlrComboBox.Create(AOwnerPage: TfrPage);
|
|
begin
|
|
inherited Create(AOwnerPage);
|
|
BaseName := 'lrComboBox';
|
|
AutoSize:=true;
|
|
end;
|
|
|
|
procedure TlrComboBox.LoadFromXML(XML: TLrXMLConfig; const Path: String);
|
|
begin
|
|
inherited LoadFromXML(XML, Path);
|
|
Items.Text:=XML.GetValue(Path+'Items/Text/Value'{%H-}, '');
|
|
RestoreProperty('Style',XML.GetValue(Path+'Style/Value','csDropDown'));
|
|
ItemIndex:=XML.GetValue(Path+'ItemIndex/Value'{%H-}, -1);
|
|
DropDownCount:=XML.GetValue(Path+'DropDownCount/Value'{%H-}, DropDownCount);
|
|
end;
|
|
|
|
procedure TlrComboBox.SaveToXML(XML: TLrXMLConfig; const Path: String);
|
|
begin
|
|
inherited SaveToXML(XML, Path);
|
|
XML.SetValue(Path+'Items/Text/Value'{%H-}, Items.Text);
|
|
XML.SetValue(Path+'Style/Value', GetSaveProperty('Style'));
|
|
XML.SetValue(Path+'ItemIndex/Value'{%H-}, ItemIndex);
|
|
XML.SetValue(Path+'DropDownCount/Value'{%H-}, DropDownCount);
|
|
end;
|
|
|
|
{ TlrCheckBox }
|
|
|
|
type
|
|
THackChekBox = class(TCustomCheckBox);
|
|
|
|
function TlrCheckBox.GetChecked: boolean;
|
|
begin
|
|
Result:=THackChekBox(FControl).Checked;
|
|
end;
|
|
|
|
procedure TlrCheckBox.SetChecked(AValue: boolean);
|
|
begin
|
|
THackChekBox(FControl).Checked:=AValue;
|
|
end;
|
|
|
|
procedure TlrCheckBox.PaintDesignControl;
|
|
var
|
|
AX, AY, aW, aH:integer;
|
|
CSize: TSize;
|
|
PaintRect:TRect;
|
|
details: TThemedElementDetails;
|
|
begin
|
|
Details := ThemeServices.GetElementDetails(GetCheckStyle(Checked));
|
|
CSize := ThemeServices.GetDetailSize(Details);
|
|
PaintRect.Left := DRect.Left;
|
|
PaintRect.Top := (DRect.Top + DRect.Bottom - CSize.cy) div 2;
|
|
PaintRect := Bounds(PaintRect.Left, PaintRect.Top, CSize.cx, CSize.cy);
|
|
ThemeServices.DrawElement(Canvas.Handle, Details, PaintRect, nil);
|
|
|
|
AX:=DRect.Left + CSize.cx + 2;
|
|
AY:=(DRect.Top + DRect.Bottom) div 2;
|
|
// aW:=Canvas.TextWidth(Caption);
|
|
aH:=Canvas.TextHeight(Caption) div 2;
|
|
Canvas.TextRect(DRect, AX, AY - aH, Caption)
|
|
end;
|
|
|
|
function TlrCheckBox.CreateControl: TControl;
|
|
begin
|
|
Result:=TCheckBox.Create(OwnerForm);
|
|
end;
|
|
|
|
function TlrCheckBox.GetCheckStyle(ACheck: boolean): TThemedButton;
|
|
begin
|
|
if ACheck then
|
|
Result:=tbCheckBoxCheckedNormal
|
|
else
|
|
Result:=tbCheckBoxUncheckedNormal
|
|
end;
|
|
|
|
constructor TlrCheckBox.Create(AOwnerPage: TfrPage);
|
|
begin
|
|
inherited Create(AOwnerPage);
|
|
BaseName:='lrCheckBox';
|
|
AutoSize:=true;
|
|
end;
|
|
|
|
procedure TlrCheckBox.LoadFromXML(XML: TLrXMLConfig; const Path: String);
|
|
begin
|
|
inherited LoadFromXML(XML, Path);
|
|
Checked:=XML.GetValue(Path+'Checked/Value'{%H-}, false);
|
|
end;
|
|
|
|
procedure TlrCheckBox.SaveToXML(XML: TLrXMLConfig; const Path: String);
|
|
begin
|
|
inherited SaveToXML(XML, Path);
|
|
XML.SetValue(Path+'Checked/Value'{%H-}, Checked);
|
|
end;
|
|
|
|
{ TlrButton }
|
|
|
|
function TlrButton.GetKind: TBitBtnKind;
|
|
begin
|
|
Result:=TBitBtn(FControl).Kind;
|
|
end;
|
|
|
|
procedure TlrButton.SetKind(AValue: TBitBtnKind);
|
|
begin
|
|
TBitBtn(FControl).Kind:=AValue;
|
|
end;
|
|
|
|
procedure TlrButton.PaintDesignControl;
|
|
var
|
|
AX, AY, aW, aH:integer;
|
|
begin
|
|
DrawFrameControl(Canvas.Handle, DRect, DFC_BUTTON, DFCS_BUTTONPUSH);
|
|
AX:=(DRect.Left + DRect.Right) div 2;
|
|
AY:=(DRect.Top + DRect.Bottom) div 2;
|
|
aW:=Canvas.TextWidth(Caption);
|
|
aH:=Canvas.TextHeight(Caption) div 2;
|
|
if aW>Width then
|
|
Canvas.TextRect(DRect, 0, AY - aH, Caption)
|
|
else
|
|
Canvas.TextRect(DRect, AX - (aW div 2), AY - aH, Caption)
|
|
end;
|
|
|
|
function TlrButton.CreateControl: TControl;
|
|
begin
|
|
Result:=TBitBtn.Create(OwnerForm);
|
|
Result.AutoSize:=true;
|
|
end;
|
|
|
|
constructor TlrButton.Create(AOwnerPage: TfrPage);
|
|
begin
|
|
inherited Create(AOwnerPage);
|
|
BaseName := 'lrButton';
|
|
end;
|
|
|
|
procedure TlrButton.LoadFromXML(XML: TLrXMLConfig; const Path: String);
|
|
begin
|
|
inherited LoadFromXML(XML, Path);
|
|
RestoreProperty('Kind',XML.GetValue(Path+'Kind/Value','bkCustom'));
|
|
end;
|
|
|
|
procedure TlrButton.SaveToXML(XML: TLrXMLConfig; const Path: String);
|
|
begin
|
|
inherited SaveToXML(XML, Path);
|
|
XML.SetValue(Path+'Kind/Value', GetSaveProperty('Kind'));
|
|
end;
|
|
|
|
{ TlrEdit }
|
|
|
|
procedure TlrEdit.PaintDesignControl;
|
|
var
|
|
AY, aH:integer;
|
|
begin
|
|
AY:=(DRect.Top + DRect.Bottom) div 2;
|
|
aH:=Canvas.TextHeight(Text) div 2;
|
|
Canvas.Frame3d(DRect, 1, bvLowered);
|
|
Canvas.Brush.Color := FControl.Color;
|
|
Canvas.FillRect(DRect);
|
|
Canvas.Font:=FControl.Font;
|
|
Canvas.TextRect(DRect, DRect.Left + 3, AY - aH, Text)
|
|
end;
|
|
|
|
function TlrEdit.CreateControl: TControl;
|
|
begin
|
|
Result:=TEdit.Create(OwnerForm);
|
|
end;
|
|
|
|
constructor TlrEdit.Create(AOwnerPage: TfrPage);
|
|
begin
|
|
inherited Create(AOwnerPage);
|
|
BaseName := 'lrEdit';
|
|
end;
|
|
|
|
procedure TlrEdit.LoadFromXML(XML: TLrXMLConfig; const Path: String);
|
|
begin
|
|
inherited LoadFromXML(XML, Path);
|
|
Text:=XML.GetValue(Path+'Text/Value'{%H-}, '');
|
|
end;
|
|
|
|
procedure TlrEdit.SaveToXML(XML: TLrXMLConfig; const Path: String);
|
|
begin
|
|
inherited SaveToXML(XML, Path);
|
|
XML.SetValue(Path+'Text/Value'{%H-}, Text);
|
|
end;
|
|
|
|
{ TlrLabel }
|
|
|
|
function TlrLabel.GetAlignment: TAlignment;
|
|
begin
|
|
Result:=TLabel(FControl).Alignment;
|
|
end;
|
|
|
|
function TlrLabel.GetWordWrap: boolean;
|
|
begin
|
|
Result:=TLabel(FControl).WordWrap;
|
|
end;
|
|
|
|
procedure TlrLabel.SetAlignment(AValue: TAlignment);
|
|
begin
|
|
TLabel(FControl).Alignment:=AValue;
|
|
end;
|
|
|
|
procedure TlrLabel.SetWordWrap(AValue: boolean);
|
|
begin
|
|
TLabel(FControl).WordWrap:=AValue;
|
|
end;
|
|
|
|
procedure TlrLabel.PaintDesignControl;
|
|
var
|
|
AY, aH:integer;
|
|
begin
|
|
AY:=(DRect.Top + DRect.Bottom) div 2;
|
|
aH:=Canvas.TextHeight(Text) div 2;
|
|
Canvas.Brush.Color := FControl.Color;
|
|
Canvas.FillRect(DRect);
|
|
Canvas.Font:=FControl.Font;
|
|
Canvas.TextRect(DRect, DRect.Left + 3, AY - aH, Text)
|
|
end;
|
|
|
|
function TlrLabel.CreateControl: TControl;
|
|
begin
|
|
Result:=TLabel.Create(OwnerForm);
|
|
end;
|
|
|
|
constructor TlrLabel.Create(AOwnerPage: TfrPage);
|
|
begin
|
|
inherited Create(AOwnerPage);
|
|
BaseName := 'lrLabel';
|
|
end;
|
|
|
|
procedure TlrLabel.LoadFromXML(XML: TLrXMLConfig; const Path: String);
|
|
begin
|
|
inherited LoadFromXML(XML, Path);
|
|
WordWrap:=XML.GetValue(Path+'WordWrap/Value'{%H-}, false);
|
|
RestoreProperty('Alignment',XML.GetValue(Path+'Alignment/Value',''));
|
|
end;
|
|
|
|
procedure TlrLabel.SaveToXML(XML: TLrXMLConfig; const Path: String);
|
|
begin
|
|
inherited SaveToXML(XML, Path);
|
|
XML.SetValue(Path+'WordWrap/Value'{%H-}, WordWrap);
|
|
XML.SetValue(Path+'Alignment/Value', GetSaveProperty('Alignment'));
|
|
end;
|
|
|
|
|
|
{ TlrVisualControl }
|
|
|
|
procedure TlrVisualControl.SetColor(AValue: TColor);
|
|
begin
|
|
FControl.Color:=AValue;
|
|
Invalidate;
|
|
end;
|
|
|
|
function TlrVisualControl.GetAutoSize: Boolean;
|
|
begin
|
|
Result:=FControl.AutoSize;
|
|
end;
|
|
|
|
function TlrVisualControl.GetCaption: string;
|
|
begin
|
|
Result:=FControl.Caption;
|
|
end;
|
|
|
|
function TlrVisualControl.GetColor: TColor;
|
|
begin
|
|
Result:=FControl.Color;
|
|
end;
|
|
|
|
function TlrVisualControl.GetEnabled: boolean;
|
|
begin
|
|
Result:=FControl.Enabled;
|
|
end;
|
|
|
|
function TlrVisualControl.GetFont: TFont;
|
|
begin
|
|
Result:=FControl.Font;
|
|
end;
|
|
|
|
function TlrVisualControl.GetOnClick: TfrScriptStrings;
|
|
begin
|
|
Result:=Script;
|
|
end;
|
|
|
|
procedure TlrVisualControl.SetAutoSize(AValue: Boolean);
|
|
begin
|
|
FControl.AutoSize:=AValue;
|
|
end;
|
|
|
|
procedure TlrVisualControl.SetCaption(AValue: string);
|
|
begin
|
|
FControl.Caption:=AValue;
|
|
Invalidate;
|
|
end;
|
|
|
|
procedure TlrVisualControl.SetEnabled(AValue: boolean);
|
|
begin
|
|
FControl.Enabled:=AValue;
|
|
Invalidate;
|
|
end;
|
|
|
|
procedure TlrVisualControl.SetFont(AValue: TFont);
|
|
begin
|
|
FControl.Font:=AValue;
|
|
Invalidate;
|
|
end;
|
|
|
|
procedure TlrVisualControl.OnClickHandle(Sender: TObject);
|
|
var
|
|
FSaveView:TfrView;
|
|
FSavePage:TfrPage;
|
|
CmdList, ErrorList:TStringList;
|
|
begin
|
|
if (DocMode = dmPrinting) and (Script.Count>0) and (Trim(Script.Text)<>'') then
|
|
begin
|
|
FSaveView:=CurView;
|
|
FSavePage:=CurPage;
|
|
CmdList:=TStringList.Create;
|
|
ErrorList:=TStringList.Create;
|
|
try
|
|
CurView := Self;
|
|
CurPage:=OwnerPage;
|
|
frInterpretator.PrepareScript(Script, CmdList, ErrorList);
|
|
frInterpretator.DoScript(CmdList);
|
|
finally
|
|
CurPage:=FSavePage;
|
|
CurView := FSaveView;
|
|
FreeAndNil(CmdList);
|
|
FreeAndNil(ErrorList);
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
procedure TlrVisualControl.SetOnClick(AValue: TfrScriptStrings);
|
|
begin
|
|
Script:=AValue;
|
|
end;
|
|
|
|
procedure TlrVisualControl.PaintDesignControl;
|
|
var
|
|
AY, aH:integer;
|
|
S:string;
|
|
begin
|
|
AY:=(DRect.Top + DRect.Bottom) div 2;
|
|
aH:=Canvas.TextHeight(Text) div 2;
|
|
Canvas.Brush.Color := clRed;
|
|
Canvas.FillRect(DRect);
|
|
Canvas.Font:=FControl.Font;
|
|
Canvas.TextRect(DRect, DRect.Left + 3, AY - aH, Name)
|
|
end;
|
|
|
|
procedure TlrVisualControl.SetName(const AValue: string);
|
|
begin
|
|
inherited SetName(AValue);
|
|
FControl.Name:=Name;
|
|
end;
|
|
|
|
procedure TlrVisualControl.UpdateControlPosition;
|
|
begin
|
|
FControl.Left:=round(Left);
|
|
FControl.Top:=round(Top) - 20; //Header width
|
|
FControl.Width:=round(Width);
|
|
FControl.Height:=round(Height);
|
|
end;
|
|
|
|
procedure TlrVisualControl.AfterCreate;
|
|
begin
|
|
inherited AfterCreate;
|
|
if Assigned(FControl) then
|
|
FControl.OnClick:=@OnClickHandle;
|
|
end;
|
|
|
|
constructor TlrVisualControl.Create(AOwnerPage: TfrPage);
|
|
begin
|
|
inherited Create(AOwnerPage);
|
|
FControl:=CreateControl;
|
|
if Assigned(FControl) then
|
|
begin
|
|
FControl.Parent:=OwnerForm;
|
|
end;
|
|
end;
|
|
|
|
procedure TlrVisualControl.LoadFromXML(XML: TLrXMLConfig; const Path: String);
|
|
begin
|
|
inherited LoadFromXML(XML, Path);
|
|
Enabled:=XML.GetValue(Path+'Enabled/Value'{%H-}, true);
|
|
Font.Name := XML.GetValue(Path+'Font/Name/Value', 'Arial'); // todo chk
|
|
Font.Size := XML.GetValue(Path+'Font/Size/Value'{%H-}, 10); // todo chk
|
|
RestoreProperty('CharSet',XML.GetValue(Path+'Font/Charset/Value',''),Font);
|
|
RestoreProperty('Style',XML.GetValue(Path+'Font/Style/Value',''),Font);
|
|
Font.Color := StringToColor(XML.GetValue(Path+'Font/Color/Value','clBlack')); // todo chk
|
|
Caption:=XML.GetValue(Path+'Caption/Value'{%H-}, '');
|
|
AutoSize:=XML.GetValue(Path+'AutoSize/Value'{%H-}, true);
|
|
Color:= StringToColor(XML.GetValue(Path+'Color/Value', 'clNone'));
|
|
if StreamMode = smDesigning then
|
|
begin
|
|
OnClick.Text:=XML.GetValue(Path+'Event/OnClick/Value', '');
|
|
end;
|
|
end;
|
|
|
|
procedure TlrVisualControl.SaveToXML(XML: TLrXMLConfig; const Path: String);
|
|
begin
|
|
inherited SaveToXML(XML, Path);
|
|
XML.SetValue(Path+'Enabled/Value'{%H-}, Enabled);
|
|
XML.SetValue(Path+'Font/Name/Value', Font.Name);
|
|
XML.SetValue(Path+'Font/Size/Value'{%H-}, Font.Size);
|
|
XML.SetValue(Path+'Font/Color/Value', ColorToString(Font.Color));
|
|
XML.SetValue(Path+'Font/Charset/Value', GetSaveProperty('CharSet',Font));
|
|
XML.SetValue(Path+'Font/Style/Value', GetSaveProperty('Style',Font));
|
|
XML.SetValue(Path+'Caption/Value'{%H-}, Caption);
|
|
XML.SetValue(Path+'AutoSize/Value'{%H-}, AutoSize);
|
|
XML.SetValue(Path+'Color/Value', ColorToString(Color));
|
|
|
|
if StreamMode = smDesigning then
|
|
begin
|
|
if IsPublishedProp(self,'OnClick') then
|
|
XML.SetValue(Path+'Event/OnClick/Value', OnClick.Text);
|
|
end;
|
|
end;
|
|
|
|
|
|
initialization
|
|
{$I lrdialogcontrols_img.inc}
|
|
InitLRComp;
|
|
|
|
finalization
|
|
if Assigned(lrBMP_LRLabel) then
|
|
FreeAndNil(lrBMP_LRLabel);
|
|
if Assigned(lrBMP_LREdit) then
|
|
FreeAndNil(lrBMP_LREdit);
|
|
if Assigned(lrBMP_LRButton) then
|
|
FreeAndNil(lrBMP_LRButton);
|
|
if Assigned(lrBMP_LRCheckBox) then
|
|
FreeAndNil(lrBMP_LRCheckBox);
|
|
if Assigned(lrBMP_LRComboBox) then
|
|
FreeAndNil(lrBMP_LRComboBox);
|
|
if Assigned(lrBMP_LRRadioButton) then
|
|
FreeAndNil(lrBMP_LRRadioButton);
|
|
if Assigned(lrBMP_LRMemo) then
|
|
FreeAndNil(lrBMP_LRMemo);
|
|
if Assigned(lrBMP_LRListBox) then
|
|
FreeAndNil(lrBMP_LRListBox);
|
|
if Assigned(lrBMP_LRDateEdit) then
|
|
FreeAndNil(lrBMP_LRDateEdit);
|
|
end.
|
|
|
|
|