Каким образом установить цвет поля в Alter interface

Приемы и подходы, обмен опытом

Модераторы: Screw, larin

Ответить
Dima
партнер
Сообщения: 19
Зарегистрирован: Пн, 21/01/2008 10:48
Имя Фамилия: Дмитрий Соловьев
Откуда: Юнисофт

Каким образом установить цвет поля в Alter interface

Сообщение Dima »

Заказчик желает чтобы организации в каталоге Организаций подсвечивались разными цветами
написал слеующий текст
#component "L_KATORG"
alter interface GETKATOR
handleevent
cminit:
{
if(Inherited::HandleEvent(cmInit) = heOk) {}
_loop katorgimp
{
if(katorgimp.code='1')
{
SetFontColor (-1,-1,10,15);
}
else
{
SetFontColor (-1,-1,0,0);
}
}
}
cmpositionchanged:
{
if(Inherited::HandleEvent(cmPositionchanged) = heOk)
if(katorgimp.code='1')
{
SetFontColor (-1,-1,10,15);
}
else
{
SetFontColor (-1,-1,0,0);
}
}
end;
end.
Но изменение цвета происходит очень коряво. Подскажите к к какому событию лучше обращаться для прорисовки цветов по условию!!!
den
заказчик
Сообщения: 117
Зарегистрирован: Пт, 26/10/2007 14:16
Имя Фамилия: Денис Кучин
Откуда: Геомостпроект НПО

Сообщение den »

А может попробовать пойти по другому пути..
"
Докомпиляция интерфейсов целиком основана на механизме наследования vip-интерфейсов
"

В доке по наследованию последних заявлено "Замещение видимых элементов".
Ну и в browse нарисовать :
{Font = {BackColor = if(katorgimp.code='1',needcolor, 0) }};

Хотя сам не пробовал такого - не было необходимости пока )
Dima
партнер
Сообщения: 19
Зарегистрирован: Пн, 21/01/2008 10:48
Имя Фамилия: Дмитрий Соловьев
Откуда: Юнисофт

Сообщение Dima »

Спасибо за подсказку, действительно помогла замена browse
сделал вот так
#component "L_KATORG"
alter interface GETKATOR 'Выбор орг.'
hideformats BRKATORGIMP;
browse BRKATORGIMP1 (,,sci147EnEscTree);
show at (1,1,111,14);
table katorgimp;
fields
{Font = {BackColor = if(katorgimp.code='1',10, 0) }};
katorgimp.name 'Наименование':[40];
katorgimp.UNN 'УНН':[12];
katorgimp.ADDR 'Адрес':[40];
katorgimp.code 'код':[12];

end;
handleevent
cminit:{
if(Inherited::HandleEvent(cmInit) = heOk) {}
setformat(brkatorgimp1)
}
end;
end.
И сразу все заработало :super:
den
заказчик
Сообщения: 117
Зарегистрирован: Пт, 26/10/2007 14:16
Имя Фамилия: Денис Кучин
Откуда: Геомостпроект НПО

Сообщение den »

Учитывая, что основная нагрузка этого фейса - выбор организации для n-го документа, отчета, то может быть не всегда этот путь так безоблачен. Я о том, что если интер-с будет более богат и напичкан разного рода функциональностью, то при использовании в атлантических функциях/методах,в которых в качестве параметра нужен идентификатор нужного видимого элемента не будет косяков интересна при работе. Ведь название бравсе Вы поменяли, хотя может id останется тот же, но все же инетересен этот моментик мне лично в плане если захочется сделать что то подобное в любом интер-се...
Damir
заказчик
Сообщения: 24
Зарегистрирован: Чт, 10/07/2008 07:43
Имя Фамилия: Дамир Ибатуллин
Откуда: Стерлитамак

Сообщение Damir »

может кто скажет, как подсветку сделать на неактивные строки? при предложенном варианте строка подсвечивается только если она активна.. Суть - подсвечивать строки с некорректным содержимым. пример - строки в журнале действий пользователей в саппорте.
Интерфейс свой, не галактический
Damir
заказчик
Сообщения: 24
Зарегистрирован: Чт, 10/07/2008 07:43
Имя Фамилия: Дамир Ибатуллин
Откуда: Стерлитамак

Сообщение Damir »

тихо то как...
Аватара пользователя
larin
топ-софт
Сообщения: 228
Зарегистрирован: Пн, 10/09/2007 12:13
Имя Фамилия: Михаил Ларин
Откуда: ТопCофт
Контактная информация:

Сообщение larin »

А что значит "не активные строки"?

Не понятно, что имеете в виду. У вас, что то не получается сделать с помощью ключевых слов: Font Color BackColor Bold Italic? Приведите пример вашего кода. Наверняка все просто решается.
Damir
заказчик
Сообщения: 24
Зарегистрирован: Чт, 10/07/2008 07:43
Имя Фамилия: Дамир Ибатуллин
Откуда: Стерлитамак

Сообщение Damir »

для Михаил Ларин

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

 Browse brSpec ('Данные спецификации',,);
 Fields
   jSpDocs.KonkListN '№ конкур.листа'    : [30],Protect,{ font = { backColor = if (length(jSpDocs.KonkListN) = 0 and jDogovor.KonkListN = '',10,0) } }; 
 End;
при этом, красной становится строка, на которой находится курсор и данные удовлетворяют условиям. Остальные строки - обычного цвета.
При перемещении по ним, цвет меняется: неактивная строка становится обычного цвета, активная и удовл.усл. - красного.
den
заказчик
Сообщения: 117
Зарегистрирован: Пт, 26/10/2007 14:16
Имя Фамилия: Денис Кучин
Откуда: Геомостпроект НПО

Сообщение den »

И не подкрашиваются даже те неактинвые строки где значение jSpDocs.KonkListN заполнено чем то ?
У меня было нечно подобное, но я так проблему и не решил - фон неактинвого поля,значение которого не отличается от "нулевого" не прорисовывается (
Вернее даже фон таких не у текущей записи
Damir
заказчик
Сообщения: 24
Зарегистрирован: Чт, 10/07/2008 07:43
Имя Фамилия: Дамир Ибатуллин
Откуда: Стерлитамак

Сообщение Damir »

Денис Кучин
именно так.
добиться нужного у меня так и не получается.
при этом я вижу, что в журнале действий пользователей, если запись не соответствует, то выделяются красным не только активная запись, но и остальные.
возможно, там механизм другой?
den
заказчик
Сообщения: 117
Зарегистрирован: Пт, 26/10/2007 14:16
Имя Фамилия: Денис Кучин
Откуда: Геомостпроект НПО

Сообщение den »

Да действительно, нужным цветом в журнале действий пользователя посвечиваются красным записи, попадающие в видимую область инте-са данного и неактивные (текущая) в данный момент ( некорректные записи имею ввиду...). Я нашел у себя такую - но у меня в поле "пользователь" у этой записи значения нема и если запись неактвина, то идет пропуск в подсветке данной записи (след поле "Операция" уже со значением и подсвечивается как нада красным.)
Жалко не нашел как сюда вставить картинку моего журнала (
Аватара пользователя
larin
топ-софт
Сообщения: 228
Зарегистрирован: Пн, 10/09/2007 12:13
Имя Фамилия: Михаил Ларин
Откуда: ТопCофт
Контактная информация:

Сообщение larin »

А можно весь код интерфейса глянуть? Из примера не ясно с какой таблицей связан этот BRОWSE, и какова структура логической таблицы.

Обычно BRОWSE и SCREEN нужно явно связывать с конкретной табличкой с помощью ключевого слова TABLE. Если этого не сделать то корневая коневой будет выбрана первая попавшаяся из ЛТ таблица. По этом отрисовка цвета и др. может и не работать.

К примеру этот код у меня работает.

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

interface TestColor;

create view as select * from HozOper;

Browse brSpec ('Данные спецификации',,);
table HozOper;
Fields
  HozOper.Name1 '№ конкур.листа'    : [30], Protect,
  { font = { backColor = if (length(HozOper.Code) = 0 and HozOper.Code = '',10,0) } };
End;
end.
PS: И даже без table HozOper т.к. ЛТ всего из одного узла состоит. Но что в вашем случае не понятно.
Damir
заказчик
Сообщения: 24
Зарегистрирован: Чт, 10/07/2008 07:43
Имя Фамилия: Дамир Ибатуллин
Откуда: Стерлитамак

Сообщение Damir »

Михаил Ларин
код работает, но подсветка появляется только на строке, на которой находится курсор..
две таблицы - одна на скрин, вторая на броуз

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

Interface int_KorrDog 'Проверка заполненности полей договора/доп.соглашения'  escclose;
...
Table struct jSpDocs "Спецификация"
(
 Nrec      : Comp  ,
 Code      : string,
 KonkListN : String,
 KonkListD : date  ,
 cDoc      : Comp  
)
 With Index
 (
   Cn1 = Nrec,
   Cn2 = cDoc
 )
;
...
Parameters DogovorNrec;

Panel panCaseSet  
  Table jDogovor;
Screen SRC (,,) show at (1,1,60,11)
Fields
...
Buttons
  cmCancel;
<<
....
  
                                        <. Ок .>
>>    
End;
 Browse brSpec ('Данные спецификации',,);
     Show at (1,12,60,18);
  Table jSpDocs;
 Fields
   jSpDocs.Code      '№ '                : [10],Protect,Skip; 
   jSpDocs.KonkListN '№ конкур.листа'    : [30],Protect,{ font = { backColor = if (length(jSpDocs.KonkListN) = 0 and upcase(jDogovor.KonkListN) = '',10,0) } }; 
   jSpDocs.KonkListD 'Дата конкур.листа' : [30],Protect,{ font = { backColor = if (jSpDocs.KonkListd = date(0,0,0) and upcase(jDogovor.KonkListN) <> 'Б/Н',10,0) } };
 End;
End;

 
HandleEvent
  cmInit :
  {
  _Loop SpDocs Where ((
                       jDogovor.TiDk/== SpDocs.TiDk    (noindex) and
                       jDogovor.nrec/== SpDocs.cDoc    (noindex)

                     ))
    {
    jSpDocs.Nrec :=SpDocs.Nrec;
    jSpDocs.Code :=SpDocs.Code;
    jSpDocs.cDoc :=SpDocs.cDoc;

    _Loop AttrVal3 where (( coSpDocs             /== attrnam3.wtable   and
                           'Конкурентный лист: №'/== AttrNam3.Name     and
                           coSpDocs              /== attrval3.wtable   and
                           SpDocs.Nrec           /== AttrVal3.cRec     and
                           AttrNam3.nrec         /== Attrval3.cAttrNam 
                         ))
      {
      jSpDocs.KonkListN:= AttrVal3.vString;
      }

    _Loop AttrVal4 where (( coSpDocs                /== attrnam4.wtable   and
                           'Конкурентный лист: дата'/== AttrNam4.Name     and
                           coSpDocs                 /== attrval4.wtable   and
                           SpDocs.Nrec              /== AttrVal4.cRec     and
                           AttrNam4.nrec            /== Attrval4.cAttrNam 
                        ))
      {
      jSpDocs.KonkListD:= AttrVal4.vDate;
      }

    Insert current jSpDocs; 
    }
  ReReadRecord;
  ReScanPanel(#jSpDocs);
  }    
cmCancel:
  {
  CloseInterFace(-1);
  }
end;
end.
Аватара пользователя
larin
топ-софт
Сообщения: 228
Зарегистрирован: Пн, 10/09/2007 12:13
Имя Фамилия: Михаил Ларин
Откуда: ТопCофт
Контактная информация:

Сообщение larin »

Да я уже понял, Денис Кучин мне в личной переписке показал в чем именно проблема. Появится время пробую понять как можно решить ее.
Ответить