home *** CD-ROM | disk | FTP | other *** search
/ Chip 2003 January / Chip_2003-01_cd1.bin / zkuste / delphi / kolekce / d567 / FLEXCEL.ZIP / XLSAdapter / XlsMessages.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  2002-10-02  |  21.7 KB  |  655 lines

  1. unit XlsMessages;
  2. {*$DEFINE SPANISH}
  3.  
  4. interface
  5. uses SysUtils, UFlxMessages;
  6.  
  7. resourcestring
  8. {$IFDEF SPANISH}
  9.   {$INCLUDE XlsSpanish.inc}
  10. {$ELSE}
  11. {$IFDEF FRENCH}
  12.   {$INCLUDE XlsFrench.inc}
  13. {$ELSE}
  14. {$IFDEF ITALIAN}
  15.   {$INCLUDE XlsItalian.inc}
  16. {$ELSE}
  17.   {$INCLUDE XlsEnglish.inc}
  18. {$ENDIF}
  19. {$ENDIF}
  20. {$ENDIF}
  21.  
  22.   WorkbookStrS='Workbook';
  23.  
  24.   //Error Codes
  25.     xlerr_Null  = '#NULL!';
  26.     xlerr_Div0  = '#DIV/0!';
  27.     xlerr_Value = '#VALUE!';
  28.     xlerr_Ref   = '#REF!';
  29.     xlerr_Name  = '#NAME?';
  30.     xlerr_Num   = '#NUM!';
  31.     xlerr_NA    = '#N/A';
  32.  
  33.     //MADE: Traducir mensajes
  34.  
  35. const
  36.  
  37.     xlerrcode_Null  = $00;
  38.     xlerrcode_Div0  = $07;
  39.     xlerrcode_Value = $0F;
  40.     xlerrcode_Ref   = $17;
  41.     xlerrcode_Name  = $1D;
  42.     xlerrcode_Num   = $24;
  43.     xlerrcode_NA    = $2A;
  44.  
  45.  
  46.   MaxRecordDataSize=8223;
  47.   MaxExternSheetDataSize= 8220;  // 1370 records of 6 bytes each, and 2 bytes for the count
  48.   MaxHPageBreaks=1025;
  49. type
  50.   ArrayOfByte = array[0..maxint div 2] of byte;
  51.   PArrayOfByte=^ArrayOfByte;
  52.  
  53.   TRecordHeader = packed record
  54.     Id: word;
  55.     Size: word;
  56.   end;
  57.  
  58.   PRecordHeader= ^TRecordHeader;
  59.  
  60.   EExcelException=class (Exception)
  61.   end;
  62.  
  63.   TGetSheet=function(const aSheetRef: word): integer of object;
  64.  
  65.   TSheetInfo= record
  66.     InsSheet, FormulaSheet: integer;
  67.     GetSheet, SetSheet: TGetSheet;
  68.   end;
  69.  
  70. const
  71.   Max_Columns       = 255;
  72.   Max_Rows          = 65535; //0 based
  73.   MaxSheets         = 250;
  74.  
  75.  
  76.   xlr_BofVersion    = $0600;
  77.  
  78.   xlb_Globals       = $0005;
  79.   xlb_Worksheet     = $0010;
  80.   xlb_Chart         = $0020;
  81.  
  82.  
  83.  
  84.   xlr_INTEGER                    = $0002;
  85.   xlr_FORMULA                    = $0006;
  86.   xlr_EOF                        = $000A;
  87.  
  88.   xlr_CALCCOUNT                  = $000C;
  89.   xlr_CALCMODE                   = $000D;
  90.   xlr_PRECISION                  = $000E;
  91.   xlr_REFMODE                    = $000F;
  92.   xlr_DELTA                      = $0010;
  93.   xlr_ITERATION                  = $0011;
  94.   xlr_PROTECT                    = $0012;
  95.   xlr_PASSWORD                   = $0013;
  96.   xlr_HEADER                     = $0014;
  97.   xlr_FOOTER                     = $0015;
  98.   xlr_EXTERNCOUNT                = $0016;
  99.   xlr_EXTERNSHEET                = $0017;
  100.   xlr_NAME                       = $0018;
  101.  
  102.   xlr_WINDOWPROTECT              = $0019;
  103.   xlr_VERTICALPAGEBREAKS         = $001A;
  104.   xlr_HORIZONTALPAGEBREAKS       = $001B;
  105.   xlr_NOTE                       = $001C;
  106.   xlr_SELECTION                  = $001D;
  107.  
  108.   xlr_FORMATCOUNT                = $001F;
  109.   xlr_COLUMNDEFAULT              = $0020;
  110.  
  111.   xlr_1904                       = $0022;
  112.  
  113.   xlr_COLWIDTH                   = $0024;
  114.  
  115.   xlr_LEFTMARGIN                 = $0026;
  116.   xlr_RIGHTMARGIN                = $0027;
  117.   xlr_TOPMARGIN                  = $0028;
  118.   xlr_BOTTOMMARGIN               = $0029;
  119.   xlr_PRINTHEADERS               = $002A;
  120.   xlr_PRINTGRIDLINES             = $002B;
  121.   xlr_FILEPASS                   = $002F;
  122.  
  123.   xlr_PRINTSIZE                  = $0033;
  124.  
  125.   xlr_CONTINUE                   = $003C;
  126.   xlr_WINDOW1                    = $003D;
  127.  
  128.   xlr_BACKUP                     = $0040;
  129.   xlr_PANE                       = $0041;
  130.   xlr_CODEPAGE                   = $0042;
  131.  
  132.   xlr_IXFE                       = $0044;
  133.   xlr_PLS                        = $004D;
  134.   xlr_DCON                       = $0050;
  135.   xlr_DCONREF                    = $0051;
  136.   xlr_DCONNAME                   = $0053;
  137.   xlr_DEFCOLWIDTH                = $0055;
  138.   xlr_BUILTINFMTCNT              = $0056;
  139.   xlr_XCT                        = $0059;
  140.   xlr_CRN                        = $005A;
  141.   xlr_FILESHARING                = $005B;
  142.   xlr_WRITEACCESS                = $005C;
  143.   xlr_OBJ                        = $005D;
  144.   xlr_UNCALCED                   = $005E;
  145.   xlr_SAFERECALC                 = $005F;
  146.   xlr_TEMPLATE                   = $0060;
  147.   xlr_OBJPROTECT                 = $0063;
  148.   xlr_COLINFO                    = $007D;
  149.  
  150.   xlr_IMDATA                     = $007F;
  151.   xlr_GUTS                       = $0080;
  152.   xlr_WSBOOL                     = $0081;
  153.   xlr_GRIDSET                    = $0082;
  154.   xlr_HCENTER                    = $0083;
  155.   xlr_VCENTER                    = $0084;
  156.   xlr_BOUNDSHEET                 = $0085;
  157.   xlr_WRITEPROT                  = $0086;
  158.   xlr_ADDIN                      = $0087;
  159.   xlr_EDG                        = $0088;
  160.   xlr_PUB                        = $0089;
  161.   xlr_COUNTRY                    = $008C;
  162.   xlr_HIDEOBJ                    = $008D;
  163.   xlr_BUNDLESOFFSET              = $008E;
  164.   xlr_BUNDLEHEADER               = $008F;
  165.   xlr_SORT                       = $0090;
  166.   xlr_SUB                        = $0091;
  167.   xlr_PALETTE                    = $0092;
  168.  
  169.   xlr_LHRECORD                   = $0094;
  170.   xlr_LHNGRAPH                   = $0095;
  171.   xlr_SOUND                      = $0096;
  172.   xlr_LPR                        = $0098;
  173.   xlr_STANDARDWIDTH              = $0099;
  174.   xlr_FNGROUPNAME                = $009A;
  175.   xlr_FILTERMODE                 = $009B;
  176.   xlr_FNGROUPCOUNT               = $009C;
  177.   xlr_AUTOFILTERINFO             = $009D;
  178.   xlr_AUTOFILTER                 = $009E;
  179.   xlr_SCL                        = $00A0;
  180.   xlr_SETUP                      = $00A1;
  181.   xlr_COORDLIST                  = $00A9;
  182.   xlr_GCW                        = $00AB;
  183.   xlr_SCENMAN                    = $00AE;
  184.   xlr_SCENARIO                   = $00AF;
  185.   xlr_SXVIEW                     = $00B0;
  186.   xlr_SXVD                       = $00B1;
  187.   xlr_SXVI                       = $00B2;
  188.   xlr_SXIVD                      = $00B4;
  189.   xlr_SXLI                       = $00B5;
  190.   xlr_SXPI                       = $00B6;
  191.   xlr_DOCROUTE                   = $00B8;
  192.   xlr_RECIPNAME                  = $00B9;
  193.  
  194.   xlr_MULRK                      = $00BD;
  195.   xlr_MULBLANK                   = $00BE;
  196.   xlr_MMS                        = $00C1;
  197.   xlr_ADDMENU                    = $00C2;
  198.   xlr_DELMENU                    = $00C3;
  199.   xlr_SXDI                       = $00C5;
  200.   xlr_SXDB                       = $00C6;
  201.   xlr_SXFIELD                    = $00C7;
  202.   xlr_SXINDEXLIST                = $00C8;
  203.   xlr_SXDOUBLE                   = $00C9;
  204.   xlr_SXSTRING                   = $00CD;
  205.   xlr_SXDATETIME                 = $00CE;
  206.   xlr_SXTBL                      = $00D0;
  207.   xlr_SXTBRGITEM                 = $00D1;
  208.   xlr_SXTBPG                     = $00D2;
  209.   xlr_OBPROJ                     = $00D3;
  210.   xlr_SXIDSTM                    = $00D5;
  211.   xlr_RSTRING                    = $00D6;
  212.   xlr_DBCELL                     = $00D7;
  213.   xlr_BOOKBOOL                   = $00DA;
  214.   xlr_SXEXTPARAMQRY              = $00DC;
  215.   xlr_SCENPROTECT                = $00DD;
  216.   xlr_OLESIZE                    = $00DE;
  217.   xlr_UDDESC                     = $00DF;
  218.  
  219.   xlr_INTERFACEHDR               = $00E1;
  220.   xlr_INTERFACEEND               = $00E2;
  221.   xlr_SXVS                       = $00E3;
  222.   xlr_CELLMERGING                = $00E5;
  223.   xlr_BITMAP                     = $00E9;
  224.   xlr_MSODRAWINGGROUP            = $00EB;
  225.   xlr_MSODRAWING                 = $00EC;
  226.   xlr_MSODRAWINGSELECTION        = $00ED;
  227.   xlr_PHONETIC                   = $00EF;
  228.   xlr_SXRULE                     = $00F0;
  229.   xlr_SXEX                       = $00F1;
  230.   xlr_SXFILT                     = $00F2;
  231.   xlr_SXNAME                     = $00F6;
  232.   xlr_SXSELECT                   = $00F7;
  233.   xlr_SXPAIR                     = $00F8;
  234.   xlr_SXFMLA                     = $00F9;
  235.   xlr_SXFORMAT                   = $00FB;
  236.   xlr_SST                        = $00FC;
  237.   xlr_LABELSST                   = $00FD;
  238.   xlr_EXTSST                     = $00FF;
  239.   xlr_SXVDEX                     = $0100;
  240.   xlr_SXFORMULA                  = $0103;
  241.   xlr_SXDBEX                     = $0122;
  242.   xlr_CHTRINSERT                 = $0137;
  243.   xlr_CHTRINFO                   = $0138;
  244.   xlr_CHTRCELLCONTENT            = $013B;
  245.   xlr_TABID                      = $013D;
  246.   xlr_CHTRMOVERANGE              = $0140;
  247.   xlr_CHTRINSERTTAB              = $014D;
  248.   xlr_USESELFS                   = $0160;
  249.   xlr_XL5MODIFY                  = $0162;
  250.   xlr_CHTRHEADER                 = $0196;
  251.   xlr_USERBVIEW                  = $01A9;
  252.   xlr_USERSVIEWBEGIN             = $01AA;
  253.   xlr_USERSVIEWEND               = $01AB;
  254.   xlr_QSI                        = $01AD;
  255.   xlr_SUPBOOK                    = $01AE;
  256.   xlr_PROT4REV                   = $01AF;
  257.   xlr_DSF                        = $0161;
  258.   xlr_CONDFMT                    = $01B0;
  259.   xlr_CF                         = $01B1;
  260.   xlr_DVAL                       = $01B2;
  261.   xlr_DCONBIN                    = $01B5;
  262.   xlr_TXO                        = $01B6;
  263.   xlr_REFRESHALL                 = $01B7;
  264.   xlr_HLINK                      = $01B8;
  265.   xlr_CODENAME                   = $01BA;
  266.   xlr_SXFDBTYPE                  = $01BB;
  267.   xlr_PROT4REVPASS               = $01BC;
  268.   xlr_DV                         = $01BE;
  269.   xlr_XL9FILE                    = $01C0;
  270.   xlr_RECALCID                   = $01C1;
  271.   xlr_DIMENSIONS                 = $0200;
  272.   xlr_BLANK                      = $0201;
  273.   xlr_NUMBER                     = $0203;
  274.   xlr_LABEL                      = $0204;
  275.   xlr_BOOLERR                    = $0205;
  276.  
  277.   xlr_STRING                     = $0207;
  278.   xlr_ROW                        = $0208;
  279.  
  280.   xlr_INDEX                      = $020B;
  281.   xlr_ARRAY                      = $0221;
  282.   xlr_EXTERNNAME                 = $0223;
  283.   xlr_DEFAULTROWHEIGHT           = $0225;
  284.   xlr_FONT                       = $0031;
  285.   xlr_TABLE                      = $0236;
  286.   xlr_WINDOW2                    = $023E;
  287.  
  288.   xlr_RK                         = $027E;
  289.   xlr_STYLE                      = $0293;
  290.  
  291.   xlr_FORMAT                     = $041E;
  292.   xlr_XF                         = $00E0;
  293.   xlr_SHRFMLA                    = $04BC;
  294.   xlr_SCREENTIP                  = $0800;
  295.   xlr_WEBQRYSETTINGS             = $0803;
  296.   xlr_WEBQRYTABLES               = $0804;
  297.   xlr_BOF                        = $0809;
  298.   xlr_UNITS                      = $1001;
  299.   xlr_ChartChart                 = $1002;
  300.   xlr_ChartSeries                = $1003;
  301.   xlr_ChartDataformat            = $1006;
  302.   xlr_ChartLineformat            = $1007;
  303.   xlr_ChartMarkerformat          = $1009;
  304.   xlr_ChartAreaformat            = $100A;
  305.   xlr_ChartPieformat             = $100B;
  306.   xlr_ChartAttachedlabel         = $100C;
  307.   xlr_ChartSeriestext            = $100D;
  308.   xlr_ChartChartformat           = $1014;
  309.   xlr_ChartLegend                = $1015;
  310.   xlr_ChartSerieslist            = $1016;
  311.   xlr_ChartBar                   = $1017;
  312.   xlr_ChartLine                  = $1018;
  313.   xlr_ChartPie                   = $1019;
  314.   xlr_ChartArea                  = $101A;
  315.   xlr_ChartScatter               = $101B;
  316.   xlr_ChartChartline             = $101C;
  317.   xlr_ChartAxis                  = $101D;
  318.   xlr_ChartTick                  = $101E;
  319.   xlr_ChartValuerange            = $101F;
  320.   xlr_ChartCatserrange           = $1020;
  321.   xlr_ChartAxislineformat        = $1021;
  322.   xlr_ChartFormatlink            = $1022;
  323.   xlr_ChartDefaulttext           = $1024;
  324.   xlr_ChartText                  = $1025;
  325.   xlr_ChartFontx                 = $1026;
  326.   xlr_ChartObjectLink            = $1027;
  327.   xlr_ChartFrame                 = $1032;
  328.   xlr_BEGIN                      = $1033;
  329.   xlr_END                        = $1034;
  330.   xlr_ChartPlotarea              = $1035;
  331.   xlr_Chart3D                    = $103A;
  332.   xlr_ChartPicf                  = $103C;
  333.   xlr_ChartDropbar               = $103D;
  334.   xlr_ChartRadar                 = $103E;
  335.   xlr_ChartSurface               = $103F;
  336.   xlr_ChartRadararea             = $1040;
  337.   xlr_ChartAxisparent            = $1041;
  338.   xlr_ChartLegendxn              = $1043;
  339.   xlr_ChartShtprops              = $1044;
  340.   xlr_ChartSertocrt              = $1045;
  341.   xlr_ChartAxesused              = $1046;
  342.   xlr_ChartSbaseref              = $1048;
  343.   xlr_ChartSerparent             = $104A;
  344.   xlr_ChartSerauxtrend           = $104B;
  345.   xlr_ChartIfmt                  = $104E;
  346.   xlr_ChartPos                   = $104F;
  347.   xlr_ChartAlruns                = $1050;
  348.   xlr_ChartAI                    = $1051;
  349.   xlr_ChartSerauxerrbar          = $105B;
  350.   xlr_ChartClrClient             = $105C;
  351.   xlr_ChartSerfmt                = $105D;
  352.   xlr_Chart3DDataFormat          = $105F;
  353.   xlr_ChartFbi                   = $1060;
  354.   xlr_ChartBoppop                = $1061;
  355.   xlr_ChartAxcext                = $1062;
  356.   xlr_ChartDat                   = $1063;
  357.   xlr_ChartPlotgrowth            = $1064;
  358.   xlr_ChartSiindex               = $1065;
  359.   xlr_ChartGelframe              = $1066;
  360.   xlr_ChartBoppcustom            = $1067;
  361.  
  362. //////////////////////////////////////Tokens///////////////////////////777777
  363.     //Globals
  364.     tk_BinaryOps = [$3..$11];
  365.     tk_UnaryOps  = [$12..$15];
  366.  
  367.     //Constants
  368.     tk_MissArg   = $16;
  369.     tk_Str       = $17;
  370.     tk_Attr      = $19;
  371.     tk_Err       = $1C;
  372.     tk_Bool      = $1D;
  373.     tk_Int       = $1E;
  374.     tk_Num       = $1F;
  375.  
  376.     //Func
  377.     tk_Func      = [$21, $41, $61];
  378.     tk_FuncVar   = [$22, $42, $62];
  379.  
  380.     //Operand
  381.     tk_Array     = [$20, $40, $60];
  382.     tk_Name      = [$23, $43, $63];
  383.     tk_Ref       = [$24, $44, $64];
  384.     tk_Area      = [$25, $45, $65];
  385.     tk_RefErr    = [$2A, $4A, $6A];
  386.     tk_AreaErr   = [$2B, $4B, $6B];
  387.     tk_RefN      = [$2C, $4C, $6C];  //Reference relative to the current row. Can be < 0
  388.     tk_AreaN     = [$2D, $4D, $6D];  //Area relative to the current row
  389.     tk_NameX     = [$39, $59, $79];
  390.     tk_Ref3D     = [$3A, $5A, $7A];
  391.     tk_Area3D    = [$3B, $5B, $7B];
  392.     tk_Ref3DErr  = [$3C, $5C, $7C];
  393.     tk_Area3DErr = [$3D, $5D, $7D];
  394.  
  395.     tk_RefToRefErr         = $2A - $24;
  396.     tk_AreaToAreaErr       = $2B - $25;
  397.     tk_Ref3DToRef3DErr     = $3C - $3A;
  398.     tk_Area3DToArea3DErr   = $3D - $3B;
  399.  
  400.     tk_Operand=
  401.         tk_Array+
  402.         tk_Name+
  403.         tk_Ref+
  404.         tk_Area+
  405.         tk_RefErr+
  406.         tk_AreaErr+
  407.         tk_RefN+
  408.         tk_AreaN+
  409.         tk_NameX+
  410.         tk_Ref3D+
  411.         tk_Area3D+
  412.         tk_Ref3DErr+
  413.         tk_Area3DErr;
  414.  
  415. ///////////////////////////////////////Object Types /////////////////////7777
  416.         ftEnd           = $0000;
  417.         ftMacro         = $0004;
  418.         ftButton     = $0005;
  419.         ftGmo           = $0006;
  420.         ftCf           = $0007;
  421.         ftPioGrbit     = $0008;
  422.     ftPictFmla     = $0009;
  423.         ftCbls         = $000A;
  424.         ftRbo           = $000B;
  425.         ftSbs           = $000C;
  426.         ftNts           = $000D;
  427.         ftSbsFmla       = $000E;
  428.         ftGboData       = $000F;
  429.     ftEdoData       = $0010;
  430.         ftRboData       = $0011;
  431.         ftCblsData     = $0012;
  432.         ftLbsData       = $0013;
  433.         ftCblsFmla     = $0014;
  434.         ftCmo           = $0015;
  435.  
  436. ///////////////////////////////////////Cmo Object Types /////////////////////7777
  437.  
  438.         xlcmo_Group             = $00;
  439.         xlcmo_Line                = $01;
  440.         xlcmo_Rectangle          = $02;
  441.         xlcmo_Oval                = $03;
  442.         xlcmo_Arc                  = $04;
  443.         xlcmo_Chart              = $05;
  444.         xlcmo_TextBox            = $06;
  445.         xlcmo_Button            = $07;
  446.         xlcmo_Picture            = $08;
  447.         xlcmo_Polygon            = $09;
  448.         xlcmo_CheckBox          = $0B;
  449.         xlcmo_Option            = $0C;
  450.         xlcmo_Edit                = $0D;
  451.         xlcmo_Label             = $0E;
  452.         xlcmo_Dialog            = $0F;
  453.         xlcmo_Spinner            = $10;
  454.         xlcmo_Scroll            = $11;
  455.         xlcmo_List                = $12;
  456.         xlcmo_Group1             = $13;
  457.         xlcmo_Combo             = $14;
  458.         xlcmo_Comment            = $19;
  459.         xlcmo_MSDrawingx        = $1E;
  460.  
  461. // Escher records
  462.     MsofbtDggContainer             = $F000;
  463.     MsofbtDgg                      = $F006;
  464.     MsofbtCLSID                    = $F016;
  465.     MsofbtOPT                      = $F00B;
  466.     MsofbtColorMRU                 = $F11A;
  467.     MsofbtSplitMenuColors          = $F11E;
  468.     MsofbtBstoreContainer          = $F001;
  469.     MsofbtBSE                      = $F007;
  470.     MsofbtDgContainer              = $F002;
  471.     MsofbtDg                       = $F008;
  472.     MsofbtRegroupItem              = $F118;
  473.     MsofbtColorScheme              = $F120;
  474.     MsofbtSpgrContainer            = $F003;
  475.     MsofbtSpContainer              = $F004;
  476.     MsofbtSpgr                     = $F009;
  477.     MsofbtSp                       = $F00A;
  478.     MsofbtTextbox                  = $F00C;
  479.     MsofbtClientTextbox            = $F00D;
  480.     MsofbtAnchor                   = $F00E;
  481.     MsofbtChildAnchor              = $F00F;
  482.     MsofbtClientAnchor             = $F010;
  483.     MsofbtClientData               = $F011;
  484.     MsofbtOleObject                = $F11F;
  485.     MsofbtDeletedPspl              = $F11D;
  486.     MsofbtSolverContainer          = $F005;
  487.     MsofbtConnectorRule            = $F012;
  488.     MsofbtAlignRule                = $F013;
  489.     MsofbtArcRule                  = $F014;
  490.     MsofbtClientRule               = $F015;
  491.     MsofbtCalloutRule              = $F017;
  492.     MsofbtSelection                = $F119;
  493.  
  494.     //Image types
  495.      msobiUNKNOWN = 0;
  496.      msobiWMF  = $216;      // Metafile header then compressed WMF
  497.      msobiEMF  = $3D4;      // Metafile header then compressed EMF
  498.      msobiPICT = $542;      // Metafile header then compressed PICT
  499.      msobiPNG  = $6E0;      // One byte tag then PNG data
  500.      msobiJFIF = $46A;      // One byte tag then JFIF data
  501.      msobiJPEG = msobiJFIF;
  502.      msobiDIB  = $7A8;      // One byte tag then DIB data
  503.      msobiClient=$800;      // Clients should set this bit
  504.  
  505.      msoblipERROR   = 0;        // An error occured during loading
  506.      msoblipUNKNOWN = 1;        // An unknown blip type
  507.      msoblipEMF     = 2;        // Windows Enhanced Metafile
  508.      msoblipWMF     = 3;        // Windows Metafile
  509.      msoblipPICT    = 4;        // Macintosh PICT
  510.      msoblipJPEG    = 5;        // JFIF
  511.      msoblipPNG     = 6;        // PNG
  512.      msoblipDIB     = 7;        // Windows DIB
  513.  
  514.  
  515.      XlsImgConv: array[TXlsImgTypes] of byte = (msoblipEMF, msoblipWMF, msoblipJPEG, msoblipPNG, msoblipDIB, msoblipUNKNOWN);
  516.      XlsBlipHeaderConv: array[TXlsImgTypes] of Word=($F01A, $F01B, $F01D, $F01E, $F01F, $F01A-1);
  517.      XlsBlipSignConv: array[TXlsImgTypes] of Word=(msobiEMF, msobiWMF, msobiJPEG, msobiPNG, msobiDIB, msobiUNKNOWN);
  518.  
  519.   procedure IncMax(var X: word ; N, Max: Longint );
  520.   procedure IncMaxMin(var X: word ; N, Max,  Min: Longint );
  521.  
  522.   procedure IncWord( const Pdata: PArrayOfByte; const tPos: integer; const Offset: integer; const Max: integer);
  523.   function GetWord(const Pdata: PArrayOfByte; const tPos: integer): word;
  524.   procedure SetWord(const Pdata: PArrayOfByte; const tPos: integer; const number: Word);
  525.   procedure IncCardinal( const Pdata: PArrayOfByte; const tPos: integer; const Offset: int64);
  526.   function GetCardinal(const Pdata: PArrayOfByte; const tPos: integer): cardinal;
  527.   procedure SetCardinal(const Pdata: PArrayOfByte; const tPos: integer; const number: cardinal);
  528.  
  529.   function GetStrLen(const Length16Bit: boolean ;const Pdata: PArrayOfByte; const tPos: integer; const UseExtStrLen: boolean; const ExtStrLen: Cardinal): int64;
  530.  
  531.   function IsWide(const W: WideString): boolean;
  532.   function WideStringToStringNoCodePage(const W: WideString): string;
  533.   function StringToWideStringNoCodePage(const s: String): WideString;
  534. implementation
  535.  
  536. procedure IncWord( const Pdata: PArrayOfByte; const tPos: integer; const Offset: integer; const Max: integer);
  537. var
  538.   w: int64;
  539. begin
  540.   w:=Pdata^[tPos] or (PData^[tPos+1] shl 8);
  541.   inc(w, Offset);
  542.   if (w<0) or (w>Max) then Raise Exception.CreateFmt(ErrTooManyEntries,[w, Max]);
  543.   Pdata^[tPos]:= lo(w);
  544.   Pdata^[tPos+1]:= hi(w);
  545. end;
  546.  
  547. procedure IncMax(var X: word ; N, Max: Longint );
  548. begin
  549.   if (N+X>Max) or (N+X<0) then Raise Exception.CreateFmt(ErrTooManyEntries,[N+X, Max]);
  550.   Inc(X,N);
  551. end;
  552.  
  553. procedure IncCardinal( const Pdata: PArrayOfByte; const tPos: integer; const Offset: int64);
  554. var
  555.   Pc: ^Cardinal;
  556. begin
  557.   Pc:= @PData[tPos];
  558.   Inc(Pc^,Offset);
  559. end;
  560.  
  561. procedure IncMaxMin(var X: word ; N, Max, Min: Longint );
  562. begin
  563.   if (N+X>Max) then X:=Max else if N+X<Min then X:=Min else Inc(X,N);
  564. end;
  565.  
  566. function GetWord(const Pdata: PArrayOfByte; const tPos: integer): word;
  567. type
  568.   pWord=^Word;
  569. begin
  570.   Result:=pWord(PCHAR(Pdata)+tPos)^;
  571. end;
  572.  
  573. function GetCardinal(const Pdata: PArrayOfByte; const tPos: integer): cardinal;
  574. type
  575.   pCardinal=^Cardinal;
  576. begin
  577.   result:=PCardinal(PCHAR(Pdata)+tPos)^;
  578. end;
  579.  
  580. procedure SetCardinal(const Pdata: PArrayOfByte; const tPos: integer; const number: cardinal);
  581. begin
  582.   System.Move(Number, Pdata^[tPos], sizeof(Cardinal))
  583. end;
  584.  
  585. procedure SetWord(const Pdata: PArrayOfByte; const tPos: integer; const number: Word);
  586. begin
  587.   System.Move(Number, Pdata^[tPos], sizeof(Word))
  588. end;
  589.  
  590. function GetStrLen(const Length16Bit: boolean ;const Pdata: PArrayOfByte; const tPos: integer;const UseExtStrLen: boolean; const ExtStrLen: Cardinal): int64;
  591. var
  592.   l, rt: Cardinal;
  593.   bsize: byte;
  594.   sz: cardinal;
  595.   myPos: integer;
  596.   oField: byte;
  597. begin
  598.   myPos:=tPos;
  599.   if UseExtStrLen then l:= ExtStrLen
  600.   else
  601.   begin
  602.     if Length16Bit then begin;l:=GetWord( Pdata, myPos);inc(myPos,2);end
  603.     else begin;l:=Pdata^[myPos];inc(myPos);end;
  604.   end;
  605.  
  606.   oField:= Pdata^[myPos];
  607.   inc(myPos);
  608.  
  609.   bsize:= oField and $1;
  610.  
  611.   rt:=0;
  612.   if (oField and $8)= $8 then //RTF Info
  613.   begin
  614.     rt:=GetWord( Pdata, myPos);
  615.     inc(myPos, 2);
  616.   end;
  617.  
  618.   sz:=0;
  619.   if (oField and $4)= $4 then //Far East Info
  620.   begin
  621.     sz:= GetCardinal( Pdata, myPos);
  622.     inc(myPos, 4);
  623.   end;
  624.  
  625.   Result:=int64(myPos-tPos) + l shl bsize+ rt shl 2 + sz;
  626.  
  627. end;
  628.  
  629. function IsWide(const W: WideString): boolean;
  630. var
  631.   i:integer;
  632. begin
  633.   for i:=1 to length(w) do if ord(w[i])>$FF then begin;Result:=true;exit;end;
  634.   Result:=false;
  635. end;
  636.  
  637. function WideStringToStringNoCodePage(const W: WideString): string;
  638. var
  639.   i:integer;
  640. begin
  641.   SetLength(Result, Length(W));
  642.   for i:=1 to length(w) do Result[i]:=Chr(Ord(w[i]) and $FF);
  643. end;
  644.  
  645. function StringToWideStringNoCodePage(const s: String): WideString;
  646. var
  647.   i:integer;
  648. begin
  649.   SetLength(Result, Length(s));
  650.   for i:=1 to length(s) do Result[i]:=WideChar(Ord(s[i]));
  651. end;
  652.  
  653.  
  654. end.
  655.