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

📄 frxdesgn.pas

📁 报表源码 FastReport 3 is new generation of the report generators components. It consists of report engin
💻 PAS
📖 第 1 页 / 共 5 页
字号:
    FEditAfterInsert:Boolean;
    FDataTree:TfrxDataTreeForm;
    FDropFields:Boolean;
    FGridAlign:Boolean;
    FGridSize1:Extended;
    FGridSize2:Extended;
    FGridSize3:Extended;
    FGridSize4:Extended;
    FInspector:TfrxObjectInspector;
    FLineStyle:TfrxFrameStyle;
    FLocalizedOI:Boolean;
    FModifiedBy:TObject;
    FMouseDown:Boolean;
    FOldDesignerComp:TfrxDesigner;
    FOldUnits:TfrxDesignerUnits;
    FPagePositions:TStrings;
    FRecentFiles:TStringList;
    FRecentMenuIndex:Integer;
    FReportTree:TfrxReportTreeForm;
    FSampleFormat:TSampleFormat;
    FScale:Extended;
    FScriptFirstTime:Boolean;
    FScriptRunning:Boolean;
    FScriptStopped:Boolean;
    FSearchCase:Boolean;
    FSearchIndex:Integer;
    FSearchReplace:Boolean;
    FSearchReplaceText:String;
    FSearchText:String;
    FShowGrid:Boolean;
    FShowGuides:Boolean;
    FShowRulers:Boolean;
    FShowStartup:Boolean;
    FToolsColor:TColor;
    FUndoBuffer:TfrxUndoBuffer;
    FUnits:TfrxDesignerUnits;
    FUnitsDblClicked:Boolean;
    FUpdatingControls:Boolean;
    FWorkspace:TfrxDesignerWorkspace;
    FWorkspaceColor:TColor;

    procedure AttachDialogFormEvents(Attach:Boolean);
    procedure CreateColorSelector(Sender:TToolButton);
    procedure CreateExtraToolbar;
    procedure CreateToolWindows;
    procedure CreateObjectsToolbar;
    procedure CreateWorkspace;
    procedure DialogFormKeyDown(Sender:TObject; var Key:Word; Shift:TShiftState);
    procedure DialogFormKeyPress(Sender:TObject; var Key:Char);
    procedure DialogFormKeyUp(Sender:TObject; var Key:Word;
      Shift:TShiftState);
    procedure DialogFormModify(Sender:TObject);
    procedure Done;
    procedure FindText;
    procedure Init;
    procedure OnCodeChanged(Sender:TObject);
    procedure OnColorChanged(Sender:TObject);
    procedure OnComponentMenuClick(Sender:TObject);
    procedure OnChangePosition(Sender:TObject);
    procedure OnDataTreeDblClick(Sender:TObject);
    procedure OnEditObject(Sender:TObject);
    procedure OnExtraToolClick(Sender:TObject);
    procedure OnInsertObject(Sender:TObject);
    procedure OnModify(Sender:TObject);
    procedure OnNotifyPosition(ARect:TfrxRect);
    procedure OnRunLine(Sender:TfsScript; const UnitName, SourcePos:String);
    procedure OnSelectionChanged(Sender:TObject);
    procedure OnStyleChanged(Sender:TObject);
    procedure OpenRecentFile(Sender:TObject);
    procedure ReadButtonImages;
    procedure ReloadObjects;
    procedure RestorePagePosition;
    procedure SavePagePosition;
    procedure SaveState;
    procedure SetScale(Value:Extended);
    procedure SetGridAlign(const Value:Boolean);
    procedure SetShowGrid(const Value:Boolean);
    procedure SetShowRulers(const Value:Boolean);
    procedure SetToolsColor(const Value:TColor);
    procedure SetUnits(const Value:TfrxDesignerUnits);
    procedure SetWorkspaceColor(const Value:TColor);
    procedure SwitchToolbar;
    procedure UpdateCaption;
    procedure UpdateControls;
    procedure UpdateDataControls;
    procedure UpdatePageDimensions;
    procedure UpdateRecentFiles(NewFile:String);
    procedure UpdateStyles;
    procedure UpdateSyntaxType;
    function AskSave:Word;
    function CheckOp(Op:TfrxDesignerRestriction):Boolean;
    function GetPageIndex:Integer;
    function GetReportName:String;
    procedure SetShowGuides(const Value:Boolean);
    procedure CMStartup(var Message:TMessage); message WM_USER+1;
  protected
    procedure SetModified(const Value:Boolean); override;
    procedure SetPage(const Value:TfrxPage); override;
    function GetCode:TStrings; override;
  public
    { Public declarations }
    function InsertExpression(const Expr:String):String; override;
    procedure LoadFile(FileName:String; UseOnLoadEvent:Boolean);
    procedure Lock; override;
    procedure ReloadPages(Index:Integer); override;
    procedure ReloadReport; override;
    procedure RestoreState(RestoreDefault:Boolean = False);
    procedure SaveFile(SaveAs:Boolean; UseOnSaveEvent:Boolean);
    procedure SwitchToCodeWindow;
    procedure UpdateDataTree; override;
    procedure UpdatePage; override;
    function GetDefaultObjectSize:TfrxPoint;
    function mmToUnits(mm:Extended; X:Boolean = True):Extended;
    function UnitsTomm(mm:Extended; X:Boolean = True):Extended;

    property CodeWindow:TfrxSyntaxMemo read FCodeWindow;
    property DataTree:TfrxDataTreeForm read FDataTree;
    property DropFields:Boolean read FDropFields write FDropFields;
    property EditAfterInsert:Boolean read FEditAfterInsert write FEditAfterInsert;
    property GridAlign:Boolean read FGridAlign write SetGridAlign;
    property GridSize1:Extended read FGridSize1 write FGridSize1;
    property GridSize2:Extended read FGridSize2 write FGridSize2;
    property GridSize3:Extended read FGridSize3 write FGridSize3;
    property GridSize4:Extended read FGridSize4 write FGridSize4;
    property SampleFormat:TSampleFormat read FSampleFormat;
    property Scale:Extended read FScale write SetScale;
    property ShowGrid:Boolean read FShowGrid write SetShowGrid;
    property ShowGuides:Boolean read FShowGuides write SetShowGuides;
    property ShowRulers:Boolean read FShowRulers write SetShowRulers;
    property ShowStartup:Boolean read FShowStartup write FShowStartup;
    property ToolsColor:TColor read FToolsColor write SetToolsColor;
    property Units:TfrxDesignerUnits read FUnits write SetUnits;
    property Workspace:TfrxDesignerWorkspace read FWorkspace;
    property WorkspaceColor:TColor read FWorkspaceColor write SetWorkspaceColor;
  end;

  TSampleFormat = class(TObject)
  private
    FMemo:TfrxCustomMemoView;
  public
    constructor Create;
    destructor Destroy; override;
    procedure ApplySample(Memo:TfrxCustomMemoView);
    procedure SetAsSample(Memo:TfrxCustomMemoView);
    property Memo:TfrxCustomMemoView read FMemo;
  end;

var
  frxDesignerComp:TfrxDesigner;

implementation

{$R *.DFM}
{$R *.RES}

uses
  TypInfo, IniFiles, Registry,
  frxDsgnIntf, frxUtils, frxPopupForm, frxDesgnWorkspace1,
  frxDesgnEditors, frxEditOptions, frxEditReport, frxEditPage, frxAbout,
  fs_itools, frxXML, frxEditReportData, frxEditVar, frxEditExpr,
  frxEditHighlight, frxEditStyle, frxNewItem, frxStdWizard,
  frxEditTabOrder, frxCodeUtils, frxRes, frxrcDesgn, frxDMPClass,
  frxEvaluateForm, frxSearchDialog;

type
  THackControl = class(TWinControl);

{ TSampleFormat }

constructor TSampleFormat.Create;
begin
  FMemo:= TfrxMemoView.Create(nil);
end;

destructor TSampleFormat.Destroy;
begin
  FMemo.Free;
  inherited;
end;

procedure TSampleFormat.ApplySample(Memo:TfrxCustomMemoView);
begin
  Memo.Color:= FMemo.Color;
  Memo.Font:= FMemo.Font;
  Memo.Frame.Assign(FMemo.Frame);
  Memo.BrushStyle:= FMemo.BrushStyle;
  Memo.HAlign:= FMemo.HAlign;
  Memo.VAlign:= FMemo.VAlign;
  Memo.LineSpacing:= FMemo.LineSpacing;
  Memo.ParentFont:= FMemo.ParentFont;
end;

procedure TSampleFormat.SetAsSample(Memo:TfrxCustomMemoView);
begin
  FMemo.Assign(Memo);
  FMemo.FlowTo:= nil;
end;

{ TfrxDesigner }

constructor TfrxDesigner.Create(AOwner:TComponent);
begin
  inherited Create(AOwner);
  FCloseQuery:= True;
  frxDesignerComp:= Self;
end;

destructor TfrxDesigner.Destroy;
begin
  frxDesignerComp:= nil;
  inherited Destroy;
end;

{ TfrxDesignerForm }

{ Form events }
{------------------------------------------------------------------------------}

procedure TfrxDesignerForm.FormCreate(Sender:TObject);
begin
  frxResources.LocalizeForm(Self);
  ReadButtonImages;
  CreateObjectsToolbar;
  CreateWorkspace;
  CreateToolWindows;
  Init;
  RestoreState;
  CreateExtraToolbar;
  ReloadPages(0);
  UpdateCaption;
  UpdateRecentFiles('');

  if (frxDesignerComp<>nil) and Assigned(frxDesignerComp.FOnShow) then
    frxDesignerComp.FOnShow(Self);
end;

procedure TfrxDesignerForm.FormDestroy(Sender:TObject);
begin
  SaveState;
  Done;
end;

procedure TfrxDesignerForm.FormClose(Sender:TObject; var Action:TCloseAction);
begin
  FModalFinished:= True;
end;

procedure TfrxDesignerForm.FormCloseQuery(Sender:TObject; var CanClose:Boolean);
var
  w:Word;
begin
  if FScriptRunning then
  begin
    CanClose:= False;
    Exit;
  end;

  CanClose:= True;
  Report.ScriptText:= CodeWindow.Lines;

  if (frxDesignerComp<>nil) and not frxDesignerComp.CloseQuery then
    Exit;

  if Modified and not (csDesigning in Report.ComponentState) and CheckOp(drDontSaveReport) then
  begin
    w:= AskSave;

    if IsPreviewDesigner then
    begin
      if w = mrNo then
        Modified:= False
    end
    else if w = mrYes then
      SaveFile(False, True);

    if not IsPreviewDesigner then
    begin
      if w = mrNo then
        Modified:= False
      else
        Modified:= True;
    end;

    if w = mrCancel then
      CanClose:= False;
  end;
end;

procedure TfrxDesignerForm.FormKeyDown(Sender:TObject; var Key:Word;
  Shift:TShiftState);
begin
  if (FDialogForm<>nil) and (ActiveControl<>FInspector.Edit1) then
    THackControl(FWorkspace).KeyDown(Key, Shift);

  if Key = vk_Return then
    if ActiveControl = FontSizeCB then
      ToolButtonClick(FontSizeCB)
    else if ActiveControl = ScaleCB then
      ScaleCBClick(Self);

  if Page<>nil then
    if Key = vk_Insert then
      if Shift = [ssShift] then
        PasteCmdExecute(nil)
      else if Shift = [ssCtrl] then
        CopyCmdExecute(nil);

  if Key = vk_Delete then
    if Shift = [ssShift] then
      CutCmdExecute(nil);

  if (Key = Ord('E')) and (Shift = [ssCtrl]) then
    Page:= nil;

  { code window keys }
// if FPage = nil then
    if ((Key = vk_F4) or (Key = vk_F5)) and (Shift = []) then
    begin
      CodeWindow.BreakPoint:= CodeWindow.GetPos.Y;
      RunScriptBClick(StepScriptB);
    end
    else if (Key = vk_F2) and (Shift = [ssCtrl]) then
      StopScriptBClick(StopScriptB)
    else if (Key = vk_F7) and (Shift = [ssCtrl]) then
      EvaluateBClick(EvaluateB)
    else if Key = vk_F9 then
      RunScriptBClick(RunScriptB)
    else if (Key = vk_F7) or (Key = vk_F8) then
      RunScriptBClick(StepScriptB)
end;

procedure TfrxDesignerForm.CMStartup(var Message:TMessage);
begin
  if FShowStartup then
    if (frxDesignerComp<>nil) and Assigned(frxDesignerComp.FOnShowStartupScreen) then
      frxDesignerComp.FOnShowStartupScreen(Self);
end;

{ Get/Set methods }
{------------------------------------------------------------------------------}

function TfrxDesignerForm.GetDefaultObjectSize:TfrxPoint;
begin
  case FUnits of
    duCM:Result:= frxPoint(fr1cm * 2.5, fr1cm * 0.5);
    duInches:Result:= frxPoint(fr1in, fr1in * 0.2);
    duPixels:Result:= frxPoint(80, 16);
    duChars:Result:= frxPoint(fr1CharX * 10, fr1CharY);
  end;
end;

function TfrxDesignerForm.GetCode:TStrings;
begin
  Result:= CodeWindow.Lines;
end;

procedure TfrxDesignerForm.SetGridAlign(const Value:Boolean);
begin
  FGridAlign:= Value;
  AlignToGridB.Down:= FGridAlign;
  FWorkspace.GridAlign:= FGridAlign;
end;

procedure TfrxDesignerForm.SetModified(const Value:Boolean);
var
  i:Integer;
begin
  inherited;
  Report.ScriptText:= CodeWindow.Lines;
  FUndoBuffer.AddUndo(Report);
  FUndoBuffer.ClearRedo;
  SaveCmd.Enabled:= Modified;

  if FModifiedBy<>Self then
    UpdateControls;

  if FModifiedBy = FInspector then
    if (FSelectedObjects[0] = FPage) or
       (TObject(FSelectedObjects[0]) is TfrxSubreport) then
    begin
      i:= Report.Objects.IndexOf(FPage);
      if i >= 0 then
        ReloadPages(i);
    end;

  if FModifiedBy<>FWorkspace then
  begin
    FWorkspace.UpdateView;
    FWorkspace.AdjustBands;
  end;

  if FModifiedBy<>FInspector then
    FInspector.UpdateProperties;

  FReportTree.UpdateItems;
  FModifiedBy:= nil;
  UpdateDataControls;
end;

procedure TfrxDesignerForm.SetPage(const Value:TfrxPage);
begin
  inherited;

  Tab.TabIndex:= Report.Objects.IndexOf(FPage)+1;
  AttachDialogFormEvents(False);
  ScrollBoxPanel.Visible:= FPage<>nil;
  CodePanel.Visible:= FPage = nil;

  SwitchToolbar;
  UpdateControls;

  if FPage = nil then
  begin
    CodeWindow.SetFocus;
    Exit;
  end
  else if FPage is TfrxReportPage then
  begin
    with FWorkspace do
    begin
      Parent:= ScrollBox;
      Align:= alNone;
      Color:= FWorkspaceColor;
      Scale:= Self.Scale;
    end;

    if FPage is TfrxDMPPage then
      Units:= duChars else
      Units:= FOldUnits;
    UpdatePageDimensions;
    if Visible then
      ScrollBox.SetFocus;
  end
  else
  begin
    Units:= duPixels;
    FDialogForm:= TfrxDialogForm(TfrxDialogPage(FPage).DialogForm);

    with FWorkspace do
    begin
      Parent:= FDialogForm;
      Align:= alClient;
      GridType:= gtDialog;
      GridX:= FGridSize4;
      GridY:= FGridSize4;
      Color:= TfrxDialogPage(FPage).Color;
      Scale:= 1;
      SetPageDimensions(0, 0, Rect(0, 0, 0, 0));
    end;

    with FDialogForm do
    begin
      BorderStyle:= bsSizeable;
      AttachDialogFormEvents(True);
      Show;
// SetFocus;
    end;
  end;

⌨️ 快捷键说明

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