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

📄 frxdesgn.pas

📁 报表源码 FastReport 3 is new generation of the report generators components. It consists of report engin
💻 PAS
📖 第 1 页 / 共 5 页
字号:
  ReloadObjects;
  RestorePagePosition;
  UpdateDataControls;
end;

procedure TfrxDesignerForm.SetScale(Value:Extended);
begin
  ScrollBox.AutoScroll:= False;
  if Value = 0 then
    Value:= 1;
  if Value > 20 then
    Value:= 20;
  FScale:= Value;
  TopRuler.Scale:= Value;
  LeftRuler.Scale:= Value;
  FWorkspace.Scale:= Value;
  ScaleCB.Text:= IntToStr(Round(FScale * 100))+'%';
  UpdatePageDimensions;
  ScrollBox.AutoScroll:= True;
end;

procedure TfrxDesignerForm.SetShowGrid(const Value:Boolean);
begin
  FShowGrid:= Value;
  ShowGridB.Down:= FShowGrid;
  FWorkspace.ShowGrid:= FShowGrid;
end;

procedure TfrxDesignerForm.SetShowRulers(const Value:Boolean);
begin
  FShowRulers:= Value;
  TopRuler.Visible:= FShowRulers;
  LeftRuler.Visible:= FShowRulers;
  ShowRulersMI.Checked:= FShowRulers;
end;

procedure TfrxDesignerForm.SetShowGuides(const Value:Boolean);
begin
  FShowGuides:= Value;
  TDesignerWorkspace(FWorkspace).ShowGuides:= FShowGuides;
  ShowGuidesMI.Checked:= FShowGuides;
end;

procedure TfrxDesignerForm.SetUnits(const Value:TfrxDesignerUnits);
var
  s:String;
  gType:TfrxGridType;
  gSizeX, gSizeY:Extended;
begin
  FUnits:= Value;
  s:= '';
  if FUnits = duCM then
  begin
    s:= frxResources.Get('dsCm');
    gType:= gt1cm;
    gSizeX:= FGridSize1 * fr1cm;
    gSizeY:= gSizeX;
  end
  else if FUnits = duInches then
  begin
    s:= frxResources.Get('dsInch');
    gType:= gt1in;
    gSizeX:= FGridSize2 * fr1in;
    gSizeY:= gSizeX;
  end
  else if FUnits = duPixels then
  begin
    s:= frxResources.Get('dsPix');
    gType:= gt1pt;
    gSizeX:= FGridSize3;
    gSizeY:= gSizeX;
  end
  else {if FUnits = duChars then}
  begin
    s:= frxResources.Get('dsChars');
    gType:= gtChar;
    gSizeX:= fr1CharX;
    gSizeY:= fr1CharY;
  end;

  StatusBar.Panels[0].Text:= s;
  TopRuler.Units:= TfrxRulerUnits(FUnits);
  LeftRuler.Units:= TfrxRulerUnits(FUnits);

  with FWorkspace do
  begin
    GridType:= gType;
    GridX:= gSizeX;
    GridY:= gSizeY;
    AdjustBands;
  end;

  if FSelectedObjects.Count<>0 then
    OnSelectionChanged(Self);
end;

procedure TfrxDesignerForm.SetToolsColor(const Value:TColor);
begin
  FToolsColor:= Value;
  FInspector.SetColor(Value);
  FDataTree.SetColor(Value);
  FReportTree.SetColor(Value);
end;

procedure TfrxDesignerForm.SetWorkspaceColor(const Value:TColor);
begin
  FWorkspaceColor:= Value;
  if not (FPage is TfrxDialogPage) then
    FWorkspace.Color:= Value;
end;

{ Service methods }
{------------------------------------------------------------------------------}

procedure TfrxDesignerForm.Init;
var
  i:Integer;
begin
  FScale:= 1;
  ScrollBoxPanel.Align:= alClient;
  CodePanel.Align:= alClient;

  fsGetLanguageList(LangCB.Items);
  LangCB.ItemIndex:= LangCB.Items.IndexOf(Report.ScriptLanguage);

  UpdateSyntaxType;
  UpdateStyles;

  FUndoBuffer:= TfrxUndoBuffer.Create;
  FUndoBuffer.AddUndo(Report);

  FClipboard:= TfrxClipboard.Create(Self);
  Timer.Enabled:= True;

  FRecentFiles:= TStringList.Create;
  FRecentMenuIndex:= FileMenu.IndexOf(SepMI4);
{$IFDEF Delphi5}
  MainMenu.AutoHotKeys:= maManual;
{$ENDIF}

  FSampleFormat:= TSampleFormat.Create;
  FPagePositions:= TStringList.Create;
  for i:= 1 to 256 do
    FPagePositions.Add('');

  if IsPreviewDesigner then
  begin
    FOldDesignerComp:= frxDesignerComp;
    TfrxDesigner.Create(nil);
    frxDesignerComp.Restrictions:= [drDontDeletePage, drDontCreatePage,
      drDontCreateReport, drDontLoadReport, drDontPreviewReport,
      drDontEditVariables, drDontChangeReportOptions];
    ObjectBandB.Enabled:= False;
  end;

  Report.SelectPrinter;

{$IFDEF FR_VER_BASIC}
  NewDialogCmd.Enabled:= False;
{$ENDIF}

  NewReportCmd.Enabled:= CheckOp(drDontCreateReport);
  NewItemCmd.Enabled:= CheckOp(drDontCreateReport);
  NewPageCmd.Enabled:= CheckOp(drDontCreatePage);
  NewDialogCmd.Enabled:= NewDialogCmd.Enabled and CheckOp(drDontCreatePage);
  SaveAsCmd.Enabled:= CheckOp(drDontSaveReport);
  OpenCmd.Enabled:= CheckOp(drDontLoadReport);
  ReportSettingsMI.Enabled:= CheckOp(drDontChangeReportOptions);
  ReportStylesMI.Enabled:= CheckOp(drDontChangeReportOptions);
  ReportDataMI.Enabled:= CheckOp(drDontEditReportData);
  VariablesCmd.Enabled:= CheckOp(drDontEditVariables);
  PreviewCmd.Enabled:= CheckOp(drDontPreviewReport);
end;

procedure TfrxDesignerForm.Done;
begin
  AttachDialogFormEvents(False);
  if IsPreviewDesigner then
  begin
    frxDesignerComp.Free;
    frxDesignerComp:= FOldDesignerComp;
  end;

  FUndoBuffer.Free;
  FClipboard.Free;
  FRecentFiles.Free;
  FSampleFormat.Free;
  FPagePositions.Free;
end;

procedure TfrxDesignerForm.ReadButtonImages;
var
  MainImages, DisabledImages, ObjectImages:TImageList;
begin
  MainImages:= frxResources.MainButtonImages;
  DisabledImages:= frxResources.DisabledButtonImages;
  ObjectImages:= frxResources.ObjectImages;

  CodeTB.Images:= MainImages;
  CodeTB.DisabledImages:= DisabledImages;

  StandardTB1.Images:= MainImages;
  StandardTB1.DisabledImages:= DisabledImages;

  TextTB1.Images:= MainImages;
  TextTB1.DisabledImages:= DisabledImages;

  FrameTB1.Images:= MainImages;
  FrameTB1.DisabledImages:= DisabledImages;

  AlignTB1.Images:= MainImages;
  AlignTB1.DisabledImages:= DisabledImages;

  ExtraToolsTB1.Images:= MainImages;
  ExtraToolsTB1.DisabledImages:= DisabledImages;

  ObjectsTB1.Images:= ObjectImages;
  ObjectsPopup.Images:= ObjectImages;
  MainMenu.Images:= MainImages;
  PagePopup.Images:= MainImages;
  TabPopup.Images:= MainImages;
  ActionList.Images:= MainImages;
  BandsPopup.Images:= MainImages;

  DataLV.LargeImages:= ObjectImages;
end;

procedure TfrxDesignerForm.CreateToolWindows;
begin
  FInspector:= TfrxObjectInspector.Create(Self);
  with FInspector do
  begin
    OnModify:= Self.OnModify;
    OnSelectionChanged:= Self.OnSelectionChanged;
    SelectedObjects:= FSelectedObjects;
  end;

  FDataTree:= TfrxDataTreeForm.Create(Self);
  FDataTree.CBPanel.Visible:= True;
  FDataTree.OnDblClick:= OnDataTreeDblClick;
  UpdateDataTree;

  FReportTree:= TfrxReportTreeForm.Create(Self);
  FReportTree.OnSelectionChanged:= OnSelectionChanged;
end;

procedure TfrxDesignerForm.CreateWorkspace;
begin
  FWorkspace:= TDesignerWorkspace.Create(Self);
  with FWorkspace do
  begin
    Parent:= ScrollBox;
    OnNotifyPosition:= Self.OnNotifyPosition;
    OnInsert:= OnInsertObject;
    OnEdit:= OnEditObject;
    OnModify:= Self.OnModify;
    OnSelectionChanged:= Self.OnSelectionChanged;
    OnTopLeftChanged:= ScrollBoxResize;
    PopupMenu:= PagePopup;
    Objects:= FObjects;
    SelectedObjects:= FSelectedObjects;
  end;

  FCodeWindow:= TfrxSyntaxMemo.Create(Self);
  with FCodeWindow do
  begin
    Parent:= CodePanel;
    Align:= alClient;
    Lines:= Report.ScriptText;
    Color:= clWindow;
    OnChangeText:= OnCodeChanged;
    OnChangePos:= OnChangePosition;
    OnDragOver:= CodeWindowDragOver;
    OnDragDrop:= CodeWindowDragDrop;
  end;
end;

procedure TfrxDesignerForm.CreateObjectsToolbar;
var
  i:Integer;
  Item:TfrxObjectItem;

  function HasButtons(Item:TfrxObjectItem):Boolean;
  var
    i:Integer;
    Item1:TfrxObjectItem;
  begin
    Result:= False;
    for i:= 0 to frxObjects.Count-1 do
    begin
      Item1:= frxObjects[i];
      if (Item1.ClassRef<>nil) and (Item1.CategoryName = Item.CategoryName) then
        Result:= True;
    end;
  end;

  procedure CreateButton(Index:Integer; Item:TfrxObjectItem);
  var
    b:TToolButton;
    s:String;
  begin
    b:= TToolButton.Create(ObjectsTB1);
    b.Style:= tbsCheck;
    b.ImageIndex:= Item.ButtonImageIndex;
    b.Grouped:= True;
    s:= Item.ButtonHint;
    if s = '' then
    begin
      if Item.ClassRef<>nil then
        s:= Item.ClassRef.GetDescription;
    end
    else
      s:= frxResources.Get(s);
    b.Hint:= s;
    b.Tag:= Index;
    if Item.ClassRef = nil then { category }
      if not HasButtons(Item) then
      begin
        b.Free;
        Exit;
      end;
    b.OnClick:= ObjectsButtonClick;

    b.Top:= 1000;
    b.Left:= 1000;
    b.Parent:= ObjectsTB1;
  end;

begin
  { add object buttons }
  for i:= 0 to frxObjects.Count-1 do
  begin
    Item:= frxObjects[i];
    if (Item.ButtonBmp<>nil) and (Item.ButtonImageIndex =-1) then
    begin
      frxResources.SetObjectImages(Item.ButtonBmp);
      Item.ButtonImageIndex:= frxResources.ObjectImages.Count-1;
    end;

    if (Item.ClassRef<>nil) and (Item.CategoryName = '') then
      CreateButton(i, Item);
  end;

  { add category buttons }
  for i:= 0 to frxObjects.Count-1 do
  begin
    Item:= frxObjects[i];
    if Item.ClassRef = nil then
      CreateButton(i, Item);
  end;
end;

procedure TfrxDesignerForm.CreateExtraToolbar;
var
  i:Integer;
  Item:TfrxWizardItem;
  b:TToolButton;
begin
  for i:= 0 to frxWizards.Count-1 do
  begin
    Item:= frxWizards[i];
    if Item.IsToolbarWizard then
    begin
      b:= TToolButton.Create(Self);
      with b do
      begin
        Tag:= i;
        if (Item.ButtonBmp<>nil) and (Item.ButtonImageIndex =-1) then
        begin
          frxResources.SetButtonImages(Item.ButtonBmp);
          Item.ButtonImageIndex:= frxResources.MainButtonImages.Count-1;
        end;
        ImageIndex:= Item.ButtonImageIndex;
        Hint:= Item.ClassRef.GetDescription;
        SetBounds(1000, 0, 22, 22);
        Parent:= ExtraToolsTB1;
      end;
      b.OnClick:= OnExtraToolClick;
    end;
  end;

  ExtraToolsTB.Height:= 27;
  ExtraToolsTB.Width:= 27;
  ExtraToolsTB.AdjustBounds;
end;

procedure TfrxDesignerForm.AttachDialogFormEvents(Attach:Boolean);
begin
  if Attach then
  begin
    FDialogForm.Parent:= Self;
    FDialogForm.OnModify:= DialogFormModify;
    FDialogForm.OnKeyDown:= DialogFormKeyDown;
    FDialogForm.OnKeyUp:= DialogFormKeyUp;
    FDialogForm.OnKeyPress:= DialogFormKeyPress;
  end
  else
    if FDialogForm<>nil then
    begin
      FWorkspace.Parent:= nil;
      FDialogForm.Parent:= nil;
      FDialogForm.Hide;
      FDialogForm.OnModify:= nil;
      FDialogForm.OnKeyDown:= nil;
      FDialogForm.OnKeyUp:= nil;
      FDialogForm.OnKeyPress:= nil;
      FDialogForm:= nil;
    end;
end;

procedure TfrxDesignerForm.ReloadReport;

  procedure EmptyReport;
  var
    p:TfrxPage;
  begin
    Report.Clear;
    p:= TfrxReportPage.Create(Report);
    p.Name:= 'Page1';
  end;

begin
  if Report.PagesCount = 0 then
    EmptyReport;
  LangCB.ItemIndex:= LangCB.Items.IndexOf(Report.ScriptLanguage);
  CodeWindow.Lines:= Report.ScriptText;
  UpdateSyntaxType;
  ReloadPages(0);
  UpdateRecentFiles(Report.FileName);
  UpdateCaption;
  UpdateStyles;
  FUndoBuffer.ClearUndo;
  Modified:= False;
end;

procedure TfrxDesignerForm.ReloadPages(Index:Integer);
var
  i:Integer;
  c:TfrxPage;
  s:String;
begin
  FDialogForm:= nil;
  Tab.Tabs.BeginUpdate;
  Tab.Tabs.Clear;
  Tab.Tabs.Add(frxResources.Get('dsCode'));

  for i:= 0 to Report.PagesCount-1 do
  begin
    c:= Report.Pages[i];
    c.IsDesigning:= True;
    if (c is TfrxReportPage) and (TfrxReportPage(c).Subreport<>nil) then
      s:= TfrxReportPage(c).Subreport.Name
    else if c.Name = '' then
      s:= frxResources.Get('dsPage')+IntToStr(i+1) else
      s:= c.Name;
    Tab.Tabs.Add(s);
  end;

  Tab.Tabs.EndUpdate;

⌨️ 快捷键说明

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