View previous topic :: View next topic |
Author |
Message |
Дениска
Joined: 26 Feb 2002 Posts: 649
|
Posted: 11 Aug 2007 09:09 Post subject: Комментарии по Alt-A |
|
|
Делаю свой InitList. Хочу выводить на просмотр и редактировать мемо-поле, при этом чтобы вызов был стандартный по Alt-A, со стандартным окном (как в БЭСТ-е).
Пытаюсь так:
Code: |
#define K_ALT_A 286
...
SETKEY(K_ALT_A, {||MemoEdit(F_files->MemoField), 2})
|
В принципе работает, но окно на весь экран и цвет не тот.
Если сделать, так:
Code: |
SETKEY(K_ALT_A, {||MemoEdit(F_files->MemoField, nRow+1,nCol+1,nRow+11, nCol+49,,,200), 2})
|
То окно видимо не на весь экран, но так как цвет такой же как и у основного экрана, то получается еще хуже
В Уроке 201 Событие "Прайс-лист" вижу текст:
Code: |
SetKey(K_ALT_A,{|lAdd| lAdd := .F.,pSclads := IF("│││" $ MLABEL->SCLADS,(lAdd := .T.,BEFORATNUM("│││",MLABEL->Sclads)),MLABEL->Sclads),MLABEL->(Comment()),IF(MLABEL->(RecLock()),(MLABEL->SCLADS := pSclads+IF(lAdd,"│││"+AFTERATNUM("│││",MLABEL->SCLADS,1),""),MLABEL->(dbUnLock())),NIL),pSclads := "" })
|
Это то, что надо? Если да, то мне не понятно как с этим работать  |
|
Back to top |
|
 |
Дениска
Joined: 26 Feb 2002 Posts: 649
|
Posted: 11 Aug 2007 09:46 Post subject: |
|
|
Наверно правильней через HotKey, а не через SETKEY.
Но это похоже принципиально ситуацию не меняет
Code: |
aHotKey:={{},{},{{'A - Комментарий', K_ALT_A,{||MemoEdit(F_files->MemoField)},1}}}
|
|
|
Back to top |
|
 |
Дениска
Joined: 26 Feb 2002 Posts: 649
|
Posted: 11 Aug 2007 15:23 Post subject: |
|
|
И еще проблемка. MemoEdit читает не все мемо-поля, он не читает мемо-поле, если у него тип "A". |
|
Back to top |
|
 |
Andr_V
Joined: 11 Aug 2007 Posts: 6 Location: Andr_V Occupation: опт Interests: Н.Новгород
|
Posted: 11 Aug 2007 16:12 Post subject: |
|
|
Чтоб по Alt-A как в БЭСТе я пользую функцию COMMENTPART(p1,p2,p3)
как я понял:p1<>nil -разрешает запись в мемо
p2<>nil -вообще не дает вводить че-либо
p3 - имя мемо без "" (если отличное от SCLADS)
Но у меня не получилось сохранить, если имя мемо не SCLADS (показывать показывает, но не сохраняет). Может уважаемый nordk что прояснит? |
|
Back to top |
|
 |
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 Событие "Прайс-лист" вижу текст:
Code: |
SetKey(K_ALT_A,{|lAdd| lAdd := .F.,pSclads := IF("│││" $ MLABEL->SCLADS,(lAdd := .T.,BEFORATNUM("│││",MLABEL->Sclads)),MLABEL->Sclads),MLABEL->(Comment()),IF(MLABEL->(RecLock()),(MLABEL->SCLADS := pSclads+IF(lAdd,"│││"+AFTERATNUM("│││",MLABEL->SCLADS,1),""),MLABEL->(dbUnLock())),NIL),pSclads := "" })
|
Это то, что надо? Если да, то мне не понятно как с этим работать  |
Это именно так организовано в БЭСТе чтение мемо-поля номенклатурного справочника. Что конкретно в этой записи Вам непонятно ?
Что касается memoedit, то там есть параметры отвечающие за размер.
Посмотрительно внимательно NG идущий в поставке с БЭСТ-4+ |
|
Back to top |
|
 |
nordk
Joined: 27 Jun 2005 Posts: 1000 Location: Горбунов Константин Occupation: БЭСТ-Партнер Interests: СПб
|
Posted: 13 Aug 2007 00:15 Post subject: |
|
|
Если посмотрите внимательно, то для просмотра мемополя в данной ситуации используется функция
Code: | FUNCTION Comment(lWrite,lView) |
В ней в итоге работает memoedit вот так:
Code: | pSclads:=MEMOEDIT(pSclads,nTop+1,nLeft+1,nBottom-1,nRight-1,(lView==NIL),'FunBook',100) |
Если говорить о функции
Code: | FUNCTION CommentPart(lWrite,lView,cComm)
//--------------------------------------------------------------------------//
// cComm - начальный текст комментария, передается по ссылке |
То как видите у нее отличие в третьем параметре и в вызове Memoedit
вот так:
Code: | cSclads:=MEMOEDIT(cSclads,nTop+1,nLeft+1,nBottom-1,nRight-1,(lView==NIL),'FunBook',100) |
Как видите и в том и в другом случае мы приходим к использованию
функции MemoEdit.
Что касается типа А это уже означает что у Вас в memo-поле лежат массивы, а не символьные строки т стало быть Вам наверно правильнее
memo-поле изначально скинуть в массив все содержимое преобразовать в форматированную текстовую строку и вот тогда это дело через MemoEdit.
Инными словами не пытайтесь ничего толкать кроме символьной строки.
Просто в отдельных случаях разработчик уверен что там не будет
ничего другого и потому применяет сразу Memoedit.
Вы же задаете вопрос в общем виде, не конкретизируя что надо именно Вам,а стало быть получайте и решение в общем виде..... |
|
Back to top |
|
 |
Дениска
Joined: 26 Feb 2002 Posts: 649
|
Posted: 13 Aug 2007 08:27 Post subject: |
|
|
Вопрос был в оформлении. Сделал пока примерно так:
Code: |
#define K_ALT_A 286
NETUSE("F_Var",LOADPATH() + "var.dbf")
...
aHotKey:={{},{},{{'A - Комментарий', K_ALT_A,{||MyMemoEdit(F_Var->Var_Mem)},2}}}
....
Function MyMemoEdit(aMemoField)
Local nRow:=04, nCol:=14
Local aNewColor, aOldColor
aNewColor := "14/9, 0/7, 0/0, 0/0, 15/1"
aOldColor := SetColor(aNewColor)
DISPBOX(nRow,nCol,nRow+16,nCol+50,( CHR( 201 ) + CHR( 205 ) + CHR( 187 ) + CHR( 186 ) + CHR( 188 ) + CHR( 205 ) + CHR( 200 ) + CHR( 186 )+' ' ),;
"14/9")
IF ValType(aMemoField) = "A"
SayAndWait("Массивы пока не поддерживаются")
Else
MemoEdit(aMemoField, nRow+1,nCol+1,nRow+15, nCol+49,.T.,,254)
EndIf
SetColor(aOldColor)
Return
|
Проблема: "Изменение по Ctrl-W не сохраняются." |
|
Back to top |
|
 |
Дениска
Joined: 26 Feb 2002 Posts: 649
|
Posted: 13 Aug 2007 08:32 Post subject: |
|
|
nordk wrote: |
Что касается типа А это уже означает что у Вас в memo-поле лежат массивы, а не символьные строки т стало быть Вам наверно правильнее
memo-поле изначально скинуть в массив все содержимое преобразовать в форматированную текстовую строку и вот тогда это дело через MemoEdit.
Инными словами не пытайтесь ничего толкать кроме символьной строки.
Просто в отдельных случаях разработчик уверен что там не будет
ничего другого и потому применяет сразу Memoedit.
|
Как memo-поле в котором лежит массив преобразовать в форматированную текстовую строку? |
|
Back to top |
|
 |
nordk
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
создаете символьную стро |
|
Back to top |
|
 |
nordk
Joined: 27 Jun 2005 Posts: 1000 Location: Горбунов Константин Occupation: БЭСТ-Партнер Interests: СПб
|
Posted: 13 Aug 2007 11:07 Post subject: |
|
|
Дениска wrote: |
Проблема: "Изменение по Ctrl-W не сохраняются." |
Выложил описание функции Comment().
Там увидите ответ на Ваш вопрос и собственно образец решения |
|
Back to top |
|
 |
Дениска
Joined: 26 Feb 2002 Posts: 649
|
Posted: 20 Aug 2007 06:38 Post subject: |
|
|
nordk wrote: | Дениска wrote: |
Проблема: "Изменение по Ctrl-W не сохраняются." |
Выложил описание функции Comment().
Там увидите ответ на Ваш вопрос и собственно образец решения |
Изменения теперь сохраняются. Функция теперь примерно такая:
Code: |
Function Main()
...
NETUSE("F_Var",LOADPATH() + "var.dbf")
...
aHotKey:={{},{},{{'A - Комментарий', K_ALT_A,{||MyMemoEdit(F_Var->Var_mem)},2}}}
...
Return
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
|
?
Или может можно или лучше сделать как-то по-другому? |
|
Back to top |
|
 |
Дениска
Joined: 26 Feb 2002 Posts: 649
|
Posted: 20 Aug 2007 08:43 Post subject: |
|
|
nordk wrote: |
Что касается типа А это уже означает что у Вас в memo-поле лежат массивы, а не символьные строки т стало быть Вам наверно правильнее
memo-поле изначально скинуть в массив все содержимое преобразовать в форматированную текстовую строку и вот тогда это дело через MemoEdit.
...
Изучаете структуру массива:
1. Какой он одномерный или многомерный
2.Какие значения могут лежат только ли символьные (нужно ли преобразовывать)
3.Дальше путем перебора в цикле или через AEVAL
создаете символьную строку |
Понятно, что зная структуру массива можно перебором преобразовать его в текстовый вид, но хочется более простой и универсальный способ. Скажем просмоторщик dbf файлов bdbfs, показывает такие поля как текстовые в виде с фигурными скобками (правда исправлять он их похоже не умеет), при этом он естественно не знает структуру массива. В нем или куча проверок или есть какая-то "хитрушка", с помощью которой это делается проще
Вообщем, если этой "хитрушки" нет, то делаю в лоб и вопрос снят
P.S. Есть функция, которая переводит одномерный массив в строк |
|
Back to top |
|
 |
nordk
Joined: 27 Jun 2005 Posts: 1000 Location: Горбунов Константин Occupation: БЭСТ-Партнер Interests: СПб
|
Posted: 20 Aug 2007 11:58 Post subject: |
|
|
Code: | c:=""
AEVAL(a,{|x|c+=x+";"}) |
А преобразователь типов смотрите в уроке про Excel и вроде в событии
прайс_лист (урок 201) тоже есть.
Функция XXTOC() |
|
Back to top |
|
 |
|
|
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
|
Powered by phpBB © phpBB Group
|