Еще раз...Множественный выбор в интерфейсе
Модераторы: m0p3e, edward_K, Модераторы
Re: Еще раз...Множественный выбор в интерфейсе
Приветствую всех! Вот поднял темку ископаемую.. Перерыл форум в поиске примера интерфейса группового выбора с использованием маркеров, из любой таблицы с дальнейшим использованием в отчете...не нашел... Может кто поможет начинающему, прислав пример такого интерфейса, чтоб на практике разбираться(по докам не очень понятен механизм выборки с маркерами) , Спасибо.
Re: Еще раз...Множественный выбор в интерфейсе
Это вряд ли. Для разных таблицы - свои интерфейсы, разные способы пометки (через pick - надо знать код pick.wlist, либо через маркер - надо знать имя маркера). Примеры и на предыдущей странице данной темы есть. Вот ещё (выбор видов оплат):alfmaster писал(а):из любой таблицы
Код: Выделить всё
...
.var
...
MarkSt, MarkIn: longint;
...
.endvar
...
.begin
...
RunInterface('Z_ZAR::marknach');
MarkSt:=InitMarker ('VedNach_Marker_New1', 4, 200, 7);
for(MarkIn:=0; MarkIn<=GetMarkerCount(MarkSt)-1; MarkIn:=MarkIn+1)
begin
if GetMarker(MarkSt, MarkIn, VO) then
...
end;
ClearMarker(MarkSt);
DoneMarker(MarkSt, 'VedNach_Marker_New1');
...
end.
...
Re: Еще раз...Множественный выбор в интерфейсе
Попробовал преобразовать пример по маркерам из хелпа под другую таблицу, но что-то упускаю - записи в интерфейсе не помечаются Insert.
Код: Выделить всё
Interface MBPg 'Таблицы системы'
(,hcDictInterface,scExtFiles) EscClose, Cyan;
show at ( 3, 1, 76, 26);
create view AllDictTables
var
Markers : LongInt;
FieldMarkers : LongInt;
IndexNo : LongInt;
(MarkerStr)
As Select
if (SearchMarker(Markers, MBPMove.nrec, IndexNo) = True, 'v', ' '),
* from MBPMove;
Panel pnTablesList;
Table MBPMove;
Browse bwTableList;
Fields
MarkerStr '' :[1], Skip;
MBPMove.nrec 'Nrec' : Protect;
MBPMove.dmove 'дата акта' : Protect;
MBPMove.nom 'номер акта' : Protect;
end;
HandleEvent
cmMarkRec : begin
InvertMarker(Markers, MBPMove.nrec);
if ((GetNext MBPMove) = tsOk) {};
RescanPanel(tnMBPMove);
end;
cmMarkAll : 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
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
ClearMarker(Markers);
RescanPanel(tnMBPMove);
end;
end;
end; // panel
HandleEvent
cmInit : begin
!RunInterface ('F_MBP::SPIS_MBP.GETMBPMOVESPIS') // 'F_MBP::SPIS_MBP.GETMBPMOVESPIS.KATPODR.NAME'
Markers:=InitMarker('SPIS_MBPViewDictMarkers', 2, 1000, 100);
FieldMarkers:=InitMarker('', 2, 20, 20);
end;
cmDone : begin
DoneMarker(Markers, 'ViewDictMarkers');
DoneMarker(FieldMarkers, '');
end;
end;
end.
Re: Еще раз...Множественный выбор в интерфейсе
Так вы свой интерфейс хотите написать? Интересно, зачем?
По-моему, вначале надо вот так прописать:
И команды, вроде бы, другие: cmdomarkunmark, cmselall, cmunselall
По-моему, вначале надо вот так прописать:
Код: Выделить всё
#include GALNET.CCM
#include GALNET.CSC
end;
Re: Еще раз...Множественный выбор в интерфейсе
Да , конечно перед кодом кусок такой присутствует еще с описанием
Код: Выделить всё
#commands start at 50000
const
cmALTQ = 99999; scExtFiles=88888;
end;
StatGal statusline
{
(scExtFiles..scExtFiles)
{
'~F1~ Справка', cmHelp, kbF1;
'~Enter~ Карточка', cmDefault, kbEnter;
'~Ins,+/-, *~ Пометка', cmMarkRec, kbIns;
'', cmMarkAll, kbGrayPlus;
'', cmUnMarkAll, kbGrayMinus;
'', cmInvertMark, kbGrayMul;
'', cmMenu, kbF10;
'', cmZoom, kbF5;
'', cmResize, kbCtrlF5;
'', cmNext, kbF6;
'', cmPrev, kbShiftF6;
'', cmSysMenu, kbCtrlF10;
'', cmLastHelp, kbAltF1;
'', cmQuit, kbAltX;
'', cmMenu, kbF10;
}
}
Re: Еще раз...Множественный выбор в интерфейсе
Размер элемента в маркере д. б. не 2, а 8. Если делать собственную статус-линию, то она перекроет стандартную, все остальные контексты пропадут, так что ищите подходящий контекст среди имеющихся, например, sci1EscIns=6960. И команды тоже стандартные берите cmDoMarkUnMark=1221, cmSelAll=1219, cmUnSelAll=1220.
Re: Еще раз...Множественный выбор в интерфейсе
Но галактический же пример работает из описания языка VIP?- заменил только таблицу и поля вывода, и пометка инсертом пропала Вот рабочий исходник с работающей пометкой записей
Код: Выделить всё
#commands start at 50000
const
cmALTQ = 99999; scExtFiles=88888;
end;
StatGal statusline
{
(scExtFiles..scExtFiles)
{
'~F1~ Справка', cmHelp, kbF1;
'~Enter~ Карточка', cmDefault, kbEnter;
'~Ins,+/-, *~ Пометка', cmMarkRec, kbIns;
'', cmMarkAll, kbGrayPlus;
'', cmUnMarkAll, kbGrayMinus;
'', cmInvertMark, kbGrayMul;
'', cmMenu, kbF10;
'', cmZoom, kbF5;
'', cmResize, kbCtrlF5;
'', cmNext, kbF6;
'', cmPrev, kbShiftF6;
'', cmSysMenu, kbCtrlF10;
'', cmLastHelp, kbAltF1;
'', cmQuit, kbAltX;
'', cmMenu, kbF10;
}
}
Interface katmc 'Таблицы системы'
(,hcDictInterface,scExtFiles) EscClose, Cyan;
show at ( 3, 1, 76, 26);
create view AllDictTables
var
Markers : LongInt;
FieldMarkers : LongInt;
IndexNo : LongInt;
(MarkerStr)
As Select
if (SearchMarker(Markers, x$Files.xf$Code, IndexNo) = True, 'v', ' '),
* from x$Files;
Panel pnTablesList;
Table x$Files;
Browse bwTableList;
Fields
MarkerStr '' :[1], Skip;
x$Files.xf$Code 'Код' : Protect;
x$Files.xf$Name 'Имя таблицы' : Protect;
x$Files.xf$Title 'Заглавие таблицы' : Protect;
end;
HandleEvent
cmMarkRec : begin
InvertMarker(Markers, x$Files.xf$Code);
if ((GetNext x$Files) = tsOk) {};
RescanPanel(tnx$Files);
end;
cmMarkAll : begin
StartNewVisual( vtRotateVisual, vfTimer, 'Помечаю все', 1);
PushPos(tnx$Files);
if ((Modifier GetFirst x$Files) = tsOk)
begin
do
begin
InsertMarker(Markers, x$Files.xf$Code);
NextVisual;
end;
while (Modifier GetNext x$Files = tsOk)
end;
PopPos(tnx$Files);
StopVisual('', 0);
RescanPanel(tnx$Files);
end;
cmInvertMark : begin
StartNewVisual( vtRotateVisual, vfTimer, 'Инвертирую список', 1);
PushPos(tnx$Files);
if ((Modifier GetFirst x$Files) = tsOk)
begin
do
begin
InvertMarker(Markers, x$Files.xf$Code);
NextVisual;
end;
while (Modifier GetNext x$Files = tsOk)
end;
PopPos(tnx$Files);
StopVisual( '', 0);
RescanPanel(tnx$Files);
end;
cmUnMarkAll : begin
ClearMarker(Markers);
RescanPanel(tnx$Files);
end;
end;
end; // panel
HandleEvent
cmInit : begin
Markers:=InitMarker('ViewDictMarkers', 2, 1000, 100);
FieldMarkers:=InitMarker('', 2, 20, 20);
end;
cmDone : begin
DoneMarker(Markers, 'ViewDictMarkers');
DoneMarker(FieldMarkers, '');
end;
end;
end.
Re: Еще раз...Множественный выбор в интерфейсе
1). В примере ключевое поле x$Files.xf$Code типа word, и размер элемента маркера 2. Если вы хотите хранить в маркере NRec-ы, то надо задавать размер 8, а не 2.
2). Пример предполагает замену статус-линии, это возможно в экспериментально-познавательных целях, но никак не в реальной "Галактике".
2). Пример предполагает замену статус-линии, это возможно в экспериментально-познавательных целях, но никак не в реальной "Галактике".
Re: Еще раз...Множественный выбор в интерфейсе
Ну конечно! Спасибо большое - действительно, дело было в длине поля, теперь помечает записи... Теперь надо мне понять, как передать нреки из маркера во вьюху, по которой затем отчет вывести. Продолжаю рыться...