📄 frxdesgn.pas
字号:
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 + -