Своя Form через LinkForm...

Программирование на Атлантисе (VIP, FCOM, ARD), FastReport

Модераторы: m0p3e, edward_K, Модераторы

Masygreen
Местный житель
Сообщения: 1089
Зарегистрирован: 04 сен 2008, 11:27
Откуда: Москва
Контактная информация:

Своя Form через LinkForm...

Сообщение Masygreen »

Внезапно Галактика 7.12, повторяется на 8.10
Необходимо воткнуть в присоединенную форму рисунок...
Идея - в саму LinkForm воткнуть рисунок нельзя т.к. файл rtf будет заблокирован, выход вызвать из LinkForm свою Form.
Что делаю

1) LinkForm LF_Dogovor.rtf

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

.linkform ‘LF_Dogovor_RTF’ prototype is ‘Dogprn2’
.group ‘Продажа’
.nameinlist ‘Договор – вариант своего потока’
.f ‘nul’
.begin
RunInterface(‘Int_Dogovor_RTF’, comp(Nrecд_с));
end.
.{Checkenter doggroup
.}
.{Checkenter spec
.}
.endform
2)интерфейс формирует поток и вызывает форму Int_Dogovor_RTF.vip

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

interface Int_Dogovor_RTF;
create view
var 
 pi_nrec:comp;
from dogovor where (( pi_nrec == dogovor.nrec));

parameters 
 pi_nrec;

form F_PrinDog_RTF('F_PrinDog_RTF.out','F_PrinDog_RTF');

HandleEvent
cmInit:
 { 
  F_PrinDog_RTF.write('Номер договора');
  F_PrinDog_RTF.write(dogovor.nodoc);

  if (not F_PrinDog_RTF.Error)
   F_PrinDog_RTF.ShowFile('')
  else
   F_PrinDog_RTF.AbortForm;

  abort;
 };// cmInit
end;// HandleEvent
end.
3) форма F_PrinDog_RTF.vip

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

.form F_PrinDog_RTF
.hide
.fields
UNCName:string
UNCNoDoc:string
.endfields
Заголовок основной формы
^^
.endform
4)prj.prj

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

#make "F_PrinDog_RTF.vip"
#make "Int_Dogovor_RTF.vip"
#make "LF_Dogovor.rtf"
получаю окно с выбором отчетов (как по Ctr+P) - с предупреждением Видимых отчетов нет!
Изображение
че делаю не так? чую с LinkForm засада...
Последний раз редактировалось Masygreen 22 авг 2011, 12:55, всего редактировалось 4 раза.
Время ведет!
m0p3e
Местный житель
Сообщения: 1386
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Москва

Re: Своя Form через LinkForm...

Сообщение m0p3e »

Можно вставить рисунок в стандартную через VBcript.
Но потребуется докомпиляция фейса формирующего поток. Нужет примерчик?
Vik
Местный житель
Сообщения: 370
Зарегистрирован: 28 сен 2006, 15:43
Откуда: Санкт-Петербург
Контактная информация:

Re: Своя Form через LinkForm...

Сообщение Vik »

А в чем проблема сохранить рисунок в мемо-поле и вывести его в форму?
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5187
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Re: Своя Form через LinkForm...

Сообщение edward_K »

посмотрите через консоль управления - компоненты есть ли форма в вашем ресурсе. Скорей всего нет.
Masygreen
Местный житель
Сообщения: 1089
Зарегистрирован: 04 сен 2008, 11:27
Откуда: Москва
Контактная информация:

Re: Своя Form через LinkForm...

Сообщение Masygreen »

m0p3e писал(а):Можно вставить рисунок в стандартную через VBcript.
Но потребуется докомпиляция фейса формирующего поток. Нужет примерчик?
нет нельзя это RTF, или можно ? докомпилировать поток не хочется ... я хотел InsFoto испльзовать..
Последний раз редактировалось Masygreen 22 авг 2011, 11:25, всего редактировалось 1 раз.
Время ведет!
Masygreen
Местный житель
Сообщения: 1089
Зарегистрирован: 04 сен 2008, 11:27
Откуда: Москва
Контактная информация:

Re: Своя Form через LinkForm...

Сообщение Masygreen »

Vik писал(а):А в чем проблема сохранить рисунок в мемо-поле и вывести его в форму?
интересный вариант - а для 7.12 RTF есть примерчик?
Время ведет!
Masygreen
Местный житель
Сообщения: 1089
Зарегистрирован: 04 сен 2008, 11:27
Откуда: Москва
Контактная информация:

Re: Своя Form через LinkForm...

Сообщение Masygreen »

edward_K писал(а):посмотрите через консоль управления - компоненты есть ли форма в вашем ресурсе. Скорей всего нет.
форму видно и без реестра .. на вкладке редактирования форм :( все компилится в один ресурс
все файлы приведены целиком - вот проектник ...

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

#make "form_PrinDogForm.vip"
#make "interface.vip"
#make "Dogovor.rtf"
Время ведет!
Masygreen
Местный житель
Сообщения: 1089
Зарегистрирован: 04 сен 2008, 11:27
Откуда: Москва
Контактная информация:

Re: Своя Form через LinkForm...

Сообщение Masygreen »

- вставил каринку в шапку
Последний раз редактировалось Masygreen 22 авг 2011, 12:21, всего редактировалось 2 раза.
Время ведет!
Masygreen
Местный житель
Сообщения: 1089
Зарегистрирован: 04 сен 2008, 11:27
Откуда: Москва
Контактная информация:

Re: Своя Form через LinkForm...

Сообщение Masygreen »

думал связано с LinkForm, переделал запуск интерфейса на ARD - тоже самое :(
Время ведет!
KATZ
Местный житель
Сообщения: 473
Зарегистрирован: 29 мар 2005, 17:49

Re: Своя Form через LinkForm...

Сообщение KATZ »

1. Попробуйте DSK почистить. Если прототип когда-то был с атрибутом .hide, то он мог в DSK запомниться.
2. Смотрю, у вас в проекте только *.VIP и *.RTF, а где *.FRM? Не стоит давать расширение RTF файлу, который на самом деле не RTF, компилятор может себя неправильно повести.

На 7.12 ваш проект не проверял, ее давно нет под рукой. На 8.1 всё компилируется и работает.
Masygreen
Местный житель
Сообщения: 1089
Зарегистрирован: 04 сен 2008, 11:27
Откуда: Москва
Контактная информация:

Re: Своя Form через LinkForm...

Сообщение Masygreen »

KATZ писал(а):1. Попробуйте DSK почистить. Если прототип когда-то был с атрибутом .hide, то он мог в DSK запомниться.
2. Смотрю, у вас в проекте только *.VIP и *.RTF, а где *.FRM? Не стоит давать расширение RTF файлу, который на самом деле не RTF, компилятор может себя неправильно повести.

На 7.12 ваш проект не проверял, ее давно нет под рукой. На 8.1 всё компилируется и работает.
1) она и должна быть .hide - она же вызывается из LinkForm в которой ей формируются параметры, временные таблицы и прочее, и естественно не хочу её видеть, а только явно вызывать
2) prj верный .. поправил заголовок

3) и да .. задача внезапная :) я сам 100 лет под 7 не писал ...
Время ведет!
Masygreen
Местный житель
Сообщения: 1089
Зарегистрирован: 04 сен 2008, 11:27
Откуда: Москва
Контактная информация:

Re: Своя Form через LinkForm...

Сообщение Masygreen »

KATZ писал(а):На 7.12 ваш проект не проверял, ее давно нет под рукой. На 8.1 всё компилируется и работает.
интересная идея! собрал на 8.10 - абсолютно аналогичная ошибка... :( ... может надо обязательно для своей .form - .linkform делать ?
Последний раз редактировалось Masygreen 22 авг 2011, 12:57, всего редактировалось 1 раз.
Время ведет!
KATZ
Местный житель
Сообщения: 473
Зарегистрирован: 29 мар 2005, 17:49

Re: Своя Form через LinkForm...

Сообщение KATZ »

Masygreen писал(а):она и должна быть .hide - она же вызывается из LinkForm в которой ей формируются параметры, временные таблицы и прочее, и естественно не хочу её видеть, а только явно вызывать
Она вызывается из интерфейса, который, в свою очередь, вызывается из линкформы. У вас в исходнике атрибута .hide нет, и это правильно. Если его указать, то как раз и получите "Видимых отчетов нет" на 1-ой вкладке. Для того, чтобы не отображалось окно выбора отчетов, есть NoDialog.
m0p3e
Местный житель
Сообщения: 1386
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Москва

Re: Своя Form через LinkForm...

Сообщение m0p3e »

Masygreen писал(а):
m0p3e писал(а):Можно вставить рисунок в стандартную через VBcript.
Но потребуется докомпиляция фейса формирующего поток. Нужет примерчик?
нет нельзя это RTF, или можно ? докомпилировать поток не хочется ... я хотел InsFoto испльзовать..
Без докомпиляции не получится, т.к. rtf-а в момент формирования еще нет по сути. InsFoto по той же причине не подойдет.
Распишу подробнее попозже, но идея в следующем. Форма выгружает memo. В докомпиляция проверяет наличие файла (из memo) и запускает vbs вставляющий картинку. Формирование vbs:

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

Public Procedure InsertFoto ( c : comp; f : string; h, t, l : double ); //c -Persons.nrec; f-имя формы (в самой форме необходимо его задать жестко: .f ‘MyForm.rtf’); h,t,l - аналог из InsFoto
{
 var FileName : string;
 If GetFirst Appendix Where (( c   == Appendix.Person
                           and 1   == Appendix.ObjBlock
                           and 200 == Appendix.ObjType
                            )) = tsOk
  {
   FileName := GetStringParameter ( 'Files', 'OutputFilesDirectory', 0 ) + f;
   ExportMemoToFile ( Appendix.Contents, FileName + '.bmp', false );
   If FileExist ( FileName + '.vbs' )
     DeleteFile ( FileName + '.vbs' );
   LogStrToFile ( FileName + '.vbs', 'Set oWord=GetObject(,"Word.Application")' );
   LogStrToFile ( FileName + '.vbs', 'If not (oWord Is Nothing) then' );
   LogStrToFile ( FileName + '.vbs', ' oWord.Application.ScreenUpdating=false' );
   LogStrToFile ( FileName + '.vbs', ' Set oDoc=oWord.documents.Open("' + FileName + '.rtf")' );
   LogStrToFile ( FileName + '.vbs', ' If not (oDoc Is Nothing) then' );
   LogStrToFile ( FileName + '.vbs', '  oDoc.Shapes.AddPicture("' + FileName + '.bmp")' );
   LogStrToFile ( FileName + '.vbs', '  oDoc.Shapes.Item(oDoc.Shapes.count).select' );
   LogStrToFile ( FileName + '.vbs', '  oWord.Selection.ShapeRange.Height = ' + string ( h, 0, 2 ) + '*(28.36)' );
   LogStrToFile ( FileName + '.vbs', '  oWord.Selection.ShapeRange.Top = ' + string ( t, 0, 2 ) + '*(28.36)' );
   LogStrToFile ( FileName + '.vbs', '  oWord.Selection.ShapeRange.left = ' + string ( l, 0, 2 ) + '*(28.36)' );
   LogStrToFile ( FileName + '.vbs', '  oWord.Selection.ShapeRange.WrapFormat.Type=3' );
   LogStrToFile ( FileName + '.vbs', '  oWord.Selection.Collapse' );
   LogStrToFile ( FileName + '.vbs', '  Set oDoc=nothing' );
   LogStrToFile ( FileName + '.vbs', ' End If' );
   LogStrToFile ( FileName + '.vbs', ' oWord.Application.ScreenUpdating=true' );
   LogStrToFile ( FileName + '.vbs', 'Set oWord=nothing' );
   LogStrToFile ( FileName + '.vbs', 'End If' );
  };
};
Докомпиляция:

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

cmInit :
 {
  inherited::handleevent ( cmInit );

  var FileName : string;
  FileName := GetStringParameter ( 'Files', 'OutputFilesDirectory', 0 ) + 'MyForm.vbs';
  If FileExist ( FileName )
   {
    ExecProgram ( 'start', FileName, 'Добавление картинки...', 0, 0 );
    DeleteFile ( FileName )
   }
  Abort;
 }; //cmInit
Masygreen
Местный житель
Сообщения: 1089
Зарегистрирован: 04 сен 2008, 11:27
Откуда: Москва
Контактная информация:

Re: Своя Form через LinkForm...

Сообщение Masygreen »

чего то я запутался .. не получается у меня по вашему :(
что то еще упускаю
изменил .form (закоментарил hide + дал .nameinlist) - в такой комбинации ошибки типа 'нет форм для отображения' уже нет ...

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

.form F_PrinDog_RTF
.nameinlist 'Свой поток prototype'
!.hide
.fields
UNCName:string
UNCNoDoc:string
.endfields
^^
.endform   
Но диалог выбора так и остался ... хотя NoDialog я указал .. может не там ?

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

 F_PrinDog_RTF.NoDialog;
  if (not F_PrinDog_RTF.Error)
  {
   F_PrinDog_RTF.NoDialog;
   F_PrinDog_RTF.ShowFile('');  
Время ведет!
Ответить