Posted: 11 Aug 2007 09:09 Post subject: Комментарии по Alt-A
Делаю свой InitList. Хочу выводить на просмотр и редактировать мемо-поле, при этом чтобы вызов был стандартный по Alt-A, со стандартным окном (как в БЭСТ-е).
Пытаюсь так:
Чтоб по Alt-A как в БЭСТе я пользую функцию COMMENTPART(p1,p2,p3)
как я понял:p1<>nil -разрешает запись в мемо
p2<>nil -вообще не дает вводить че-либо
p3 - имя мемо без "" (если отличное от SCLADS)
Но у меня не получилось сохранить, если имя мемо не SCLADS (показывать показывает, но не сохраняет). Может уважаемый nordk что прояснит?
Joined: 27 Jun 2005 Posts: 1000 Location: Горбунов Константин Occupation: БЭСТ-Партнер Interests: СПб
Posted: 13 Aug 2007 00:01 Post subject: Re: Комментарии по Alt-A
Дениска wrote:
Делаю свой InitList. Хочу выводить на просмотр и редактировать мемо-поле, при этом чтобы вызов был стандартный по Alt-A, со стандартным окном (как в БЭСТ-е).
В Уроке 201 Событие "Прайс-лист" вижу текст:
Это то, что надо? Если да, то мне не понятно как с этим работать
Это именно так организовано в БЭСТе чтение мемо-поля номенклатурного справочника. Что конкретно в этой записи Вам непонятно ?
Что касается memoedit, то там есть параметры отвечающие за размер.
Посмотрительно внимательно NG идущий в поставке с БЭСТ-4+
FUNCTION CommentPart(lWrite,lView,cComm)
//--------------------------------------------------------------------------//
// cComm - начальный текст комментария, передается по ссылке
То как видите у нее отличие в третьем параметре и в вызове Memoedit
вот так:
Как видите и в том и в другом случае мы приходим к использованию
функции MemoEdit.
Что касается типа А это уже означает что у Вас в memo-поле лежат массивы, а не символьные строки т стало быть Вам наверно правильнее
memo-поле изначально скинуть в массив все содержимое преобразовать в форматированную текстовую строку и вот тогда это дело через MemoEdit.
Инными словами не пытайтесь ничего толкать кроме символьной строки.
Просто в отдельных случаях разработчик уверен что там не будет
ничего другого и потому применяет сразу Memoedit.
Вы же задаете вопрос в общем виде, не конкретизируя что надо именно Вам,а стало быть получайте и решение в общем виде.....
Что касается типа А это уже означает что у Вас в memo-поле лежат массивы, а не символьные строки т стало быть Вам наверно правильнее
memo-поле изначально скинуть в массив все содержимое преобразовать в форматированную текстовую строку и вот тогда это дело через MemoEdit.
Инными словами не пытайтесь ничего толкать кроме символьной строки.
Просто в отдельных случаях разработчик уверен что там не будет
ничего другого и потому применяет сразу Memoedit.
Как memo-поле в котором лежит массив преобразовать в форматированную текстовую строку?
Joined: 27 Jun 2005 Posts: 1000 Location: Горбунов Константин Occupation: БЭСТ-Партнер Interests: СПб
Posted: 13 Aug 2007 11:03 Post subject:
Дениска wrote:
nordk wrote:
Что касается типа А это уже означает что у Вас в memo-поле лежат массивы, а не символьные строки т стало быть Вам наверно правильнее
memo-поле изначально скинуть в массив все содержимое преобразовать в форматированную текстовую строку и вот тогда это дело через MemoEdit.
Инными словами не пытайтесь ничего толкать кроме символьной строки.
Просто в отдельных случаях разработчик уверен что там не будет
ничего другого и потому применяет сразу Memoedit.
Как memo-поле в котором лежит массив преобразовать в форматированную текстовую строку?
Изучаете структуру массива:
1. Какой он одномерный или многомерный
2.Какие значения могут лежат только ли символьные (нужно ли преобразовывать)
3.Дальше путем перебора в цикле или через AEVAL
создаете символьную стро
Function MyMemoEdit(aMemoField)
...
IF ValType(aMemoField) = "A"
SayAndWait("Массивы пока не поддерживаются")
Else
aMemoField := MemoEdit(aMemoField, nRow+1,nCol+1,nRow+15, nCol+49,.T.,,254)
EndIf
If !aMemoField == aMemoFieldOld
altd()
select F_Var
RecLock()
REPLACE Var_Mem WITH aMemoField
F_dbUnlock()
COMMIT
EndIf
...
Return
Но мне не нравится, что функция Comment() и моя функция привязаны к конкретному файлу, к конкретному полю. В моей функции (аналогичная ситуация и в функции Comment()) это происходит из-за этого куска кода:
Code:
select F_Var
RecLock()
REPLACE Var_Mem WITH aMemoField
Как изменить функцию, чтобы она была универсальной? Можно ли сделать примерно так:
Code:
...
aHotKey:={{},{},{{'A - Комментарий', K_ALT_A,{||MyMemoEdit(F_Var->Var_mem, FileName, FieldName)},2}}}
...
Function MyMemoEdit(aMemoField, FileName, FieldName)
...
select FileName
RecLock()
REPLACE FieldName WITH aMemoField
?
Или может можно или лучше сделать как-то по-другому?
Что касается типа А это уже означает что у Вас в memo-поле лежат массивы, а не символьные строки т стало быть Вам наверно правильнее
memo-поле изначально скинуть в массив все содержимое преобразовать в форматированную текстовую строку и вот тогда это дело через MemoEdit.
...
Изучаете структуру массива:
1. Какой он одномерный или многомерный
2.Какие значения могут лежат только ли символьные (нужно ли преобразовывать)
3.Дальше путем перебора в цикле или через AEVAL
создаете символьную строку
Понятно, что зная структуру массива можно перебором преобразовать его в текстовый вид, но хочется более простой и универсальный способ. Скажем просмоторщик dbf файлов bdbfs, показывает такие поля как текстовые в виде с фигурными скобками (правда исправлять он их похоже не умеет), при этом он естественно не знает структуру массива. В нем или куча проверок или есть какая-то "хитрушка", с помощью которой это делается проще
Вообщем, если этой "хитрушки" нет, то делаю в лоб и вопрос снят
P.S. Есть функция, которая переводит одномерный массив в строк
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum