Главная
Новый форум
 FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Комментарии по Alt-A

 
Post new topic   Reply to topic   printer-friendly view     Forum Index -> Программирование в БЭСТ-4
View previous topic :: View next topic  
Author Message
Дениска



Joined: 26 Feb 2002
Posts: 649



PostPosted: 11 Aug 2007 09:09    Post subject: Комментарии по Alt-A Reply with quote

Делаю свой 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
View user's profile Send private message
Дениска



Joined: 26 Feb 2002
Posts: 649



PostPosted: 11 Aug 2007 09:46    Post subject: Reply with quote

Наверно правильней через HotKey, а не через SETKEY.
Но это похоже принципиально ситуацию не меняет
Code:

  aHotKey:={{},{},{{'A - Комментарий', K_ALT_A,{||MemoEdit(F_files->MemoField)},1}}}
Back to top
View user's profile Send private message
Дениска



Joined: 26 Feb 2002
Posts: 649



PostPosted: 11 Aug 2007 15:23    Post subject: Reply with quote

И еще проблемка. MemoEdit читает не все мемо-поля, он не читает мемо-поле, если у него тип "A".
Back to top
View user's profile Send private message
Andr_V



Joined: 11 Aug 2007
Posts: 6
Location: Andr_V
Occupation: опт
Interests: Н.Новгород

PostPosted: 11 Aug 2007 16:12    Post subject: Reply with quote

Чтоб по Alt-A как в БЭСТе я пользую функцию COMMENTPART(p1,p2,p3)
как я понял:p1<>nil -разрешает запись в мемо
p2<>nil -вообще не дает вводить че-либо
p3 - имя мемо без "" (если отличное от SCLADS)
Но у меня не получилось сохранить, если имя мемо не SCLADS (показывать показывает, но не сохраняет). Может уважаемый nordk что прояснит?
Back to top
View user's profile Send private message
nordk



Joined: 27 Jun 2005
Posts: 1000
Location: Горбунов Константин
Occupation: БЭСТ-Партнер
Interests: СПб

PostPosted: 13 Aug 2007 00:01    Post subject: Re: Комментарии по Alt-A Reply with quote

Дениска 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
View user's profile Send private message Send e-mail
nordk



Joined: 27 Jun 2005
Posts: 1000
Location: Горбунов Константин
Occupation: БЭСТ-Партнер
Interests: СПб

PostPosted: 13 Aug 2007 00:15    Post subject: Reply with quote

Если посмотрите внимательно, то для просмотра мемополя в данной ситуации используется функция
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
View user's profile Send private message Send e-mail
Дениска



Joined: 26 Feb 2002
Posts: 649



PostPosted: 13 Aug 2007 08:27    Post subject: Reply with quote

Вопрос был в оформлении. Сделал пока примерно так:

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
View user's profile Send private message
Дениска



Joined: 26 Feb 2002
Posts: 649



PostPosted: 13 Aug 2007 08:32    Post subject: Reply with quote

nordk wrote:

Что касается типа А это уже означает что у Вас в memo-поле лежат массивы, а не символьные строки т стало быть Вам наверно правильнее
memo-поле изначально скинуть в массив все содержимое преобразовать в форматированную текстовую строку и вот тогда это дело через MemoEdit.
Инными словами не пытайтесь ничего толкать кроме символьной строки.
Просто в отдельных случаях разработчик уверен что там не будет
ничего другого и потому применяет сразу Memoedit.


Как memo-поле в котором лежит массив преобразовать в форматированную текстовую строку?
Back to top
View user's profile Send private message
nordk



Joined: 27 Jun 2005
Posts: 1000
Location: Горбунов Константин
Occupation: БЭСТ-Партнер
Interests: СПб

PostPosted: 13 Aug 2007 11:03    Post subject: Reply with quote

Дениска wrote:
nordk wrote:

Что касается типа А это уже означает что у Вас в memo-поле лежат массивы, а не символьные строки т стало быть Вам наверно правильнее
memo-поле изначально скинуть в массив все содержимое преобразовать в форматированную текстовую строку и вот тогда это дело через MemoEdit.
Инными словами не пытайтесь ничего толкать кроме символьной строки.
Просто в отдельных случаях разработчик уверен что там не будет
ничего другого и потому применяет сразу Memoedit.


Как memo-поле в котором лежит массив преобразовать в форматированную текстовую строку?

Изучаете структуру массива:
1. Какой он одномерный или многомерный
2.Какие значения могут лежат только ли символьные (нужно ли преобразовывать)
3.Дальше путем перебора в цикле или через AEVAL
создаете символьную стро
Back to top
View user's profile Send private message Send e-mail
nordk



Joined: 27 Jun 2005
Posts: 1000
Location: Горбунов Константин
Occupation: БЭСТ-Партнер
Interests: СПб

PostPosted: 13 Aug 2007 11:07    Post subject: Reply with quote

Дениска wrote:

Проблема: "Изменение по Ctrl-W не сохраняются."


Выложил описание функции Comment().
Там увидите ответ на Ваш вопрос и собственно образец решения
Back to top
View user's profile Send private message Send e-mail
Дениска



Joined: 26 Feb 2002
Posts: 649



PostPosted: 20 Aug 2007 06:38    Post subject: Reply with quote

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
View user's profile Send private message
Дениска



Joined: 26 Feb 2002
Posts: 649



PostPosted: 20 Aug 2007 08:43    Post subject: Reply with quote

nordk wrote:

Что касается типа А это уже означает что у Вас в memo-поле лежат массивы, а не символьные строки т стало быть Вам наверно правильнее
memo-поле изначально скинуть в массив все содержимое преобразовать в форматированную текстовую строку и вот тогда это дело через MemoEdit.

...

Изучаете структуру массива:
1. Какой он одномерный или многомерный
2.Какие значения могут лежат только ли символьные (нужно ли преобразовывать)
3.Дальше путем перебора в цикле или через AEVAL
создаете символьную строку


Понятно, что зная структуру массива можно перебором преобразовать его в текстовый вид, но хочется более простой и универсальный способ. Скажем просмоторщик dbf файлов bdbfs, показывает такие поля как текстовые в виде с фигурными скобками (правда исправлять он их похоже не умеет), при этом он естественно не знает структуру массива. В нем или куча проверок или есть какая-то "хитрушка", с помощью которой это делается проще

Вообщем, если этой "хитрушки" нет, то делаю в лоб и вопрос снят

P.S. Есть функция, которая переводит одномерный массив в строк
Back to top
View user's profile Send private message
nordk



Joined: 27 Jun 2005
Posts: 1000
Location: Горбунов Константин
Occupation: БЭСТ-Партнер
Interests: СПб

PostPosted: 20 Aug 2007 11:58    Post subject: Reply with quote

Code:
c:=""
AEVAL(a,{|x|c+=x+";"})

А преобразователь типов смотрите в уроке про Excel и вроде в событии
прайс_лист (урок 201) тоже есть.
Функция XXTOC()
Back to top
View user's profile Send private message Send e-mail
Display posts from previous:   
Post new topic   Reply to topic   printer-friendly view     Forum Index -> Программирование в БЭСТ-4 All times are GMT + 4 Hours
Page 1 of 1

 
Jump to:  
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

Rambler
Rambler's Top100 Рейтинг@Mail.ru