Formula One - Delphi

来源:互联网 发布:淘宝月季花推荐店家 编辑:程序博客网 时间:2024/05/14 09:07

一个从DBGrid输出到Formula One的函数,用的是Formula One 6.1,有些属性Delphi自带的Formula One 3.0不支持,至少得安装Formula One 5.0以上版本.

可以修改一下这个函数,直接传入DataSet做参数,用DBGrid作参数传入是考虑到在F1Book上带出DBGrid的对齐格式、列宽等.

函数如下:

//-----------------------------------------------------------------------------
// 函数名:WriteDataFromDBGrid
// 功能描述:将一个DBGrid的内容输出到F1Book
// 入口参数:ADBGrid - 数据网格
//           AStartRow - 数据起始行
//           AStartCol - 数据起始列
//           AF1Book – 接受数据的Formula one book
// 示例:WriteDataFromDBGrid(DBGrid1, 2, 2, F1Book1);
//       上面的例子是从F1Book1的2行2列起输出DBGrid1的内容
// 作者:JoyHero
//-----------------------------------------------------------------------------
procedure WriteDataFromDBGrid(ADBGrid: TDBGrid;
  AStartRow, AStartCol: Integer; AF1Book : TF1Book);
var
  i,j:Integer;
  iColCount, iRowCount:Integer;
  cfTemp:F1CellFormat;
  iUnvisibleColCount: Integer;
begin
  with AF1Book do
  begin
    //获得数据列数
    iColCount:= ADBGrid.Columns.Count;
    iRowCount:= ADBGrid.DataSource.DataSet.RecordCount;
    iUnvisibleColCount:= 0;

    //填充标题列
    for j:=0 to iColCount-1 do
    begin
      EntryRC[AStartRow,AStartCol+j]:=
        ADBGrid.Columns[j].Title.Caption;
      ColWidth[AStartCol+j]:= ADBGrid.Columns[j].Width*50;
    end;

    //填充数据
    if ADBGrid.DataSource.DataSet.Active then
    begin
      with ADBGrid.DataSource.DataSet do
      begin
        First;
        i:= AStartRow+1;
        while not Eof do
        begin
          for j:= 0 to iColCount-1 do
          begin
            EntryRC[i,AStartCol+j]:= ADBGrid.Columns[j].Field.DisplayText;
          end;
          Next;
          Inc(i);
        end;
      end;
    end;

    //设置标题列居中显示,字体为粗体
    SetSelection(AStartRow, AStartCol, AStartRow, AStartCol+iColCount-1);
    HAlign:=F1HAlignCenter;
    FontBold:=True;

    //按照DBGrid的对齐方式设置数据列的对齐方式
    try
      for j:=0 to iColCount-1 do
      begin
        SetSelection(AStartRow+1, AStartCol+j, AStartRow+iRowCount, AStartCol+j);
        Case ADBGrid.Columns[j].Alignment of
          taLeftJustify:
            HAlign:=F1HAlignLeft;
          taRightJustify:
            HAlign:=F1HAlignRight;
          taCenter:
            HAlign:=F1HAlignCenter;
        end;
      end;
    except
    end;

    //删除DBGrid不显示的列
    try
      for j:=0 to iColCount-1 do
      begin
        if not ADBGrid.Columns[j].Visible then
        begin
          SetSelection(AStartRow, AStartCol+j-iUnvisibleColCount,
            AStartRow+iRowCount, AStartCol+j-iUnvisibleColCount);
          EditDelete(F1ShiftHorizontal);
          iUnvisibleColCount:= iUnvisibleColCount+1;
        end;
      end;
    except
    end;

    //画边框
    SetSelection(AStartRow, AStartCol, AStartRow+iRowCount, AStartCol+iColCount-1-iUnvisibleColCount);
    cfTemp:=GetCellFormat;
    cfTemp.BorderStyle[F1TopBorder]:=F1BorderThin;
    cfTemp.BorderStyle[F1LeftBorder]:=F1BorderThin;
    cfTemp.BorderStyle[F1BottomBorder]:=F1BorderThin;
    cfTemp.BorderStyle[F1RightBorder]:=F1BorderThin;
    cfTemp.BorderStyle[F1HInsideBorder]:=F1BorderThin;
    cfTemp.BorderStyle[F1VInsideBorder]:=F1BorderThin;
    SetCellFormat(cfTemp);
  end;
end;


Formula One支持直接连接ODBC数据库并返回查询结果,以下是一个小例子:
在窗体上放一个F1Book(我使用的是Formula One 6.1)和一个按纽Botton1,Botton1的Click事件如下:

procedure TForm1.Button1Click(Sender: TObject);
var
  myConnect : F1ODBCConnect;
  myQuery : F1ODBCQuery;
begin
  myConnect := CoF1ODBCConnect.Create;      //创建一个ODBC连接
  myConnect.ConnectStr := '';               //设置ConnectStr为空,则弹出ODBC窗口选择
  F1Book1.ODBCConnectEx(myConnect, True);   //打开ODBC连接
  myQuery := CoF1ODBCQuery.Create;          //创建一个查询
  myQuery.QueryStr := '';                   //设置ConnectStr为空,则弹出SQL语句创建窗口,你也可以直接设置ConnectStr为你想要的查询语句
  F1Book1.ODBCQueryEx(myQuery, 1, 1, True); //执行查询,并返回结果到F1Book
  F1Book1.ODBCDisconnect;                   //断开ODBC连接
end;

运行一下,点击按纽,选择一个ODBC数据源,然后输入一个“Select * from ...”的查询语句,可以看到F1Book已经返回查询的数据集了。

以上两个程序在Win98、Delphi 5、Formula One 6.1下通过。

原创粉丝点击