Еще раз...Множественный выбор в интерфейсе
Модераторы: 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: Еще раз...Множественный выбор в интерфейсе
Ну конечно! Спасибо большое - действительно, дело было в длине поля, теперь помечает записи... Теперь надо мне понять, как передать нреки из маркера во вьюху, по которой затем отчет вывести. Продолжаю рыться...