Страница 3 из 4
Re: Еще раз...Множественный выбор в интерфейсе
Добавлено: 22 май 2012, 09:05
RAJAH
alfmaster писал(а):как передать нреки из маркера во вьюху
Завести временную таблицу в памяти с полем типа
comp и сбрасывать нреки туда.
Код: Выделить всё
for(IndexNo:=0; IndexNo<=GetMarkerCount(Markers)-1; IndexNo:=IndexNo+1)
begin
if GetMarker(Markers, IndexNo, tmpnrec) then
insert tmptable set
tmptable.fnrec:=tmpnrec;
end;
Re: Еще раз...Множественный выбор в интерфейсе
Добавлено: 13 июн 2012, 17:02
alfmaster
Подмогите разобраться, почему не помечаются записи с таким статус-лайн
Код: Выделить всё
Interface MBPg 'Выбор актов'
(,hcDictInterface) DoAccept,EscClose, Cyan;
! show at ( 3, 1, 76, 26);
create view vMBPMtable
var
Markers : LongInt;
FieldMarkers : LongInt;
IndexNo : LongInt;
(MarkerStr)
As Select
if (SearchMarker(Markers, MBPMove.nrec, IndexNo) = True, 'v', ' '),
* from MBPMove, katpodr
where (('5'==mbpmove.status
and MBPMove.cpodrf==katpodr.nrec
))
;
form myform ('myform.out');
procedure out_my_form;
{
_loop MBPMove {
if (SearchMarker(Markers, MBPMove.nrec, IndexNo) <> True)
then continue;
! myform.PutEventById(feDoLoop, fcfmMBPMove);
myform.write(MBPMove.nom);
}
if (not myform.error)
then myform.showfile('myform.out')
else
message ('Не получилась форма');
}
Panel pnTablesList;
Table MBPMove;
Browse bwTableList(,,sci1378InsPM);
! show at (,,,15);
Fields
MarkerStr '' :[1], Skip;
! MBPMove.nrec 'Nrec' : Protect;
MBPMove.nom 'номер акта' : Protect;
MBPMove.dmove 'дата акта' : Protect;
katpodr.name 'Подразделение' : Protect;
end;
! screen sc1;
! show at (,16,,);
! buttons
! cmPrint;
!<<
!
! <. Отчет .>
!>>
! end;
! cmMarkUnMark = cmDoMarkUnMark;
HandleEvent
! cmMarkRec : begin
cmDoMarkUnMark : begin
InvertMarker(Markers, MBPMove.nrec);
if ((GetNext MBPMove) = tsOk) {};
RescanPanel(tnMBPMove);
end;
! cmMarkAll : begin
cmSelAll : begin
StartNewVisual( vtRotateVisual, vfTimer, 'Помечаю все', 1);
PushPos(tnMBPMove);
if ((Modifier GetFirst MBPMove) = tsOk)
begin
do
begin
InsertMarker(Markers, MBPMove.nrec);
NextVisual;
end;
while (Modifier GetNext MBPMove = tsOk)
end;
PopPos(tnMBPMove);
StopVisual('', 0);
RescanPanel(tnMBPMove);
end;
! cmInvertMark : begin
cmDoInvertMark : begin
StartNewVisual( vtRotateVisual, vfTimer, 'Инвертирую список', 1);
PushPos(tnMBPMove);
if ((Modifier GetFirst MBPMove) = tsOk)
begin
do
begin
InvertMarker(Markers, MBPMove.nrec);
NextVisual;
end;
while (Modifier GetNext MBPMove = tsOk)
end;
PopPos(tnMBPMove);
StopVisual( '', 0);
RescanPanel(tnMBPMove);
end;
! cmUnMarkAll : begin
cmUnSelAll : begin
ClearMarker(Markers);
RescanPanel(tnMBPMove);
end;
! cmprint: {
! out_my_form;
! }
end;
end; // panel
HandleEvent
cmInit : begin
!RunInterface ('F_MBP::SPIS_MBP.GETMBPMOVESPIS') // 'F_MBP::SPIS_MBP.GETMBPMOVESPIS.KATPODR.NAME'
Markers:=InitMarker('SPIS_MBP', 8, 1000, 100);
FieldMarkers:=InitMarker('', 8, 20, 20);
end;
cmDone : begin
DoneMarker(Markers, 'SPIS_MBP');
DoneMarker(FieldMarkers, '');
end;
end;
end.
Re: Еще раз...Множественный выбор в интерфейсе
Добавлено: 13 июн 2012, 17:14
Den
Быстрее всего потому что в sci1378InsPM по клавише Ins обрабатывается другая команда нежели cmDoMarkUnMark ,а именно cmMarkUnMark
Re: Еще раз...Множественный выбор в интерфейсе
Добавлено: 13 июн 2012, 18:59
alfmaster
cmMarkUnMark - пишет при компиляции ... нет такой команды!
Re: Еще раз...Множественный выбор в интерфейсе
Добавлено: 13 июн 2012, 20:16
n0where
cmMarkUnMark : Word = 1221;
Re: Еще раз...Множественный выбор в интерфейсе
Добавлено: 14 июн 2012, 11:12
Masygreen
Устаревшая конструкция ...
рекомедндуется использовать
Кусочек
Код: Выделить всё
Window wnGetPrice 'Выбор прайс-листов' ('',, sci178InsPM) cyan,AlwaysReturn;
browse br_Head;
Table KLPRICE;
Fields
....
HandleEvent // Interface
//#region
cmMarkUnMark:
{
InvertMarker(_MarkerCrPr, KLPRICE.NREC);
RedrawCurrentAndGo(br_Head,true);
}
cmSelectAll:
{
PushPos(tnKLPRICE);
_loop KLPRICE
InsertMarker(_MarkerCrPr, KLPRICE.NREC);
PopPos(tnKLPRICE);
ReReadRecord(#KLPRICE);
}
cmUnSelectAll:
{
ClearMarker(_MarkerCrPr);
ReReadRecord(#KLPRICE);
}
//#endregion
cmDefault:
{
if(not FoundMarker(_MarkerCrPr, KLPRICE.NREC))
InsertMarker(_MarkerCrPr, KLPRICE.NREC);
CloseWindow(wnGetPrice);
abort;
}
End;
End;
Код: Выделить всё
Const cmSelectAll = cmSelAll;
Const cmUnSelectAll = cmUnSelAll;
Const cmMarkUnMark = cmDoMarkUnMark;
Const cmInvertAll = cmDoInvertMark;
Код: Выделить всё
cmSelAll = 1219;
cmUnSelAll = 1220;
cmDoMarkUnMark = 1221;
cmDoInvertMark = 1222;
Re: Еще раз...Множественный выбор в интерфейсе
Добавлено: 14 июн 2012, 14:24
alfmaster
Блин, выбрал стандартный статуслайн из GALNET.CSC (sci178InsPM = 6959;)
прописал в GALNET.CCM
Код: Выделить всё
cmSelAll = 1219;
cmUnSelAll = 1220;
cmDoMarkUnMark = 1221;
cmDoInvertMark = 1222;
cmSelectAll = cmSelAll;
cmUnSelectAll = cmUnSelAll;
cmMarkUnMark = cmDoMarkUnMark;
cmInvertAll = cmDoInvertMark;
поправил в фейсе и все равно не помечаются записи
Код: Выделить всё
Interface MBPg 'Выбор актов'
(,hcDictInterface) DoAccept,EscClose, Cyan;
! show at ( 3, 1, 76, 26);
create view vMBPMtable
var
Markers : LongInt;
FieldMarkers : LongInt;
IndexNo : LongInt;
(MarkerStr)
As Select
if (SearchMarker(Markers, MBPMove.nrec, IndexNo) = True, 'v', ' '),
* from MBPMove, katpodr
where (('5'==mbpmove.status
and MBPMove.cpodrf==katpodr.nrec
))
;
form myform ('myform.out');
procedure out_my_form;
{
_loop MBPMove {
if (SearchMarker(Markers, MBPMove.nrec, IndexNo) <> True)
then continue;
! myform.PutEventById(feDoLoop, fcfmMBPMove);
myform.write(MBPMove.nom);
}
if (not myform.error)
then myform.showfile('myform.out')
else
message ('Не получилась форма');
}
Panel pnTablesList;
Table MBPMove;
Browse bwTableList(,,sci178InsPM);
! show at (,,,15);
Fields
MarkerStr '' :[1], Skip;
! MBPMove.nrec 'Nrec' : Protect;
MBPMove.nom 'номер акта' : Protect;
MBPMove.dmove 'дата акта' : Protect;
katpodr.name 'Подразделение' : Protect;
end;
! screen sc1;
! show at (,16,,);
! buttons
! cmPrint;
!<<
!
! <. Отчет .>
!>>
! end;
! cmMarkUnMark = cmDoMarkUnMark;
HandleEvent
! cmMarkRec : begin
cmDoMarkUnMark : begin
InvertMarker(Markers, MBPMove.nrec);
if ((GetNext MBPMove) = tsOk) {};
RescanPanel(tnMBPMove);
end;
! cmMarkAll : begin
cmSelAll : begin
StartNewVisual( vtRotateVisual, vfTimer, 'Помечаю все', 1);
PushPos(tnMBPMove);
if ((Modifier GetFirst MBPMove) = tsOk)
begin
do
begin
InsertMarker(Markers, MBPMove.nrec);
NextVisual;
end;
while (Modifier GetNext MBPMove = tsOk)
end;
PopPos(tnMBPMove);
StopVisual('', 0);
RescanPanel(tnMBPMove);
end;
! cmInvertMark : begin
cmDoInvertMark : begin
StartNewVisual( vtRotateVisual, vfTimer, 'Инвертирую список', 1);
PushPos(tnMBPMove);
if ((Modifier GetFirst MBPMove) = tsOk)
begin
do
begin
InvertMarker(Markers, MBPMove.nrec);
NextVisual;
end;
while (Modifier GetNext MBPMove = tsOk)
end;
PopPos(tnMBPMove);
StopVisual( '', 0);
RescanPanel(tnMBPMove);
end;
! cmUnMarkAll : begin
cmUnSelAll : begin
ClearMarker(Markers);
RescanPanel(tnMBPMove);
end;
! cmprint: {
! out_my_form;
! }
end;
end; // panel
HandleEvent
cmInit : begin
!RunInterface ('F_MBP::SPIS_MBP.GETMBPMOVESPIS') // 'F_MBP::SPIS_MBP.GETMBPMOVESPIS.KATPODR.NAME'
Markers:=InitMarker('SPIS_MBP', 8, 1000, 100);
FieldMarkers:=InitMarker('', 8, 20, 20);
end;
cmDone : begin
DoneMarker(Markers, 'SPIS_MBP');
DoneMarker(FieldMarkers, '');
end;
end;
end.
Re: Еще раз...Множественный выбор в интерфейсе
Добавлено: 15 июн 2012, 10:54
Masygreen
Ну вот вам полный код Wind .. соберите посмотрите как работает.. потом внедрите сюда свои данные
Код: Выделить всё
Interface inCreatePrice (,,sci178InsPM) cyan,AlwaysReturn;;
var
_MarkerCrPr:longint;
create view
from KLPRICE,KATNOTES
Where (( KLPRICE.CNOTE == KATNOTES.nrec))
;
cmInit:
{
_MarkerCrPr := InitMarker('PriceChose', 8, 100, 10);
ClearMarker(_MarkerCrPr);
RunWindowModal(wnGetPrice);
Код: Выделить всё
Window wnGetPrice 'Выбор прайс-листов' ('',, sci178InsPM) cyan,AlwaysReturn;
show at(2,12,260,34);
browse br_Head;
Table KLPRICE;
Fields
KLPRICE.NAME #3'Наименование':[50] ,Protect,{font={bold=if(FoundMarker(_MarkerCrPr, KLPRICE.NREC), true, false);}};
KLPRICE.DPRICE #3'Дата цен':[10] ,Protect,{font={bold=if(FoundMarker(_MarkerCrPr, KLPRICE.NREC), true, false);}};
KLPRICE.DBEG #3'с:':[10] ,Protect,{font={bold=if(FoundMarker(_MarkerCrPr, KLPRICE.NREC), true, false);}};
KLPRICE.DEND #3'по:':[10] ,Protect,{font={bold=if(FoundMarker(_MarkerCrPr, KLPRICE.NREC), true, false);}};
KATNOTES.NAME #3'Статус':[20] ,Protect,{font={bold=if(FoundMarker(_MarkerCrPr, KLPRICE.NREC), true, false);}};
end;
HandleEvent // Interface
//#region
cmMarkUnMark:
{
InvertMarker(_MarkerCrPr, KLPRICE.NREC);
RedrawCurrentAndGo(br_Head,true);
}
cmSelectAll:
{
PushPos(tnKLPRICE);
_loop KLPRICE
InsertMarker(_MarkerCrPr, KLPRICE.NREC);
PopPos(tnKLPRICE);
ReReadRecord(#KLPRICE);
}
cmUnSelectAll:
{
ClearMarker(_MarkerCrPr);
ReReadRecord(#KLPRICE);
}
//#endregion
cmDefault:
{
if(not FoundMarker(_MarkerCrPr, KLPRICE.NREC))
InsertMarker(_MarkerCrPr, KLPRICE.NREC);
CloseWindow(wnGetPrice);
abort;
}
End;
End;
Re: Еще раз...Множественный выбор в интерфейсе
Добавлено: 15 июн 2012, 11:11
alfmaster
ПАСИБ! Проштудирую сейчас!
Re: Еще раз...Множественный выбор в интерфейсе
Добавлено: 18 июн 2012, 16:12
alfmaster
не вник.... может кто на моем премере поправит?
Re: Еще раз...Множественный выбор в интерфейсе
Добавлено: 11 сен 2012, 16:56
zna
Тоже вот пытаюсь осилить тему.. Повторил пример Masygreen'a:
Код: Выделить всё
#include GALNET.CCM
#include GALNET.CSC
cmSelAll = 1219;
cmUnSelAll = 1220;
cmDoMarkUnMark = 1221;
cmDoInvertMark = 1222;
Const
cmSelectAll = cmSelAll;
cmUnSelectAll = cmUnSelAll;
cmMarkUnMark = cmDoMarkUnMark;
cmInvertAll = cmDoInvertMark;
end;
Interface inCreatePrice (,,sci178InsPM) cyan, AlwaysReturn;
var
_MarkerCrPr:longint;
create view from KLPRICE,KATNOTES
Where (( KLPRICE.CNOTE == KATNOTES.nrec))
;
Window wnGetPrice 'Выбор прайс-листов' ('',, sci178InsPM) cyan,AlwaysReturn;
show at(2,12,260,34);
browse br_Head;
Table KLPRICE;
Fields
KLPRICE.NAME #3'Наименование':[50] ,Protect,{font={bold=if(FoundMarker(_MarkerCrPr, KLPRICE.NREC), true, false);}};
KLPRICE.DPRICE #3'Дата цен':[10] ,Protect,{font={bold=if(FoundMarker(_MarkerCrPr, KLPRICE.NREC), true, false);}};
KLPRICE.DBEG #3'с:':[10] ,Protect,{font={bold=if(FoundMarker(_MarkerCrPr, KLPRICE.NREC), true, false);}};
KLPRICE.DEND #3'по:':[10] ,Protect,{font={bold=if(FoundMarker(_MarkerCrPr, KLPRICE.NREC), true, false);}};
KATNOTES.NAME #3'Статус':[20] ,Protect,{font={bold=if(FoundMarker(_MarkerCrPr, KLPRICE.NREC), true, false);}};
end;
end;
HandleEvent // Interface
cmInit:
{
_MarkerCrPr := InitMarker('PriceChose', 8, 100, 10);
ClearMarker(_MarkerCrPr);
RunWindowModal(wnGetPrice);
}
cmMarkUnMark:
{ Message('cmMarkUnMark');
InvertMarker(_MarkerCrPr, KLPRICE.NREC);
RedrawCurrentAndGo(br_Head,true);
}
cmSelectAll:
{
PushPos(tnKLPRICE);
_loop KLPRICE
InsertMarker(_MarkerCrPr, KLPRICE.NREC);
PopPos(tnKLPRICE);
ReReadRecord(#KLPRICE);
}
cmUnSelectAll:
{
ClearMarker(_MarkerCrPr);
ReReadRecord(#KLPRICE);
}
cmDefault:
{
if(not FoundMarker(_MarkerCrPr, KLPRICE.NREC))
InsertMarker(_MarkerCrPr, KLPRICE.NREC);
CloseWindow(wnGetPrice);
abort;
}
end;
end.
- строка статуса появилась с кнопками "Ins", "+","-"
но записи не помечаются. И не генерится событие cmMarkUnMark.
Что не так?
Re: Еще раз...Множественный выбор в интерфейсе
Добавлено: 11 сен 2012, 17:42
KATZ
События от статус-линии попадают в обработчик текущего окна, а у вас код их обработки вставлен в обработчик главного окна.
Да и вообще доп. окно здесь не требуется, только сложности лишние от него.
Re: Еще раз...Множественный выбор в интерфейсе
Добавлено: 12 сен 2012, 08:19
zna
О как.. Да, убрал дополнительное окно, и записи стали помечаться! Копаю дальше..
KATZ +1
Re: Еще раз...Множественный выбор в интерфейсе
Добавлено: 12 сен 2012, 12:21
zna
Почти сделал интерфейс, в котором записи помечаются нормально и маркер, я надеюсь создаётся тоже нормально. Осталось дописать выход по нажатию Enter- вот здесь нужна подсказка. В интерфейсе объявлена панель, в которой делается пометка, вопрос- как нормально выйти из обработчика панели, а потом и из обработчика главного окна? Код сейчас такой:
Код: Выделить всё
Interface McSaldo 'Просмотр Мс' escclose,blue,AlwaysReturn, doAccept;
Show at (1,1,150,40);
... //Здесь view и прочая..
Panel Panel_ ;
Table t_SldDt;
Screen scMain_
show at (, , , 5);
fields
dsld: noProtect;
Buttons
cmSetDate,,,;
cmSetAll,,,;
<<
<. Остатки МЦ на дату: .> .@@@@@@@@@@
<. Показать все МЦ: .>
>>
end;
browse bmnpl (,,sci178InsPM) ;
show at (,6 , , );
fields
t_SldDt.dSaldoSt1 'Дата остатков': [10], protect, {font = {bold = if(FoundMarker(_MarkerMcSaldo, t_SldDt.cMc1), true, false);}};
t_SldDt.McName1 'Наименование' : [40], protect, {font = {bold = if(FoundMarker(_MarkerMcSaldo, t_SldDt.cMc1), true, false);}};
t_SldDt.McKod1 'Код' : [10], protect, {font = {bold = if(FoundMarker(_MarkerMcSaldo, t_SldDt.cMc1), true, false);}};
t_SldDt.PodrMame1 'Склад' : [20], protect, {font = {bold = if(FoundMarker(_MarkerMcSaldo, t_SldDt.cMc1), true, false);}};
t_SldDt.MolName1 'МОЛ' : [20], protect, {font = {bold = if(FoundMarker(_MarkerMcSaldo, t_SldDt.cMc1), true, false);}};
t_SldDt.EdIzm1 'Ед. изм.' : [10], protect, {font = {bold = if(FoundMarker(_MarkerMcSaldo, t_SldDt.cMc1), true, false);}};
t_SldDt.Kol1 'Количество' : [10], protect, {font = {bold = if(FoundMarker(_MarkerMcSaldo, t_SldDt.cMc1), true, false);}};
t_SldDt.Cena1 'Цена' : [10], protect, {font = {bold = if(FoundMarker(_MarkerMcSaldo, t_SldDt.cMc1), true, false);}};
end;
HandleEvent //Обработчик Panel_
cmMarkUnMark:
{
InvertMarker(_MarkerMcSaldo, t_SldDt.cMc1);
RedrawCurrentAndGo(bmnpl,true);
RescanPanel(#t_SldDt);
}
cmSetDate:
{
...}
cmSetAll:
{
...
}
cmCancel:
{
closeinterface(cmDone);
mtChangeRefCount( #t_slddt, -1 );
}
cmDefault:
{
if(not FoundMarker(_MarkerMcSaldo, t_slddt.cmc1))
InsertMarker(_MarkerMcSaldo, t_slddt.cmc1);
DoneMarker (_MarkerMcSaldo, 'McChose');
abort;
}
end; // HandleEvent панели
end; // Panel
HandleEvent //Обработчик главного окна
cmInit:
{
...
}
cmDefault: //непонятно, как сюда нормально перейти
{
abort;
}
end; // HandleEvent
end. // interface
Хочется после пометки записей выйти по одному нажатию Enter.
Re: Еще раз...Множественный выбор в интерфейсе
Добавлено: 12 сен 2012, 15:48
edward_K
if(not FoundMarker(_MarkerMcSaldo, t_slddt.cmc1))
InsertMarker(_MarkerMcSaldo, t_slddt.cmc1);
- это должно быть в главном обработчике. Вообще обычно проверяют было ли что-то выбрано, если нет добавляют текущую.
Гасить маркер надо в cmDone в главном обработчике.
и без всяких abort - кто вам сказал, что это надо всегда писать?
Если вы хотите что то другое по Enter, то уберите DoAccept из заголовка фейса и обрабатывайте cmDefault сами (closeinterface(cmDefault) например) - я так одним фейсом управляю редактированием и выбором - в зависимости от режима окно закрывается или нет.