Как добыть memo-поле

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

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

Sheinina
Местный житель
Сообщения: 366
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Москва

Как добыть memo-поле

Сообщение Sheinina »

имея про него информацию в табличке allmemo?
Пользователи хотят видеть в распечатке ДО memo-поле из группы ДО, в которую это ДО входит.
До записи в allmemo я доберусь без вопросов, а само поле-то как прочесть? :oops:
wildman
Новичок
Сообщения: 21
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Украина. Киев.
Контактная информация:

Сообщение wildman »

Привет :)
У тебя есть описаний функций VIP-а?
Оно поставляется вместе с обычной документацией.
-----------
Есть ряд функций:
Метод ClearMemoField (memo) : boolean
Метод ExportMemoToFile (memo, string, boolean) : boolean
Метод GetFieldFromMemo (longInt, word, byte, integer): string
Метод GetMemoPrefix (integer) : string
Метод ImportFileToMemo (memo, string, boolean) : boolean
Метод IsMemoText (integer) : boolean
Метод MemoSeek (longInt, integer) : integer
Метод MemoReadLn (var string, integer) : integer
Метод PrintMemoField (memo, integer) : boolean
Метод SetMemoPrefix (integer, string)
------------
Нужна более детальная информация ?
Sheinina
Местный житель
Сообщения: 366
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Москва

Сообщение Sheinina »

Очень... Никогда в жизни не приходилось работать с memo-полями, а тут еще и для "Метод MemoReadLn (var string, integer) : integer " написано "Функция устарела, не использовать." :oops: :oops: :oops:
Max_Fin
На пенсии
Сообщения: 797
Зарегистрирован: 29 мар 2005, 17:49
Откуда: г. Тюмень
Контактная информация:

Сообщение Max_Fin »

Работать точно так же как с файлом

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

File FMemo;
...
var s: String;
...
FMemo.OpenMemo(MemoTbl.MemoFld);
FMemo.Seek(0);
Do
{
...
  FMemo.Readln(s);
...
}
While not FMemo.EOF;
FMemo.Close;

wildman
Новичок
Сообщения: 21
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Украина. Киев.
Контактная информация:

Примерно так:

Сообщение wildman »

Думаю, что примерно так:
---------------
var
str : string;
....
MemoSeek (0,#AllMemo)

while ( MemoReadLn(Str,#AllMemo) = tsOk)
{
frm.PutEventById(feDoLoop,<!цикл!>);
frm.write(str);
}
------------------
Sheinina
Местный житель
Сообщения: 366
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Москва

Сообщение Sheinina »

Спасибо! Буду пробовать :D
Sheinina
Местный житель
Сообщения: 366
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Москва

Сообщение Sheinina »

Мне ужасно стыдно, но где в присоединенной форме надо поставить конструкцию File Fmemo? Что-то ругается компилятор словами: "Нет такой функции, поля или метода, или неверный контекст использования FILE".
Я писала так:
.create view base as select * from basedoc...

.create view TMem as select * from AllMemo, spgrsch where
((word(1125) == allmemo.wtable
and
allmemo.crec == spgrsch.cgroupsch
)) and base.basedoc.nrec = spgrsch.cbasedoc;

.{table 'base'
...
.{table 'tMem'
.begin
file Fmem;
...
end.
.}
.}
Max_Fin
На пенсии
Сообщения: 797
Зарегистрирован: 29 мар 2005, 17:49
Откуда: г. Тюмень
Контактная информация:

Сообщение Max_Fin »

Хм... а где было сказано, что это нужно сделать в FCOM :D
Э-э-эх :oops:
Набросать фейс, которому на вход будет передаваться текущая позиция в файле, а на выход новая текущая позиция в файле (GETPOS - получить тек. позицию; для признака конца файла можно использовать -1) и строка.
Может кто другой способ предложит.
Я бы сделал через объектный интерфейс.

memget.vih

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

ObjInterface MemGetObj;
  function InitMem(cRec: Comp): Boolean;
  function GetStringFromMemo(var S: String): Boolean;
  procedure DoneMem;
end;

VipInterface MemGet Implements MemGetObj;
memget.vip

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

interface Int_MemGet;

create view
var
  cLink: Comp;
from MemoTbl
where
((
  cLink == MemoTbl.nRec
));

File FMemo;

PUBLIC function InitMem(cRec: Comp): Boolean; 
{
  InitMem := false;
  cLink := cRec;
  if GetFirst MemoTbl = tsOK
  {
    if FMemo.OpenMemo(MemoTbl.MemoFld)
    {
      FMemo.Seek(0);
      InitMem := true;
    }
  }
}

PUBLIC function GetStringFromMemo(var S: String): Boolean;
{
  GetStringFromMemo := false;
  S := '';
  if not FMemo.EOF
  {
    FMemo.Readln(s);
    GetStringFromMemo := true;
  }
}

PUBLIC procedure DoneMem;
{
  FMemo.Close;
}

HandleEvent
cmOnVipLoad:
{
  cRec := Comp(0);
}
cmOnVipUnload:
{
}
end;
end.
проект компиляции make.prj

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

#make 'memget.vip'

#make 'memget.vih'
#make 'myfrm.frm'
в самой форме myfrm.frm

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

.var 
...
  MemoFile : MemGetObj;
...
.endvar
...
!в начале формы
.begin
...
  GetVipRef(MemoFile, 'MemGet'); 
...  
end.

...
  MemoFile.InitMem(BaseDocNRec);
var S: String;
  while MemoFile.GetStringFromMemo(S) do
  {
     ...
  }

  MomoFile.DoneMem;
...

!в конце формы
.begin
...
  FreeVipInterface(MemoFile, 'MemGet');
...  
end.
Sheinina
Местный житель
Сообщения: 366
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Москва

Сообщение Sheinina »

Вот теперь все поняла, спасибо огромное :D
Sheinina
Местный житель
Сообщения: 366
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Москва

И опять облом...

Сообщение Sheinina »

Ругается на
.var
...
MemoFile : MemGetObj;
...
.endvar
словами
Ошибка: Ожидался тип параметра (см.документацию) (стр.98, поз.24 в ... )
MemoFile : MemGetObj;
Max_Fin
На пенсии
Сообщения: 797
Зарегистрирован: 29 мар 2005, 17:49
Откуда: г. Тюмень
Контактная информация:

Сообщение Max_Fin »

Писал на ходу, поэтому есть пара ошибочек :oops:

1. в memget.vip пропущено подключение vih-файла, должно быть так

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

#include memget.vih //эта строка отсутствовала

interface Int_MemGet;
2. make.prj должен быть

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

#make 'memget.vip' 

#include memget.vih //не make
#make 'myfrm.frm'
Sheinina
Местный житель
Сообщения: 366
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Москва

Сообщение Sheinina »

Ошибочек оказалось чуть больше :wink: Но это оказалось мне вполне по силам :lol: РАБОТАЕТ!!!
Serrenium
Посетитель
Сообщения: 46
Зарегистрирован: 05 июл 2005, 18:06
Откуда: Корпорация Галактика
Контактная информация:

Сообщение Serrenium »

Мне нужно не из allmemo а из атрибута.
я сделал вместо allmemo attrval.

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

Interface MemGet; 

create view 
var 
  cLink: Comp; 
from attrval
where 
(( 
  cLink == attrval.nRec 
)); 

File FMemo;

PUBLIC function InitMem(cRec: Comp): Boolean; 
{ 
  InitMem := false; 
  cLink := cRec; 
  if GetFirst attrval = tsOK 
  { 
    if FMemo.OpenMemo(attrval.vlvar) 
    { 
      FMemo.Seek(0); 
      InitMem := true; 
    } 
  } 
} 
У меня такая ошибка возникает
Изображение
И галактика падает через 2 сек.
Max_Fin
На пенсии
Сообщения: 797
Зарегистрирован: 29 мар 2005, 17:49
Откуда: г. Тюмень
Контактная информация:

Сообщение Max_Fin »

либо GetVipRef(MemoFile, 'MemGet') пропущено, либо интерфейс не компильнули MemGet
Жду выхода Вселенная 2.12!
Serrenium
Посетитель
Сообщения: 46
Зарегистрирован: 05 июл 2005, 18:06
Откуда: Корпорация Галактика
Контактная информация:

Сообщение Serrenium »

getvipref(memofile,'memget') стоит самым первым в первом .begin..end.
Вот мой .prj

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

#make "memget.vip"
#include table.vip
#include memget.vih 
#make "akt_do.rtf"
Галактика уже не падает после этого сообщения. А выдает другое:

Изображение

HELP!!! :?:
Последний раз редактировалось Serrenium 24 ноя 2005, 17:32, всего редактировалось 1 раз.
Ответить