📄 frxdesgn.pas
字号:
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
FPictureCache := TfrxPictureCache.Create;
FScale := 1;
ScrollBoxPanel.Align := alClient;
CodePanel.Align := alClient;
if Screen.PixelsPerInch > 96 then
begin
StatusBar.Panels[0].Width := 100;
StatusBar.Panels[1].Width := 280;
StatusBar.Height := 24;
end;
fsGetLanguageList(LangCB.Items);
frxAddCodeRes;
FUndoBuffer := TfrxUndoBuffer.Create;
FUndoBuffer.PictureCache := FPictureCache;
FClipboard := TfrxClipboard.Create(Self);
FClipboard.PictureCache := FPictureCache;
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];
if FOldDesignerComp <> nil then
frxDesignerComp.Restrictions := frxDesignerComp.Restrictions + FOldDesignerComp.Restrictions;
ObjectBandB.Enabled := False;
end;
Report.SelectPrinter;
FontNameCB.PopulateList;
{$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);
ReportOptionsCmd.Enabled := CheckOp(drDontChangeReportOptions);
ReportStylesCmd.Enabled := CheckOp(drDontChangeReportOptions);
ReportDataCmd.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;
FPictureCache.Free;
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;
StandardTB.Images := MainImages;
StandardTB.DisabledImages := DisabledImages;
TextTB.Images := MainImages;
TextTB.DisabledImages := DisabledImages;
FrameTB.Images := MainImages;
FrameTB.DisabledImages := DisabledImages;
AlignTB.Images := MainImages;
AlignTB.DisabledImages := DisabledImages;
ExtraToolsTB.Images := MainImages;
ExtraToolsTB.DisabledImages := DisabledImages;
ObjectsTB1.Images := ObjectImages;
ObjectsPopup.Images := ObjectImages;
MainMenu.Images := MainImages;
PagePopup.Images := MainImages;
TabPopup.Images := MainImages;
ActionList.Images := MainImages;
BandsPopup.Images := MainImages;
{$IFDEF Delphi10}
if (frxDesignerComp <> nil) and (frxDesignerComp.Gradient) then
begin
StandardTB.DrawingStyle := ComCtrls.dsGradient;
StandardTB.GradientStartColor := frxDesignerComp.GradientStart;
StandardTB.GradientEndColor := frxDesignerComp.GradientEnd;
TextTB.DrawingStyle := ComCtrls.dsGradient;
TextTB.GradientStartColor := frxDesignerComp.GradientStart;
TextTB.GradientEndColor := frxDesignerComp.GradientEnd;
FrameTB.DrawingStyle := ComCtrls.dsGradient;
FrameTB.GradientStartColor := frxDesignerComp.GradientStart;
FrameTB.GradientEndColor := frxDesignerComp.GradientEnd;
AlignTB.DrawingStyle := ComCtrls.dsGradient;
AlignTB.GradientStartColor := frxDesignerComp.GradientStart;
AlignTB.GradientEndColor := frxDesignerComp.GradientEnd;
ExtraToolsTB.DrawingStyle := ComCtrls.dsGradient;
ExtraToolsTB.GradientStartColor := frxDesignerComp.GradientStart;
ExtraToolsTB.GradientEndColor := frxDesignerComp.GradientEnd;
ObjectsTB1.DrawingStyle := ComCtrls.dsGradient;
ObjectsTB1.GradientStartColor := frxDesignerComp.GradientStart;
ObjectsTB1.GradientEndColor := frxDesignerComp.GradientEnd;
DockTop.DrawingStyle := dsGradient;
DockTop.GradientStartColor := frxDesignerComp.GradientStart;
DockTop.GradientEndColor := frxDesignerComp.GradientEnd;
DockBottom.DrawingStyle := dsGradient;
DockBottom.GradientStartColor := frxDesignerComp.GradientStart;
DockBottom.GradientEndColor := frxDesignerComp.GradientEnd;
end;
{$ENDIF}
{$IFDEF Delphi11}
StandardTB.Transparent := False;
AlignTB.Transparent := False;
TextTB.Transparent := False;
FrameTB.Transparent := False;
ExtraToolsTB.Transparent := False;
ObjectsTB1.Transparent := False;
{$ENDIF}
end;
procedure TfrxDesignerForm.CreateToolWindows;
begin
FInspector := TfrxObjectInspector.Create(Self);
with FInspector do
begin
OnModify := Self.OnModify;
OnSelectionChanged := Self.OnSelectionChanged;
OnStartDock := OnDisableDock;
OnEndDock := OnEnableDock;
SelectedObjects := FSelectedObjects;
end;
FDataTree := TfrxDataTreeForm.Create(Self);
with FDataTree do
begin
Report := Self.Report;
CBPanel.Visible := True;
OnDblClick := OnDataTreeDblClick;
OnStartDock := OnDisableDock;
OnEndDock := OnEnableDock;
end;
UpdateDataTree;
FReportTree := TfrxReportTreeForm.Create(Self);
FReportTree.OnSelectionChanged := OnSelectionChanged;
FReportTree.OnStartDock := OnDisableDock;
FReportTree.OnEndDock := OnEnableDock;
FWatchList := TfrxWatchForm.Create(Self);
FWatchList.Script := Report.Script;
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;
{$IFDEF UseTabset}
BevelKind := bkFlat;
{$ELSE}
BorderStyle := bsSingle;
{$ENDIF}
Lines := Report.ScriptText;
Color := clWindow;
OnChangeText := OnCodeChanged;
OnChangePos := OnChangePosition;
OnDragOver := CodeWindowDragOver;
OnDragDrop := CodeWindowDragDrop;
OnCodeCompletion := Self.OnCodeCompletion;
end;
{$IFDEF UseTabset}
FTabs := TTabSet.Create(Self);
FTabs.ShrinkToFit := True;
FTabs.Style := tsSoftTabs;
FTabs.TabPosition := tpTop;
FTabs.OnClick := TabChange;
FTabs.OnChange := TabSetChange;
{$ELSE}
FTabs := TTabControl.Create(Self);
FTabs.OnChange := TabChange;
FTabs.OnChanging := TabChanging;
{$ENDIF}
FTabs.OnDragDrop := TabDragDrop;
FTabs.OnDragOver := TabDragOver;
FTabs.OnMouseDown := TabMouseDown;
FTabs.OnMouseMove := TabMouseMove;
FTabs.OnMouseUp := TabMouseUp;
FTabs.Parent := TabPanel;
FTabs.Align := alTop;
{$IFDEF UseTabset}
FTabs.Height := 22;
Panel1.SetBounds(0, FTabs.Height, 2000, 2);
{$ELSE}
if Screen.PixelsPerInch > 96 then
FTabs.Height := 25
else
FTabs.Height := 21;
Panel1.BringToFront;
Panel1.SetBounds(0, FTabs.Height, 2000, 2);
FTabs.Height := FTabs.Height + 2;
{$ENDIF}
end;
procedure TfrxDesignerForm.CreateObjectsToolbar;
var
i: Integer;
ObjCount: 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.Parent := 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.Wrap := True;
{$IFDEF FR_LITE}
if Item.CategoryName = 'Other' then
begin
b.Enabled := False;
b.Hint := b.Hint + #13#10 + 'This feature is not available in FreeReport';
end;
{$ENDIF}
end;
begin
{ add category buttons }
ObjCount := frxObjects.Count - 1;
for i := ObjCount downto 0 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 then
CreateButton(i, Item);
end;
{ add object buttons }
for i := ObjCount downto 0 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;
ObjectBandB := TToolButton.Create(Self);
with ObjectBandB do
begin
Parent := ObjectsTB1;
Tag := 1000;
Grouped := True;
ImageIndex := 1;
Style := tbsCheck;
OnClick := ObjectBandBClick;
Wrap := True;
end;
FormatToolB := TToolButton.Create(Self);
with FormatToolB do
begin
Parent := ObjectsTB1;
Tag := 1000;
Grouped := True;
ImageIndex := 30;
Style := tbsCheck;
OnClick := SelectToolBClick;
Wrap := True;
end;
TextToolB := TToolButton.Create(Self);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -