mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-05-03 21:23:52 +02:00
227 lines
5.1 KiB
ObjectPascal
227 lines
5.1 KiB
ObjectPascal
|
|
{*****************************************}
|
|
{ }
|
|
{ FastReport v2.3 }
|
|
{ Checkbox Add-In Object }
|
|
{ }
|
|
{ Copyright (c) 1998-99 by Tzyganenko A. }
|
|
{ }
|
|
{*****************************************}
|
|
|
|
unit LR_ChBox;
|
|
|
|
interface
|
|
|
|
{$I lr_vers.inc}
|
|
|
|
uses
|
|
Classes, SysUtils, LResources,
|
|
Graphics,GraphType, Controls, Forms, Dialogs,
|
|
Menus, LCLType, LCLIntf, LR_Class;
|
|
|
|
|
|
|
|
type
|
|
|
|
{ TfrCheckBoxObject }
|
|
|
|
TfrCheckBoxObject = class(TComponent)
|
|
public
|
|
Constructor Create(aOwner : TComponent); override;
|
|
end;
|
|
|
|
{ TfrCheckBoxView }
|
|
|
|
TfrCheckBoxView = class(TfrView)
|
|
private
|
|
fChecked: Boolean;
|
|
|
|
procedure DrawCheck(ARect: TRect; aChecked: Boolean);
|
|
public
|
|
constructor Create(AOwnerPage:TfrPage); override;
|
|
procedure Draw(aCanvas: TCanvas); override;
|
|
procedure Print(Stream: TStream); override;
|
|
procedure ExportData; override;
|
|
procedure DefinePopupMenu(Popup: TPopupMenu); override;
|
|
|
|
procedure Assign(Source: TPersistent); override;
|
|
procedure LoadFromStream(Stream: TStream); override;
|
|
procedure SaveToStream(Stream: TStream); override;
|
|
procedure LoadFromXML(XML: TLrXMLConfig; const Path: String); override;
|
|
procedure SaveToXML(XML: TLrXMLConfig; const Path: String); override;
|
|
published
|
|
property Checked : Boolean read fChecked write fChecked;
|
|
property DataField;
|
|
property FillColor;
|
|
property FrameColor;
|
|
property Frames;
|
|
property FrameStyle;
|
|
property FrameWidth;
|
|
property Script;
|
|
property Restrictions;
|
|
end;
|
|
|
|
|
|
implementation
|
|
|
|
uses LR_Utils, LR_Const;
|
|
|
|
{$IFNDEF LCLNOGUI}
|
|
|
|
{$R lr_checkbox.res}
|
|
|
|
var
|
|
lrBMPCheckBox : TBitMap;
|
|
{$ENDIF}
|
|
|
|
|
|
procedure TfrCheckBoxView.DrawCheck(ARect: TRect; aChecked: Boolean);
|
|
|
|
procedure Line(x, y, x1, y1: Integer);
|
|
begin
|
|
Canvas.MoveTo(x, y);
|
|
Canvas.LineTo(x1, y1);
|
|
end;
|
|
|
|
begin
|
|
InflateRect(ARect, Round(-4 * ScaleX), Round(-4 * ScaleY));
|
|
with Canvas, ARect do
|
|
begin
|
|
Pen.Mode := pmCopy;
|
|
Pen.Style := psSolid;
|
|
Pen.Color := clBlack;
|
|
if aChecked then
|
|
begin
|
|
Pen.Color := clBlack;
|
|
Pen.Width := Round(3 * ScaleX);
|
|
Line(Left, Top, Right, Bottom);
|
|
Line(Left, Bottom, Right, Top);
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
constructor TfrCheckBoxView.Create(AOwnerPage: TfrPage);
|
|
begin
|
|
inherited Create(AOwnerPage);
|
|
BeginUpdate;
|
|
try
|
|
Typ := gtAddIn;
|
|
FrameWidth := 2;
|
|
Frames:=frAllFrames;
|
|
Checked:=True;
|
|
BaseName := 'Check';
|
|
Finally
|
|
EndUpdate;
|
|
end;
|
|
end;
|
|
|
|
procedure TfrCheckBoxView.Draw(aCanvas: TCanvas);
|
|
var
|
|
IsChecked: Boolean;
|
|
begin
|
|
BeginDraw(aCanvas);
|
|
Memo1.Assign(Memo);
|
|
CalcGaps;
|
|
ShowBackground;
|
|
IsChecked := Self.Checked;
|
|
if Memo1.Count > 0 then
|
|
IsChecked := Memo1[0] = '1';
|
|
DrawCheck(DRect, IsChecked);
|
|
// DrawCheck(DRect, Self.Checked);
|
|
ShowFrame;
|
|
RestoreCoord;
|
|
end;
|
|
|
|
procedure TfrCheckBoxView.Print(Stream: TStream);
|
|
begin
|
|
BeginDraw(Canvas);
|
|
Memo1.Assign(Memo);
|
|
CurReport.InternalOnEnterRect(Memo1, Self);
|
|
frInterpretator.DoScript(Script);
|
|
if not Visible then Exit;
|
|
|
|
if Memo1.Count > 0 then
|
|
Memo1[0] := IntToStr(Trunc(Extended(frParser.Calc(Memo1[0]))));
|
|
Stream.Write(Typ, 1);
|
|
frWriteString(Stream, ClassName);
|
|
SaveToStream(Stream);
|
|
end;
|
|
|
|
procedure TfrCheckBoxView.ExportData;
|
|
var
|
|
s: String;
|
|
begin
|
|
inherited;
|
|
s := '';
|
|
if Self.Checked then
|
|
s := 'X';
|
|
CurReport.InternalOnExportText(x, y, s, Self);
|
|
end;
|
|
|
|
procedure TfrCheckBoxView.DefinePopupMenu(Popup: TPopupMenu);
|
|
begin
|
|
// no specific items in popup menu
|
|
if Popup=nil then;
|
|
end;
|
|
|
|
procedure TfrCheckBoxView.Assign(Source: TPersistent);
|
|
begin
|
|
inherited Assign(Source);
|
|
if Source is TfrCheckBoxView then
|
|
Self.Checked := TfrCheckBoxView(Source).Checked;
|
|
end;
|
|
|
|
procedure TfrCheckBoxView.LoadFromStream(Stream: TStream);
|
|
begin
|
|
inherited LoadFromStream(Stream);
|
|
Stream.Read(fChecked, SizeOf(fChecked));
|
|
end;
|
|
|
|
procedure TfrCheckBoxView.SaveToStream(Stream: TStream);
|
|
begin
|
|
inherited SaveToStream(Stream);
|
|
Stream.Write(fChecked, SizeOf(fChecked));
|
|
end;
|
|
|
|
procedure TfrCheckBoxView.LoadFromXML(XML: TLrXMLConfig; const Path: String);
|
|
begin
|
|
inherited LoadFromXML(XML, Path);
|
|
RestoreProperty('Checked',XML.GetValue(Path+'Data/Checked/Value',''));
|
|
end;
|
|
|
|
procedure TfrCheckBoxView.SaveToXML(XML: TLrXMLConfig; const Path: String);
|
|
begin
|
|
inherited SaveToXML(XML, Path);
|
|
XML.SetValue(Path+'Data/Checked/Value', GetSaveProperty('Checked'));
|
|
end;
|
|
|
|
|
|
|
|
{ TfrCheckBoxObject }
|
|
|
|
constructor TfrCheckBoxObject.Create(aOwner: TComponent);
|
|
begin
|
|
inherited Create(aOwner);
|
|
{$IFNDEF LCLNOGUI}
|
|
if not assigned(lrBMPCheckBox) {and not (csDesigning in ComponentState)} then
|
|
begin
|
|
lrBMPCheckBox := TBitMap.Create;
|
|
lrBMPCheckBox.LoadFromResourceName(HInstance, 'fr_checkbox');
|
|
|
|
frRegisterObject(TfrCheckBoxView, lrBMPCheckBox, sInsCheckBox, nil);
|
|
end;
|
|
{$ENDIF}
|
|
end;
|
|
|
|
{$IFNDEF LCLNOGUI}
|
|
initialization
|
|
lrBMPCheckBox:=nil;
|
|
finalization
|
|
if Assigned(lrBMPCheckBox) then
|
|
FreeAndNil(lrBMPCheckBox);
|
|
{$ELSE}
|
|
initialization
|
|
frRegisterObject(TfrCheckBoxView, nil, sInsCheckBox, nil);
|
|
{$ENDIF}
|
|
end.
|