📄 frxdesgn.pas
字号:
begin
if Enable then
fStyle := HWND_TOPMOST
else
fStyle := HWND_NOTOPMOST;
SetFormStyle(FReportTree);
SetFormStyle(FDataTree);
SetFormStyle(FInspector);
SetFormStyle(StandardTB);
SetFormStyle(TextTB);
SetFormStyle(FrameTB);
SetFormStyle(AlignTB);
SetFormStyle(ExtraToolsTB);
end;
procedure TfrxDesignerForm.NormalizeTopmosts;
begin
DoTopmosts(False);
end;
procedure TfrxDesignerForm.RestoreTopmosts;
begin
DoTopmosts(True);
end;
procedure TfrxDesignerForm.WMEnable(var Message: TMessage);
begin
inherited;
{ workaround for ShowModal bug. If form with fsStayOnTop style is visible
before ShowModal call, it will be topmost }
if Message.WParam <> 0 then
RestoreTopmosts
else
NormalizeTopmosts;
end;
procedure TfrxDesignerForm.WMActivateApp(var Message: TWMActivateApp);
begin
inherited;
if Message.Active then
RestoreTopmosts
else
NormalizeTopmosts;
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;
end;
procedure TfrxDesignerForm.SetPage(const Value: TfrxPage);
begin
inherited;
FTabs.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 if FPage is TfrxDialogPage then
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;
if FDialogForm <> nil then
with FDialogForm do
begin
Position := poDesigned;
BorderStyle := bsSizeable;
AttachDialogFormEvents(True);
Show;
end;
end
else if FPage is TfrxDataPage then
begin
Units := duPixels;
with FWorkspace do
begin
Parent := ScrollBox;
Align := alNone;
Color := FWorkspaceColor;
Scale := 1;
GridType := gtNone;
GridX := FGridSize4;
GridY := FGridSize4;
end;
UpdatePageDimensions;
if Visible then
ScrollBox.SetFocus;
end
else
begin
Report.Errors.Add('Page object is not page');
end;
ReloadObjects;
RestorePagePosition;
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;
ShowRulersCmd.Checked := FShowRulers;
end;
procedure TfrxDesignerForm.SetShowGuides(const Value: Boolean);
begin
FShowGuides := Value;
TDesignerWorkspace(FWorkspace).ShowGuides := FShowGuides;
ShowGuidesCmd.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
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];
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;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -