mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-05-02 19:23:40 +02:00
172 lines
4.5 KiB
ObjectPascal
172 lines
4.5 KiB
ObjectPascal
unit ceFontFrame;
|
|
|
|
{$mode objfpc}{$H+}
|
|
|
|
interface
|
|
|
|
uses
|
|
Classes, SysUtils, Graphics, Forms, Controls, StdCtrls, Dialogs, Spin,
|
|
ExtCtrls;
|
|
|
|
type
|
|
|
|
{ TChartFontFrame }
|
|
|
|
TChartFontFrame = class(TFrame)
|
|
cbBold: TCheckBox;
|
|
cbFontColor: TColorButton;
|
|
cbItalic: TCheckBox;
|
|
cbUnderline: TCheckBox;
|
|
cmbFontName: TComboBox;
|
|
cmbFontSize: TComboBox;
|
|
lblOrientation: TLabel;
|
|
Panel1: TPanel;
|
|
Panel2: TPanel;
|
|
seOrientation: TSpinEdit;
|
|
procedure cbBoldChange(Sender: TObject);
|
|
procedure cbFontColorColorChanged(Sender: TObject);
|
|
procedure cbItalicChange(Sender: TObject);
|
|
procedure cbUnderlineChange(Sender: TObject);
|
|
procedure cmbFontNameChange(Sender: TObject);
|
|
procedure cmbFontSizeChange(Sender: TObject);
|
|
procedure seOrientationChange(Sender: TObject);
|
|
private
|
|
FFont: TFont;
|
|
FOnChange: TNotifyEvent;
|
|
procedure DoChanged;
|
|
public
|
|
constructor Create(AOwner: TComponent); override;
|
|
procedure GetData(AFont: TFont);
|
|
procedure Prepare(AFont: TFont; WithOrientation: boolean);
|
|
property OnChange: TNotifyEvent read FOnChange write FOnChange;
|
|
end;
|
|
|
|
implementation
|
|
|
|
{$R *.lfm}
|
|
|
|
uses
|
|
ceUtils;
|
|
|
|
const
|
|
FONT_SIZES: array[0..20] of String = (
|
|
'default', '8', '9', '10', '12', '14', '16', '18', '20', '22', '24', '28',
|
|
'32', '36', '40', '44', '48', '56', '64', '72', '80');
|
|
|
|
constructor TChartFontFrame.Create(AOwner: TComponent);
|
|
var
|
|
i: Integer;
|
|
begin
|
|
inherited;
|
|
cmbFontName.Items.Assign(Screen.Fonts);
|
|
cmbFontName.Items.Insert(0, 'default');
|
|
for i:=0 to High(FONT_SIZES) do
|
|
cmbFontSize.Items.Add(FONT_SIZES[i]);
|
|
cbFontColor.Width := cbFontColor.Height;
|
|
|
|
cmbFontName.DropdownCount := DEFAULT_DROPDOWN_COUNT;
|
|
cmbFontSize.DropdownCount := DEFAULT_DROPDOWN_COUNT;
|
|
end;
|
|
|
|
procedure TChartFontFrame.cbBoldChange(Sender: TObject);
|
|
begin
|
|
if cbBold.Checked then
|
|
FFont.Style := FFont.Style + [fsBold]
|
|
else
|
|
FFont.Style := FFont.Style - [fsBold];
|
|
DoChanged;
|
|
end;
|
|
|
|
procedure TChartFontFrame.cbFontColorColorChanged(Sender: TObject);
|
|
begin
|
|
FFont.Color := cbFontColor.ButtonColor;
|
|
DoChanged;
|
|
end;
|
|
|
|
procedure TChartFontFrame.cbItalicChange(Sender: TObject);
|
|
begin
|
|
if cbItalic.Checked then
|
|
FFont.Style := FFont.Style + [fsItalic]
|
|
else
|
|
FFont.Style := FFont.Style - [fsItalic];
|
|
DoChanged;
|
|
end;
|
|
|
|
procedure TChartFontFrame.cbUnderlineChange(Sender: TObject);
|
|
begin
|
|
if cbUnderline.Checked then
|
|
FFont.Style := FFont.Style + [fsUnderline]
|
|
else
|
|
FFont.Style := FFont.Style - [fsUnderline];
|
|
DoChanged;
|
|
end;
|
|
|
|
procedure TChartFontFrame.cmbFontNameChange(Sender: TObject);
|
|
begin
|
|
if cmbFontName.ItemIndex < 1 then
|
|
FFont.Name := 'default'
|
|
else
|
|
FFont.Name := cmbFontName.Items[cmbFontName.ItemIndex];
|
|
DoChanged;
|
|
end;
|
|
|
|
procedure TChartFontFrame.cmbFontSizeChange(Sender: TObject);
|
|
begin
|
|
if cmbFontSize.ItemIndex < 1 then
|
|
FFont.Size := 0
|
|
else
|
|
FFont.Size := StrToInt(cmbFontSize.Items[cmbFontSize.ItemIndex]);
|
|
DoChanged;
|
|
end;
|
|
|
|
procedure TChartFontFrame.seOrientationChange(Sender: TObject);
|
|
begin
|
|
FFont.Orientation := seOrientation.Value * 10;
|
|
DoChanged;
|
|
end;
|
|
|
|
procedure TChartFontFrame.DoChanged;
|
|
begin
|
|
if Assigned(FOnChange) then FOnChange(Self);
|
|
end;
|
|
|
|
procedure TChartFontFrame.GetData(AFont: TFont);
|
|
begin
|
|
if cmbFontSize.ItemIndex < 1 then
|
|
AFont.Name := cmbFontName.Items[0]
|
|
else
|
|
AFont.Name := cmbFontName.Items[cmbFontName.ItemIndex];
|
|
if cmbFontSize.ItemIndex < 1 then
|
|
AFont.Size := 0
|
|
else
|
|
AFont.Size := StrToInt(cmbFontSize.Items[cmbFontSize.ItemIndex]);
|
|
AFont.Orientation := seOrientation .Value * 10;
|
|
AFont.Color := cbFontColor.ButtonColor;
|
|
if cbBold.Checked then AFont.Style := AFont.Style + [fsBold] else AFont.Style := [];
|
|
if cbItalic.Checked then AFont.Style := AFont.Style + [fsItalic] else AFont.Style := [];
|
|
if cbUnderline.Checked then AFont.Style := AFont.Style + [fsUnderline] else AFont.Style := [];
|
|
end;
|
|
|
|
procedure TChartFontFrame.Prepare(AFont: TFont; WithOrientation: Boolean);
|
|
begin
|
|
FFont := AFont;
|
|
|
|
cmbFontName.ItemIndex := cmbFontName.Items.IndexOf(AFont.Name);
|
|
if cmbFontName.ItemIndex = -1 then cmbFontName.ItemIndex := 0;
|
|
|
|
cmbFontSize.ItemIndex := cmbFontSize.Items.IndexOf(IntToStr(AFont.Size));
|
|
if cmbFontSize.ItemIndex = -1 then cmbFontSize.ItemIndex := 0;
|
|
|
|
seOrientation.Value := AFont.Orientation div 10;
|
|
cbFontColor.ButtonColor := ColorToRGB(AFont.Color);
|
|
seOrientation.Visible := WithOrientation;
|
|
lblOrientation.Visible := WithOrientation;
|
|
|
|
cbBold.Checked := fsBold in AFont.Style;
|
|
cbItalic.Checked := fsItalic in AFont.Style;
|
|
cbUnderline.Checked := fsUnderline in AFont.Style;
|
|
end;
|
|
|
|
end.
|
|
|