Модуль "Мое меню" (часть 4) - ConvertBufferToMyMenuStructure

Рубрика: Исходники
Среда, 21 апреля 2010 г.
Просмотров: 139
последняя версия: 3.0.9 build 961 beta
от 07 декабря 2007 г.
procedure TfrmP2K_MyMenu.ConvertBufferToMyMenuStructure(ABuffer: pbytearray; var AMyMenu: TMyMenu);
var
  i: integer;
  pos: integer;
  tmp: string;
  idx: integer;
  xValue: byte;
  iBit: byte;
  res: boolean;
  dw: dword;
  w: word;

begin
  pos:= 0;
  AMyMenu.mType:= 1;
  AMyMenu.xMenu.Index:= ABuffer[pos]; inc(pos);
  AMyMenu.xMenu.MenuType:= ABuffer[pos]; inc(pos);
  AMyMenu.xMenu.Button:=  ABuffer[pos]; inc(pos);
  AvailMenu[AMyMenu.xMenu.Button]:= AMyMenu.xMenu.Button;
  AMyMenu.xMenu.VoiceRecord:= ABuffer[pos]; inc(pos);
  AMyMenu.xMenu.JavaItem:=  ABuffer[pos] * 256 +  ABuffer[pos+1]; inc(pos, 2);
  AMyMenu.xMenu.CommandID:= ABuffer[pos] * 256 +  ABuffer[pos+1]; inc(pos, 2);
  if (AMyMenu.xMenu.MenuType = 5) and (AMyMenu.xMenu.JavaItem = 0)
     then AMyMenu.mType:= 0
     else
  if (AMyMenu.xMenu.MenuType = 0) and (AMyMenu.xMenu.JavaItem = 8)
     then AMyMenu.mType:= 2;
  CopyMemory(@AMyMenu.xMenu.ListItem_id, @ABuffer[pos], 4); inc(pos, 4);
  CopyMemory(@AMyMenu.xMenu.ListItem_tag, @ABuffer[pos], 4); inc(pos, 4);
  CopyMemory(@AMyMenu.xMenu.ValueListItem_id, @ABuffer[pos], 4); inc(pos, 4);
  CopyMemory(@AMyMenu.xMenu.ValueListItem_tag, @ABuffer[pos], 4); inc(pos, 4);
  CopyMemory(@AMyMenu.xMenu.xData, @ABuffer[pos], 4); inc(pos, 4);
  CopyMemory(@AMyMenu.xMenu.dd, @ABuffer[pos], 2); inc(pos, 2);  
  CopyMemory(@AMyMenu.xMenu.StringID, @ABuffer[pos], 2); inc(pos, 2);
  AMyMenu.xMenu.StringID:= convert_word(AMyMenu.xMenu.StringID);
  
  CopyMemory(@AMyMenu.xMenu.Name[1], @ABuffer[pos], 34); inc(pos, 34);
  AMyMenu.xMenu.state_tag:= ABuffer[pos]; inc(pos, 1);
  AMyMenu.xMenu.Trash_modifiable:= ABuffer[pos]; inc(pos, 1);
  //if AMyMenu.MenuType = $05 then AvailMenuLink[AMyMenu.SeemLinkNum+1]:= AMyMenu.SeemLinkNum+1;
  tmp:= '';
//  for i:= 1 to 32 do  tmp:= tmp + AMyMenu.xMenu.Name[pos+i-1];
//  inc(pos, 32);
//  AMyMenu.Name:= UCS2ACSI(tmp, true);
  //check visible
  idx:= AMyMenu.xMenu.Index div 8;  //какой оффсет проверять
  xValue:= SEEM_SHORTCUT_SLOTS[idx];
  iBit:= AMyMenu.xMenu.Index mod 8; //какой бит проверять
  iBit:= Round(power(2, iBit));
  res:= boolean(xValue and iBit);
  AMyMenu.IsVisible:= res;
end;
Rambler's Top100