⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 qreditor.~pas

📁 delphi7报表打印控件源码 可以设计报表
💻 ~PAS
📖 第 1 页 / 共 4 页
字号:
    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 + -