📄 frxdesgn.pas
字号:
with TextToolB do
begin
Parent := ObjectsTB1;
Tag := 1000;
Grouped := True;
ImageIndex := 29;
Style := tbsCheck;
OnClick := SelectToolBClick;
Wrap := True;
end;
ZoomToolB := TToolButton.Create(Self);
with ZoomToolB do
begin
Parent := ObjectsTB1;
Tag := 1000;
Grouped := True;
ImageIndex := 28;
Style := tbsCheck;
OnClick := SelectToolBClick;
Wrap := True;
end;
HandToolB := TToolButton.Create(Self);
with HandToolB do
begin
Parent := ObjectsTB1;
Tag := 1000;
Grouped := True;
ImageIndex := 27;
Style := tbsCheck;
OnClick := SelectToolBClick;
Wrap := True;
end;
ObjectSelectB := TToolButton.Create(Self);
with ObjectSelectB do
begin
Parent := ObjectsTB1;
Down := True;
Grouped := True;
ImageIndex := 0;
Style := tbsCheck;
OnClick := SelectToolBClick;
Wrap := True;
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 := ExtraToolsTB;
end;
b.OnClick := OnExtraToolClick;
end;
end;
ExtraToolsTB.Height := 27;
ExtraToolsTB.Width := 27;
end;
procedure TfrxDesignerForm.AttachDialogFormEvents(Attach: Boolean);
begin
if Attach then
begin
FDialogForm.Parent := GetParentForm(DockTop);
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;
var
i: Integer;
l: TList;
c: TfrxComponent;
p: TfrxPage;
isDMP: Boolean;
begin
if Report.PagesCount = 0 then
begin
isDMP := Report.DotMatrixReport;
p := TfrxDataPage.Create(Report);
p.Name := 'Data';
if isDMP then
p := TfrxDMPPage.Create(Report)
else
p := TfrxReportPage.Create(Report);
p.Name := 'Page1';
end;
if not IsPreviewDesigner then
Report.CheckDataPage;
LangCB.ItemIndex := LangCB.Items.IndexOf(Report.ScriptLanguage);
CodeWindow.Lines := Report.ScriptText;
UpdateSyntaxType;
ReloadPages(-2);
UpdateRecentFiles(Report.FileName);
UpdateCaption;
UpdateStyles;
FPictureCache.Clear;
l := Report.AllObjects;
for i := 0 to l.Count - 1 do
begin
c := l[i];
if c is TfrxPictureView then
FPictureCache.AddPicture(TfrxPictureView(c));
end;
FUndoBuffer.ClearUndo;
Modified := False;
end;
procedure TfrxDesignerForm.ReloadPages(Index: Integer);
var
i: Integer;
c: TfrxPage;
s: String;
begin
FDialogForm := nil;
FTabs.Tabs.BeginUpdate;
FTabs.Tabs.Clear;
FTabs.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 is TfrxDataPage then
s := frxResources.Get('dsData')
else if c.Name = '' then
s := frxResources.Get('dsPage') + IntToStr(i + 1) else
s := c.Name;
FTabs.Tabs.Add(s);
end;
FTabs.Tabs.EndUpdate;
if Index = -1 then
Page := nil
else if Index = -2 then
begin
for i := 0 to Report.PagesCount - 1 do
begin
c := Report.Pages[i];
if not (c is TfrxDataPage) then
begin
Page := c;
break;
end;
end;
end
else if Index < Report.PagesCount then
Page := Report.Pages[Index] else
Page := Report.Pages[0];
end;
procedure TfrxDesignerForm.ReloadObjects;
var
i: Integer;
begin
FObjects.Clear;
FSelectedObjects.Clear;
for i := 0 to FPage.AllObjects.Count - 1 do
FObjects.Add(FPage.AllObjects[i]);
FObjects.Add(Report);
FObjects.Add(FPage);
FSelectedObjects.Add(FPage);
FWorkspace.Page := FPage;
FWorkspace.EnableUpdate;
FWorkspace.AdjustBands;
FInspector.EnableUpdate;
UpdateDataTree;
FReportTree.UpdateItems;
OnSelectionChanged(Self);
end;
procedure TfrxDesignerForm.SetReportDefaults;
begin
if frxDesignerComp <> nil then
begin
Report.ScriptLanguage := frxDesignerComp.DefaultScriptLanguage;
frxEmptyCode(CodeWindow.Lines, Report.ScriptLanguage);
UpdateSyntaxType;
LangCB.ItemIndex := LangCB.Items.IndexOf(Report.ScriptLanguage);
with TfrxReportPage(Report.Pages[1]) do
begin
LeftMargin := frxDesignerComp.DefaultLeftMargin;
BottomMargin := frxDesignerComp.DefaultBottomMargin;
RightMargin := frxDesignerComp.DefaultRightMargin;
TopMargin := frxDesignerComp.DefaultTopMargin;
PaperSize := frxDesignerComp.DefaultPaperSize;
Orientation := frxDesignerComp.DefaultOrientation;
end;
end
else
begin
Report.ScriptLanguage := 'PascalScript';
frxEmptyCode(CodeWindow.Lines, Report.ScriptLanguage);
UpdateSyntaxType;
LangCB.ItemIndex := LangCB.Items.IndexOf(Report.ScriptLanguage);
TfrxReportPage(Report.Pages[1]).SetDefaults;
end;
Report.ScriptText.Text := CodeWindow.Lines.Text;
end;
procedure TfrxDesignerForm.UpdatePageDimensions;
var
h: Extended;
begin
if FPage is TfrxReportPage then
begin
with FPage as TfrxReportPage do
begin
ScrollBox.HorzScrollBar.Position := 0;
ScrollBox.VertScrollBar.Position := 0;
FWorkspace.Origin := Point(10, 10);
h := PaperHeight;
if LargeDesignHeight then
h := h * 5;
FWorkspace.SetPageDimensions(
Round(PaperWidth * 96 / 25.4),
Round(h * 96 / 25.4),
Rect(Round(LeftMargin * 96 / 25.4), Round(TopMargin * 96 / 25.4),
Round(RightMargin * 96 / 25.4), Round(BottomMargin * 96 / 25.4)));
end;
end
else if FPage is TfrxDataPage then
begin
ScrollBox.HorzScrollBar.Position := 0;
ScrollBox.VertScrollBar.Position := 0;
FWorkspace.Origin := Point(0, 0);
FWorkspace.SetPageDimensions(
Round(FPage.Width),
Round(FPage.Height),
Rect(0, 0, 0, 0));
end;
end;
procedure TfrxDesignerForm.UpdateControls;
var
c: TfrxComponent;
p1, p2, p3: PPropInfo;
Count: Integer;
FontEnabled, AlignEnabled, IsReportPage: Boolean;
Frame1Enabled, Frame2Enabled, Frame3Enabled, ObjSelected, DMPEnabled: Boolean;
s: String;
Frame: TfrxFrame;
DMPFontStyle: TfrxDMPFontStyles;
procedure SetEnabled(cAr: array of TControl; Enabled: Boolean);
var
i: Integer;
begin
for i := 0 to High(cAr) do
begin
cAr[i].Enabled := Enabled;
if (cAr[i] is TToolButton) and not Enabled then
TToolButton(cAr[i]).Down := False;
end;
end;
procedure ButtonUp(cAr: array of TToolButton);
var
i: Integer;
begin
for i := 0 to High(cAr) do
cAr[i].Down := False;
end;
begin
FUpdatingControls := True;
Count := FSelectedObjects.Count;
if Count > 0 then
begin
c := FSelectedObjects[0];
p1 := GetPropInfo(PTypeInfo(c.ClassInfo), 'Font');
p2 := GetPropInfo(PTypeInfo(c.ClassInfo), 'Frame');
p3 := GetPropInfo(PTypeInfo(c.ClassInfo), 'Color');
end
else
begin
c := nil;
p1 := nil;
p2 := nil;
p3 := nil;
end;
if Count = 1 then
begin
FontNameCB.Text := c.Font.Name;
FontSizeCB.Text := IntToStr(c.Font.Size);
BoldB.Down := fsBold in c.Font.Style;
ItalicB.Down := fsItalic in c.Font.Style;
UnderlineB.Down := fsUnderline in c.Font.Style;
if c is TfrxCustomMemoView then
with TfrxCustomMemoView(c) do
begin
TextAlignLeftB.Down := HAlign = haLeft;
TextAlignCenterB.Down := HAlign = haCenter;
TextAlignRightB.Down := HAlign = haRight;
TextAlignBlockB.Down := HAlign = haBlock;
TextAlignTopB.Down := VAlign = vaTop;
TextAlignMiddleB.Down := VAlign = vaCenter;
TextAlignBottomB.Down := VAlign = vaBottom;
if not (c is TfrxDMPMemoView) then
if Style = '' then
StyleCB.Text := StyleCB.Items[0] else
StyleCB.Text := Style;
end;
Frame := nil;
if c is TfrxView then
Frame := TfrxView(c).Frame
else if c is TfrxReportPage then
Frame := TfrxReportPage(c).Frame;
if Frame <> nil then
with Frame do
begin
FrameTopB.Down := ftTop in Typ;
FrameBottomB.Down := ftBottom in Typ;
FrameLeftB.Down := ftLeft in Typ;
FrameRightB.Down := ftRight in Typ;
ShadowB.Down := DropShadow;
FrameWidthCB.Text := FloatToStr(Width);
end;
end
else
begin
FontNameCB.Text := '';
FontSizeCB.Text := '';
FrameWidthCB.Text := '';
ButtonUp([BoldB, ItalicB, UnderlineB, TextAlignLeftB, TextAlignCenterB,
TextAlignRightB, TextAlignBlockB, TextAlignTopB, TextAlignMiddleB,
TextAlignBottomB, FrameTopB, FrameBottomB, FrameLeftB,
FrameRightB, ShadowB]);
end;
FontEnabled := (p1 <> nil) and not (c is TfrxDMPPage) and (FPage <> nil);
AlignEnabled := (c is TfrxCustomMemoView) and (FPage <> nil);
Frame1Enabled := (p2 <> nil) and not (c is TfrxLineView) and
not (c is TfrxShapeView) and not (c is TfrxDMPPage) and (FPage <> nil);
Frame2Enabled := (p2 <> nil) and not (c is TfrxDMPPage) and (FPage <> nil);
Frame3Enabled := (p3 <> nil) and not (c is TfrxDMPPage) and (FPage <> nil);
IsReportPage := FPage is TfrxReportPage;
ObjSelected := (Count <> 0) and (FPage <> nil) and (FSelectedObjects[0] <> FPage);
DMPEnabled := (c is TfrxDMPMemoView) or (c is TfrxDMPLineView) or
(c is TfrxDMPCommand) or (c is TfrxDMPPage);
SetEnabled([FontNameCB, FontSizeCB, BoldB, ItalicB, UnderlineB, FontColorB],
(FontEnabled or (Count > 1)) and not (FPage is TfrxDMPPage));
SetEnabled([FontB], (FontEnabled or DMPEnabled or (Count > 1)));
SetEnabled([TextAlignLeftB, TextAlignCenterB, TextAlignRightB,
TextAlignBlockB, TextAlignTopB, TextAlignMiddleB, TextAlignBottomB],
AlignEnabled or (Count > 1));
SetEnabled([StyleCB, HighlightB, RotateB],
(AlignEnabled or (Count > 1)) and not (FPage is TfrxDMPPage));
SetEnabled([FrameTopB, FrameBottomB, FrameLeftB, FrameRightB, FrameAllB,
FrameNoB, ShadowB], Frame1Enabled or (Count > 1));
SetEnabled([FrameColorB, FrameStyleB, FrameWidthCB],
(Frame2Enabled or (Count > 1)) and not (FPage is TfrxDMPPage));
SetEnabled([FillColorB], Frame3Enabled and not (FPage is TfrxDMPPage));
if Report.DotMatrixReport then
begin
FontB.DropDownMenu := DMPPopup;
FontB.OnClick := nil;
end
else
begin
FontB.DropDownMenu := nil;
FontB.OnClick := ToolButtonClick;
end;
DMPFontStyle := [];
if c is TfrxDMPMemoView then
DMPFontStyle := TfrxD
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -