⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 basecell.pas

📁 相关的销售服务管理行业的一个软件
💻 PAS
📖 第 1 页 / 共 3 页
字号:
unit BaseCell;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  TB97Ctls, TB97, TB97Tlbr, StdCtrls, ImgList, OleCtrls, CELLLib_TLB,Registry,
   Db, DBTables, Grids;
type
  TGetDataBase = class
  private
    FPassword: string;
    Query: TQuery;
    procedure SetPassword( Value: string );
  published
    property Password: string read FPassword write SetPassword;
  public
    SelfCraete:Boolean;
    DataBase: TDataBase;
    Username: string;
    Sql: string;
    databaseName: string;
    DataGrid: TStringGrid;
    GetFlag: Integer; //1:表示带字段名称 0:表示不带字段名称
    function GetPassword( Value: string ): string;
    procedure Execute;

    constructor Create;
    destructor Destroy; override;
  end;

  TBaseCellForm = class(TForm)
    ImageList1: TImageList;
    Dock971: TDock97;
    Label1: TLabel;
    Toolbar971: TToolbar97;
    ToolbarButton971: TToolbarButton97;
    ToolbarButton972: TToolbarButton97;
    ToolbarButton974: TToolbarButton97;
    ToolbarButton976: TToolbarButton97;
    Cell1: TCell;
    ToolbarButton973: TToolbarButton97;
    Database1: TDatabase;
    ToolbarButton977: TToolbarButton97;
    ToolbarButton975: TToolbarButton97;
    ToolbarButton978: TToolbarButton97;
    SaveDialog1: TSaveDialog;
    ToolbarButton979: TToolbarButton97;
    procedure ToolbarButton971Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure ToolbarButton976Click(Sender: TObject);
    procedure ToolbarButton974Click(Sender: TObject);
    procedure PrintCell(PrintFlag:Boolean;showDia:Boolean);
    procedure ToolbarButton972Click(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure ToolbarButton973Click(Sender: TObject);

    procedure ClearCell;
    procedure SetCellRow0(Cell:TCell;Index:Integer);
    procedure SetCellCol0(Cell:TCell;Index:Integer);
    function GetCellCol(Cell:TCell;NO:String;ID:Integer):Integer;
    function GetCellRow(Cell:TCell;NO:String):Integer;
    function GetCellCols(Cell:TCell):Integer;
    function IfCellEx(Cell:TCell;Index:Integer):Boolean;
    procedure Cell1ExecuteUserFunc(Sender: TObject; const name: WideString;
      rettype, paranum: Smallint; var paratype: Integer;
      var funcResult: OleVariant);
    procedure Cell1SetCellData(Sender: TObject; col, row: Integer;
      var data, changed: OleVariant);
    procedure ToolbarButton977Click(Sender: TObject);
    procedure ToolbarButton975Click(Sender: TObject);
    procedure ToolbarButton978Click(Sender: TObject);
    procedure ToolbarButton979Click(Sender: TObject);
  private
    { Private declarations }
  public
    aPrintRow,aPrintCol:Integer;
    aStartRow,aStartCol:Integer;
    STARTROW,STARTCOL:Integer;
    sSYB,sCPLX:String;
	  procedure OpenFile(FileName:String);
    { Public declarations }
  end;

var
  BaseCellForm: TBaseCellForm;
  Pubpath: string;
  S_UserName,S_Password:String;
  S_FileName_DQ,S_FileName_CP:String;
//  S_Position:String;
  S_TableName_BM,S_TableName_DQ:String;
  S_IsCP:Boolean;
  S_GM_Name:String;
  S_GM_No:String;
  S_CP_Name:String;
  S_CP_No:String;
  S_CurDate:TDateTime;
  S_CurYear:String;  //当前财年
  S_CurPeriod:String; //当前才月

implementation

uses DefinePrintColRow, GE_PublicFunction;

{$R *.DFM}
constructor TGetDataBase.Create;
begin
  inherited Create;
  DataGrid := TStringGrid.Create( nil );
end;

destructor TGetDataBase.Destroy;
begin
  DataGrid.Free;
  inherited Destroy;
end;

function TGetDataBase.GetPassword( Value: string ): string;
//var i: Integer;
begin
  Result := Value;
//  for i := 1 to Length( Value ) do
//    Result[i] := char( integer( Value[i] ) - 10 );
end;

procedure TGetDataBase.SetPassword( Value: string );
//var i: Integer;
begin
  FPassword := Value;
//  for i := 1 to Length( Value ) do
//    FPassword[i] := char( integer( Value[i] ) + 10 );
end;

procedure TGetDataBase.Execute;
var i, j: Integer;
begin
  try
    SelfCraete:=False;
    if DataBase = nil then
    begin
      DataBase := TDataBase.Create( Application );
      DataBase.DatabaseName := DataBaseName;
      DataBase.Params.Values['USER NAME'] :=UserName;
      DataBase.Params.Values['PASSWORD'] := Self.GetPassword( Self.password );
      DataBase.LoginPrompt := False;
      SelfCraete:=True;
    end;
    if Query = nil then
    begin
      Query := TQuery.Create( Application );
      Query.DatabaseName := DataBase.DatabaseName;
    end;
    if not DataBase.Connected then
       DataBase.open;
    Query.Sql.Text := '';
    Query.Sql.Text := Sql;
    try
      Query.Open;
    except
      application.HandleException( Self );
    end;
    DataGrid.ColCount := Query.Fields.Count;
    DataGrid.RowCount := 2;

    if GetFlag = 1 then //带字段名称
    begin
      for i := 0 to Query.Fields.Count - 1 do
        DataGrid.Cells[i, 0] := '1'+Query.Fields[i].FieldName;
      j := 0;
    end
    else
      j := -1;
    while not Query.Eof do
    begin
      j := j + 1;
      if DataGrid.RowCount - 1 < j then
        DataGrid.RowCount := j + 1;
      for i := 0 to Query.Fields.Count - 1 do
      begin
        case Query.Fields[i].DataType of       //第一位表示是字符还是数字 0:数字 1:字符
          ftSmallint,ftInteger,ftWord,ftFloat:
            DataGrid.Cells[i, j] := '0'+Query.Fields[i].AsString;
          else
            DataGrid.Cells[i, j] := '1'+Query.Fields[i].AsString;
        end;
      end;
      Query.Next;
    end;
    if SelfCraete then
    begin
      DataBase.Close;
      DataBase.Free;
      DataBase := nil;
    end;
  except
    if SelfCraete then
    begin
      DataBase.Close;
      DataBase.Free;
      DataBase := nil;
    end;
  end;
end;



type GetCellFromDBGetarray = array[0..5] of smallInt;
  QKMHZBGetarray = array[0..9] of smallInt;
  QMXZGetarray = array[0..18] of smallInt;
  QFZDGetarray = array[0..9] of smallInt;
  myarray = array[0..1] of smallInt;
  myarray1 = array[0..5] of smallInt;
function FormatStrFor0(S:String;ALength:Integer):String;
var i,l:Integer;
begin
  Result:=S;
  l:=Length(S);
  for i:=0 to ALength- l-1 do
    Result:='0'+Result;
end;
function GetWeekofYear( SysDate: TSystemTime; AFromFirstDay: Boolean ): integer;
var
  Date, RDate: TDate;
begin
  Date := EnCodeDate( SysDate.wYear, SysDate.wMonth, SysDate.wDay );
  if AFromFirstDay then
    RDate := EnCodeDate( SysDate.wYear, 1, 1 )
  else
  begin
    RDate := EnCodeDate( SysDate.wYear, 1, 1 );
    if dayofweek( RDate ) = 1 then
      RDate := EnCodeDate( SysDate.wYear, 1, 1 )
    else
      RDate := EnCodeDate( SysDate.wYear, 1, 7 - dayofweek( RDate ) + 2 );
  end;
  result := ( round( Date ) - round( RDate ) + dayofweek( RDate ) ) div 7 + 1;
end;
procedure SetUserFunction( Cell: TCell );
var parmType: myarray;
  parmType1,parmDefault1: myarray1;
  parmDefault: myarray;
  S: string;
  procedure SetGetOutDataBase;
  var QMXZ, MXZDefault: GetCellFromDBGetarray;
    S: string;
  begin //0,  表示该参数不能缺省1,  表示该参数可以缺省
    QMXZ[0] := 3;
    QMXZ[1] := 0;
    QMXZ[2] := 1;
    QMXZ[3] := 1;
    QMXZ[4] := 1;
    QMXZ[5] := 1;
    MXZDefault[0] := 1;
    MXZDefault[1] := 0;
    MXZDefault[2] := 0;
    MXZDefault[3] := 1;
    MXZDefault[4] := 0;
    MXZDefault[5] := 0;
    S := '取外部数据库中数据(pos,flag,UserName,Password,databasename,Sql)' + #13#10 +
      '所有参数类型均为字符串' + #13#10 +
      'pos:填充区域,如果为空表示取一个值,如果范围首位相同表示自动扩充范围' + #13#10 +
      'flag:取数标志,1:表示带字段名称 0:表示不带字段名称' + #13#10 +
      'UserName: 所要打开的数据库的用户名' + #13#10 +
      'password: 所要打开的数据库的口令,因此字符串已经加密,所以请用导航器生成此函数,不能直接填写口令参数' + #13#10 +
      'databaseName: 所要打开的数据库BDE别名' + #13#10 +
      'sql:查询语句';
    Cell.DoAddUserFunctionEx( '特殊函数', 'QWBSJ', 4, 6, QMXZ[0], MXZDefault[0], S );
  end;
  procedure SetGetCellData;
  var QMXZ, MXZDefault: GetCellFromDBGetarray;
    S: string;
  begin //0,  表示该参数不能缺省1,  表示该参数可以缺省
    QMXZ[0] := 2;
    QMXZ[1] := 0;
    MXZDefault[0] := 0;
    MXZDefault[1] := 0;
    S := 'GetCellData(Pos,Page)' + #13#10 +
      '取单元点数据' + #13#10 +
      'pos:坐标点' + #13#10 +
      'Page:页面位置';
    Cell.DoAddUserFunctionEx( '表函数', 'GETCELLDATA', 4, 2, QMXZ[0], MXZDefault[0], S );
  end;
begin
  SetGetOutDataBase;
  SetGetCellData; //取其他页数据

  parmType[0] := 2;
  parmDefault[0] := 0;
//    Cell.DoAddUserFunctionEx( '特殊函数', 'SetTempInput', 4, 1, parmType[0], parmDefault[0], '设置当前点为临时输入点,'+#13#10+'参数为设置点的坐标');
  Cell.DoAddUserFunctionEx( '特殊函数', 'SetJEDX', 1, 1, parmType[0], parmDefault[0], '将指定点的值以金额大写的方式显示,' + #13#10 + '参数为设置点的坐标' );

  parmType[0] := 0;
  parmDefault[0] := 1;
  S := 'GEDAY' + #13#10 +
    '返回报表内当前日期,不是机器的系统日期' + #13#10 +
    '语法' + #13#10 +
    'GEDay(Flag)' + #13#10 +
    'falg=0: 1999年05月01日' + #13#10 +
    'falg=1: 1999/05/01/' + #13#10 +
    'falg=2: 05/01/1999' + #13#10 +
    'falg=-1: 1999年04月30日' + #13#10 +
    'falg=-2: 1999/04/30' + #13#10 +
    '实例' + #13#10 +
    'GEDay(-1) 返回 1999/04/30';
  Cell.DoAddUserFunctionEx( '时间函数', 'GEDay', 4, 1, parmType[0], parmDefault[0], S );
  Cell.DoAddUserFunctionEx( '时间函数', 'Day', 4, 1, parmType[0], parmDefault[0], S );
  S := 'GEMonth' + #13#10 +
    '返回报表内当前年月,不是机器的系统日期' + #13#10 +
    '语法' + #13#10 +
    'GEMonth(Flag)' + #13#10 +
    'falg=0: 1999年01月' + #13#10 +
    'falg=1: 1999/01/' + #13#10 +
    'falg=2: 01/1999' + #13#10 +
    'falg=-1: 1998年12月' + #13#10 +
    'falg=-2: 1998/12/' + #13#10 +
    'falg=-3: 12/1998' + #13#10 +
    '实例' + #13#10 +
    'GEMonth(-1) 返回 1998年12月';
  Cell.DoAddUserFunctionEx( '时间函数', 'GEMonth', 4, 1, parmType[0], parmDefault[0], S );
  Cell.DoAddUserFunctionEx( '时间函数', 'Month', 4, 1, parmType[0], parmDefault[0], S );

  S := 'GEYEAR' + #13#10 +
    '返回报表内当前年,不是机器的系统日期' + #13#10 +
    '语法' + #13#10 +
    'GEYear(Flag)' + #13#10 +
    'falg=0: 1999年' + #13#10 +
    'falg=1: 1999' + #13#10 +
    'falg=-1: 1998年' + #13#10 +
    'falg=-2: 1998' + #13#10 +
    '实例' + #13#10 +
    'GEYear(-1) 返回 1998年';
  Cell.DoAddUserFunctionEx( '时间函数', 'GEYear', 4, 1, parmType[0], parmDefault[0], S );
  Cell.DoAddUserFunctionEx( '时间函数', 'Year', 4, 1, parmType[0], parmDefault[0], S );

  S := 'GEWEEK' + #13#10 +
    '返回当前报表时间对应的周数' + #13#10 +
    '语法' + #13#10 +
    'GEWeek(Flag)' + #13#10 +
    'falg=0: 当前天对应的周数' + #13#10 +
    'falg=-1: 当前天对应的周数减1' + #13#10 +
    '实例' + #13#10 +
    'GEWeek(0) 返回 44';
  Cell.DoAddUserFunctionEx( '时间函数', 'GEWeek', 4, 1, parmType[0], parmDefault[0], S );
  Cell.DoAddUserFunctionEx( '时间函数', 'Week', 4, 1, parmType[0], parmDefault[0], S );

  Cell.DoAddUserFunctionEx( '时间函数', 'Date', 4, 0, parmType[0], parmDefault[0], 'DATE' + #13#10 + '返回当前机器的系统日期' );
  Cell.DoAddUserFunctionEx( '时间函数', 'Time', 4, 0, parmType[0], parmDefault[0], 'TIME' + #13#10 + '返回当前机器的系统时间' );
  Cell.DoAddUserFunctionEx( '时间函数', 'Unit', 4, 0, parmType[0], parmDefault[0], 'UNIT' + #13#10 + '返回当前系统运行时的单位' );

  Cell.DoAddUserFunctionEx( '时间函数', 'Period', 4, 0, parmType[0], parmDefault[0], 'Period' + #13#10 + '返回当前系统运行时的会计期间' );
  Cell.DoAddUserFunctionEx( '特殊函数', 'UnitDes', 4, 0, parmType[0], parmDefault[0], 'UnitDes' + #13#10 + '返回当前当前系统运行时单位描述' );


  parmType1[0] := 2;
  parmType1[1] := 1;
  parmType1[2] := 2;
  parmType1[3] := 0;
  parmType1[4] := 2;
  parmDefault1[0] := 0;
  parmDefault1[1] := 0;
  parmDefault1[2] := 0;
  parmDefault1[3] := 0;
  parmDefault1[4] := 0;
  S := 'TJYS' + #13#10 +
    '按照坐标1,2间的条件关系显示颜色' + #13#10 +
    '语法' + #13#10 +
    'TJYS(Pos1,Con,Pos2,Color,Pos3)' + #13#10 +
    'POS1: 坐标1' + #13#10 +
    'Con: 条件' + #13#10 +
    'POS2: 坐标2' + #13#10 +
    'Color:显示颜色(代表颜色的整形数)' + #13#10 +
    'Pos3: 设置颜色的坐标';
  Cell.DoAddUserFunctionEx( '特殊函数', 'TJYS', 0, 5, parmType1[0], parmDefault1[0],S );
  {parmType[0] := 0;
  parmDefault[0] := 0;
  Cell.DoAddUserFunctionEx( '特殊函数', 'ACol', 1, 1, parmType[0], parmDefault[0], 'ACOL' + #13#10 + '取行位置(系统内部用函数)' + #13#10 +'如: ACOL(1) = 1 ');
  parmType[0] := 1;
  parmDefault[0] := 0;
  Cell.DoAddUserFunctionEx( '特殊函数', 'ARow', 1, 1, parmType[0], parmDefault[0], 'AROW' + #13#10 + '取列位置(系统内部用函数)'+ #13#10 +'如: AROW(A) = 1');

  parmType1[0] := 0;
  parmType1[1] := 1;
  parmType1[2] := 1;
  parmDefault[0] := 0;
  S := 'CALCOL' + #13#10 + 'calCol(当前行号,起始列号,公式)进行行数据的计算'+ #13#10 +
       '如: CALCOL(col(),rows(),acol(1)+"+"+ acol(2)';
  Cell.DoAddUserFunctionEx( '特殊函数', 'CALCOL', 4, 2, parmType1[0], parmDefault[0], S);}
end;


procedure TBaseCellForm.ToolbarButton971Click(Sender: TObject);
begin
  Close;
end;
procedure TBaseCellForm.OpenFile(FileName:String);
begin
  Cell1.DoOpenFile(PubPath+FileName);
end;
procedure TBaseCellForm.FormCreate(Sender: TObject);
//var
//  Reg: TRegistry;
begin

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -