📄 frxdesgn.pas
字号:
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;
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 }
for i := frxObjects.Count - 1 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 := frxObjects.Count - 1 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);
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;
FSelectedObj
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -