Страница 1 из 1

Изменение цвета выбранного подразделения.

Добавлено: 16 янв 2007, 14:39
lingreen
Привет всем.
Извените за такой вопрос, но у меня не получается сделать так чтоб при выборе из дерева нужного подразделения его цвет менялся(напр с синего на зелёный) и наоборот при повторном выборе этого же подразделения цвет его менялся с зелёного на синий.

Добавлено: 16 янв 2007, 19:09
aleks1232321
Например, так
Katpodr.name 'Подразделение' ('Подразделение',,) : [50], Protect,
{Font = {Color = if (isValid(#Pick),ColorMark,0)}};

Добавлено: 17 янв 2007, 07:29
lingreen
я так пробывала, цвет меняется только в одну сторону, (напр с синего на зелёный) а обратно нет.

Добавлено: 17 янв 2007, 12:06
m0p3e
{Font = {Color = if (isValid(#Pick),ColorSysBlue,ColorSysGreen)}};

После обработки pick (удаление/вставка) нужно перерисовать панель.
Хотя если цвет не меняется в одну из сторон (UnMark я так понимаю) то вероятно не удаляется запись из pick.

Добавлено: 17 янв 2007, 15:06
lingreen
может, кто подскажет почему цвет не меняется?
interface ForTree 'Выбор подразделений' cyan, doaccept;

create view
var
gnrec,groups: comp;
gkod, gname: string;
as select KatPodr.name, KatPodr.code
from
katPodr,
synonym KatPodr KatP
where ((
KatPodr.Nrec==pick.crec and
1==pick.wlist and
groups== Katpodr.cpodr and
KatPodr.nrec == KatP.cpodr
))
order by KatPodr.Kod;

create view ap
as select *
from pick
where (( 1==pick.wList));
parameters
gnrec;
tree Tr (,,sci14EnIns);
Table KatPodr;
fields
{
font={color =if( isvalid(tnpick) and pick.wlist=1,colorsysTeal,0)}} ;
katpodr.name 'наименование': [50];
KatPodr.kod 'Код подразделения': [15];
end;

handleevent
cmInit:
{ groups:=gnrec;
}
cmDefault:
{ gnrec := katPodr.nrec;
gkod := KatPodr.kod;
gname := KatPodr.name;

}
cmTreeNodeType:
{ if isvalidall(tnKatP)
then TreeSetNodeType(Tr, if(TreeNodeIsOpen(Tr), ntfopen, ntfclose))
else TreeSetNodeType(Tr, ntftext);
}
cmTreeTop: groups :=gnrec;
cmTreeDown: groups:=KatPodr.nrec;
cmTreeUp: groups:=KatPodr.cpodr;

cmMarkUnMark:
{
delete from pick where pick.crec=KatPodr.nrec and 1=pick.wlist;
insert pick set pick.crec:=KatPodr.nrec,
pick.wlist:=1;
reDrawPanel(#KatPodr);
}
end;

end.

Добавлено: 18 янв 2007, 10:21
edward_K
да это круто
delete from pick where pick.crec=KatPodr.nrec and 1=pick.wlist;
правильней так
if isvalid(#pick)
delete current pick
else
insert into pick set pick.crec:=KatPodr.nrec,
pick.wlist:=1;
вместо redrow лучше
Rescanpanel(#katpodr)
наверное когда побегаете по древу, то цвет всетаки отображаеться на помеченной записи?

Добавлено: 22 янв 2007, 11:24
lingreen
спсб за подсказку, если так написать, то работает.
А не могли бы вы подсказать есть ли в випе , что-нибудь похожее на CheckBox, и если есть то как енто использовать?

Добавлено: 22 янв 2007, 12:20
m0p3e
screen scr1;
Fields
WordValue : noProtect;
<<
[.] Мой чекбокс`
>>
или сложнее
screen scr1;
Fields
WordValue : noProtect;
<<
[.] Мой чекбокс 1`
[.] Мой чекбокс 2`
[.] Мой чекбокс 3`
[.] Мой чекбокс 4`
>>
В этой случае в WordValue будет выборка
1+2+4+8
Какой выбран проверить можно например так
Function IsChecked ( Value : word; Item : byte ) : boolean;
Begin
IsChecked := ( ( Value shr ( Item - 1 ) ) and 1 ) = 1;
End;