Последняя версия DataExpress 3 beta от 1 сентября 2019 года.
Изображение Скачать | Изображение Что нового?
См. также: Энциклопедия DX | Форум на develop-soft | Песочница
ИзображениеИзображениеИзображение

Помощь в создании расширения

Evgeniy
Интересующийся
Сообщения: 63
Зарегистрирован: Чт фев 02, 2017 11:23 am
Благодарил (а): 2 раза

Помощь в создании расширения

Сообщение Evgeniy » Пн авг 05, 2019 9:45 pm

Доброго времени суток всем!
Прошу помощи в создании расширения, а именно:
Не могу понять как в расширеннии вывести форму на печать процедурой Print.
Пишу как указано в справке, а выдает ошибку (Код и ошибка на скринах).
Код1.png
Код (начало)
Код1.png (103.38 КБ) 411 просмотров

Код2.png
Код (продолжение)
Код2.png (101.22 КБ) 411 просмотров

Ошибка.png
Сама ошибка
Ошибка.png (179.63 КБ) 411 просмотров

kok80
Эксперт
Сообщения: 314
Зарегистрирован: Пн июл 02, 2018 9:45 pm
Благодарил (а): 2 раза
Поблагодарили: 22 раза

Помощь в создании расширения

Сообщение kok80 » Пн авг 05, 2019 10:21 pm

расширение в студию

Аватара пользователя
Develop-Soft
Сообщения: 963
Зарегистрирован: Вт мар 05, 2019 6:09 pm
Благодарил (а): 38 раз
Поблагодарили: 203 раза
Контактная информация:

Помощь в создании расширения

Сообщение Develop-Soft » Пн авг 05, 2019 10:42 pm

Обращение к текущей форме как "Self" в процедуре MPrint - недопустимо.
Переменная "Fm" объявлена, но не задействована.
Зачем писать напрямую имя дока. Это ж РАСШИРЕНИЕ! :)

Примерный код (пишу с телефона, могут быть косяки):

Код: Выделить всё

procedure MPrint(Sender:TObject);
var
    Fm:TdxForm;
    Mi:TMenuItem;
    MsgErr:string;
begin
Mi := TMenuItem(Sender);
Fm:=TdxForm(TComponent(Sender).Owner.Owner);
Fm.Print(Mi.Caption,'',msgerr,true);
if trim(msgerr)<>'' then
ShowPrintErrors(msgerr);
end;

Evgeniy
Интересующийся
Сообщения: 63
Зарегистрирован: Чт фев 02, 2017 11:23 am
Благодарил (а): 2 раза

Помощь в создании расширения

Сообщение Evgeniy » Вт авг 06, 2019 5:29 am

kok80 писал(а):расширение в студию

Вечером обязательно покажу. Сейчас не под рукой.

Evgeniy
Интересующийся
Сообщения: 63
Зарегистрирован: Чт фев 02, 2017 11:23 am
Благодарил (а): 2 раза

Помощь в создании расширения

Сообщение Evgeniy » Вт авг 06, 2019 5:41 am

Develop-Soft писал(а):Обращение к текущей форме как "Self" в процедуре MPrint - недопустимо.
Переменная "Fm" объявлена, но не задействована.
Зачем писать напрямую имя дока. Это ж РАСШИРЕНИЕ! :)

Примерный код (пишу с телефона, могут быть косяки):

Код: Выделить всё

procedure MPrint(Sender:TObject);
var
    Fm:TdxForm;
    Mi:TMenuItem;
    MsgErr:string;
begin
Mi := TMenuItem(Sender);
Fm:=TdxForm(TComponent(Sender).Owner.Owner);
Fm.Print(Mi.Caption,'',msgerr,true);
if trim(msgerr)<>'' then
ShowPrintErrors(msgerr);
end;

Пытался сделать не через "Self", но тоже ошибка вываливается.
Вечером попробую ваш пример.
Идея вообще в том, что бы сделать кнопку с меню для нескольких печатных форм, для которой динамически создается PopupMenu где его пункты это печатные формы. А на OnClick этих пунктов навешать процедуру обработки печати (Print), и соответственно и мена шаблонов печати это заголовки (Caption) MenuItem, как у вас в примере. Единственное меня смущает в примере, что MenuItem создается в процедуре MPrint.
Спасибо за подсказку. Буду пробовать вечером.

Аватара пользователя
Develop-Soft
Сообщения: 963
Зарегистрирован: Вт мар 05, 2019 6:09 pm
Благодарил (а): 38 раз
Поблагодарили: 203 раза
Контактная информация:

Помощь в создании расширения

Сообщение Develop-Soft » Вт авг 06, 2019 6:48 am

Пункт меню создаётся в MultiprintFrm. В MPrint к TMenuItem приводится (не создаётся) объект Sender.

Evgeniy
Интересующийся
Сообщения: 63
Зарегистрирован: Чт фев 02, 2017 11:23 am
Благодарил (а): 2 раза

Помощь в создании расширения

Сообщение Evgeniy » Вт авг 06, 2019 9:51 am

Develop-Soft писал(а):Пункт меню создаётся в MultiprintFrm. В MPrint к TMenuItem приводится (не создаётся) объект Sender.

Спасибо, понял.
Вечером попробую, ваш код.

Аватара пользователя
Develop-Soft
Сообщения: 963
Зарегистрирован: Вт мар 05, 2019 6:09 pm
Благодарил (а): 38 раз
Поблагодарили: 203 раза
Контактная информация:

Помощь в создании расширения

Сообщение Develop-Soft » Вт авг 06, 2019 10:08 am

Нате готовое расширение (проверил, работает):

Код: Выделить всё

{@action
Id=F10B79AF-F6A1-44D9-87F3-C51AB4BF51D7
Target=button
OrigName=MultiPrintFrm
Name=Выбор печатной формы
Group=Печатные формы
UI=
<ui>
<grid name="grid" caption="Список шаблонов">
<template name="tmp" caption="Шаблоны">
</grid>
<checkbox name="cb"  caption="Сохранять запись перед печатью">
</ui>
Description=Выбор печатных форм
@}

procedure MPrint(Sender:TObject);
var
    Fm:TdxForm;
    Mi:TMenuItem;
    MsgErr:string;
begin
Mi := TMenuItem(Sender);
Fm:=TdxForm(TComponent(Sender).Owner.Owner);
Fm.Print(Mi.Caption,'',msgerr,true);
if trim(msgerr)<>'' then
ShowPrintErrors(msgerr);
end;

procedure MultiPrintFrm(Grid: TVariantArray2d; SaveCb:integer);
var
  PM:TPopupMenu;
  MI:TMenuItem;
  i:integer;
begin
  if SaveCb=1 then
  if Self.State in [dsEdit,dsInsert] then
  begin
    if not Self.Validate then exit else
      begin
        Self.Post;
        Self.Edit;
      end;
  end;
  PM:=TPopupMenu.Create(Self);
for i:=0 to length(Grid)-1 do
begin
  MI:=TMenuItem.Create(PM);
  MI.Caption := Grid[i][0];
  MI.OnClick := @MPrint;
  PM.Items.Insert(i,MI);
end;
  PM.Popup;
end;

Только в следующий раз копируйте код в сообщение, ибо с картинки перебивать занимает время.

Evgeniy
Интересующийся
Сообщения: 63
Зарегистрирован: Чт фев 02, 2017 11:23 am
Благодарил (а): 2 раза

Помощь в создании расширения

Сообщение Evgeniy » Вт авг 06, 2019 2:17 pm

Очередной раз огромное спасибо Develop-Soft!
Хотелось конечно самому покопаться вечерком.

Аватара пользователя
Develop-Soft
Сообщения: 963
Зарегистрирован: Вт мар 05, 2019 6:09 pm
Благодарил (а): 38 раз
Поблагодарили: 203 раза
Контактная информация:

Помощь в создании расширения

Сообщение Develop-Soft » Вт авг 06, 2019 2:37 pm

Evgeniy писал(а):Хотелось конечно самому покопаться вечерком.

Ну так ещё непочатый край всего... А у меня просто похожий код завалялся.


Вернуться в «Разработка расширений»