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

CloseInterface(0) не закрывает интерфейс

Добавлено: 29 янв 2009, 11:25
RAJAH
Доброго времени суток!
Кто-нибудь сталкивался? Когда началось - не знаю, недавно патчи декабрьские поставили, может, из-за них. А как теперь закрывать?

Добавлено: 30 янв 2009, 09:21
RAJAH
Народ, помогите, горю! Не закрывает даже простейшие фейсы, например:

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

interface vrem
create view as select * from grnal;
browse www
  fields
    grnal.nrec;
end;

handleevent
  cminit:
  {
     closeinterface(0);
  }
end;
end.

Добавлено: 30 янв 2009, 10:55
Алексей
Хм. не замечал, у меня вроде всё закрывает...
а если попробовать
CloseInterface(cmDefault);

Добавлено: 30 янв 2009, 11:57
RAJAH
Да по-разному пробовал: и CmOK, и CmDefault, и CmCancel... Тут покопался и нашёл http://www.tyumbit.ru/gal_forum/viewtop ... 759bdc4428 - только так закрывается. А почему по-старому не идёт - не знаю. Может, глюк какой...

Добавлено: 30 янв 2009, 16:07
RAJAH
Теперь другая проблема - необработанное исключение и ошибка загрузки объекта:

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

#define ComponentVersion
#include AdrFunc.vih
#include AdrFunc.var

interface AdresPoluchit, AlwaysReturn
var
  iaddress: AddressFunc;
  adres: string;
  persnrec: comp;

create view as select * from grnal;

parameters
  adres, persnrec;

browse www
  fields
    grnal.nrec;
end;

handleevent
  cminit:
  {
     adres:=iaddress.GetFullAddressInd(persnrec);
     closeinterface(0);
     abort;
     exit;
  }
end;

#undef ComponentVersion
end.
Раньше такое при отсутствии #define выскакивало. А теперь что?

Добавлено: 02 фев 2009, 06:41
Алексей
Сделайте переменную типа VipInterface и после неё напишите new - это автоинициализирует ее.

Добавлено: 05 фев 2009, 10:56
RAJAH
Сделал , как научили. Ошибка не выскакивает, но переменная adres всё равно пустая! :grin:

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

#define ComponentVersion
#include AdrFunc.vih
#include AdrFunc.var

vipInterface iAdresPoluchit;

interface AdresPoluchit, AlwaysReturn
var
  myFace: iAdresPoluchit;
  iaddress: AddressFunc;
  adres: string;
  persnrec: comp;

create view as select * from grnal;

parameters
  adres, persnrec;

browse www
  fields
    grnal.nrec;
end;

handleevent
  cminit:
  {
     myFace:=new(iAdresPoluchit);
     adres:=iaddress.GetFullAddressInd(persnrec);
     closeinterface(0);
     abort;
     exit;
  }
end;

#undef ComponentVersion
end.
Почему?

Добавлено: 06 фев 2009, 00:22
edward_K
в GetFullAddressInd наверное все таки нужно бы запихивать addressn.nrec :)

Добавлено: 06 фев 2009, 09:07
RAJAH
Я запихивал persons.liveaddr. Название переменной просто старое осталось. Раньше-то работало, вот что непонятно!..

Добавлено: 09 фев 2009, 11:01
RAJAH
Какие ещё мысли будут?

Добавлено: 09 фев 2009, 16:04
Ged
закоменте броуз

Добавлено: 09 фев 2009, 16:34
RAJAH
Закомментил. Ругнулся при компиляции, что GRNAL нигде не используется, но в adres ничего не закинулось.

Добавлено: 09 фев 2009, 17:52
Ged
так по closeinterface(0) окно же начало закрываться?
а по поводу не вывода см.
edward_K писал(а):в GetFullAddressInd наверное все таки нужно бы запихивать addressn.nrec :)
вот примерчик:

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

#include AdrFunc.vih

interface AdresPoluchit , AlwaysReturn
var
  sAdres: string;
  cAddrNrec: comp;

#include AdrFunc.var

parameters
   sAdres
 , cAddrNrec;

handleevent
  cmInit:
  {
   sAdres:=iAdrFunc.GetFullAddressInd(cAddrNrec);
   CloseInterface(cmOk);
  }
end;
end.
/// протестируем ардэхой
.Form AAA
.Ard
.Var
 sTmp:String;
.EndVar
.Create view vPers
As Select * from Persons
;
.{table 'vPers.Persons'
.Begin
  sTmp:='';
  RunInterface(AdresPoluchit,sTmp,Persons.LIVEADDR);
End.
.Fields
 Persons.Tabnmb
 Persons.Fio
 sTmp
.EndFields
@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ^
.}
.EndForm

Добавлено: 10 фев 2009, 09:32
RAJAH
Не получилось! Переменная sTmp - пустая. А разве persons.liveaddr не на addressn.nrec ссылается? А с CloseInterface мне alwaysreturn и abort-exit уже помогли...

Добавлено: 10 фев 2009, 12:41
Ged
Persons.LiveAddr ссылается на AddressN
в ардэхе вывидите для полноты картины Persons.LIVEADDR
скопируйте не нулевое значение, найдите в AddressN эту запись.
Может у вас просто ссылки не валидные.

alwaysreturn вообщето нужна когда фейс прекращает работу по abort