Модуль "Мое меню" (часть 1) - определение переменных и типов данных

Рубрика: Исходники
Среда, 21 апреля 2010 г.
Просмотров: 127
последняя версия: 3.0.9 build 961 beta
от 07 декабря 2007 г.
unit uMyMenu;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, DynamicSkinForm, SkinCtrls, StdCtrls, ComCtrls, ExtCtrls, ufrmProgress,
  math, up2kapi, ImgList, PngImageList, Menus, SkinMenus;
type
  TShortcutMenu = packed record
    Index: byte;       //offset 00h
    MenuType: byte;   //offset 01h   05 - link
    Button: Byte;      //offset 02h
    VoiceRecord: byte; //offset 03h     -  Fe - no, 01 - yes
    JavaItem: word;   //offset 04h  - 05h  ----- 0 для всего кроме ява, ява - 8
    CommandID: word; //offset 06h  - 07h
    ListItem_id: dword;
    ListItem_tag: dword; //LinkLength
    ValueListItem_id:  dword;
    ValueListItem_tag: dword;  //Trash_02_2: array [0..7] of byte; //offset 10h  - 17h
    xData: dword; //SeemLinkNum
    dd: word;
    StringID: word; //array [0..1] of byte; //offset 1eh  - 1fh
    Name: string[34];
    state_tag: byte;
    Trash_modifiable: byte;
  end;

  TMyMenu = packed record
    IsVisible: boolean;
    mType: byte; // 0 - link, 1 - menu, 2 - java
    xMenu: TShortcutMenu;
    Link: string[200];
  end;
type
  TMyMenuLinks = packed record
    Index: byte;
    Trash01: byte;
    LinkLength: byte;
    LinkName: string[100];
  end;
type
  TWebShortcuts = packed record  //1264  или 2112
    Visible: byte; // всегда $11 - видим$, 00 - невидим
    AllowDelete: byte; //$01 - locked, $00 - unlocked
    x2: byte;
    xType: byte; //$00, $03, $B4 - не знаю что за параметры
    Index: dword; // перевернутый, это все же индекс
    Name: array [0..51] of byte; //unicode, в конце $00 $00
    Url: array[0..1203] of char; //asci? далее 00
  end;
  TWebShortcuts2 = packed record  //1264  или 2112
    Visible: byte; // всегда $11 - видим$, 00 - невидим
    AllowDelete: byte; //$01 - locked, $00 - unlocked
    x2: byte;
    xType: byte; //$00, $03, $B4 - не знаю что за параметры
    Index: dword; // перевернутый, это все же индекс
    Name: array [0..51] of byte; //unicode, в конце $00 $00
    Url: array[0..2051] of char; //asci? далее 00
  end;
  // а еще в конце 4 байта - хз что , может просто мусор?
  // еще какой-то байт отвечает за видимость
const
  MY_MENU_SIZE = 68;
  MY_MENU_LINK_SIZE = 102;
  MY_WEB_SHORTCUT_SIZE = 1264;
  MY_WEB_SHORTCUT_SIZE_2 = 2112;  // K3  
type
  TArrayOfMyMenu = array [1..100] of  TMyMenu; {01 .. $64}
  TArrayOfMyMenuLinks = array [1..50] of  TMyMenuLinks; {01 .. $64}
  TArrWebShortcuts = array of TWebShortcuts;
  TArrWebShortcuts2 = array of TWebShortcuts2;
type
  TfrmP2K_MyMenu = class(TFrame)
    spSkinFrame1: TspSkinFrame;
    Panel1: TspSkinPanel;
    spSkinExPanel1: TspSkinExPanel;
    spSkinExPanel2: TspSkinExPanel;
    spSkinSplitter1: TspSkinSplitter;
    spSkinPanel1: TspSkinPanel;
    spSkinScrollBar1: TspSkinScrollBar;
    spSkinScrollBar2: TspSkinScrollBar;
    spSkinListView1: TspSkinListView;
    spSkinPanel4: TspSkinPanel;
    spSkinScrollBar3: TspSkinScrollBar;
    spSkinScrollBar4: TspSkinScrollBar;
    spSkinListView2: TspSkinListView;
    spSkinPanel2: TspSkinPanel;
    AdvGlowButton1: TspSkinSpeedButton;
    spSkinSpeedButton1: TspSkinSpeedButton;
    spSkinSpeedButton2: TspSkinSpeedButton;
    spSkinPanel3: TspSkinPanel;
    spSkinSpeedButton3: TspSkinSpeedButton;
    spSkinSpeedButton4: TspSkinSpeedButton;
    spSkinSpeedButton5: TspSkinSpeedButton;
    procedure AdvGlowButton3Click(Sender: TObject);
    procedure AdvGlowButton1Click(Sender: TObject);
    procedure spSkinSpeedButton1Click(Sender: TObject);
    procedure spSkinListView1DblClick(Sender: TObject);
    procedure spSkinSpeedButton4Click(Sender: TObject);
    procedure spSkinListView2DblClick(Sender: TObject);
    procedure spSkinSpeedButton3Click(Sender: TObject);
    procedure spSkinSpeedButton5Click(Sender: TObject);
    procedure spSkinSpeedButton2Click(Sender: TObject);
    procedure spSkinListView1MouseDown(Sender: TObject;
      Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
    procedure spSkinListView2MouseDown(Sender: TObject;
      Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
  private
    { Private declarations }
  public
    { Public declarations }
    procedure ReadMyMenu;
    procedure GetMyMenu(var AMyMenu: TArrayOfMyMenu; var AMyMenuLink: TArrayOfMyMenuLinks; AfrmProgress: TfrmProgress);
    procedure ConvertBufferToMyMenuStructure(ABuffer: pbytearray; var AMyMenu: TMyMenu);
    procedure ConvertBufferToMyMenuLinkStructure(ABuffer: pbytearray; var AMyMenuLink: TMyMenuLinks);
    procedure FillList(AMyMenu: TArrayOfMyMenu; AMyMenuLink: TArrayOfMyMenuLinks);
    function GetWebShortcuts(ASize: integer; var AWebShortcuts : TArrWebShortcuts; AfrmProgress: TfrmProgress): boolean; overload;
    function GetWebShortcuts(ASize: integer; var AWebShortcuts : TArrWebShortcuts2; AfrmProgress: TfrmProgress): boolean; overload;    
    procedure FillList2(AWebShortcuts : TArrWebShortcuts); overload;
    procedure FillList2(AWebShortcuts : TArrWebShortcuts2); overload;    
    procedure ConvertMyMenuStructureToBuffer(AMyMenu: TMyMenu; var ABuffer: pbytearray);
    procedure ConvertMyMenuLinkStructureToBuffer(AMyMenuLink: TMyMenuLinks; var ABuffer: pbytearray);
    procedure WebShortcuts_applyChanges(AWebShortcuts : TArrWebShortcuts); overload;
    procedure WebShortcuts_applyChanges(AWebShortcuts : TArrWebShortcuts2); overload;
    function GetShortcutType(AfrmProgress: TfrmProgress; var ASize: integer): integer;
    procedure EditMyMenu;
    procedure AddMyMenu;
    procedure DeleteMyMenu;
    procedure EditWebShortCuts;
    procedure AddWebShortCuts;
    procedure DeleteWebShortCuts;    
  end;
var
  frmP2K_MyMenu: TfrmP2K_MyMenu;
  xMyMenu: TArrayOfMyMenu;
  AvailMenu: array [1..100] of byte;
  xMyMenuLink: TArrayOfMyMenuLinks;
  AvailMenuLink: array [1..50] of byte;
  SEEM_SHORTCUT_SLOTS: array [0..13] of byte;
  xWebShortcuts : TArrWebShortcuts = nil;
  xWebShortcuts2 : TArrWebShortcuts2 = nil;  
  //xWebShortcuts : integer = 0;
  curMyMenuButton: integer = 0;
  xWebShortCutType : byte = 0; // 0 - 1264, 1 - 2112
implementation
uses uMain, uSpecialUtils, uMyMenuProps, uWebShortCuts, uLng;
{$R *.dfm}
Rambler's Top100