Страница 1 из 2

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

Добавлено: 19 авг 2011, 19:06
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 засада...

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

Добавлено: 20 авг 2011, 21:33
m0p3e
Можно вставить рисунок в стандартную через VBcript.
Но потребуется докомпиляция фейса формирующего поток. Нужет примерчик?

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

Добавлено: 20 авг 2011, 22:23
Vik
А в чем проблема сохранить рисунок в мемо-поле и вывести его в форму?

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

Добавлено: 21 авг 2011, 09:32
edward_K
посмотрите через консоль управления - компоненты есть ли форма в вашем ресурсе. Скорей всего нет.

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

Добавлено: 22 авг 2011, 11:17
Masygreen
m0p3e писал(а):Можно вставить рисунок в стандартную через VBcript.
Но потребуется докомпиляция фейса формирующего поток. Нужет примерчик?
нет нельзя это RTF, или можно ? докомпилировать поток не хочется ... я хотел InsFoto испльзовать..

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

Добавлено: 22 авг 2011, 11:18
Masygreen
Vik писал(а):А в чем проблема сохранить рисунок в мемо-поле и вывести его в форму?
интересный вариант - а для 7.12 RTF есть примерчик?

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

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

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

#make "form_PrinDogForm.vip"
#make "interface.vip"
#make "Dogovor.rtf"

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

Добавлено: 22 авг 2011, 11:53
Masygreen
- вставил каринку в шапку

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

Добавлено: 22 авг 2011, 12:19
Masygreen
думал связано с LinkForm, переделал запуск интерфейса на ARD - тоже самое :(

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

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

На 7.12 ваш проект не проверял, ее давно нет под рукой. На 8.1 всё компилируется и работает.

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

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

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

3) и да .. задача внезапная :) я сам 100 лет под 7 не писал ...

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

Добавлено: 22 авг 2011, 12:56
Masygreen
KATZ писал(а):На 7.12 ваш проект не проверял, ее давно нет под рукой. На 8.1 всё компилируется и работает.
интересная идея! собрал на 8.10 - абсолютно аналогичная ошибка... :( ... может надо обязательно для своей .form - .linkform делать ?

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

Добавлено: 22 авг 2011, 12:57
KATZ
Masygreen писал(а):она и должна быть .hide - она же вызывается из LinkForm в которой ей формируются параметры, временные таблицы и прочее, и естественно не хочу её видеть, а только явно вызывать
Она вызывается из интерфейса, который, в свою очередь, вызывается из линкформы. У вас в исходнике атрибута .hide нет, и это правильно. Если его указать, то как раз и получите "Видимых отчетов нет" на 1-ой вкладке. Для того, чтобы не отображалось окно выбора отчетов, есть NoDialog.

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

Добавлено: 22 авг 2011, 13:05
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

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

Добавлено: 22 авг 2011, 13:28
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('');