⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 teeedifont.pas

📁 BCB第三方组件
💻 PAS
字号:
{**********************************************}
{  TTeeFont (or derived) Editor Dialog         }
{  Copyright (c) 1999-2007 by David Berneda    }
{**********************************************}
unit TeeEdiFont;
{$I TeeDefs.inc}

interface

uses {$IFNDEF LINUX}
     Windows, Messages,
     {$ENDIF}
     SysUtils, Classes,
     {$IFDEF CLX}
     QGraphics, QControls, QForms, QDialogs, QStdCtrls, QComCtrls, QExtCtrls,
     {$ELSE}
     Graphics, Controls, Forms, Dialogs, StdCtrls, ComCtrls, ExtCtrls,
     {$ENDIF}
     {$IFDEF LCL}
     Buttons,
     {$ENDIF}
     TeeProcs, TeCanvas, TeePenDlg, TeeEdiGrad, TeeShadowEditor, TeeBackImage;

type
  TTeeFontEditor = class(TForm)
    PanelButtons: TPanel;
    Button1: TButton;
    Button2: TButton;
    PageControl1: TPageControl;
    TabSheet1: TTabSheet;
    TabSheet2: TTabSheet;
    Button3: TButton;
    Label1: TLabel;
    ESize: TEdit;
    UDSize: TUpDown;
    GroupBox1: TGroupBox;
    CBItalic: TCheckBox;
    CBBold: TCheckBox;
    CBStrike: TCheckBox;
    CBUnder: TCheckBox;
    BColor: TButtonColor;
    Label2: TLabel;
    EInter: TEdit;
    UDInter: TUpDown;
    BOutline: TButtonPen;
    CBOutGrad: TCheckBox;
    TabShadow: TTabSheet;
    TabGradient: TTabSheet;
    Label3: TLabel;
    CBName: TComboFlat;
    TabPicture: TTabSheet;
    procedure BFontClick(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure EInterChange(Sender: TObject);
    procedure CBOutGradClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure ESizeChange(Sender: TObject);
    procedure CBItalicClick(Sender: TObject);
    procedure CBBoldClick(Sender: TObject);
    procedure CBStrikeClick(Sender: TObject);
    procedure CBUnderClick(Sender: TObject);
    procedure CBNameChange(Sender: TObject);
    procedure PageControl1Change(Sender: TObject);
  private
    { Private declarations }
    Backup,
    TheFont : TTeeFont;

    FGradientEditor : TTeeGradientEditor;
    FPicEditor      : TBackImageEditor;
    FShadowEditor   : TTeeShadowEditor;

    procedure CheckStyle(Check:TCheckBox; Value:TFontStyle);
    procedure RefreshBasicProps;
  public
    { Public declarations }
    procedure RefreshControls(AFont:TTeeFont);
  end;

Function InsertTeeFontEditor(ATab:TTabSheet):TTeeFontEditor;
function EditTeeFontEx(AOwner:TComponent; AFont:TTeeFont):Boolean;

type
  TTeeAddFontNames=Procedure(Items:TStrings);

var
  TeeAddFontNames:TTeeAddFontNames=nil;

implementation

{$IFNDEF CLX}
{$IFNDEF LCL}
{$R *.DFM}
{$ENDIF}
{$ELSE}
{$R *.xfm}
{$ENDIF}

uses
  TeeConst, TeeBrushDlg;

Function InsertTeeFontEditor(ATab:TTabSheet):TTeeFontEditor;
begin
  // Speed optimization, pass "nil" as owner.
  result:=TTeeFontEditor.Create(nil {ATab.Owner});
  result.Align:=alClient;
  AddFormTo(result,ATab);
end;

function EditTeeFontEx(AOwner:TComponent; AFont:TTeeFont):Boolean;
begin
  with TTeeFontEditor.Create(AOwner) do
  try
    BorderStyle:=TeeBorderStyle;
    TheFont:=AFont;

    PanelButtons.Visible:=True;
    Height:=Height+PanelButtons.Height;

    result:=ShowModal=mrOk;
  finally
    Free;
  end;
end;

procedure TTeeFontEditor.BFontClick(Sender: TObject);
begin
  EditTeeFont(Self,TheFont);

  BColor.Repaint;
  RefreshBasicProps;
end;

procedure TTeeFontEditor.RefreshBasicProps;
begin
  With TheFont do
  begin
    UDSize.Position:=Size;
    CBItalic.Checked:=fsItalic in Style;
    CBBold.Checked:=fsBold in Style;
    CBStrike.Checked:=fsStrikeOut in Style;
    CBUnder.Checked:=fsUnderline in Style;
    CBName.ItemIndex:=CBName.Items.IndexOf(Name);
  end;
end;

procedure TTeeFontEditor.RefreshControls(AFont:TTeeFont);
begin
  TheFont:=AFont;

  BColor.LinkProperty(TheFont,'Color'); // Do not localize
  RefreshBasicProps;

  With TheFont do
  begin
    UDInter.Position:=InterCharSize;
    BOutline.LinkPen(OutLine);
    CBOutGrad.Checked:=Gradient.Outline;

    if Assigned(FGradientEditor) then
       FGradientEditor.RefreshGradient(TheFont.Gradient);

    if Assigned(FShadowEditor) then
       FShadowEditor.RefreshControls(TheFont.Shadow);

    if Assigned(FPicEditor) then
       FPicEditor.RefreshControls(TheFont.Picture);
  end;
end;

procedure TTeeFontEditor.FormShow(Sender: TObject);
var tmpFirstTime : Boolean;
begin
  tmpFirstTime:=not Assigned(Backup);

  if tmpFirstTime then
     TeeTranslateControl(Self);

  if CBName.Items.Count=0 then
  begin
    CBName.Items:=Screen.Fonts;

    if Assigned(TeeAddFontNames) then  // used by TeeNumericGauge unit
       TeeAddFontNames(CBName.Items);
  end;

  if Assigned(TheFont) then
  begin
    RefreshControls(TheFont);

    if PanelButtons.Visible then
    begin
      if tmpFirstTime then
         Backup:=TTeeFont.Create(nil);

      Backup.Assign(TheFont);
    end;
  end;

  {$IFDEF CLX}
  EnableControls(False,[Label2,EInter,UDInter,BOutline]);
  {$ENDIF}
end;

procedure TTeeFontEditor.EInterChange(Sender: TObject);
begin
  if Showing and Assigned(TheFont) then
     TheFont.InterCharSize:=UDInter.Position;
end;

procedure TTeeFontEditor.CBOutGradClick(Sender: TObject);
begin
  TheFont.Gradient.Outline:=CBOutGrad.Checked;
end;

procedure TTeeFontEditor.FormCreate(Sender: TObject);
begin
  PanelButtons.Hide;
  Height:=Height-PanelButtons.Height;
end;

procedure TTeeFontEditor.Button2Click(Sender: TObject);
begin
  if Assigned(Backup) then
     TheFont.Assign(Backup);
end;

procedure TTeeFontEditor.FormDestroy(Sender: TObject);
begin
  Backup.Free;
end;

procedure TTeeFontEditor.ESizeChange(Sender: TObject);
begin
  if Showing then
     TheFont.Size:=UDSize.Position;
end;

procedure TTeeFontEditor.CheckStyle(Check:TCheckBox; Value:TFontStyle);
begin
  if Check.Checked then
     TheFont.Style:=TheFont.Style+[Value]
  else
     TheFont.Style:=TheFont.Style-[Value];
end;

procedure TTeeFontEditor.CBItalicClick(Sender: TObject);
begin
  CheckStyle(CBItalic,fsItalic);
end;

procedure TTeeFontEditor.CBBoldClick(Sender: TObject);
begin
  CheckStyle(CBBold,fsBold);
end;

procedure TTeeFontEditor.CBStrikeClick(Sender: TObject);
begin
  CheckStyle(CBStrike,fsStrikeOut);
end;

procedure TTeeFontEditor.CBUnderClick(Sender: TObject);
begin
  CheckStyle(CBUnder,fsUnderline);
end;

procedure TTeeFontEditor.CBNameChange(Sender: TObject);
begin
  TheFont.Name:=CBName.CurrentItem;
end;

procedure TTeeFontEditor.PageControl1Change(Sender: TObject);
begin
  if (PageControl1.ActivePage=TabShadow) and (not Assigned(FShadowEditor)) then
  begin
    FShadowEditor:=InsertTeeShadowEditor(TabShadow);

    if Assigned(TheFont) then
       FShadowEditor.RefreshControls(TheFont.Shadow);
  end
  else
  if (PageControl1.ActivePage=TabGradient) and (not Assigned(FGradientEditor)) then
  begin
    if Assigned(TheFont) then
    begin
      FGradientEditor:=TTeeGradientEditor.CreateCustom(Self,TheFont.Gradient);
      AddFormTo(FGradientEditor,TabGradient);
    end;
  end
  else
  if (PageControl1.ActivePage=TabPicture) and (not Assigned(FPicEditor)) then
  begin
    FPicEditor:=InsertImageEditor(TabPicture);
    FPicEditor.RGBitmap.Hide;
    FPicEditor.GBPosition.Hide;

    if Assigned(TheFont) then
       FPicEditor.RefreshControls(TheFont.Picture);
  end;
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -