Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Размещать свои элементы управления в диалоге печати

Delphi , Программа и Интерфейс , Диалоги и Фреймы

Размещать свои элементы управления в диалоге печати

Оформил: DeeCo
Автор: http://www.swissdelphicenter.ch

// Unit for TExtendedPrintDialog 

unit Unit1;

 interface

 uses
   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
   ExtDlgs, extctrls, stdctrls, CommDlg, Dlgs;

 type
   TExtendedPrintDialog = class(TPrintDialog)
   private
     fExtendedPanel: TPanel;
     fCheckBoxOne,
     fCheckBoxTwo: TCheckbox;
     fButton: TButton;
   protected
     procedure DoShow; override;
     function GetStaticRect: TRect;
     function TaskModalDialog(DialogFunc: Pointer; var DialogData): Bool;
       override;
   public
     constructor Create(AOwner: TComponent); override;
     function Execute: Boolean; override;
   end;

 implementation

 constructor TExtendedPrintDialog.Create(AOwner: TComponent);
 var
   iTop: Integer;
 begin
   inherited;
   fExtendedPanel := TPanel.Create(Self);
   with fExtendedPanel do
   begin
     Name    := 'ExtendedPanel';
     Caption := '';
     SetBounds(0, 0, 169, 200);  // (204, 5, 169, 200); 
    BevelOuter  := bvNone;
     BorderWidth := 6;
     TabOrder    := 1;
     fButton     := TButton.Create(Self);
     with fButton do
     begin
       Name    := 'SomeButton';
       Caption := '&Options';
       SetBounds(0, 10, 50, 21);
       Parent := fExtendedPanel;
     end;
     fCheckBoxOne := TCheckbox.Create(Self);
     with fCheckBoxOne do
     begin
       Name    := 'CheckboxOne';
       Caption := 'Upside-down print';
       SetBounds(fButton.Left + fButton.Width + 10, 3, 110, 21);
       fCheckBoxOne.Parent := fExtendedPanel;
     end;
     fCheckBoxTwo := TCheckbox.Create(Self);
     with fCheckBoxTwo do
     begin
       Name    := 'CheckboxTwo';
       Caption := 'Sideways print';
       SetBounds(fButton.Left + fButton.Width + 10, 23, 100, 21);
       Parent := fExtendedPanel;
     end;
   end
 end;

 procedure TExtendedPrintDialog.DoShow;
 var
   PreviewRect, StaticRect: TRect;
 begin
   { Set preview area to entire dialog }
   GetClientRect(Handle, PreviewRect);
   StaticRect := GetStaticRect;
   { Move extended area to right of static area }
   PreviewRect.Left := StaticRect.Left;
   PreviewRect.Top  := StaticRect.Bottom;
   Inc(PreviewRect.Top, 4);
   fExtendedPanel.BoundsRect   := PreviewRect;
   fExtendedPanel.ParentWindow := Handle;
   inherited DoShow;
 end;

 function TExtendedPrintDialog.Execute: Boolean;
 begin
   Template := 'DLGTEMPLATE';// this is in the extdlgs.rc 
  Result   := inherited Execute;
 end;

 function TExtendedPrintDialog.GetStaticRect: TRect;
 begin
   if Handle <> 0 then
   begin
     GetWindowRect(GetDlgItem(Handle, grp1), Result); // print range group box 
    MapWindowPoints(0, Handle, Result, 2);
   end
   else
     Result := Rect(0, 0, 0, 0)
 end;

 function TExtendedPrintDialog.TaskModalDialog(DialogFunc: Pointer;
   var DialogData): Bool;
 begin
   TPrintDlg(DialogData).Flags := TPrintDlg(DialogData).Flags or
     PD_ENABLESETUPTEMPLATE;
   TPrintDlg(DialogData).lpSetupTemplateName := Template;
   Result := inherited TaskModalDialog(DialogFunc, DialogData);
 end;

 end.

 //Example, Beispiel: 

uses
   Unit2;

 procedure TForm1.Button1Click(Sender: TObject);
 var
   PrintDialog: TExtendedPrintDialog;
 begin
   PrintDialog := TExtendedPrintDialog.Create(nil);
   if PrintDialog.Execute then
     {do soemthing}
 end;

Перевод на русский язык:

Единица Unit1 содержит класс диалогового окна TExtendedPrintDialog, который является производным от стандартного TPrintDialog. Этот пользовательский диалог добавляет дополнительные элементы к печатному диалогу, в частности, панель с кнопкой и двумя чекбоксами.

Вот разбор кода:

  • Конструктор Create(AOwner: TComponent) создает экземпляр диалога и инициализирует его свойства.
  • Процедура DoShow переопределяется для настройки расширенной панели и перемещения ее вправо от статической области. Она также задает границы расширенной панели, чтобы они соответствовали прямоугольнику просмотра.
  • Функция GetStaticRect возвращает прямоугольник для статической области (т.е., группы печатного диалога).
  • Процедура TaskModalDialog переопределяется для включения настройки шаблонов и указания имени шаблона.
  • В примере кода форма (TForm1) создает экземпляр пользовательского диалога и вызывает его метод Execute. Если выполнение успешно, она делает что-то (что не указано в этом примере).

Дополнительные элементы, добавленные к печатному диалогу:

  • Панель (fExtendedPanel) с кнопкой (fButton) и двумя чекбоксами (fCheckBoxOne и fCheckBoxTwo). Панель размещается ниже статической области (группы печатного диалога) и имеет свой прямоугольник границ.

Чтобы поместить эти элементы в другой положении, вы можете изменять координаты, используемые для задания их позиций. Например, вы можете переместить расширенную панель на верхнюю часть диалога, изменяя свойство Top прямоугольника просмотра в процедуре DoShow.

Вот обновленная версия кода с комментариями и предложениями:

constructor TExtendedPrintDialog.Create(AOwner: TComponent);
begin
  // Создать новый экземпляр пользовательского диалога печати
  inherited;

  // Создать панель для расширенных контролов
  fExtendedPanel := TPanel.Create(Self);
  with fExtendedPanel do
  begin
    Name := 'ExtendedPanel';
    Caption := '';
    SetBounds(0, 0, 169, 200); // измените эти координаты, если необходимо
    BevelOuter := bvNone;
    BorderWidth := 6;
    TabOrder := 1;

    // Создать кнопку для расширенной панели
    fButton := TButton.Create(Self);
    with fButton do
    begin
      Name := 'SomeButton';
      Caption := '&Options';
      SetBounds(0, 10, 50, 21); // измените эти координаты, если необходимо
      Parent := fExtendedPanel;
    end;

    // Создать чекбоксы для расширенной панели
    fCheckBoxOne := TCheckbox.Create(Self);
    with fCheckBoxOne do
    begin
      Name := 'CheckboxOne';
      Caption := 'Upside-down print';
      SetBounds(fButton.Left + fButton.Width + 10, 3, 110, 21); // измените эти координаты, если необходимо
      Parent := fExtendedPanel;
    end;

    fCheckBoxTwo := TCheckbox.Create(Self);
    with fCheckBoxTwo do
    begin
      Name := 'CheckboxTwo';
      Caption := 'Sideways print';
      SetBounds(fButton.Left + fButton.Width + 10, 23, 100, 21); // измените эти координаты, если необходимо
      Parent := fExtendedPanel;
    end;
  end;
end;

procedure TExtendedPrintDialog.DoShow;
var
  PreviewRect, StaticRect: TRect;
begin
  // Задать прямоугольник просмотра равным всему диалогу
  GetClientRect(Handle, PreviewRect);

  // Получить прямоугольник для статической области (группы печатного диалога)
  StaticRect := GetStaticRect;

  // Переместить расширенную панель вправо от статической области
  PreviewRect.Left := StaticRect.Right + 4; // измените это значение, если необходимо
  PreviewRect.Top := StaticRect.Bottom;
  fExtendedPanel.BoundsRect := PreviewRect;
  fExtendedPanel.ParentWindow := Handle;

  inherited DoShow;
end;

Обратите внимание, что вам может потребоваться изменение координат, используемых в процедуре DoShow и конструкторе Create, чтобы они соответствовали вашим конкретным нуждам. Кроме того, вы можете настроить внешний вид и поведение расширенной панели и ее контролов, как вам нужно.

Размещение элементов управления в диалоге печати позволяет создавать пользовательские функции для настройки параметров печати.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Диалоги и Фреймы ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-19 13:29:56
2024-11-21 11:47:27/0.0064671039581299/1