📄 qreditor.~pas
字号:
Filename := Filename;
end;
end;
procedure TQReportEditor.FormCreate(Sender: TObject);
begin
Editor := TQRCustomEditor.Create(Self);
FDesignTime := false;
with Editor do
begin
Parent := ScrollArea;
OnAddedControl := EditorAddedControl;
OnClipboardStateChange := EditorClipboardStateChange;
OnSelectControl := EditorSelectControl;
OnUnselectControl := EditorSelectControl;
Align := alClient;
end;
ControlValue.Text := '';
FontSizeCB.Text := '';
Filename := '';
ControlEditors := TList.Create;
CreateComponentButtons;
EnableAndDisable;
end;
procedure TQReportEditor.SetDesignTime(Value : boolean);
begin
FDesignTime := value;
FileTB.Enabled := not Value;
ComponentsTB.Enabled := not Value;
ControlTB.Enabled := not Value;
AttributeTB.Enabled := not Value;
end;
procedure TQReportEditor.SaveReportAs;
begin
if AskFilename(FFilename) then
begin
Editor.Save(Filename);
Filename := filename;
end;
end;
procedure TQReportEditor.ReportSettings;
begin
with TQRCompEd.Create(Application) do
try
QuickRep := TQuickRep(Editor.MainControl);
ShowModal;
finally
free;
end;
end;
procedure TQReportEditor.PrintReport;
begin
TCustomQuickRep(Editor.MainControl).Print;
end;
procedure TQReportEditor.PreviewReport;
begin
TCustomQuickRep(Editor.MainControl).Preview;
end;
procedure TQReportEditor.SetValue;
begin
with PrintableEditor do
try
Value := ControlValue.Text;
finally
Free;
end;
end;
procedure TQReportEditor.CancelValue;
begin
with PrintableEditor do
try
ControlValue.Text := Value;
finally
Free;
end;
end;
procedure TQReportEditor.SetStyle(Sender : TObject);
var
AFontStyle : TFontStyles;
begin
with TToolButton(Sender) do
begin
with PrintableEditor do
try
AFontStyle := [];
if BoldBtn.Down then include(AFontStyle, fsBold);
if ItalicBtn.Down then include(AFontStyle, fsItalic);
if UnderLnBtn.Down then include(AFontStyle, fsUnderLine);
{$ifndef QRSTANDARD}
if LeftAlBtn.Down then Alignment := taLeftJustify
else
if CenterAlBtn.Down then Alignment := taCenter
else
if RightAlBtn.Down then Alignment := taRightJustify;
{$endif}
Font.Style := AFontStyle;
finally
Free;
end;
end;
end;
procedure TQReportEditor.BtnClick(Sender: TObject);
begin
if ((Sender = NewBtn) or (Sender = NewMI)) then NewReport
else
if ((Sender = OpenBtn) or (Sender = OpenMI)) then OpenReport
else
if ((Sender = SaveBtn) or (Sender = SaveMI)) then SaveReport
else
if (Sender = SaveAsMI) then SaveReportAS
else
if ((Sender = PrintBtn) or (Sender = PrintMI)) then PrintReport
else
if ((Sender = PreviewBtn) or (Sender = PreviewMI)) then PreviewReport
else
if ((Sender = CopyBtn) or (Sender = CopyMI)) then Copy
else
if ((Sender = CutBtn) or (Sender = CutMI)) then Cut
else
if ((Sender = PasteBtn) or (Sender = PasteMI)) then Paste
else
if (Sender = ControlEditBtn) then EditControl(TQRPrintable(Editor.SelectionList[0]))
else
if (sender = ReportSetupMI) or (Sender = SettingsBtn) then ReportSettings
else
if (Sender = BoldBtn) or (Sender = ItalicBtn) or (Sender = UnderLnBtn) or
(sender = LeftAlBtn) or (Sender = CenterAlBtn) or (Sender = RightAlBtn) then
SetStyle(Sender)
else
if (Sender = ControlOkBtn) then SetValue
else
if (Sender = ControlCancelBtn) then CancelValue
else
if (Sender = SelectDataMI) or (Sender = DataSetupBtn) then SelectData;
EnableAndDisable;
end;
procedure TQReportEditor.EnableAndDisable;
procedure SetToolBars(ABar: TToolbar; Enable : boolean);
var i: integer;
begin
for i := 0 to ABar.ControlCount-1 do
ABar.Controls[i].Enabled := Enable;
end;
begin
CopyBtn.Enabled := Editor.SelectionList.Count > 0;
CopyMI.Enabled := CopyBtn.Enabled;
CutBtn.Enabled := CopyBtn.Enabled;
CutMI.Enabled := CopyBtn.Enabled;
PasteBtn.Enabled := Editor.ClipboardAvailable;
PasteMI.Enabled := PasteBtn.Enabled;
{ AlignTopBtn.Enabled := Editor.SelectionList.Count > 1;
AlignBottomBtn.Enabled := AlignTopBtn.Enabled;
AlignLeftBtn.Enabled := AlignTopBtn.Enabled;
AlignRightBtn.Enabled := AlignTopBtn.Enabled;}
ControlTB.Enabled := (Editor.SelectionList.Count = 1) and (Editor.SelectionList[0] is TQRPrintable);
AttributeTB.Enabled := Editor.SelectionList.Count > 0;
SaveMI.Enabled := Editor.MainControl <> nil;
SaveAsMI.Enabled := SaveMI.Enabled;
ReportSetupMI.Enabled := SaveMI.Enabled;
PreviewMI.Enabled := SaveMI.Enabled;
PrintMI.Enabled := SaveMI.Enabled;
SaveBtn.Enabled := SaveMI.Enabled;
PreviewBtn.Enabled := SaveMI.Enabled;
PrintBtn.Enabled := SaveMI.Enabled;
DataSetupBtn.Enabled := SaveMI.Enabled;
SelectDataMI.Enabled := SaveMI.Enabled;
SettingsBtn.Enabled := SaveMI.Enabled;
SetToolBars(ControlTB, SaveMI.Enabled);
SetToolBars(AttributeTB, SaveMI.Enabled);
SetToolBars(ComponentsTB, SaveMI.Enabled);
end;
procedure TQReportEditor.AddControlClick(Sender : TObject);
begin
with Sender as TSpeedButton do
begin
Editor.AddClass(TQRPrintableEditor(ControlEditors[Tag]).PrintableClass);
Down := True;
end;
end;
procedure TQReportEditor.CreateComponentButtons;
var
I : integer;
ResName : array[0..79] of char;
begin
for I := 0 to EditorClassList.Count - 1 do
begin
with TSpeedButton.Create(Self) do
begin
Parent := ComponentsTB;
Tag := I;
Flat := true;
with TQRPrintableClass(EditorClassList[I]).Create(nil) do
try
ControlEditors.Add(EditorClass.Create(nil));
finally
Free;
end;
with TQRPrintableEditor(ControlEditors[ControlEditors.Count - 1]) do
begin
StrPCopy(ResName, GlyphResName);
Glyph.Handle := LoadBitmap(hinstance,ResName);
Hint := ControlName;
OnClick := AddControlClick;
end;
end;
end;
end;
function TQReportEditor.EditControl(AQRPrintable : TQRPrintable) : boolean;
begin
with AQRPrintable.EditorClass.Create(AQRPrintable) do
try
Result := ShowEditor
finally
Free;
end;
end;
procedure TQReportEditor.EditorAddedControl(Sender: TObject);
begin
if Sender is TQRPrintable then
if not EditControl(TQRPrintable(Sender)) then Editor.DeleteSelected;
end;
procedure TQReportEditor.ShowEditor;
begin
ShowModal;
end;
procedure TQReportEditor.FormActivate(Sender: TObject);
begin
if FontNameCB.Items.Count = 0 then
FontNameCB.Items := GetFonts;
FontNameCB.Sorted := True;
if FontSizeCB.Items.Count = 0 then
PopulateFontSizeCombo(FontSizeCB);
end;
procedure TQReportEditor.SelectData;
begin
with TQRDataSetup.Create(Application) do
try
QuickRep := TQuickRep(Editor.MainControl);
ReportEditor := Editor;
ShowModal;
finally
Free;
end;
end;
procedure TQReportEditor.FontNameCBChange(Sender: TObject);
begin
if (Editor.SelectionList.Count > 0) and (Editor.SelectionList[0] is TQRPrintable) then
with PrintableEditor do
try
Font.Name := FontNameCB.Text;
try
Font.Size := StrToInt(FontSizeCB.Text);
except
FontSizeCB.Text := IntToStr(Font.Size);
end;
finally
Free;
end;
end;
function TQReportEditor.GetFormEditor: TQRCustomEditor;
begin
Result := Editor;
end;
procedure RegisterEditorControl(APrintableClass : TQRPrintableClass);
begin
EditorClassList.Add(APrintableClass);
RegisterClass(APrintableClass);
end;
procedure TQReportEditor.ControlValueKeyPress(Sender: TObject; var Key: Char);
begin
if Key = #13 then BtnClick(ControlOkBtn);
end;
constructor TQREditor.Create(AOwner : TComponent);
begin
inherited Create(AOwner);
QReportEditorForm := TQReportEditor.Create(nil);
Width := 660;
Height := 300;
end;
destructor TQREditor.Destroy;
begin
ShowMenu := false;
QReportEditorForm.MainPanel.Parent := QReportEditorForm;
QREportEditorForm.Free;
inherited Destroy;
end;
procedure TQREditor.Copy;
begin
QReportEditorForm.Copy;
end;
procedure TQREditor.Cut;
begin
QReportEditorForm.Cut;
end;
function TQREditor.GetShowStatusLine: boolean;
begin
Result := QReportEditorForm.StatusBar.Visible;
end;
procedure TQREditor.NewReport;
begin
QReportEditorForm.NewReport;
end;
procedure TQREditor.OpenReport;
begin
QReportEditorForm.OpenReport;
end;
procedure TQREditor.Paste;
begin
QReportEditorForm.Paste;
end;
procedure TQREditor.PreviewReport;
begin
QReportEditorForm.PreviewReport;
end;
procedure TQREditor.PrintReport;
begin
QReportEditorForm.PrintReport;
end;
procedure TQREditor.ReportSettings;
begin
QReportEditorForm.ReportSettings;
end;
procedure TQREditor.SaveReport;
begin
QReportEditorForm.SaveReport;
end;
procedure TQREditor.SaveReportAs;
begin
QReportEditorForm.SaveReportAs;
end;
procedure TQREditor.SelectData;
begin
QReportEditorForm.SelectData;
end;
procedure TQREditor.SetFilename(const Value: string);
begin
QReportEditorForm.Filename := value;
end;
function TQREditor.GetFilename : string;
begin
Result := QReportEditorForm.Filename;
end;
procedure TQREditor.SetParent(AControl : TWinControl);
begin
inherited SetParent(AControl);
if (not (csDestroying in ComponentState)) and (AControl <> nil) then
begin
QReportEditorForm.MainPanel.Parent := Self;
QReportEditorForm.DesignTime := (csDesigning in ComponentState);
if QReportEditorForm.Owner = nil then
Self.InsertComponent(QReportEditorForm);
end;
end;
procedure TQREditor.SetShowMenu(Value: boolean);
begin
FShowMenu := Value;
if not ((csCreating in ControlState) or (csReading in ComponentState)) then
if (Owner is TCustomForm) then
begin
if ShowMenu then
begin
QReportEditorForm.Menu := nil;
TCustomForm(Owner).Menu := QReportEditorForm.MainMenu
end else
if TCustomForm(Owner).Menu = QReportEditorForm.MainMenu then
TCustomForm(Owner).Menu := nil;
end;
end;
procedure TQREditor.SetShowStatusLine(Value: boolean);
begin
QReportEditorForm.StatusBar.Visible := Value;
end;
function TQREditor.GetReportEditor: TQReportEditor;
begin
Result := QReportEditorForm;
end;
procedure TQREditor.Show;
begin
Visible := true;
end;
procedure TQREditor.ShowEditor;
begin
Visible := true;
end;
procedure TQREditor.OpenReportFile(AFilename : string);
var
I : integer;
ADS : TDatasource;
begin
ADS := nil;
with QReportEditorForm do
begin
FormEditor.Load(AFilename);
Filename := AFilename;
if FormEditor.MainControl is TQuickRep then
begin
for I := 0 to FormEditor.MainControl.ComponentCount - 1 do
if FormEditor.MainControl.Components[I] is TDataSource then
ADS := TDataSource(FormEditor.MainControl.Components[I]);
for I := 0 to FormEditor.MainControl.ControlCount - 1 do
if FormEditor.MainControl.Controls[I] is TQRSubDetail then
TTable(TQRSubDetail(FormEditor.MainControl.Controls[I]).DataSet).MasterSource := ADS;
end;
EnableAndDisable;
end;
end;
initialization
EditorClassList := TList.Create;
RegisterEditorControl(TQRLabel);
RegisterEditorControl(TQRExpr);
RegisterQRWizard(TQRPlainWizard);
RegisterQRWizard(TQRListWizard);
// RegisterClass(TQRSubDetail);
RegisterClass(TTable);
RegisterClass(TQuery);
RegisterClass(TDatasource);
finalization
while EditorClassList.Count > 0 do
EditorClassList.Delete(0);
EditorClassList.Free;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -